2011-09-06 46 views
0

我使用的xcorr函數用於識別信號的相似性。以下是密碼,樣品通過樣品交叉相關(Xcorr)MATLAB

r1 = max(abs(xcorr(S1, shat1,'coeff'))); 
r2 = max(abs(xcorr(S1,shat2,'coeff'))); 
if r1>r2 
dn=shat2; 
else 
dn=shat1; 
end 

它工作完美。但問題是信號每個都有40,000個樣本。實際上,我確實得到了很多延遲。我必須將大量樣本(如250個樣本)發送到xcorr以消除延遲。但我該怎麼做?我知道我必須使用for循環,但發現很難做到這一點。有人建議我該怎麼做。我試過這樣的事情。我試過這樣的事情。我試過這樣的事情。

for i=1:250:40000 
r1 = max(abs(xcorr(S1(:,i), shat1(:,i),'coeff'))); 

但完全失去了。有人提出好的建議請....

回答

2

如果我理解正確的話,你要的250個樣本,一前一後交叉關聯塊。根據您的嘗試進行調整,請嘗試

for i=1:250:40000 
r1 = max(abs(xcorr(S1(i:i+249), shat1(i:i+249),'coeff'))); 
end 

作爲一個附註,您是否知道有關信號之間的最大延遲?如果你可以安全地假設你的信號之間的時間偏移低於250(其拆分爲間隔的想法建議),你可以通過修改原密碼使用maxlags,保存參數計算時間xcorr

maxlags=250; %# or some other reasonable value, maybe even 100? 50? 
r1 = max(abs(xcorr(S1, shat1,maxlags, 'coeff'))); 
r2 = max(abs(xcorr(S1, shat2,maxlags, 'coeff'))); 
... 

我還沒有測試過會有多快,但我的猜測是你可能能夠完全避免你的循環與此...

+0

嗨,感謝您的想法。將嘗試這一點,我不確定信號之間的滯後,因爲它們是特定算法的輸出。非常感謝你的回覆。 – jay