【问题标题】:Calculating Cross Correlation计算互相关
【发布时间】:2016-10-24 20:24:33
【问题描述】:

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

  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);

谢谢

【问题讨论】:

    标签: matlab signal-processing


    【解决方案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 函数来对齐信号顺序。

    【讨论】:

    • 谢谢。请,如果我想将 A 信号移动加/减 100 个样本并绘制相关性,我该怎么做?
    • 您的意思是要绘制移动了 100 个样本的 A 信号?在这种情况下,只需plot(A(101:end))
    • 谢谢,是的,两次。一加 100 和一减 100
    • plot(A(101:end-100))
    • A_Minus100 = circshift(A,[0, -100]); A_Plus100 = circshift(A,[0, 100])。我假设您正在处理行向量,否则 [0, X] 应该更改为 [X, 0]。然后只需运行相关性两次。
    猜你喜欢
    • 2011-10-22
    • 1970-01-01
    • 2012-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多