簡體   English   中英

MATLAB莫爾斯電碼

[英]MATLAB 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時,它不再返回任何東西。 為什么是這樣?

它不起作用的原因是因為您依賴於關鍵字“ ans”,該關鍵字可從工作空間訪問,而不是在函數內部,並且引用abs(duration)

這將在功能內復制腳本:

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), []) ;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM