我使用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')));
但完全迷失了。有人提出建议......
答案 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}}
我还没有测试过它的速度有多快,但我的猜测是你可以完全避免你的循环......