Matlab xcorr为不同的互相关实现提供了不同的值

Matlab xcorr为不同的互相关实现提供了不同的值,matlab,partial,fault,cross-correlation,Matlab,Partial,Fault,Cross Correlation,我试图进行互相关,但注意到以两种不同的方式进行互相关会导致略有不同的结果 我有一个带有一些尖峰(“双尖峰”)的向量,我想将它与“凹陷”交叉关联(在Matlab中使用xcorr) 当我以两种不同的方式执行此操作时,我注意到了一个差异: 使用“双_尖峰”正常执行xcorr 对每个单独的尖峰执行xcorr,将它们相加,然后归一化 我不知道为什么会有区别。使用以下功能进行说明 function [] = xcorr_fault() dual_spikes = [zeros(1,200),ones(

我试图进行互相关,但注意到以两种不同的方式进行互相关会导致略有不同的结果

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

当我以两种不同的方式执行此操作时,我注意到了一个差异:

  • 使用“双_尖峰”正常执行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\u故障()
双_尖峰=[零(1200)、一(1200)、零(1400)、一(1100)、零(1100)];
倾角=1-[零(1400)、一(1,1)、零(1599)];
绘图(倾斜)
单_尖峰_1=[零(1200)、一(1200)、零(1600)];
单_尖峰_2=[零(1800)、一(1100)、零(1100)];
xcorr_dual=xcorr_div(双尖峰、凹陷);
xcorr_single1=xcorr_div(单尖峰,下倾);
xcorr\u single2=xcorr\u div(单尖峰2,下陷);
xcorr\u single\u all=(xcorr\u single1+xcorr\u single2)/max(xcorr\u single1+xcorr\u single2);
xcorr\u dual\u norm=xcorr\u dual/max(xcorr\u dual);
图(1)
clf
保留全部
绘图(xcorr\u对偶\u范数)
绘图(xcorr\u单个\u全部)
图例('Single xcorr','xcorr with individual spikes')
函数[xcorr\u norm]=xcorr\u div(线路、信号)
xcorr_信号=xcorr(信号,线,'none');

xcorr_signal(xcorr_signal函数xcorr_div计算互相关,然后将结果与相关除以一个统一的信号。结果是某种非线性的规范化互相关(不是标准定义)。因此,您不应该期望结果的和是和的结果

如果希望两种方法都能得到相同的结果,请从
xcorr\u div
输出
xcorr\u信号
xcorr\u norm
,然后对这两个输出进行求和,然后进行除法