我正在尝试执行互相关,但发现以两种不同的方式执行此操作会导致结果略有不同。
我有一个带有一些尖峰的矢量('dual_spikes'),我想将它与'dips'交叉相关(在Matlab中使用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'。
答案 0 :(得分:3)
您的函数xcorr_div计算互相关,然后将结果除以与均匀信号的相关性。结果是某种非线性的归一化互相关(不是标准定义)。因此,您不应期望结果的总和是总和的结果。
如果您希望能够以两种方式获得相同的结果,请从xcorr_signal
输出xcorr_norm
和xcorr_div
,然后对这两个输出然后< / em>分裂。