Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 为什么使用DFT的相关性会给出不直观的结果?_Matlab_Fft_Correlation_Convolution - Fatal编程技术网

Matlab 为什么使用DFT的相关性会给出不直观的结果?

Matlab 为什么使用DFT的相关性会给出不直观的结果?,matlab,fft,correlation,convolution,Matlab,Fft,Correlation,Convolution,我试图在Matlab中通过DFT(数字傅里叶变换)使用相关来比较两个信号的相似程度,但相关函数给出的结果并不可预测。例如,如果我比较这两对信号: 相关性1和2 相关性3和4(自相关) 我预计“corr3和4”情况下的相关性峰值高于“corr1和2”情况下的相关性峰值 我还试图使信号“平均到零”,但这没有帮助 这是预期的结果还是我错过了一些预处理等?您需要规范化您的数据记录道-即,在关联之前将它们除以各自的积分。下面的代码演示了当您规范化数据跟踪时,自相关确实为您提供了更大的值: %# pr

我试图在Matlab中通过DFT(数字傅里叶变换)使用相关来比较两个信号的相似程度,但相关函数给出的结果并不可预测。例如,如果我比较这两对信号:

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

我预计“corr3和4”情况下的相关性峰值高于“corr1和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');
%#生成您的数据

trace1=(abs(linspace(-64,64128))@Jonas,我无法找到如何插入图像并对您的答案进行足够好的格式化(对不起,这里是新手),因此我将此评论保留为“答案”

因此,我发现,对于以下数字,您的方法给出的结果不符合预期:

如您所见-自相关的峰值低于互相关的峰值。
我使用的代码如下:

trace1=(abs(linspace(-64,64,128))<20)*200;
trace2=trace1-(abs(linspace(-64,64,128))<10)*50;
trace1=trace1-(abs(linspace(-64,64,128))<10)*100;

subplot(321);
plot(trace1); grid on;
subplot(322); 
plot(trace2); grid on;
subplot(323);
plot(xcorr(trace1,trace2)); grid on;
title('unnormalized cross-correlation');
subplot(324);
plot(xcorr(trace2,trace2)); grid on;
title('unnormalized autocorrelation');

subplot(325);
plot(xcorr(trace1/sum(trace1(:)),trace2/sum(trace2(:)))); grid on;
title('normalized cross-correlation');
subplot(326);
plot(xcorr(trace2/sum(trace2(:)),trace2/sum(trace2(:)))); grid on;
title('normalized autocorrelation');

trace1=(abs(linspace(-64,64128))编辑您的问题时,请使用
image
图标将图像重新上传到标准站点。Andrey,我不能。它说“哎呀!您的编辑无法提交,因为:很抱歉,作为一种防止垃圾邮件的机制,新用户不允许发布图像。发布图像可赢得10%以上的声誉。”。“。如果您需要更可靠的文件交换源,请告诉我-我也会在那里上传图像。Owww…抱歉忘记了代表限制。Jonas,谢谢您的回答。我也在考虑规范化。我的解决方法是计算规范化信号之间的欧几里德距离(其中一个信号通过相关最大值移动)-欧几里德距离对于相关峰的自相关为零。我还有两个问题要问你们:-在积分处除法的物理意义是什么,为什么不在最大值处除法?为了使信号相同?-积分(和)可能为零(或者在y值为负值的情况下接近这个值。我相信-获得绝对值的总和是可以接受的。物理解释将取决于您的实际问题-我恐怕无法帮助您。记住这是一个编程网站。。。