预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共52页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

基于DSP的FFT实现设计报告(完整资料) (可以直接使用,可编辑优秀版资料,欢迎下载) DSP 课 程 设 计 姓名: 学号: 日期: 一、实验目的 加深对DFT算法原理和基本性质的理解; 熟悉FFT的算法原理和FFT子程序的算法流程和应用; 学习用FFT对连续信号和时域信号进行频谱分析的方法; 学习DSP中FFT的设计和编程思想; 学习使用CCS的波形观察器观察波形和频谱情况; 二、实验内容 用DSP汇编语言及C语言进行编程,实现FFT运算、对输入信号进行频谱分析。 三、实验原理 快速傅里叶变换FFT 旋转因子WN有如下的特性。 对称性:WNk+N/2=-WNk(2) 周期性:WNn(N-k)=WNk(N—n)=WN—nk(3) 利用这些特性,既可以使DFT中有些项合并,减少了乘法积项,又可以将长序列的DFT分解成几个短序列的DFT。FFT就是利用了旋转因子的对称性和周期性来减少运算量的。 FFT的算法是将长序列的DFT分解成短序列的DFT.例如:N为偶数时,先将N点的DFT分解为两个N/2点的DFT,使复数乘法减少一半:再将每个N/2点的DFT分解成N/4点的DFT,使复数乘又减少一半,继续进行分解可以大大减少计算量。最小变换的点数称为基数,对于基数为2的FFT算法,它的最小变换是2点DFT。 一般而言,FFT算法分为按时间抽取的FFT(DITFFT)和按频率抽取的FFT(DIFFFT)两大类。DIFFFT算法是在时域内将每一级输入序列依次按奇/偶分成2个短序列进行计算.而DIFFFT算法是在频域内将每一级输入序列依次奇/偶分成2个短序列进行计算。两者的区别是旋转因子出现的位置不同,得算法是一样的。在DIFFFT算法中,旋转因子WN出现在输入端,而在DIFFFT算法中它出现在输入端。 假定序列x(n)的点数N是2的幂,按照DIFFFT算法可将其分为偶序列和奇序列。 偶序列:x(2r)=x1(r) 奇序列:x(2r+1)=x2(r) 其中:r=0,1,2,…,N/2-1,则x(n)的DFT表示为 式中,X1(k)和X2(k)分别为X1(r)和X2(r)的N/2的DFT. 由于对称性,WNk+N/2=-WNk.因此,N点DFT可分为两部分: 前半部分:x(k)=x1(k)+WkNx2(k)(4) 后半部分:x(N/2+k)=x1(k)-WkNx2(k)k=0,1,…,N/2—1(5) 从式(4)和式(5)可以看出,只要求出0~N/2—1区间x1(k)和x2(k)的值,就可求出0~N—1区间x(k)的N点值。 以同样的方式进行抽取,可以求得N/4点的DFT,重复抽取过程,就可以使N点的DFT用上组2点的DFT来计算,这样就可以大减少运算量。 基2DIFFFT的蝶形运算如图3.1所示。设蝶形输入为x1(k)和x2(k),输出为x(k)和x(N/2+K),则有 x(k)=x1(k)+WkNx2(k)(6) x(N/2+k)=x1(k)-WkNx2(k)(7) 在基数为2的FFT中,设N=2M,共有M级运算,每级有N/2个2点FFT蝶形运算,因此,N点FFT总共有MN/2个蝶形运算。 图3.1基2DIFFFT的蝶形运算 例如:基数为2的FFT,当N=8时,共需要3级,12个基2DITFFT的蝶形运算。其信号流程如图3.2所示。 x(0)x(0) WN0 x(4)x(1) -1 WN0 x(2)x(2) -1 WN0WN2 x(6)x(3) -1—1 WN0 x(1)x(4) —1 WN0WN1 x(5)x(5) -1-1 WN0WN2 x(3)x(6) -1-1 WN0WN2WN3 x(7)x(7) -1—1—1 图3。28点基2DIFFFT蝶形运算 从图(b)可以看出,输入是经过比特反转的倒位序列,称为位码倒置,其排列顺序为x(0),x(4),x(2),x(6),x(1),x(5),x(3),x(7),输出是按自然顺序排列,其顺序为x(0),x(1),x(2),x(3),x(4),x(5),x(6),x(7). 程序设计顺序 DSP初始化 串口设置 AD设置 功率谱计算 观看转换结果,保存数据 串口发送转换结果 FFT运算 位码倒置 串口接收,AD采样 设置信号源类型、频率幅值、和采样点数 四、FFT算法的DSP实现过程: DSP芯片的出现使FFT的实现方法变得更为方便。由于大多数DSP芯片都具有在单指令周期内完成乘法—累加操作,并且提供了专门的FFT指令,使得FFT算法在DSP芯片实现的速度更快. FFT算法可以分为按时间抽取FFT和按频率抽取FFT两大类,输入也有实数和复数之分,一般情况下,都假定输入序列为复数。 (