MATLAB摩尔斯电码

时间:2017-10-28 21:15:06

标签: matlab function return morse-code

写入函数tokenizeSignal(signal),它接收上面的信号并计算顺序出现的0和1的数量。输出应该是一个2D数组,其中第1列是显示的数量,第2列是哪个标记(0或1)。我有以下代码,直到我把它放在一个函数中。例如

sig =[1 1 0 0 0 0 0 1 1 0 1 0 1 1 1 1 0 1 1 0 1 1 0 1 1 1 1 1 1 0];
tsig = abs(sig);  
dsig = diff([1 tsig 1]);
startIndex = find(dsig<0);
endIndex = find(dsig>0)-1;
duration = endIndex-startIndex+1;
stringIndex = (duration >= 2);
d=find(stringIndex==0);
matA=[duration;zeros(1,size(duration,2))];
matA=matA';
wsig = abs(sig);  
rsig = diff([0 wsig 0]);
startIndex = find(rsig < 0);
endIndex = find(rsig > 0)-1;
duration = endIndex-startIndex+1;
abs(duration);
stringIndex = (duration >= 2);
d=find(stringIndex==0);
type=[1];
matB=[ans;ones(1,size(ans,2))];
matB=matB';
token=reshape([matA(:) matB(:)]',size(matA,1)+size(matB,1), [])

这会返回我们需要的东西,但是当我们将上面的代码放入函数头并在结束时输入end时它不再返回任何内容。这是为什么?

1 个答案:

答案 0 :(得分:0)

它不起作用的原因是因为你依赖关键字 'ans',可以从工作区访问,不在函数内部,并且指的是abs(持续时间)

这会在函数内复制您的脚本:

function   tokens = tokenizeSignal( sig )
tsig = abs(sig);  
dsig = diff([1 tsig 1]);
startIndex = find(dsig<0);
endIndex = find(dsig>0)-1;
duration = endIndex-startIndex+1;
matA=[duration;zeros(1,size(duration,2))];
matA=matA';
wsig = abs(sig);  
rsig = diff([0 wsig 0]);
startIndex = find(rsig < 0);
endIndex = find(rsig > 0)-1;
duration = endIndex-startIndex+1;
yourAns = abs(duration);
matB=[yourAns;ones(1,size(yourAns,2))];
matB=matB';
tokens=reshape([matA(:) matB(:)]',size(matA,1)+size(matB,1), []) ;