1、邵阳学院课程设计(论文) 课程设计 (论文 ) 题 目 名 称 基于 DSP 的 FFT 实现 课 程 名 称 DSP 芯片原理与开发应用 学 生 姓 名 成进 学 号 0941301197 系 、 专 业 信息工程系、通信工程 指 导 教 师 李星亮 2012 年 6 月 10 日 邵阳学院课程设计(论文) 摘 要 本次课程设计主要运用 CCS 这一工具 实现 快速傅里叶变换( FFT) 。CCS(Code Composer Studio)是一种针对 TM320 系列 DSP 的集成开发环境,在Windows 操作系统下,采用图形接口界面,提供环境配置、源文件编辑、程序调试、跟踪和分析等工具
2、,可以帮助用户在一个软件环境下完成编辑、编译、链接、调试和数据分析等工作。 CCS 有两种工作模式,即软件仿真器和硬件在线编程。软件仿真器工作模式可以脱离 DSP 芯片,在 PC 上模拟 DSP 的指令集和工作机制,主要用于前 期算法实现和调试。硬件在线编程可以实时运行在 DSP 芯片上,与硬件开发板相结合进行在线编程和调试应用程序。 关键词: CCS; 快速傅里叶变换 ( FFT) ; 邵阳学院课程设计(论文) 目 录 第 1 章 概 述 . 1 1.1 设计任务 . 1 1.2 设计要求 . 1 第 2 章 快速傅里叶变换 FFT 的原理 . 2 2.1 离散傅里叶变换 DFT . 2 2
3、.2 快速傅里叶变换 FFT . 2 第 3 章 方案设计 . 6 3.1 设计程序流程图 . 6 3.2 在 CCS 环境下加载、调试源程序 . 6 第 4 章 主要参数 . 11 4.1 N 的参数设置 .11 4.2CMD 源文件代码: .11 第 5 章 实验结果及分析 .16 5.1 作图 得到输入信号的功率图谱 .16 5.2 FFT 变换结果图 .16 5.2 改变信号的频率可以再做次实验 .17 课程设计体会 .18 致谢 .19 参考文献 .20 邵阳学院课程设计(论文) 第 1 章 概 述 1.1 设计任务 1)用 DSP 汇编语言及 C 语言进行编程; 2)实现 FFT
4、运算、对输入信号进行频谱分析 。 1.2 设计要求 1) . 研究 FFT 原理以及利用 DSP 实现的方法; 2) . 编写 FFT 程序 3) . 调试程序,观察结果。 邵阳学院课程设计(论文) 第 2 章 快速傅里叶变换 FFT 的原理 快速傅里叶变换 FFT 快速傅里叶变换( FFT)是一种高效实现 离散傅里叶变换( DFT)的快速算法,是数字信号处理中最为重要的工具之一,它在声学,语音,电信和信号处理等领域有着广泛的应用。 2.1 离散傅里叶变换 DFT 对于长度为 N 的有限长序列 x(n),它的离散傅里叶变换( DFT )为 1,1,0,)()( 10 NkWnxkX nn nk
5、N ( 1) 式中 , NjN eW /2 ,称为旋转因子或蝶形因子。 从 DFT 的定义可以看出,在 x(n)为复数序列的情况下,对某个 k 值,直接按( 1)式计算 X(k) 只需要 N 次复数乘法和( N-1)次复数加法。因此,对所有N 个 k 值,共需要 N2 次复数乘法和 N(N-1)次复 数加法。对于一些相当大有 N 值(如 1024 点)来说,直接计算它的 DFT 所需要的计算量是很大的,因此 DFT 运算的应用受到了很大的限制。 2.2快速傅里叶变换 FFT 旋转因子 WN 有如下的特性。 对称性: 2/NkNkN WW 周期性 : NkNkN WW 利用这些特性,既可以使 D
6、FT 中有些项合并,减少了乘法积项,又可以将长序列的 DFT 分解成几个短序列的 DFT。 FFT 就是利用了旋转因子的对称性和周期性来减少运算量的。 FFT 的算法是将长序列的 DFT 分解成短序列的 DFT。例如: N 为偶数时,先将 N 点的 DFT 分解为两个 N/2 点的 DFT,使复数乘法 减少一半:再将每个 N/2邵阳学院课程设计(论文) 点的 DFT 分解成 N/4 点的 DFT,使复数乘又减少一半,继续进行分解可以大大减少计算量。最小变换的点数称为基数,对于基数为 2 的 FFT 算法,它的最小变换是2 点 DFT。 一般而言, FFT 算法分为按时间抽取的 FFT( DIT
7、 FFT)和按频率抽取的 FFT( DIF FFT)两大类。 DIT FFT 算法是在时域内将每一级输入序列依次按奇偶分成 2 个短序列进行计算。而 DIF FFT 算法是在频域内将每一级输入序列依次奇偶分成 2 个短序列进行计算。两者的区别是旋转因子出现的位置不同,得算法是一样的。在 DIF FFT 算法中,旋转因子 kNW 出现在输入端,而在 DIF FFT 算法中它出现在输入端。 假定序列 x(n)的点数 N 是 2 的幂,按照 DIF FFT 算法可将其分为偶序列和奇序列。 偶序列: 12/,1,0),2(2 ) ,-(N( 4 ) ,( 2 ) ,( 0 ) , 1 Nrrxxxxx
8、x 即 奇序列 : 12/,1,0),12(1 ) ,-(N( 5 ) ,( 3 ) ,( 1 ) , 2 Nrrxxxxxx 即则 x(n)的 DFT 表示为 )2()()()12()2()()()(12/02212/02112/0)12(12/021010NrrkNkNNrrkNNrkrNNrrkNNnnkNNnnkNWrxWWrxWrxWrxnnWnxWnxkX为奇数为偶数由于 2/)2/(22)/2(2 NNjNjN WeeW , 则 ( 3) 式可表示为 邵阳学院课程设计(论文) )3(12/,1,0)()()()()(2112/02/212/02/1 NkkXWkXWrxWWrxk
9、XkNNrrkNkNNrrkN 式中, )(1kX 和 )(2kX 分别为 )(1nx 和 )(2nx 的 N/2 的 DFT。 由于对称性, ,2/ KNNkN WW 则 )()()2/( 21 kXWkXNkX kN 。 因此 , N 点 )(kX可分为两部分: 前半部分: 12/,1,0)()()( 21 NkkXWkXkX kN ( 4) 后半部分 : 12/,1,0)()()2/( 21 NkkXWkXNkX kN ( 5) 从 式( 4)和式( 5)可以看出,只要求出 0N/2-1 区间 )(1kX 和 )(2kX 的值,就可求出 0N-1 区间 )(kX 的 N 点值。 以同样的
10、方式进行抽取,可以求得 N/4 点的 DFT,重复抽取过程,就可以使 N点的 DFT 用上组 2 点的 DFT 来计算,这样就可以大减少运算量。 基 2 DIF FFT 的蝶形运算如图 (a)所示。设蝶形输入为 )(1 pxm 和 )(1 qxm ,输出为 )(pxm 和 )(qxm ,则有 kNmmm Wqxpxpx )()()( 11 ( 6) kNmmm Wqxpxqx )()()( 11 ( 7) 在基数为 2 的 FFT 中,设 N=2M,共 有 M 级运算,每级有 N/2 个 2 点 FFT蝶形运算,因此, N 点 FFT 总共有 NN 2log)2/( 个蝶形运算。 )(1 qx
11、m )(pxm )(1 qxm )(qxm -1 图 2.1 基 2 DIF FFT 的蝶形运算 邵阳学院课程设计(论文) 例如:基数为 2 的 FFT,当 N=8 时,共需要 3 级, 12 个基 2 DIT FFT 的蝶形运算。其信号流程如图 (b)所 示。 图 2.2 8 点基 2 DIF FFT 蝶形运算 从图 (b)可以看出,输入是经过比特反转的倒位序列,称为位码倒置,其排列顺序为 )7(),3(),5(),1(),6(),2(),4(),0( xxxxxxxx 。输出是按自然顺序排列,其顺序为)7(),6(,),1(),0( xxxx 。 邵阳学院课程设计(论文) 第 3 章 方案
12、设计 3.1 设计程序流程图 图 3.1 设计程序流程图 3.2 在 CCS 环境下加载、调试源程序 ( 1)起动 CCS,在 CCS 中建立一个工程文件 projectnewFFT,往工程文件里添加程序 filenewsourcefile.建立 C 源文件和一个 命令文件,并将这两个文件添加到工程,再编译并装载程序: 阅读 Dsp 原理及应用中 fft 用 dsp 实现的有关程序。 邵阳学院课程设计(论文) 双击 ,启动 CCS 的仿真平台的配着选项。选择 C5510 Simulator。 Add 加到 my system ,按下 save 图 3.2 选择 my system ( 2) 启动 ccs2 后建立工程文件 FFT.pjt 图 3.3 建立工程文件 FFT.pjt