使用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加即可。

 

  • 7
    点赞
  • 49
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值