样本通过样本互关(Xcorr) 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

效果很好。但问题是每个信号有40000个样本。实际上我确实经常被耽搁。为了避免延迟,我不得不发送一堆样品(比如250个样品)到xcor。但我该怎么做呢?我知道我必须使用for循环,但我发现这样做很困难。有人能告诉我怎么做吗?我试过这样做

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

但是完全丢失了。谁有什么建议,请....

如果我理解正确的话,您想要交叉关联250个样本块,一个接一个。从你的尝试中适应,尝试

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

作为旁注,你知道信号之间的最大延迟吗?如果您可以安全地假设信号之间的时间偏移低于250(将其分成间隔的想法表明),则可以通过使用xcorr的参数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')));
...

我还没有测试过这将有多快,但我的猜测是你可能能够完全避免循环与这个…

最新更新