DSP课设报告

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

基于CCS和ICETEK5509实验箱FFT算法的C语言实现与验证

学院:

姓名:

学号:

班级:指导老师:完成报告日期:

设计目的

1.本课程设计与理论课、实验课一起构成《DSP芯片原理与应用》完整课程体

系;

2.针对理论课、实验课中无时间和不方便提及内容和需强调重点进行补充与完

善;

3.以原理算法的实现与验证体会 DSP技术的系统性,并加深基本原理的体会。

二、设计任务

1.设计一个以ICETEK550为硬件主体,FFT为核心算法的频谱分析系统方案;

2.用C语言编写系统软件的核心部分,熟悉CCS调试环境的使用方法,在CCS IDE

中仿真实现方案功能;

3.在实验箱上由硬件实现频谱分析。

三、设计内容

1. 设计方案原理

1)FFT工作原理及工作方式

工作原理:

快速傅里叶变换是离散傅里叶变换的快速算法,它是根据离散傅氏变换的奇、偶、虚、实等特性,对离散傅里叶变换的算法进行改进获得的。它对傅氏变换的理论并没有新的新的发现,但是对于在计算机系统或者说数字系统中应用离散傅里叶变换,可以说是进了一大步。设x(n)为N项的复

数序列,由DFT变换,任一 X(n)的计算都需要NT次复数乘法和N(N-1)次复数加

法,而一次复数乘法等于四次实数乘法和两次实数加法,一次复数加法等于两次实数加法。所以作一次离散傅里叶变换需要作 4NT次实数乘法及N(4N-2)次实数加法。

而在FFT中,利用 Wn的周期性和对称性,把一个 N项序列分为两个 N/2项的子序列,每个N/2点DFT变换需要(N/2) 2次运算,再用N次运算把两个N/2点的DFT 变换组合成一个N点的DFT而如果我们将这种“一分为二”的思想不断进行下去,直到分成两两一组的 DFT运算单元,那么 N点的DFT就只需要作(N/2)(log2N)次复数乘法和N (log2N)次复数加法。

这样,运算量的节约就很大,这就是 FFT的优越性。

工作方式:

第一步,将1个N点的时域信号分成N个1点的时域信号,然后计算这N 个1点时域信号的频域,得到N个频域的点,然后将这个N个频域的点按照一定的顺序加起来,就得到了我们需要的频谱。这里每个点的意思是复数,都有实部和虚部。认真看蝶形图可以看出它是按照比特反转顺序来分解的。

第二步,计算每个点的频谱,这一步很简单,因为一个时域的点的频谱的数值就是它自己,所以这一步什么也不需做,但需明白这时候 N 个点不是时域信号了,而是频域信号。

第三步,将这 N 个频域信号结合起来,这一步是最麻烦的一步。就是和前面时域分解的顺序相反,将2个1 点的频域信号变成 1 个2点的频域信号,再将 2个 2 点的频域信号变成 1 个 4 点的频域信号,一直到结束。

2)DSP工作原理

数字信号处理器(DSP)是一种可编程的高性能处理器,近年来发展很快。它不仅适用于数字信号处理,而且在图像处理、语音处理、通信等领域得到了广泛地应用。通用的微处理器在运算速度上很难适应信号实时处理的要求。数字信号处理器中集成有高速的乘法器硬件,能快速地进行大量数据的乘法海和加法运算。快速傅里叶变换的出现使得 DFT在实际应用中得到了广泛的应用。

3)A/D 模数转换原理

TMS320VC5509 模数转换模块带内置采样和保持的 10 位模数转换模块 ADC,最小转换时间为500ns,最大采样率为21.5kHz。它有2个模拟输入通道( AIN0—AIN1 )。

模数转换模块接到启动转换信号后,开始转换第一个通道的数据。经过一个采样时间的延迟后,将采样结果放入转换结果寄存器总保存。转换结束后设置标志,等待下一个启动信号。

模数转换相对于计算机来说是一个较为缓慢的过程。一般采用中断方式启动转换或保存结果,这样在 CPU 忙于其他工作时可以少占用处理时间。设计转换程序应首先考虑处理过程如何与模数转换的时间相匹配,根据实际

需要选择适当的触发转换的手段,也要能及时地保存结果2.设计方案流程图:

1)FFT程序流程框图:

2) A/D 转换流程框图

开始

初始化

CPU

睛钟" tMIF. AD 釆样时钟

启动ADO 道采集(连续

236次)ff 入绕冲区“ADC

启刚AU1通逋采集{连续

2%次)存入缓冲隨nADCI

3.主要实现方法

1)在CCS 上进行软件仿真:

A. 参考教材P371的14.3节完成CCS 环境中的FFT 工程的建立; 本工程的建立有点投机取巧,不太符合老师的要求,只是直接将书上给的 FFTd 故成了头文件FFT.h 然后将其加入之前做实验时时老师给的一个关于 泰勒级数展开的工程c55_si nO 。

B. 设计检测信号,验证FFT 算法的正确性及FFT 的部分性质;

基于谱线易于观察分析的角度,故本次软件仿真用的检测信号为正弦函数, 也就是工程中由泰勒级数展开生成的正弦曲线。 下面给出FFT.h 的程序和部分注解:

#in elude

struct compx { float real,imag;}; /* 定义一个复数结构 */

struct compx s[257];

/*FFT 输入和输出:均从s[1]开始存放*/

struct compx EE(struct compx ,struct compx ); /* 定义附复数相乘结构 */

void FFT(struct compx *, int ); /*FFT 函数定义 */

#define FFT_N 256

struct compx EE(struct compx b1,struct compx b2) {struct compx b3;

//对两个复数进行乘法运算

相关文档
最新文档