分享

Matlab求两个序列的互相关函数 – MATLAB中文论坛

 好美的红蔷薇 2016-08-24
这是用FFT的方法求互相关函数。其中的机理不是很容易说明白,建议LZ看一下书,在“数字时间序列分析一书”中有一节“利用快速傅里叶变换的相关函数”,详细说明了这种方法。
首先要知道为什么在FFT变换时就补了0,如果不补0的话也可以求相关函数,但求出的是循环相关函数。
rm=real(ifft(conj(xk).*yk)); 求了互功率谱,再反变换就是互相关系数
rm=[rm(k+2:2*k) rm(1:k)]; 由于补0的安排,要把序列以k+1为中心点,左右换置,相当于执行ifftshift函数。但是我发现这语句中把rm(k+1)丢失了,似乎有点问题
m=(-k+1):(k-1);  互相关函数对应的延迟量

我把程序改一下,得下图:
x=[1 3 2 6 2 1 -2 0 1 5 3 2 -3 0 1 2 0 3 1];
y=[0 0 0 1 3 2 6 2 1 -2 0 1 5 3 2 -3 0 1 2 0 3 1];
k=length(y);
e=randn(1,k);
y=y+e;
xk=fft(x,2*k);
yk=fft(y,2*k);
rm=real(ifft(conj(xk).*yk));%作用?
%rm=[rm(k+2:2*k) rm(1:k)];%作用??
rm=ifftshift(rm);
m=-k:k-1;%作用??
stem(m,rm)
xlabel('m');
ylabel('幅度');
title('x与y的互相关函数');

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多