300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > 使用fft计算序列的互相关函数

使用fft计算序列的互相关函数

时间:2022-01-20 10:32:10

相关推荐

使用fft计算序列的互相关函数

最近在做关于使用Matlab编程实现小m序列和Gold序列的实验,下面就说说关于这次实验室的一些收获:

1. 关于使用DFT实现线性卷积。

2. 关于自相关函数和互相关函数的Matlab计算。

3. 关于小m序列和Gold序列的一些基本概念

一、学工的如果不知道如何使用DFT来求线性卷积和这种思想的重要性,他就白学了(小波老师原话)

要求:t[n]=f(n)*g(n),把g(n)翻转,向右移动n格与f(n)的乘积和。假设f(n)长度为L,g(n)长度为P,则卷积后的有效点数为L+P-1,其余为全零。由傅里叶变换定理:时域卷积等效于频域乘积,即 T(e^jw)=F(e^jw)G(e^jw)。用w=(2*pi/N)k,代替可得:T~[k]=F~[k]G~[k],取k=0-N-1则可得到T[k]=F[k]G[k]。一个“周期序列”的DFS相当于对“一个周期”的序列傅里叶变换做频域抽样w=(2*pi/N)k,且抽样后满足x~[n]=∑x[n-rN]。N为周期。由于DFS无论时域还是频域都可以用N个点表示所有信息,所以定义DFT,只取时域N个点并对应频域N个点,借助DFS便可相互恢复。方法为取x~[n]从0到N-1即可。计算F[k]G[k],首先要保证N>=L+P-1,则将f(n)、g(n)补全至长度N,补零。

二、自相关函数:定义f(t)*f(-t) ∫f(t)f(t-α)

互相关函数:定义f(t)*g(-t) ∫f(t)g(t-α)

MATLAB实现:例如A=[1 2 3]

自相关函数应该为:n=-2 -1 0 1 2 对应 值为 3 8 14 8 3

1. 使用xcorr函数:

xcorr(A)= 3.0000 8.0000 14.0000 8.0000 3.0000

2. 自己使用FFT实现:

基本原理是两信号的FFT乘积相当于时域卷积结果的∑x[n-rN]。

原本卷积过程是y轴对称的平移相称,而这里自相关和互相关不要求y轴翻转过程,相当于t(-n)的卷积过程;t(-n)对应的是X(e-jw),如果是实数即为conj(X(ejw))

conj()求复数共轭

若直接ifft(fft(A).*conj(fft(A))),得到 k=0 1 2 对应值 14 11 11,明显因x[n]长度为5,而这里N=3使得∑x[n-rN]混叠了了;其实,两个等长的序列的FFT点乘得到的是时域以此长度为周期,循环卷积的结果。

因此令B=[A 0 0]补成一个周期长度N=5,这样虽然依然混叠(不可避免),但是混叠的区间都是值为0的。没有关系,反而得到了k=-2 -1的值,在k=3、4无失真显示。

B=[A 0 0]

ifft(fft(B).*conj(fft(B)))

得到:14 8 3 3 8 和上面分析一样

三、小m序列生成:查书可得生成多项式的抽头系数,线性循环寄存器产生出来即可,寄存器初始状态不影响小m序列,仅仅是造成一个移位而已。

Gold序列生成:找到优选对的小m的序列进行模2加即可。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。