x1(n)与x2(n)的互相关定义如下 x 1 ( n ) 与 x 2 ( n ) 的 互 相 关 定 义 如 下
离散信号的互相关由下式计算,结果中的 R(n)长度为2∗N−1 R ( n ) 长 度 为 2 ∗ N − 1
上代码
x1 = [1,2,3,7,9,8];
x2 = [4,5,6,5,4,3];
N =length(x2);
xc = xcorr(x1,x2,'biased');
[k,ind] = max(xc);
an = acos((ind-N)/Fs*340/d)*180/pi
xc12 = zeros(2*N-1,1);
m = 0;
for i = -(N-1):N-1
m = m+1;
for t = 1:N
if 0<(i+t)&&(i+t)<=N
xc12(m) = xc12(m) + x2(t)*x1(t+i);
end
end
end
xc12 = xc12/N;
验证可以看到自己循环计算得到的结果与matlab的xcorr结果相同
由维纳-辛钦定理可知,随机信号的自相关函数和功率谱密度函数服从一对傅里叶变换的关系
P(ω) P ( ω ) 为 x1、x2 x 1 、 x 2 的互功率谱,这一步是把互相关函数变换到了频域,互相关函数的傅里叶变化就是互谱密度,写成下式
由交换积分性质和傅里叶变换的移位性质上式可简化成以下形式(参考时域卷积频域相乘推导)
这也是互谱密度的频域计算方法,时域互相关可以由上式做傅里叶逆变换得到
matlab中xcorr函数计算相关就是在频域计算的,这里用几行代码验证下
x1 = [1,2,3,7,9,8,3,7]';
x2 = [4,5,6,5,4,3,8,2]';
N = length(x1)+length(x2)-1;
NFFT = 64;
range = NFFT/2+1-(N-1)/2:NFFT/2+1+(N-1)/2;
xcorr(x1,x2)
ifft(fft(x1,NFFT).*conj(fft(x2,NFFT)));
r = fftshift(ifft(fft(x1,NFFT).*conj(fft(x2,NFFT))));
r = r(range)
关于这个计算,几点需要注意:
% Keep only the lags we want and move negative lags before positive
% lags.
c = [c1(m2 - mxl + (1:mxl)); c1(1:mxl+1)];