a = [1+1i, 2+2i, 3+3i];
b = [1+1i, 2+2i];
%1.直接用xcorr来求相关
y_xcorr1 = xcorr(a, b);
subplot(1,3,1);
stem(y_xcorr1);
title("(1)直接用xcorr");
%2.利用卷积conv来求相关
b1 = b(end: -1: 1);%序列翻转
y_xcorr2 = conv(a, conj(b1));
subplot(1,3,2);
stem(y_xcorr2);
title("(2)用卷积conv来求相关");
%3.在频域上计算
a_fft = fft(a, 4);
b_fft = fft(conj(b1), 4);
c = a_fft .* b_fft;
y_xcorr3 = ifft(c);
subplot(1,3,3);
stem(y_xcorr3);
title("(3)转化到频域求相关");
结果如图2所示,从结果上来看,第一种方式结果多了一个点,这是由于xcorr函数在计算过程中会自动对于较短的序列补0导致。并且第3种方式,时域到频域转化的过程中,做FFT的点数要保持一致,并且有时最后相关结果中也会出现很多0点位,这是由于圆周卷积的特性所导致的。
最后,复数序列作相关操作时候,两个序列中的一个取共轭,但是复数序列作卷积操作的时候,是不取共轭的!就跟实数序列作卷积的运算一样,直接算就可以。
原文链接:https://zhuanlan.zhihu.com/p/463103958