【问题标题】:Matlab xcorr giving different values for different implementations of cross-correlationMatlab xcorr 为互相关的不同实现提供不同的值
【发布时间】:2014-09-02 02:36:57
【问题描述】:

我正在尝试执行互相关,但注意到以两种不同的方式执行此操作会导致结果略有不同。

我有一个带有一些尖峰('dual_spikes')的向量,我想将它与“dips”交叉关联(在 Matlab 中使用 xcorr)。

当我以两种不同的方式执行此操作时,我注意到了不同之处:

  • 使用“dual_spikes”正常执行 xcorr
  • 对每个单独的尖峰执行 xcorr,将它们相加并归一化。

我不知道为什么会有区别。使用下面的函数进行说明。

function [] = xcorr_fault()

dual_spikes = [zeros(1,200),ones(1,200),zeros(1,400),ones(1,100),zeros(1,100)];

dips = 1-[zeros(1,400),ones(1,1),zeros(1,599)];
plot(dips)

single_spike_1 = [zeros(1,200),ones(1,200),zeros(1,600)];
single_spike_2 = [zeros(1,800),ones(1,100),zeros(1,100)];

xcorr_dual = xcorr_div(dual_spikes,dips);
xcorr_single1 = xcorr_div(single_spike_1,dips);
xcorr_single2 = xcorr_div(single_spike_2,dips);

xcorr_single_all = (xcorr_single1+xcorr_single2)/max(xcorr_single1+xcorr_single2);
xcorr_dual_norm = xcorr_dual/max(xcorr_dual);

figure(1)
clf
hold all
plot(xcorr_dual_norm)
plot(xcorr_single_all)
legend('Single xcorr','xcorr with individual spikes')


function [xcorr_norm] = xcorr_div(lines,signal)
    xcorr_signal = xcorr(signal,lines,'none');
    xcorr_signal(xcorr_signal<1e-13) = NaN;
    xcorr_bg = xcorr(ones(1,length(signal)),lines,'none');
    xcorr_norm = xcorr_signal ./ xcorr_bg;
    xcorr_norm(isnan(xcorr_norm)) = 1;

注意,xcorr 信号必须有一个“背景”(bg) 划分,因此只能找到下降。这发生在“xcorr_div”中。

【问题讨论】:

    标签: matlab partial fault cross-correlation


    【解决方案1】:

    您的函数 xcorr_div 计算互相关,然后将结果除以具有均匀信号的相关。结果是某种非线性的归一化互相关(不是标准定义)。因此,您不应该期望结果的总和就是总和的结果。

    如果您希望两种方式都能得到相同的结果,请从xcorr_div 输出xcorr_signalxcorr_norm,然后对这两个输出求和然后除。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-17
      • 1970-01-01
      • 2015-05-01
      • 1970-01-01
      相关资源
      最近更新 更多