FFT的实现方法(偏原理)

关于FFT的学习

笔者又学习了一次FFT,这次终于算是快学懂了。这里推荐https://www.icourse163.org/learn/NJTU-1001950001?tid=1206005212#/learn/content?type=detail&id=1210380985&cid=1212426022
北京交通大学的《数字信号》MOOC,讲得比我的授课老师好多了…话不多说,直接上干货。

两个步骤

FFT分为两个步骤。第一步:将你拥有的一个完整时间序列分解成很多个最基础的两点时间序列;第二步:将这些两点时间序列变成频域序列,并用得到的两点频域序列组合成为完整的频域序列。下面具体说。

第一个步骤

比如你拥有一个34个采样点的时间序列,那么你需要将这个序列拓展成一个采样点数为2^N的时间序列。通过补零的方式,得到你所需要的序列是:X1,X2,X3,X4,X5……X34,0,0,0……0;要补足30个0,从而使得整个序列的采样点数量达到64。

接着,按照单双数按顺序排列的方法,将这64个采样点分成2组。分别是X0,X2,X4…和
X1,X3,X5…

第二个步骤

在说明第二个步骤之前,我先来推导两个结论;

第一个结论:

两点序列的DFT可以这样算:
在这里插入图片描述
推导:
在这里插入图片描述

第二个结论:

两个长度m的DFT序列可以拼接成为一个长度为2m的DFT序列。
在这里插入图片描述推导:
在这里插入图片描述在这里插入图片描述
有了这两个结论之后,我们就可以干这两件事情:第一:我们可以求解任何一个两采样点的DFT;第二,我们可以将任何两个等长度的频域序列X1、X2合并成为一个长度为其两倍的DFT——X,X1对应的时域序列是X对应的时域序列的奇数采样点,X2对应的时域序列则是偶数。

所以第二个步骤读者应该也想出来了:将你分出的两个序列(X0,X2,X4…和
X1,X3,X5…)再次进行细分,直到分成32个采样点数为2的序列:X0,X2;X4,X6;…X62,X64;X1,X3;…X61,X63;
然后通过结论1求出这32个序列的DFT,得到32个长度为2的频域序列。
接着,通过结论2将这32个序列合并成为16个长度为4的长序列,然后再一次类推,16变32,32变64。最后就得到了最终的64点DFT。
在这里插入图片描述
所以,说到底,FFT的算法本质就是,将64个时域采样点全都先做一次两长度DFT,再不断地合并相加,最后得到答案。

同学们可能回问了,FFT算法也需要先求64次DFT啊,求了DFT后还要相加,好麻烦啊,为什么不直接对原序列求DFT呢?

原因就在于,我们假设计算32个2点序列DFT的计算量为A,计算1个64点序列DFT的计算量为B,后者远远大于前者。即使算上合并的计算量C,A+C也小于B。具体关于计算量的论述,大家可以去看看教材,本篇不做讨论。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值