计算互相关

时间:2016-10-23 22:20:20

标签: matlab signal-processing

我正在尝试计算时域和频域中两个信号之间的互相关。我得到了两个不同的结果。

  time=0:1/1000:2;
  A=sin(2*pi*f*t)+sin(2*pi*f*t);
  Y=randn(1,length(A));
  C1=xcorr(A,Y);
  figure
  plot(C1); 
  FFT_A=fft(A);
  FFT_Y=fft(Y);
  F2=FFT_A.*conj(FFT_Y);
  C2=ifft(F2);
  plot(C2);

由于

1 个答案:

答案 0 :(得分:1)

这是由别名引起的。请尝试以下代码。

clear;
  clc;
  N=4000;
  Fs=1000; 
  a1_normalized_frequency=0.1; 
  b1_normalized_frequency=0.3; 
  a1_amplitude=1;
  b1_amplitude=0.5;
  time=0:1/Fs:4;
  a1_frequency=Fs*a1_normalized_frequency;
  b1_frequency=Fs*b1_normalized_frequency;
  A=[zeros(1,length(time)) a1_amplitude*sin(2*pi*a1_frequency*time)+b1_amplitude*sin(2*pi*b1_frequency*time) zeros(1,length(time))];
  Y=randn(1,length(A))+A;
  Cross_Correlation_Time_domain=xcorr(A,Y);
  figure(1)
  plot(Cross_Correlation_Time_domain); 
  FFT_A=fft(A);
  FFT_Y=fft(Y);
  Multiply_FFT_A_Y=FFT_A.*FFT_Y;
  cross_correlation_frequency_domain=ifft(Multiply_FFT_A_Y);
  figure(2)
  plot(fftshift(real(cross_correlation_frequency_domain)));

我已在您的A数组中添加了零以避免别名。

当我绘制cross_correlation_frequency_domain时,我使用fftshift函数来对齐信号顺序。