2011-09-06 24 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