互相关函数的频域计算1.时域计算x1(n)与x2(n)的互相关定义如下 离散信号的互相关由下式计算,结果中的R(n)长度为2∗N−1 R(n)=∑m=N−|n|−1m=0x1(m)x2(m n) 上代码 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结果相同 2.频域计算由维纳-辛钦定理可知,随机信号的自相关函数和功率谱密度函数服从一对傅里叶变换的关系 P(ω)=∫ ∞−∞R(τ)e−jωτdτ R(τ)=12π∫ ∞−∞P(ω)ejωτdω P(ω)为x1、x2的互功率谱,这一步是把互相关函数变换到了频域,互相关函数的傅里叶变化就是互谱密度,写成下式 P(ω)=∫ ∞−∞∫ ∞−∞x1(t)x2(t τ)dt*e−jωτdτ 由交换积分性质和傅里叶变换的移位性质上式可简化成以下形式(参考时域卷积频域相乘推导) P(ω)=F∗1(ω)F2(ω) 这也是互谱密度的频域计算方法,时域互相关可以由上式做傅里叶逆变换得到 R(τ)=12π∫ ∞−∞F∗1(ω)F2(ω)ejωτdω 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)
关于这个计算,几点需要注意:
|
|