按时间抽取的基2FFT算法分析及MATLAB实现
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
按时间抽取的基2FFT 算法分析及MATLAB 实现
一、DIT-FFT 算法的基本原理
基2FFT 算法的基本思想是把原始的N 点序列依次分解成一系列短序列,充分利用旋转因子的周期性和对称性,分别求出这些短序列对应的DFT ,再进行适当的组合,得到原N 点序列的DFT ,最终达到减少运算次数,提高运算速度的目的。
按时间抽取的基2FFT 算法,先是将N 点输入序列x(n)在时域按奇偶次序分解成2个N/2点序列x1(n)和x2(n),再分别进行DFT 运算,求出与之对应的X1(k)和X2(k),然后利用图1所示的运算流程进行蝶形运算,得到原N 点序列的DFT 。只要N 是2的整数次幂,这种分解就可一直进行下去,直到其DFT 就是本身的1点时域序列。
图1 DIT-FFT 蝶形运算流图
二、DIT-FFT 算法的运算规律及编程思想
1.原位计算
[
对N=M
2点的FFT 共进行M 级运算,每级由N/2个蝶形运算组成。在同一级中,每个蝶的输入数据只对本蝶有用,且输出节点与输入节点在同一水平线上,这就意味着每算完一个蝶后,所得数据可立即存入原输入数据所占用的数组元素(存储单元),经过M 级运算后,原来存放输入序列数据的N 个存储单元中可依次存放X(k)的N 个值,这种原位(址)计算的方法可节省大量内存。
2.旋转因子的变化规律
N 点DIT ―FFT 运算流图中,每个蝶形都要乘以旋转因子p
W N ,p 称为旋转因子的指数。例如N =8 =3
2 时各级的旋转因子:
第一级:L=1, 有1个旋转因子:p
W N =J
/4W N =J
2L W J=0
第二级:L=2,有2个旋转因子:p
W N =J
/2W N =J
2L W J=0,1
第三级:L=3,有4个旋转因子:p
W N =J
W N =J 2L W J=0,1,2,3
对于N =M 2的一般情况,第L 级共有1-L 2个不同的旋转因子:
p W N =J 2L W J=0,1,2,… ,1-L 2
-1 L 2=M 2×M -L 2= N ·M -L 2
故: 按照上面两式可以确定第L 级运算的旋转因子
\
3、同一级中,同一旋转因子对应蝶形数目 第L 级FFT 运算中,同一旋转因子用在L
-M 2
个蝶形中;
4、同一级中,蝶形运算使用相同旋转因子之间相隔的“距离” 第L 级中,蝶距:D=L
2; 5、同一蝶形运算两输入数据的距离
在输入倒序,输出原序的FFT 变换中,第L 级的每一个蝶形的2个输入数据相距:B=1
-L 2。
6、码位颠倒
输入序列x(n)经过M 级时域奇、偶抽选后,输出序列X(k)的顺序和输入序列的顺序关系为倒位关系。
'
将十进制顺序数用I 表示,与之对应的二进制是用IB 表示,十进制倒序数用J 表示,与之对应的二进制是用JB 表示。十进制顺序数I 增加1,相当于IB 最低位加1且逢2向高位进1,即相当于JB 最高位加1且逢2向低位进1。JB 的变化规律反映到J 的变化分为两种情况,若JB 的最高位是0(J 7、蝶形运算的规律 序列经过时域抽选后,存入数组中,如果蝶形运算的两个输入数据相距B 个点,应用原位计算,蝶形运算可表示成如下形式: 8、 DIT-FFT 程序框图 ~ 根据DIT-FFT 原理和过程,DIT-FFT 的完整程序框图如图2: (1)倒序:输入自然顺序序列x(n),根据倒序规律,进行倒序处理; (2)循环层1:确定运算的级数,L=1~M (N=M 2);确定一蝶形两输入数据距离B=1 -L 2 (3)循环层2:确定L 级的B=1 -L 2 个旋转因子;旋转因子指数p=J×L -M 2 ,J=0~B-1; XL-1(J) X L-1 (J+B) XL (J)= XL-1(J)+ WNp X L-1 (J+B) X L (J) = X L-1(J)W N p X L-1 (J+B) p=J×2M-L , J=0,1,2,… ,2L-1-1 (4)循环层3:对于同一旋转因子,用于同一级L -M 2个蝶形运算中:k 的取值从J 到N-1,步长为L 2 (使用同一旋转因子的蝶形相距的距离) (5)完成一个蝶形运算。 开 始 送入x (n ),M N =2 M 倒 序 L =1 , M J=0 , B - 1 P =2 M -L J k = J , N -1 , 2 L p N p N W B k X k X B k X W B k X k X k X )()()()()()(+-⇐+++⇐输 出 结 束 B 2 L -1 图2 数据倒序程序框图 图3 DIT-FFT 的完整程序框图 三、程序源代码 / 设计函数myDitFFT(xn)完成一个序列的DIT-FFT 运算: function y=myDitFFT(xn) M=nextpow2(length(xn)); N=2^M;