【问题标题】:Samples by samples cross-correlation(Xcorr) matlab逐个样本互相关(Xcorr)matlab
【发布时间】:2011-09-06 20:22:20
【问题描述】:

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

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

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

【问题讨论】:

    标签: matlab


    【解决方案1】:

    如果我理解正确,您希望一个接一个地交叉关联 250 个样本块。适应您的尝试,尝试

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

    顺便说一句,您知道信号之间的最大延迟吗?如果您可以安全地假设信号之间的时间偏移低于 250(将其拆分为区间的想法表明),您可以通过使用 maxlagsxcorr 的参数)修改原始代码来节省计算时间:

    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')));
    ...
    

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

    【讨论】:

    • 嗨,谢谢你的想法。会试试这个,我不确定信号之间的滞后,因为它们是特定算法的输出。非常感谢您的回复。
    猜你喜欢
    • 2014-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-31
    • 1970-01-01
    • 2011-09-11
    相关资源
    最近更新 更多