快速傅里叶变换(含详细实验过程分析)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

[实验2] 快速傅里叶变换 (FFT) 实现

一、实验目的

1、掌握FFT 算法和卷积运算的基本原理;

2、掌握用C 语言编写DSP 程序的方法;

3、了解利用FFT 算法在数字信号处理中的应用。

二、实验设备 1. 一台装有CCS 软件的计算机; 2. DSP 实验箱的TMS320C5410主控板; 3. DSP 硬件仿真器。

三、实验原理 (一)快速傅里叶变换

傅里叶变换是一种将信号从时域变换到频域的变换形式,是信号处理的重要分析工具。离散傅里叶变换(DFT )是傅里叶变换在离散系统中的表示形式。但是DFT 的计算量非常大, FFT 就是DFT 的一种快速算法, FFT 将DFT 的N 2

步运算减少至 ( N/2 )log 2N 步。

离散信号x(n)的傅里叶变换可以表示为

∑=-=1

0][)(N N nk N W n x k X , N

j N e W /2π-=

式中的W N 称为蝶形因子,利用它的对称性和周期性可以减少运算量。一般而言,FFT 算法分为时间抽取(DIT )和频率抽取(DIF )两大类。两者的区别是蝶形因子出现的位置不同,前者中蝶形因子出现在输入端,后者中出现在输出端。本实验以时间抽取方法为例。

时间抽取FFT 是将N 点输入序列x(n) 按照偶数项和奇数项分解为偶序列和奇序列。偶序列为:x(0), x(2), x(4),…, x(N-2);奇序列为:x(1), x(3), x(5),…, x(N-1)。这样x(n) 的N 点DFT 可写成:

()()∑++∑=-=+-=1

2/0

)12(1

2/0

2122)(N n k

n N

N n nk

N

W n x W

n x k X

考虑到W N 的性质,即

2/)2//(22/)2(2][N N j N j N W e e W ===--ππ

因此有:

()()∑++∑=-=-=12/0

2/1

2/0

2

/122)(N n nk

N k N

N n nk

N W n x W

W

n x k X

或者写成:

()()12()k

N X k X k W X k =+

由于X 1(k) 与X 2(k) 的周期为N/2,并且利用W N 的对称性和周期性,即:

k

N

N

k

N

W

W-

=

+2/

可得:

()()

12

(/2)k

N

X k N X k W X k

+=-

对X1(k) 与X2(k)继续以同样的方式分解下去,就可以使一个N点的DFT最终用一组2点的DFT来计算。在基数为2的FFT中,总共有log2(N) 级运算,每级中有N/2 个2点FFT蝶形运算。

单个蝶形运算示意图如下:

以N=8为例,时间抽取FFT的信号流图如下:

从上图可以看出,输出序列是按自然顺序排列的,而输入序列的顺序则是“比特反转”方式排列的。也就是说,将序号用二进制表示,然后将二进制数以相反方向排列,再以这个数作为序号。如011变成110,那么第3个输入值和第六个输入值就要交换位置了。一种比较常用有效的方法就是雷德算法。

(二)卷积运算

卷积是数字信号处理中经常用到的运算。其基本的表达式为:

()()()

=

-

=

n

m

m

n

x

m

h

n

y

编写实现程序时需要注意两点:(1)序列数组长度的分配,尤其是输出数组y (n) 要有足够的长度;(2)循环体中变量的位置,即n和m的关系。

(三)IDFT的FFT实现

IDFT与DFT的关系为

{}1

*

**

1

()[()]()

N

kn

N

k

x n IDFT X k X k W

N

-

=

==∑

{}**

1()[()]x n DFT X k N

=

那么直接调用FFT 子程序计算IDFT 的方法是:

X

(四)线性卷积的FFT 实现

当有限长序列x(n)与h(n)的圆周卷积长度L ≥N+M 时,其中N 、M 分别为x(n)和h(n)的长度,L 点的

圆周卷积能够代表它们的线性卷积,即x(n)○h(n)=x(n)*h(n)。再利用DFT 的圆周卷积性质

x(n)○h(n)=IDFT{X(k)H(k)}

就可以利用FFT 计算两个有限长序列的线性卷积。

y x (n h (n (n )n )*h (n )

(五)分段卷积

直接利用DFT 计算的缺点是:(1) 信号要全部输入后才能进行计算,延迟太多;(2) 内存要求大;(3) 算法效率不高。解决问题方法是采用分段卷积,分段卷积可采用重叠相加法和重叠保留法来实现。

1. 重叠相加(overlap add )

将长序列x[k] 分为若干段长度为L 的序列][][0

nL k x k x n n -=∑

=

其中

⎩⎨

⎧-≤≤+=

010

][][其它L k nL k x k x n 记 [][][]n n y k x k h k =*,那么,][][][][0

k h nL k x k h k x n n *-=

*∑

=][0

nL k y n n -=∑∞

=

y 0[k]的非零范围为20-+≤≤M L k ,y 1[k-L]的非零范围为22-+≤≤M L k L 。序列y 0[k]、y 1[k]的重叠部分为2-+≤≤M L k L ,重叠的点数L+M-2-L+1=M-1。依次将相邻两段的M-1个重叠点相加,即得到最终的线性卷积结果。

2.重叠保留法(overlap save) 方法:

(1) 将x [n ]长序列分段,每段长度为L ; (2) 各段序列xn [k ]与 M 点短序列h [k ]循环卷积; (3) 从各段循环卷积中提取线性卷积结果。

因 yn [k ]=xn [k ] L h [k ] 前M -1个点不是线性卷积的点,故分段时每段与其前一段有M-1个点重叠。

相关文档
最新文档