按时间抽取的基2FFT算法分析及MATLAB实现

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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点时域序列。

悶讥儿⑹+叭卷悶川

fl df . it = 1-Lf! T - — I

工2 m・

亠飞、■. K @ —N =比化)—卅』X二仏) 2

图1 DIT-FFT蝶形运算流图

二、DIT-FFT算法的运算规律及编程思想

1•原位计算

对N=2M点的FFT共进行M级运算,每级由N/2个蝶形运算组成。在同一级中,每个蝶的输入数据只对本蝶有用,且输出节点与输入节点在同一水平线上,这就意味着每算完一个蝶后,所得数据可立即存入原输入数据所占用的数组元素(存储单元),经过M级运算后,原来

存放输入序列数据的N个存储单元中可依次存放X(k)的N个值,这种原位(址)计算的方法可

节省大量内存。

2•旋转因子的变化规律

3

N = 8 = 2时各级的旋转因子:

第一级:L=1, 有1个旋转因

子:

W N=W N/4=W2L J=0

第二级:L=2, 有2个旋转因子:W

N=W

N/2

=w;J=0,1

第三

级:L=3, 有4个旋转因子:W

N=W N=W J L J=0,1,2,3

对于N= 2的一般情况,第L级共有21个不同的旋转因子:

W N=W;L J=0,1,2,…,2L-1- 1

N点DIT—FFT运算流图中,每个蝶形都要乘以旋转因子W N,p称为旋转因子的指数。例如2L=2M X2L-M L-M

故:按照上面两式可以确定第L级运算的旋转因子

八0—…严

3、同一级中,同一旋转因子对应蝶形数目

第L级FFT运算中,同一旋转因子用在2M-L个蝶形中;

4、同一级中,蝶形运算使用相同旋转因子之间相隔的“距离”

第L级中,蝶距:D=2L;

5、同一蝶形运算两输入数据的距离

在输入倒序,输出原序的FFT变换中,第L级的每一个蝶形的2个输入数据相距:B=2L-1。

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

的运算。l=J时不需要交换,只对l

2。

7、蝶形运算的规律

序列经过时域抽选后,存入数组中,如果蝶形运算的两个输入数据相距B个点,应用原位计算,蝶形运算可表示成如下形式:

p=J X2M-L, J=0,1,2,…,2L-1—1

& DIT-FFT程序框图

根据DIT-FFT原理和过程,DIT-FFT的完整程序框图如图2:

(1)倒序:输入自然顺序序列x(n),根据倒序规律,进行倒序处理;

⑵循环层1:确定运算的级数,L=1~M (N=2M);确定一蝶形两输入数据距离B=2L-1

⑶循环层2:确定L 级的B=2L 1个旋转因子;旋转因子指数 p=Jx 2M L , J=0~B-1;

为2L (使用同一旋转因子的蝶形相距的距离 )

(5)完成一个蝶形运算。

送入x(n), M

L = 1M

X(k) X(k) X(k B)W NP X(k B) X(k) X(k B)W NP

图3 DIT-FFT 的完整程序框图

三、程序源代码

设计函数myDitFFT(xn)

完成一个序列的 DIT-FFT 运算:

fun cti on y=myDitFFT(x n)

M=n extpow2(le ngth(x n));

N=2A M; disp('调用fft 函数运算的结果:'),

fftxn=fft(x n, N); if len gth(x n)

xn=[x n,zeros(1,N-le ngth(x n))]; end

for m=0:N/2-1;

%旋转因子指数范围

WN(m+1)=exp(-j*2*pi/Nfm; %计算旋转因子

end

(4)循环层3:对于同一旋转因子,用于同一级

2M-L

个蝶形运算中:k 的取值从J 到N-1,步长 J=0B- 1

p = 2 —Lj

图2数据倒序程序框图

k =J ,N - 1 ,L 2

相关文档
最新文档