我试图通过Matlab中的DFT(数字傅里叶变换)使用相关性来比较2种信号的相似程度,但是相关性函数并不能提供真正可预测的结果。例如,如果我比较这两对信号:

  • 相关1和2
  • 相关3和4(自相关)


  • 我希望在“corr 3和4”情况下的相关性峰值高于在“corr 1和2”情况下的相关性峰值。

    我也尝试使信号“平均为零”,但这没有帮助。

    这是预期的结果还是我错过了一些预处理等?

    最佳答案

    您需要规范化数据迹线-即在关联之前将它们除以它们各自的积分。以下代码演示了当您标准化数据跟踪时,自相关确实为您提供了更大的价值:

    %# producing your data
    trace1=(abs(linspace(-64,64,128))<20)*200;
    trace2=trace1-(abs(linspace(-64,64,128))<10)*50;
    figure;
    subplot(321);
    plot(trace1);
    subplot(322);
    plot(trace2);
    subplot(323);
    plot(xcorr(trace1,trace2))
    title('unnormalized cross-correlation');
    subplot(324);
    plot(xcorr(trace2,trace2))
    title('unnormalized autocorrelation');
    %
    %# what you should be doing:
    subplot(325);
    plot(xcorr(trace1/sum(trace1(:)),trace2/sum(trace2(:))))
    title('normalized cross-correlation');
    subplot(326);
    plot(xcorr(trace2/sum(trace2(:)),trace2/sum(trace2(:))))
    title('normalized autocorrelation');
    

    导致

    我放大了峰以显示归一化自相关具有比归一化互相关更高的峰。

    10-08 06:45