ImageVerifierCode 换一换
格式:DOCX , 页数:16 ,大小:650.05KB ,
资源ID:626269      下载积分:12 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/626269.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(调用DSP库函数实现FFT的运算.docx)为本站会员(b****1)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

调用DSP库函数实现FFT的运算.docx

1、调用DSP库函数实现FFT的运算通信与信息工程学院2013 /2014 学年 第 二 学期软件设计 实验报告 模 块 名 称 调用DSP库函数实现FFT的运算 专 业 通信工程 学 生 班 级 B110107 学 生 学 号 学 生 姓 名 指 导 教 师 王 奇 设计题目调用DSP库函数实现FFT运算任务要求利用CCS库函数CFFT对sin(40*PI*t)进行64点的FFT运算,要求回显结果图形并对其进行分析。实验设备及软件硬件:计算机软件: WINDOWS操作系统、CCS软件和MATLAB(含SIMULINK工具包)软件。同组人员学号及姓名 顾源源B110108参考文献1 ICETEKV

2、C5509-A-USB-EDU教学实验系统软件实验指导(电子版)2 Code Composer StudioProject Management and Editing Tools(电子版)3 TMS320C55xAssembly Language Tools Users Guide(电子版)4 TMS320C55x Optimizing C/C+ CompilerUsers Guide(电子版) 5 彭启琮等TMS320VC55x系列DSP的CPU与外设北京:清华大学出版社,20056 尹勇、欧光军DSP集成开发环境CCS开发指南北京:北京航空航天大学出版社,2004 7 TMS320C55

3、x DSP Programmers Guide(电子版)8 TMS320C55x DSP Algebraic Instruction Set Reference Guide(电子版)报告内容一、实验目的(1)了解FFT 的原理;(2)了解在DSP 中FFT 的设计及编程方法;(3)了解在DSP 中CFFT 的设计及编程方法;(4)熟悉对FFT 的调试方法;(5)了解用窗函数法设计FFT 快速傅里叶的原理和方法;(6)熟悉FFT 快速傅里叶特性;(7)了解各种窗函数对快速傅里叶特性的影响。2、实验原理 如果利用上式直接计算DFT,对于每一个固定的m,需要计算N次复数乘法,N-1次加法,对于N个不

4、同的m,共需计算N的2次方复数乘法,N*(N-1)次复数加法.显然,随着N的增加,运算量将急剧增加, 快速傅里叶算法有效提高计算速度,利用FFT算法只需(N/2)logN次运算。FFT 并不是一种新的变换,它是离散傅立叶变换(DFT)的一种快速算法。由于我们在计算DFT 时一次复数乘法需用四次实数乘法和二次实数加法;一次复数加法则需二次实数加法。每运算一个X(k)需要4N 次复数乘法及2N+2(N-1)=2(2N-1)次实数加法。所以整个DFT运算总共需要4N2 次实数乘法和N*2(2N-1)=2N(2N-1)次实数加法。如此一来,计算时乘法次数和加法次数都是和N2 成正比的,当N 很大时,运

5、算量是可观的,因而需要改进对DFT 的算法减少运算速度。根据傅立叶变换的对称性和周期性,我们可以将DFT 运算中有些项合并。我们先设序列长度为N=2L,L 为整数。将N=2L 的序列x(n)(n=0,1,,N-1),按N 的奇偶分成两组,也就是说我们将一个N 点的DFT 分解成两个N/2 点的DFT,一般来说,输入被假定为连续的。当输入为纯粹的实数的时候,我们就可以利用左右对称的特性更好的计算DFT。我们称这样的RFFT 优化算法是包装算法:首先2N 点实数的连续输入称为“进包”。其次N点的FFT 被连续运行。最后作为结果产生的N 点的合成输出是“打开”成为最初的与DFT 相符合的2N 点输入

6、。使用这战略,我们可以划分FFT 的大小,它有一半花费在包装输入O(N)的操作和打开输出上。这样的RFFT 算法和一般的FFT 算法同样迅速,计算速度几乎都达到了两次DFT 的连续输入。 TMS320c5402 有专门的FFT 指令,使得FFT 算法在DSP 芯片上实现的速度更快,更简单。查库函数,使用rfft 或cfft 可快速实现FFT 运算。rfft 函数原型为void rfft (DATA x, nx, short scale)其中DATA x 为数据存放数组,nx 为数组长度,运算完毕后DATA x 中原先数据被冲掉,存进运算完FFT 的数据。cfft 与rfft 不同之处在于cff

7、t 可对复数进行FFT 运算。rifft 和cifft 分别为rfft 和cfft 进行逆运算。在这个实验中我们需要调用cfft库函数对其进行FFT运算。3、CCS实现 1、各个函数的说明(1)void cbrev(DATA *x,DATA*r,unshort n) 功能: 为了FFT/IFFT得到一个正确顺序的变换结果,对他们的输入数据进行倒序。入口参数:x2*n x是一个2*n项的一维数组,数组中数据定义为短整型(16位有符号整型)。数组x是作为输入数据,函数对他的数据进行倒序。r2*n r是一个2*n项的一维数组,数组中数据定义为短整型(16位有符号整形)。数组r是作为输出数据,函数对x

8、倒序后的结果存到r中。 n 定义为数组中复数的个数(两个实数表示一个复数),即为数组大小的1/2。 函数的使用:函数是对复数进行倒序的,即把数组x中的数据认为是复数。有两个相邻的实数表示一个复数,偶地址为复数的实部,奇地址为复数的虚部。如下式,函数对X0+j*X1,X2+j*X3,X2n+j*X2n+1X2*N-2+j*X2*N-1 这些数据进行倒序。倒序后的结果也是按复数的实部、虚部依次存到r数组中的。注意:数组中的元素个数必须为偶数。倒序时采用间接寻址,所以数组的首地址的末log(n)+1必须为0。(2)void cfft(x,n,scale) 原理及源程序说明: 功能:对复数进行FFT变

9、换。各项参数:x2*n x是一个2*n项的一维数组,数组中数据定义为短整形(16位有符号整形)。数组x既作为输入数据,又存放变换后的输出数据。 n 定义为数组中复数的个数(两个实数表示一个复数),即为数组大小的1/2。 Scale 变换系数,如果为0,变换后结果乘以1/nx;否则结果乘以1。函数的使用:函数cfft(x,n,scale)是经过以下俩个宏定义而来的: #define dummy(x,n,scale) cfft#n(x,scale) #define cfft(x,n,scale) dummy(x,n,scale)原始函数为cfft#n(x,scale),n可取值为16,32,64,

10、128,256,512,1024。函数Cfft()要求输入数据为倒序,即经过cbrev()处理之后的数据。同cbrev()一样,cfft()也是对X0+j*X1,X2+j*X3,X2n+j*X2n+1X2*N-2+j*X2*N-1 进行的FFT变换,结果按实部/虚部存放。注意:数组中的元素个数必须为偶数。数组的首地址的末log(n)+1必须为0。(3)cifft(x,n,scale) 功能:对复数进行IFFT变换。各项参数:x2*n x是一个2*n项的一维数组,数组中数据定义为短整型(16位有符号整形)。数组x既作为输入数据,又存放变换后的输出数据。n 定义为数组中复数的个数(两个实数表示一个

11、复数),即为数组大小的1/2。 Scale 变换系数,如果为0,变换后结果乘以1/nx;否则结果乘以1。函数的使用: 函数cifft(x,n,scale) 与函数 rifft(x,2*n,scale)其实是一个函数,实现同样的功能,使用同cfft()一样。 如果要进行实数fft变换(变换结果实数),则还需调用一个unpacki(x,n)函数。(4)unpacki(x,n)函数功能:对rfft变换后的结果进行变换,为了rifft()得到原始实数的值。各项参数:xn x是一个n(n必须为偶数)项的一维数组,数组中数据定义为短整型(16位有符号整形)。数组x既作为输入数据,又存放变换后的输出数据。

12、n 定义为数组中实数的个数,即等于数组大小。函数的使用: 可以把这个函数看成unpack()函数的逆变换,具体原理同上。2、库函数的调用(1)DSPLIB库函数功能 TMS320C54X系列函数库(DSPLIB)是对C语言编程可调用优化的DSP函数库,它含有50个通用目的的信号处理程序,全部由汇编语言编写,并可由C语言调用,方便C语言与汇编语言混合编程。这些程序用在计算强度大、执行速度重要的实时运算中。通过使用这些程序,可以取得较用C语言编写的相关程序快的多的运行速度,另外通过使用现成的程序可以使开发速度大大加快。DSPLIB可进行的运算有:FFT运算、滤波与卷积运算、自适应滤波运算、相关运算

13、、数学函数运算、三角函数运算、矩阵运算等。(2)DSPLIB库函数的FFT运算 DSPLIB库函数提供的FFT运算程序全部由汇编语言编写,充分发挥DSP的硬件特性,运算速度很快。下面以复数FFT运算程序为例进行介绍。快速傅立叶变换在作N点傅立叶变换运算时,输入数据常常是一连串的复数。 不过在许多实际应用上,这些需要被处理的数据都属于实数,即便如此,我们还是可以利用复数运算的DFT。 因为一个简单的方法就可以将实数数据转换成复数数据,原本的实数数据成为复数的实部,而属于复数虚部的部分则全部填上零,如此一来我们就可以直接应用复数FFT了。DSPLIB库函数提供的FFT运算程序可进行81024点的F

14、FT运算。输入数据的存放以自然顺序依次排放,实部在前虚部在后。数进行码位倒序运算形式为:cbrev(X,X,256),即可将采样数据转换成码位倒序形式,并放入X2N数组实数部分。为进行实数FFT运算输入数据虚部需置零。(3) FFT运算的归一化 除非输入信号幅度非常小,否则FFT运算结果可能导致溢出,为防止溢出的发生,FFT运算提供了归一化功能(可选择),就是输出结果被运算长度N所除。在FFT运算进行归一化后,进行FFT逆运算就不需要归一化了。3、采样波形的产生void InputWave() int i; float sample_step=1.0/SAMPLEF; float j=0.0;

15、 for ( i=0;iSAMPLENUMBER;i+ ) fInputi=sin(PI*2*j*SIGNAL1F)*128+sin(PI*2*j*SIGNAL2F)*32; j=j+sample_step; 四、主程序#include /数学函数的头文件,如sqrt.#include /定义数据类型的头文件#include / DSPLIB库文件#include t4_SCALE.h/#include t6_NOSCALE.h#define SIGNAL1F 20#define SAMPLEF 64#define PI 3.1415926#define SAMPLENUMBER 128short INPUTSAMPLENUMBER,xSAMPLENUMBER;float OUTPUTSAMPLENUM

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1