哈尔滨启东科技有限公司 DSP实验指导书
§2.4 快速傅里叶变换 (FFT) 实现
一、实验目的
二、实验设备
三、实验原理
傅里叶变换是一种将信号从时域变换到频域的变换形式,是信号处理的重要分析工具。离散傅里叶变换(DFT)是傅里叶变换在离散系统中的表示形式。但是DFT的计算量非常大, FFT就是DFT的一种快速算法, FFT将DFT的N2 步运算减少至 ( N/2 )log2N步。
离散信号x(n)的傅里叶变换可以表示为
nk?j2?/NX(k)??x[n]WN, WN?e
N?0N?11. 掌握FFT算法的基本原理;
2. 掌握用C语言编写DSP程序的方法。
1. 一台装有CCS软件的计算机; 2. TMS320F2812主控板; 3. DSP硬件仿真器。
式中的WN 称为蝶形因子,利用它的对称性和周期性可以减少运算量。一般而言,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可写成:
X(k)??x?2n?Wn?0N/2?12nkN(2n?1)k??x?2n?1?WNn?0N/2?1
考虑到WN的性质,即
2WN?[e?j(2?)/N]2?e?j2?/(N/2)?WN/2
因此有:
X(k)??x?2n?Wn?0N/2?1nkN/2?WkNN/2?1n?0nk?x?2n?1?WN/2
或者写成:
kX(k)?Y?k??WNZ?k?
由于Y(k) 与Z(k) 的周期为N/2,并且利用WN的对称性和周期性,即:
k?N/2kWN??WN
- 11 -
哈尔滨启东科技有限公司 DSP实验指导书
可得:
kX(k?N/2)?Y?k??WNZ?k?
对Y(k) 与Z(k) 继续以同样的方式分解下去,就可以使一个N点的DFT最终用一组2点的DFT来计算。在基数为2的FFT中,总共有log2(N) 级运算,每级中有N/2 个2点FFT蝶形运算。
单个蝶形运算示意图如下:
x(0)W0x(4)W0x(2)W0x(6)x(1)W0x(5)W0x(3)W0x(7)W2W3W2W2W0W1
X(0)X(1)X(2)X(3)X(4)X(5)X(6)X(7)以N=8为例,时间抽取FFT的信号流图如下:
从上图可以看出,输出序列是按自然顺序排列的,而输入序列的顺序则是“比特反转”方式排列的。
也就是说,将序号用二进制表示,然后将二进制数以相反方向排列,再以这个数作为序号。如011变成110,那么第3个输入值和第六个输入值就要交换位置了。本实验中采用了一种比较常用有效的方法完成这一步工作__雷德算法。 四、实验步骤
1. 以64点FFT的信号流图为例,理解FFT算法的过程;
2. 在CCS环境中打开本实验的工程(Example_fft.pjt),编译并重建 .out 输出文件,然后通过仿真器把执行代码下载到DSP芯片中;
3. 运行程序;
4. 选择view->graph->time/frequency… 。 设置对话框中的参数: 其中“Start Address”设为“x_re”,“Acquisition buffer size”和“Display Data size”都设为“64”,并且把“DSP Data Type”设为“32-bit floating point”(如图),
- 12 -
哈尔滨启东科技有限公司 DSP实验指导书
设置好后观察输入信号序列的波形(单边指数函数,如图);
同样方法观察经DFT变换后的输出序列“y_re”的波形,“Start Address”改为“y_re”,其余参数不变(如图);
5. 在Watch窗口中添加i, j, k, m, n, a, b ,c 等变量,在Debug菜单中先“Restart”然后 “Go main”, 单步运行程序,跟踪FFT算法的过程;(可以跳过程序开始部分对各个数组的赋值代码,方法是在雷德算法的第一行代码前设置断点,然后先单击运行,待程序停在该断点后再单步执行后面的代码,见下图。)
6. 修改N的值(应为2的整数次幂,如8,16,32等,最大不超过64),或者修改输入信号x的函
- 13 -
哈尔滨启东科技有限公司 DSP实验指导书
数,如直流、正弦、三角等,观察程序运行结果。注意观察图形时,数据块大小要相应更改为当前N值。
五、思考题
1. 分析本实验程序中完成位倒序排列的“雷德算法”的原理;
2. 思考如何实现实数序列的FFT,它在复数序列的算法基础上还能作哪些优化,从而进一步降低运算量和所需的存储空间。
- 14 -
哈尔滨启东科技有限公司 DSP实验指导书
§2.6 有限冲击响应滤波器 (FIR) 实现
一、实验目的
1. 掌握FIR滤波器的原理和窗函数设计法; 2. 掌握用C语言编写DSP程序的方法。
二、实验设备
1. 一台装有CCS软件的计算机;
三、实验原理
数字滤波是DSP的最基本的应用领域之一。对于许多应用来说,数字滤波一般具有如下的差分方程2. TMS320F2812主控板; 3. DSP硬件仿真器。
形式:
y?n???akx?n?k???bky?n?k?
k?0k?0N?1N?1式中,X(n) 为输入序列,Y(n)为输出序列,A k和B k为滤波器系数,N是滤波器的阶数。若式中所有的B
k均为零,且通常把系数
A k记为h k, 则有:
y?n???hkx?n?k?
k?0N?1上式就是FIR滤波器的差分方程了。FIR滤波器的最主要的特点是没有反馈回路,因此它是无条件稳定系统。它的单位脉冲响应h(n)是一个有限长序列。由上面的方程可见,FIR滤波算法实际上是一种乘法累加运算,它不断地输入样本x(n),经延时 (z1),做乘法累加,再输出滤波结果 y(n)。
–
要设计一个FIR滤波器就是要求出它的冲击响应系数h(n),设计方法主要有窗函数法和频率抽样法,
本实验要求掌握窗函数法,这也是最基本的方法。
理想的低通滤波器的频率响应Hd (w)是一个矩形,这意味着它在时域上是无限长的序列,这在实际上
是不可能实现的。因此我们要采取某种方法截断 Hd(n),可以用一个有限长度的窗函数序列w(n)与之相乘。这个窗函数序列的形状和长度都会对最后系统的频率响应特性产生影响,因此对窗函数的分析和选择是设计FIR滤波器的关键问题所在。
本实验举了五种常用的窗函数为例,通过设置参数可以得到加上不同窗后的冲击响应序列h(n),并且
可以观察到其幅频响应图。
关于根据给定频率要求进行FIR滤波器设计的详细原理,以及在求得符合要求的h(n)后如何对输入信号序列进行滤波,请读者参考数字信号处理的有关资料。
四、实验步骤
1. 复习有关FIR滤波器的原理;
- 15 -