样品通过样品互相关(Xcorr)matlab

时间:2011-09-06 20:22:20

标签: matlab

我使用xcorr函数来识别信号的相似性。以下是代码,

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个样本。实际上我确实有很多延迟。我必须将一堆样本(如250samples)发送到xcorr中以消除延迟。但是我该怎么做?我知道我必须使用for循环,但发现这样做很困难。有人可以建议我怎么做。我试过这样的事情

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

但完全迷失了。有人提出建议......

1 个答案:

答案 0 :(得分:2)

如果我理解正确,你想要一个接一个地交叉关联250个样本的块。根据您的尝试进行调整,请尝试

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

作为旁注,您对信号之间的最大滞后有何了解?如果您可以安全地假设信号之间的时间偏移低于250(将其划分为间隔的想法),则可以使用maxlags 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'))); ... 修改原始代码来节省计算时间。 3}}:

{{1}}

我还没有测试过它的速度有多快,但我的猜测是你可以完全避免你的循环......