我正在尝试计算时域和频域中两个信号之间的互相关。我得到了两个不同的结果。
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);
由于
答案 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
函数来对齐信号顺序。