DSP的FFT实现设计报告

合集下载

快速傅里叶变换(FFT)的DSP实现

快速傅里叶变换(FFT)的DSP实现

目录一、前言二、设计题目三、设计要求3.1 设计目的3.2 设计要求四、设计内容五、设计原理5.2 离散傅里叶变换DFT5.3 快速傅里叶变换FFT六、总体方案设计6.1 设计有关程序流程图6.2 在CCS环境下加载、调试源程序七、主要参数八、实验结果分析九、设计总结一、前言随着数字电子技术的发展,数字信号处理的理论和技术广泛的应用于通讯、语音处理、计算机和多媒体等领域。

快速傅里叶变换(FFT)使离散傅里叶变换的时间缩短了几个数量级。

在数字信号处理领域被广泛的应用。

FFT已经成为现代化信号处理的重要手段之一。

本次课程设计主要运用CCS这一工具。

CCS(Code Composer Studio)是一种针对TM320系列DSP的集成开发环境,在Windows操作系统下,采用图形接口界面,提供环境配置、源文件编辑、程序调试、跟踪和分析等工具,可以帮助用户在一个软件环境下完成编辑、编译、链接、调试和数据分析等工作。

CCS有两种工作模式,即软件仿真器和硬件在线编程。

软件仿真器工作模式可以脱离DSP芯片,在PC上模拟DSP的指令集和工作机制,主要用于前期算法实现和调试。

硬件在线编程可以实时运行在DSP芯片上,与硬件开发板相结合进行在线编程和调试应用程序。

二、设计题目快速傅里叶变换(FFT)的DSP实现三、设计要求3.1设计目的⑴加深对DFT算法原理和基本性质的理解;⑵熟悉FFT的算法原理和FFT子程序的算法流程和应用;⑶学习用FFT对连续信号和时域信号进行频谱分析的方法;⑷学习DSP中FFT的设计和编程思想;⑸学习使用CCS 的波形观察器观察波形和频谱情况;3.2 基本要求⑴研究FFT 原理以及利用DSP 实现的方法;⑵编写FFT 程序;⑶调试程序,观察结果。

四、 设计内容⑴用DSP 汇编语言及C 语言进行编程;⑵实现FFT 运算、对输入信号进行频谱分析。

五、 设计原理快速傅里叶变换FFT快速傅里叶变换(FFT )是一种高效实现离散傅里叶变换(DFT )的快速算法,是数字信号处理中最为重要的工具之一,它在声学,语音,电信和信号处理等领域有着广泛的应用。

(完整word版)基于DSP的快速傅立叶变换(FFT)的实现(汇编语言)

(完整word版)基于DSP的快速傅立叶变换(FFT)的实现(汇编语言)

快速傅立叶变换(FFT )的实现一、实验目的1.了解FFT 的原理及算法;2.了解DSP 中FFT 的设计及编程方法;3.熟悉FFT 的调试方法;二、实验原理FFT 是一种高效实现离散付立叶变换的算法,把信号从时域变换到频域,在频域分析处理信息。

对于长度为N 的有限长序列x (n ),它的离散傅里叶变换为:(2/)j N nk N W e π-=,称为旋转因子,或蝶形因子。

在x (n )为复数序列的情况下,计算X (k ):对某个k 值,需要N 次复数乘法、(N -1)次复数加法;对所有N 个k 值,需要2N 次复数乘法和N (N -1)次复数加法。

对于N 相当大时(如1024)来说,直接计算它的DFT 所作的计算量是很大的,FFT 的基本思想在于: 利用2()j nk N N W e π-=的周期性即:k N k N N W W +=对称性:/2k k N N N W W +=-将原有的N 点序列分成两个较短的序列,这些序列的DFT 可以很简单的组合起来得到原序列的DFT 。

按时间抽取的FFT ——DIT FFT 信号流图如图5.1所示:图5.1 时间抽取的FFT —DIT FFT 信号流图FFT 算法主要分为以下四步。

第一步 输入数据的组合和位倒序∑=-=10)()(N n nk N W n x k X把输入序列作位倒序是为了在整个运算最后的输出中得到的序列是自然顺序。

第二步 实现N 点复数FFT第一级蝶形运算;第二级蝶形运算;第三级至log2N 级蝶形运算;FFT 运算中的旋转因子N W 是一个复数,可表示:为了实现旋转因子N W 的运算,在存储空间分别建立正弦表和余弦表,每个表对应从0度到180度,采用循环寻址来对正弦表和余弦表进行寻址。

第三步 功率谱的计算X (k )是由实部()R X k 和虚部()I X k 组成的复数:()()()R I X k X k jX k =+;计算功率谱时只需将FFT 变换好的数据,按照实部()R X k 和虚部()I X k 求它们的平方和,然后对平方和进行开平方运算。

DSP课程设计(课题二fft的频谱分析仪)报告

DSP课程设计(课题二fft的频谱分析仪)报告

DSP课程设计报告课题:基于FFT的频谱分析仪设计班级:电子信息工程0901班小组成员:陈湛国200930410103谢海200930410124 指导老师:徐梅宣华南农业大学珠江学院信息工程系一、设计原理(1)实现输入数据的比特反转输入数据的比特反转实际上就是将输入数据进行位码倒置,以便在整个运算后的输出序列是一个自然序列。

在用汇编指令进行位码倒置时,使用位马导致寻址可以大大提高程序执行速度和使用存储器的效率。

在这种寻址方式下,AR0存放的整数N是FFT点的一半,一个辅助寄存器指向一个数据存放的单元。

当使用位码倒置寻址将AR0加到辅助寄存器时,地址将以位码倒置的方式产生。

(2)实现N点复数FFTN点复数FFT算法的实现可分为三个功能块,及第一级蝶形运算、第二级蝶形运算、第三级至log2N级蝶形运算。

在运算过程中,为了避免运算结果的溢出,可对每个蝶形的运算结果右移一位。

(3)功率谱的计算计算功率谱时只需将FFT变换好的数据,按照实部X R(k)和虚部X I(k)求它们的平方和,然后对平方和进行开平方运算。

(4)输出FFT结果二、操作步骤1、运行软件打开Setup CCStudio v3.3,在Family中选择C54XX,Platform中选择simulator,此时在My System中出现C54xx Rev.x CPU Cycle Accurate Simulator,点击,然后再点击“Save&Quit”,此时有窗口“Code Composer Studio Setup”出现,点击“Yes”,然后进入CCStudio:Parallel Debug Manager,在“Open”选项中选择“C54xx Rev.x CPU Cycle Accurate Simulator”,则进入设计的操作界面。

2、载入程序代码,编译并执行首先,点击“Project”,建立新文件;然后点击“File”,建立源文件,后缀名分别为“.C”、“.cmd”;其次,把编好的FFT程序放入“.C”文件中,命令文件也编入“.cmd”中;再次,加载文件“.C”及“.cmd”文件;接着点击“Project”中的“Rebuild Aall”,无错误出现,则继续操作;点击“File”中的“Load Program”,把后缀为“.out”的文件加载进来;然后点击“Run”,最后,点击“View”,“Graph”,进入“time/Frequency”,修改设置后,点击“ok”,则出现图像。

基于DSP的FFT实现

基于DSP的FFT实现

基于DSP的FFT实现傅里叶变换(Fourier Transform)是一种将信号在时间和频率域之间进行转换的数学工具。

它可以将信号从时域转换为频域,使我们能够分析信号的频率成分。

离散傅里叶变换(Discrete Fourier Transform,DFT)是一种计算机算法,用于对离散信号进行傅里叶变换。

离散信号是由一系列采样点组成的,并且在实际应用中,离散信号更常见于数字信号处理(Digital Signal Processing,DSP)系统。

FFT(Fast Fourier Transform)是一种高效的算法,用于计算DFT。

它通过利用信号的对称性和周期性,以O(nlogn)的时间复杂度计算DFT,相比于直接计算的O(n^2)时间复杂度更为高效。

因此,FFT在数字信号处理中被广泛使用,并且是很多DSP系统中实现频谱分析的核心算法。

基于DSP的FFT实现通常采用固定点数格式进行计算,以适应数字信号的要求。

固定点数格式将浮点数表示为带有整数和小数部分的定点数,其中小数部分的位数是固定的。

这允许在硬件实现中使用更简单和更高效的运算器,并且减少了计算过程中的存储需求。

在前向变换中,基于DSP的FFT实现通常采用蝶形运算器结构,该结构通过并行计算减少了计算量。

蝶形运算器将复数乘法和加法运算相结合,以高效地计算傅里叶变换的结果。

在反向变换中,基于DSP的FFT实现使用相同的蝶形运算器结构,但需要调整一些参数来恢复时域信号。

这些参数通常是指数项,用于将频域信号的幅度和相位信息与原始时域信号进行组合。

由于DSP系统通常具有固定的计算能力和存储容量,基于DSP的FFT 实现需要考虑对资源的高效利用。

这可能包括通过流水线技术实现并行计算,使用分块技术减少存储需求,并使用低功耗算法来减少计算负载。

总结起来,基于DSP的FFT实现是一种高效的数字信号处理技术,用于将时域信号转换为频域信号。

它通过利用固定点数格式和蝶形运算器结构,以高效和准确的方式计算傅里叶变换。

快速傅立叶变换(FFT)的实现(DSP实验报告)

快速傅立叶变换(FFT)的实现(DSP实验报告)

快速傅立叶变换(FFT )的实现一、实验目的在数字信号处理系统中,FFT 作为一个非常重要的工具经常使用,甚至成为DSP 运算能力的一个考核因素。

FFT 是一种高效实现离散付氏变换的算法。

离散付氏变换的目的是把信号由时域变换到频域,从而可以在频域分析处理信息,得到的结果再由付氏逆变换到时域。

本实验的目的在于学习FFT 算法,及其在TMS320C54X 上的实现,并通过编程掌握C54X 的存储器管理、辅助寄存器的使用、位倒序寻址方式等技巧,同时练习使用CCS 的探针和图形工具。

另外在BIOS 子目录下是一个使用DSP/BIOS 工具实现FFT 的程序。

通过该程序,你可以使用DSP/BIOS 提供的分析工具评估FFT 代码执行情况。

二、实验原理1)基 2 按时间抽取FFT 算法对于有限长离散数字信号{x[n]} ,0 ≤n ≤-1 N,其离散谱{x[k]} 可以由离散付氏变换(DFT)求得。

DFT 的定义为:X(k) x[n]e N k 0,1,...,N 1 n0可以方便的把它改写为如下形式:N1nkX(k) x[n]W n N k k 0,1,..., N 1n0不难看出,WN 是周期性的,且周期为N,即( n mN )(k lN ) nkm,l 0, 1, 2...W N W NWN 的周期性是DFT 的关键性质之一。

为了强调起见,常用表达式WN 取代W 以便明确其周期是N。

2) 实数FFT 运算对于离散傅立叶变换( DFT)的数字计算,FFT 是一种有效的方法。

一般假定输入序列是复数。

当实际输入是实数时,利用对称性质可以使计算DFT 非常有效。

一个优化的实数FFT 算法是一个组合以后的算法。

原始的2N 个点的实输入序列组合成一个N 点的复序列,之后对复序列进行N 点的FFT 运算,最后再由N 点的复数输出拆散成2N 点的复数序列,这2N点的复数序列与原始的2N点的实数输入序列的DFT 输出一致。

基于DSP的FFT实现设计报告

基于DSP的FFT实现设计报告

DSP课程设计姓名:学号:日期:一、实验目的1.加深对DFT算法原理和基本性质的理解;2.熟悉FFT的算法原理和FFT子程序的算法流程和应用;3.学习用FFT对连续信号和时域信号进行频谱分析的方法;4.学习DSP中FFT的设计和编程思想;5.学习使用CCS的波形观察器观察波形和频谱情况;二、实验内容用DSP汇编语言及C语言进行编程,实现FFT运算、对输入信号进行频谱分析。

三、实验原理快速傅里叶变换FFT旋转因子W N有如下的特性。

对称性:W N k+N/2=-W N k(2)周期性:W N n(N-k)=W N k(N-n)=W N-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(DIT FFT)和按频率抽取的FFT(DIF FFT)两大类。

DIF FFT算法是在时域内将每一级输入序列依次按奇/偶分成2个短序列进行计算。

而DIF FFT算法是在频域内将每一级输入序列依次奇/偶分成2个短序列进行计算。

两者的区别是旋转因子出现的位置不同,得算法是一样的。

在DIF FFT 算法中,旋转因子W N 出现在输入端,而在DIF FFT 算法中它出现在输入端。

假定序列x(n)的点数N 是2的幂,按照DIF FFT 算法可将其分为偶序列和奇序列。

偶序列:x(2r)=x 1(r) 奇序列:x(2r+1)=x 2(r)其中:r=0,1,2,…,N/2-1,则x(n)的DFT 表示为式中,X 1 (k)和X 2(k)分别为X 1(r)和X 2(r)的N/2的DFT 。

dsp的fft的设计与实现

dsp的fft的设计与实现

实验五 FFT程序设计一实验目的1 了解FFT的TMS320C54x实现的编程方法.2 掌握8-1024复数点FFT的TMS320C54x程序的使用方法.3 用FFT的TMS320C54x程序分析方波和正弦波的功率谱.二实验条件1 8-1024复数点TMS320C54x源程序fft.asm.2 8-1024复数点TMS320C54x链接命令文件fft.cmd.3正弦、余弦系数表coeff.inc.4产生正弦波信号数据文件的高级语言程序,程序名为sin_fft.exe ,5向量文件vectors.asm.三实验内容1 大致阅读fft.asm、ft.cmd、coeff.inc等文件.2 对防波输入信号进行64数点FFT.(1) T修改8—1024复数点FFT源程序fft.asm,使之执行64点FFT:●将K_FFT_SIZE 设定为64●将K_LOGN 设定为6(2)对fft.asm和vectors.asm进行过汇编.(3)链接fft.obj和vectors.obj.(4)用sin_fft.exe建立64复数点对称方波输入数据文件in.dat.3对方波输入信号进行64点FFT.f或N,重复第4步实验.(如果改变N,则需要修改fft.asm) 4改变正弦波频率f或采样频率s四实验步骤1.双击,启动CCS的仿真平台的配着选项。

选择C5410 DeviceSimulator。

2.点击project菜单栏的new选项,新建一个fft64的工程注意存储的路径。

2.把下图中用到的文件拷到工程文件目录的文件路径下。

3.在ccs平台中将用到的程序导入到平台中,点击project—>add file to project。

选择多个文件时,可以按住ctrl键。

4.将所有的程序段中的start改为_main,将fft.Asm中的K_FFT_SIZE .set 32 ;NK_LOGN .set 5 ;LOG(N)改为K_FFT_SIZE .set 64 ;NK_LOGN .set 6 ;LOG(N)5,对源文件进行编译(注意先对每个.asm文件先进行编译,以防止程序有错误),没有错误时进行链接。

DSP实验报告(二)

DSP实验报告(二)

DSP实验报告(二)实验二应用FFT对信号进行频谱分析一、实验目的1、在理论学习的基础上,通过本次实验,加深对快速傅里叶变换的理解,熟悉FFT算法及其程序的编写。

2、熟悉应用FFT对典型信号进行频谱分析的方法。

3、了解应用FFT进行信号频谱分析过程中可能出现的问题,以便在实际中正确应用FFT。

二、实验原理与方法①一个连续信号的频谱可以用它的傅立叶变换表示为+ Xa(jW)=-jWtx(t)edtòa-如果对该信号进行理想采样,可以得到采样序列x(n)=xa(nT)同样可以对该序列进行z变换,其中T为采样周期X(z)=+ x(n)z-n+ -令z为ejw,则序列的傅立叶变换X(ejw)=x(n)ejwn-其中ω为数字频率,它和模拟域频率的关系为w=WT=W/fs式中的是采样频率。

上式说明数字频率是模拟频率对采样率的归一化。

同模拟域的情况相似。

数字频率代表了序列值变化的速率,而序列的傅立叶变换称为序列的频谱。

序列的傅立叶变换和对应的采样信号频谱具有下式的对应关系。

1X(e)=Tjw+ - w-2pXa(j)T即序列的频谱是采样信号频谱的周期延拓。

从式可以看出,只要分析采样序列的谱,就可以得到相应的连续信号的频谱。

注意:这里的信号必须是带限信号,采样也必须满足Nyquist定理。

在各种信号序列中,有限长序列在数字信号处理中占有很重要的地位。

无限长的序列也往往可以用有限长序列来逼近。

有限长的序列可以使用离散傅立叶变换。

当序列的长度是N时,定义离散傅立叶变换为:X(k)=DFT[x(n)]=其中W=e2pj-NN-1n=0WNkn它的反变换定义为:1x(n)=IDFT[X(k)]=N根据式和,则有N-1n=0X(k)WNknX(z)|z=Wnk=NN-1n=0x(n)WNnk=DFT[x(n)]j2pN可以得到X(k)2pk的点,就NN是将单位圆进行N等分以后第k个点。

所以,X(k)是z变换在单位圆上的等距采样,或者说是序列傅立叶变换的等距采样。

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

湖南科技大学信息与电气工程学院《课程设计报告》题目:基于DSP芯片的函数信号的FFT专业:通信工程班级: 01班姓名:学号:指导教师:2015年 12 月 24 日信息与电气工程学院课程设计任务书20 —20 学年第学期专业:通信工程学号:姓名:课程设计名称: DSP原理及应用设计题目:基于DSP芯片的函数信号的FFT完成期限:自 2015 年 12 月 21 日至 2015 年 12 月 24 日共 1 周设计依据、要求及主要内容(可另加附页):《DSP原理及应用课程设计》是配合DSP原理及应用理论教学,为通信工程和电子信息工程专业开设的专业技术技能设计,课程设计对通信工程和电子信息工程专业的学生是一个非常重要的实践教学环节。

通过课程设计,使学生综合运用DSP技术课程和其他有关先修课程的理论和生产实际知识去分析和解决具体问题的能力得到提高,并使其所学知识得到进一步巩固、深化和发展。

通过课程设计初步培养学生对工程设计的独立工作能力,学习设计的一般方法。

通过课程设计树立正确的设计思想,提高学生分析问题、解决问题的能力。

通过课程设计训练学生的设计基本技能,如计算、绘图、查阅设计资料和手册,熟悉标准与规范等。

要求:(1)按时参加课程设计指导,定期汇报课程设计进展情况。

(2)广泛收集相关技术资料。

(3)独立思考,刻苦钻研,严禁抄袭。

(4)按时完成课程设计任务,认真、正确地书写课程设计报告。

(5)培养实事求是、严谨的工作态度和认真的工作作风。

主要内容:(1)熟悉DSP处理器及其结构性能,掌握DSP芯片配套开发工具的使用方法。

(2)按要求设计出硬件电路。

(3)画出硬件连接原理图,并对硬件工作原理进行说明。

(4)给出软件流程图及编写程序,每一条指令的后面附上相应的注释。

(5)进行软、硬件调试,检查是否达到相关的功能。

(6)写出调试方法。

(7)设计报告结尾附上心得体会。

指导教师(签字):批准日期:年月日目录摘要 (4)一、实验目的 (4)二、实验设备 (4)三、实验内容 (4)四、实验原理 (4)五、FFT算法的DSP实现过程 (5)六、设计步骤 (7)七、编译程序 (9)八、实验过程 (10)九、实验结果 (13)十、问题与思考 (13)十一、心得体会 (14)十二、参考文献 (14)摘要随着计算机和微电子技术的飞速发展,基于数字信号处理的频谱分析已经应用到各个领域并且发挥着重要作用。

信号处理方法是当前机械设备故障诊断中重要的技术基础之一,分析结果的精确程度是诊断成功与否的关键因素。

研究频谱分析是当前主要的发展方向之一。

数字信号处理基本上从两个方面来解决信号的处理问题:一个是时域方法,即数字滤波;另一个是频域方法,即频谱分析.本文主要介绍了离散傅里叶变换以及快速傅里叶变换,通过对DFT以及FFT算法进行研究,从基础深入研究和学习,掌握FFT算法的关键。

通过对DSP芯片工作原理以及开发环境的学习,掌握CCS的简单调试和软件仿真,在DSP芯片上实现对信号的实时频谱分析。

关键字:DSP FFT算法频谱分析一、实验目的1.加深对DFT算法原理和基本性质的理解;2.熟悉FFT的算法原理和FFT子程序的算法流程和应用;3.学习DSP中FFT的设计和编程思想;4.学习使用CCS的波形观察器观察波形和频谱情况;5.熟悉FFT在实际中应用的效果;6.熟悉正弦、三角、方波信号的FFT变换;二、实验设备1. 一台装有CCS软件的计算机;2. DSP实验箱;3. DSP硬件仿真器;4. 网络交叉线。

三、实验内容用DSP汇编语言及C语言进行编程,实现FFT运算、对输入信号进行频谱分析。

四、实验原理信号发生器模块可以产生20 Hz ~ 20 kHz 的函数信号。

信号波形有正弦波、三角波、方波;信号输出幅度 Vpp 在 0 ~ 3.3V 范围内可调;输出阻抗约600Ω左右。

信号发生器模块的主要函数信号发生电路及缓冲放大电路如下图所示。

首先简单介绍函数信号发生电路的构成,该电路的核心器件是ICL8038,它是单片多波形振荡集成电路,可以用很少的外围元件产生高精度正弦波、三角波和方波。

其电路功能框图如下:其工作波形如下图,五、FFT算法的DSP实现过程:DSP芯片的出现使FFT的实现方法变得更为方便。

由于大多数DSP芯片都具有在单指令周期内完成乘法—累加操作,并且提供了专门的FFT指令,使得FFT算法在DSP芯片实现的速度更快。

FFT算法可以分为按时间抽取FFT和按频率抽取FFT两大类,输入也有实数和复数之分,一般情况下,都假定输入序列为复数。

(一)FFT运算序列的存储分配FFT运算时间是衡量DSP芯片性能的一个重要指标,因此提高FFT的运算速度是非常重要的。

在用DSP 芯片实现FFT算法时,应允许利用DSP芯片所提供的各种软、硬件资源。

如何利用DSP芯片的有限资源,合理地安排好所使用的存储空间是十分重要的。

(二)FFT运算的实现用汇编程序实现FFT算法主要分为四步:1.实现输入数据的比特反转输入数据的比特反转实际上就是将输入数据进行码位倒置,以便在整个运算后的输出序列是一个自然序列。

在用汇编指令进行码位倒置时,使用码位倒置可以大大提高程序执行速度和使用存储器的效率。

在这种寻址方式下,AR0存放的整数N是FFT点的一半,一个辅助寄存器指向一个数据存放的单元。

当使用位码倒置寻址将AR0加到辅助寄存器时,地址将以位码倒置的方式产生。

2.实现N点复数FFTN点复数FFT算法的实现可分为三个功能块,即第一级蝶形运算、第二级蝶形运算、第三级至级蝶形运算。

对于任何一个2的整数幂,总可以通过M次分解最后成为2点的DFT计算。

通过这样的M次分解,可构成M(即)级迭代计算,每级由N/2个蝶形运算组成。

3.功率谱的计算用FFT计算想x(n)的频谱,即计算X(k)=X(k)一般是由实部(k)和虚部(k)组成的复数,即X(k)=(k)+j(k)因此,计算功率谱时只需将FFT变换好的数据,按照实部实部(k)和虚部(k)求它们的平方和,然后对平方和进行开平方运算。

但是考虑到编程的难度,对于求FFT变换后数据的最大值,不开平方也可以找到最大值,并对功率谱的结果没有影响,所以在实际的DSP编程中省去了开方运算。

4.输出FFT结果(三)汇编语言程序程序主体由rfft-task、bit-rev、fft和power四个子程序组成。

rfft-task:主调用子程序,用来调用其他子程序,实现统一的接口。

bit-rev:位码倒置子程序,用来实现输入数据的比特反转。

fft:FFT算法子程序,用来完成N点FFT运算。

在运算过程中,为避免运算结果的溢出,对每个蝶形的运算结果右移一位。

fft子程序分为三个功能块:第一级蝶形运算、第二级蝶形运算、第三级至至级蝶形运算。

(四)正弦系数表和余弦系数表:正弦系数表和余弦系数表可以由数据文件coeff.inc给出,主程序通过.copy汇编命令将正弦和余弦系数表与程序代码汇编在一起。

在本例中,数据文件coeff.inc给出1024复数点FFT的正弦、余弦系数各512个。

利用此系数表可完成8~1024点FFT的运算。

(五)FFT算法的模拟信号输入:程序中,通过.copy汇编命令将生成的数据文件复制到数据存储器中,作为FFT算法的输入数据参与FFT 运算。

这种方法的优点是程序的可读性强,缺点是当输入数据修改后,必须重新编译、汇编和链接。

六、设计步骤:1.启动CCS,在CCS中建立一个C源文件和一个命令文件,并将这两个文件添加到工程,再编译并装载程序:阅读Dsp原理及应用中fft 用dsp实现的有关程序。

2.双击,启动CCS的仿真平台的配着选项。

选择C5502 Simulator。

3.启动ccs2后建立工程文件FFT.pjt4.建立源文件FFT.c与链接文件FFT.cmd5.将这两个文件加到FFT.pjt这个工程中。

7.创建out文件8.加载out文件七、编译程序int INPUT[SAMPLENUMBER],DATA[SAMPLENUMBER];float fWaveR[SAMPLENUMBER],fWaveI[SAMPLENUMBER],w[SAMPLENUMBER]; float sin_tab[SAMPLENUMBER],cos_tab[SAMPLENUMBER];void InitForFFT(){int i;f or ( i=0;i<SAMPLENUMBER;i++ ){sin_tab[i]=sin(PI*2*i/SAMPLENUMBER);cos_tab[i]=cos(PI*2*i/SAMPLENUMBER);}}void MakeWave(){int i;f or ( i=0;i<SAMPLENUMBER;i++ ){INPUT[i]=sin(PI*2*i/SAMPLENUMBER*3)*1024;}}main(){int i;I nitForFFT();M akeWave();f or ( i=0;i<SAMPLENUMBER;i++ ){fWaveR[i]=INPUT[i];fWaveI[i]=0.0f;w[i]=0.0f;}F FT(fWaveR,fWaveI);f or ( i=0;i<SAMPLENUMBER;i++ ){DATA[i]=w[i];}w hile ( 1 ); // break point}void FFT(float dataR[SAMPLENUMBER],float dataI[SAMPLENUMBER]){i nt x0,x1,x2,x3,x4,x5,x6,xx;i nt i,j,k,b,p,L;f loat TR,TI,temp;/********** following code invert sequence ************/f or ( i=0;i<SAMPLENUMBER;i++ ){x0=i&0x01; x1=(i/2)&0x01; x2=(i/4)&0x01; x3=(i/8)&0x01;x4=(i/16)&0x01; x5=(i/32)&0x01; x6=(i/64)&0x01;xx=x0*64+x1*32+x2*16+x3*8+x4*4+x5*2+x6;dataI[xx]=dataR[i];}f or ( i=0;i<SAMPLENUMBER;i++ ){dataR[i]=dataI[i]; dataI[i]=0;}f or ( L=1;L<=7;L++ ){ /* for(1) */b=1; i=L-1;while ( i>0 ){b=b*2; i--;} /* b= 2^(L-1) */for ( j=0;j<=b-1;j++ ) /* for (2) */{p=1; i=7-L;while ( i>0 ) /* p=pow(2,7-L)*j; */{p=p*2; i--;}p=p*j;for ( k=j;k<128;k=k+2*b ) /* for (3) */{TR=dataR[k]; TI=dataI[k]; temp=dataR[k+b];dataR[k]=dataR[k]+dataR[k+b]*cos_tab[p]+dataI[k+b]*sin_tab[p];dataI[k]=dataI[k]-dataR[k+b]*sin_tab[p]+dataI[k+b]*cos_tab[p];dataR[k+b]=TR-dataR[k+b]*cos_tab[p]-dataI[k+b]*sin_tab[p];dataI[k+b]=TI+temp*sin_tab[p]-dataI[k+b]*cos_tab[p];} /* END for (3) */} /* END for (2) */} /* END for (1) */f or ( i=0;i<SAMPLENUMBER/2;i++ ){w[i]=sqrt(dataR[i]*dataR[i]+dataI[i]*dataI[i]);}} /* END FFT */八、实验过程1.连接好DSP开发系统,信号源模块的输出和AD50模块的输入,调节信号源使输入信号幅度小于2Vpp;2.测量AD50的5V电源,若电压太低,(少于5V比较多)更换LC01电感的值,或直接用导线取代LC01电感,或用0欧姆电阻也可以。

相关文档
最新文档