求整数序列中出现次数最多的数_库利-图基FFT算法,4G通信系统中使用了FFT算法进行时域频域切换...

b930683b0be677066aaf609fa0e91964.gif

【通信技术基础第13讲】

班长说:本文是在之前文章的基础之上,以DFT推导FFT算法。如果你对整个系列比较感兴趣,可以查阅班长之前的文章。

我们知道DFT离散傅里叶变换的公式如下

2f71882175e8844b5ddaa23d4b0eb074.png
25c8222f61eb7adc1811c744e2dec2f7.png

我们都知道e^jx或者写成e^ix,是一个单位圆,x的变动就是角度的变化正如图1所示

d8c18437b473cc8a6c28d609a09bb701.gif

图1 eix单位圆

图中是e^-ix的变化,由于多了一个负号,所以我们可以认为是负角度,然后从横坐标下方开始转动。

在DFT的公式中,我们定义了W=e^-j2π/N,很明显,2π被分成了N等份,就像一个圆形的蛋糕被分成了N份。

9fcc708335a8e8cfdd020d8fd61df456.png

图2 切分蛋糕

每一份的角度为2π/N,如果当N=8的时候,单位圆被分成8份,每份π/4;所以当nk取不同值时候,其实W的取值都在这个单位圆上。

聪明的你一定已经想到,这个单元圆必然会带来周期值相等的周期性质,以及对称性。当我们用N=8来举例时,可以发现下图

37e11b5ab53336380027ca0d1e067acd.png

图3 W的周期与对称性质

得到两个重要性质:

1、周期性:

7246aacc0aff4bb17d57c23009264cbc.png

2、对称性:

7bec26671ebf9cd049419d1882c83bbd.png

DFT的运算量

这是N=4的情况,如果我们把DFT变换写成矩阵形式,如图4所示。求X(0)我们需要4次复数乘法和3次复数加法。所以当N=4的时候,我们需要乘法4*4=16次,加法4*3=12次。普遍情况,求得所有的X(k),我们需要N*N次乘法,N*N-1次加法。

f4eac9ac8bd7f74b4a4ac82558f0c1ba.png

图4 N=4的DFT展开

当N逐渐增大时,运算工作量将迅速增长。就拿N=10计算,需要100次复数乘法运算;N=1024时,就需要1048576即一百多万次乘法运算。按此规律发展,很难满足信号实时处理的要求,对计算机的运算速度也会提出很高的要求。

FFT算法

对序列x(n)取N点DFT,N是2的整数次方。

95a6719f526d7b5eedce4809f4a30b3f.png

把x(n)的DFT运算按照n为偶数和n为奇数分解为两部分。

305f69acb6f1ce86f2624ebc5b0a4684.png

图5 手工推导过程

图5,是班长手写推导的,由于涉及公式太多,所以没有写成公式。班长的手写体,您见谅。

d001e9561be86787cc3afa5b2886cafc.png

当k=0,1,2,...,N/2-1时,可以写出X(k)的前N/2点与后N/2点的数值,总共有N个值。

当N=4时,可以分解为如下

58ad64d8c65e5d1391b80b9bf3df1e2a.png

此时可以用流程图画出这种算法的计算过程,如图6所示,N=4

5ec62088d556c9102160e9a88e85196a.png

图6 N=4分解流程图

最右边的交叉的运算,叫做“蝶形”运算。他们都说看起来像蝴蝶的翅膀,但我看不出来。

bb0d7733ef85322f24751b7e182f78dc.png

图7 蝶形运算单元

可以看出通过G(k)与H(k)计算X(k)的过程中,共计需要2次乘法,4次加法。即N/2次复数乘法,N次复数加法。

现在我们再来求G(k)与H(k):

3c4e92e4cf903cad61c664f66c36c44b.png

利用了性质

d78a03894ed0b5aef348c1c9855e4f9a.png

计算G(k)与H(k)的过程,需要2次乘法和4次加法,即N/2次复数乘法,N次复数加法。所以,总体的乘法次数为N次乘法和2N次加法。而直接计算DFT需要N^2次乘法,N(N-1)次加法。

4f0014b073014a2f2d1ceb090da68a50.png

图8 FFT算法复杂度,来源于网络

我们还会发现,这里输入信号的顺序是x(0).x(2).x(1).x(3),并不是按照我们正常的1-2-3-4顺序。其实这里涉及到了计算机处理时候的“码位倒读”和节约存储器的概念,这个内容在编程 的时候会凸显,这里不再详细介绍,感兴趣的同学可以自行学习哦。

总结

班长所说的这中算法叫做库利-图基FFT算法,在时域奇偶排序,称为按时域抽取的FFT算法;与此对应的另一种办法是在频域按奇偶顺序分组,叫做桑德-图基算法

如果样本点数目N不是2的整数次幂,当然也有FFT算法程序啦;而且从FFT算法出现到仙子,各种改进算法也很多,不再一一介绍。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值