自相关互相关卷积的_使用FFT实现现行卷积,MATLAB计算自相关函数和互相关函数...

最近在做关于使用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加即可。

你可能感兴趣的:(自相关互相关卷积的)