调用DSP库函数实现FFT的运算.._第1页
调用DSP库函数实现FFT的运算.._第2页
调用DSP库函数实现FFT的运算.._第3页
调用DSP库函数实现FFT的运算.._第4页
调用DSP库函数实现FFT的运算.._第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

通信与信息工程学院 2013 2014 学年 第 二 学期 软件设计 实验报告 模 块 名 称 调用 DSP 库函数实现 FFT 的运算 专 业 通信工程 学 生 班 级 B110107 学 生 学 号 学 生 姓 名 指 导 教 师 王 奇 设计题目 调用 DSP 库函数实现 FFT 运算 任务要求 利用 CCS 库函数 CFFT 对 sin 40 PI t 进行 64 点的 FFT 运 算 要求回显结果图形并对其进行分析 实验设备及 软件 硬件 计算机 软件 WINDOWS 操作系统 CCS 软件和 MATLAB 含 SIMULINK 工具包 软件 同组人员学 号及姓名 顾源源 B110108 参考文献 1 ICETEK VC5509 A USB EDU 教学实验系统软件实验指 导 电子版 2 Code Composer StudioProject Management and Editing Tools 电子版 3 TMS320C55xAssembly Language Tools User s Guide 电子版 4 TMS320C55x Optimizing C C CompilerUser s Guide 电子版 5 彭启琮等 TMS320VC55x 系列 DSP 的 CPU 与外设 北 京 清华大学出版社 2005 6 尹勇 欧光军 DSP 集成开发环境 CCS 开发指南 北京 北京航空航天大学出版社 2004 7 TMS320C55x DSP Programmer s 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 实验原理实验原理 1 1 0 1 0 NmWkxmX km N N k 1 1 0 1 1 0 NkWmX N kx km N N m 如果利用上式直接计算DFT 对于每一个固定的m 需要计算N次复数乘法 N 1次加法 对于N个不同的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 运算总共需要 4N 2 次实数 乘法和 N 2 2N 1 2N 2N 1 次实数加法 如此一来 计算时乘法次数和加法次 数都是和 N 2 成正比的 当 N 很大时 运算量是可观的 因而需要改进对 DFT 的算法减少运算速度 根据傅立叶变换的对称性和周期性 我们可以将 DFT 运 算中有些项合并 我们先设序列长度为 N 2 L L 为整数 将 N 2 L 的序列 x n n 0 1 N 1 按 N 的奇偶分成两组 也就是说我们将一个 N 点的 DFT 分解成两个 N 2 点的 DFT 一般来说 输入被假定为连续的 当输入为纯粹的 实数的时候 我们就可以利用左右对称的特性更好的计算 DFT 我们称这样的 RFFT 优化算法是包装算法 首先 2N 点实数的连续输入称为 进包 其次 N 点的 FFT 被连续运行 最后作为结果产生的 N 点的合成输出是 打开 成为最 初的与 DFT 相符合的 2N 点输入 使用这战略 我们可以划分 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 不同之处在于 cfft 可对复数进行 FFT 运算 rifft 和 cifft 分别为 rfft 和 cfft 进行逆运算 在这个实验中我们需要调用 cfft 库 函数对其进行 FFT 运算 3 3 CCSCCS 实现实现 1 1 各个函数的说明 各个函数的说明 1 1 voidvoid cbrevcbrev DATADATA x DATA r unshort x DATA r unshort n n 功能 功能 为了 FFT IFFT 得到一个正确顺序的变换结果 对他们的输入数据进行倒序 入口参数入口参数 x 2 n x 是一个 2 n 项的一维数组 数组中数据定义为短整型 16 位有符 号整型 数组 x 是作为输入数据 函数对他的数据进行倒序 r 2 n r 是一个 2 n 项的一维数组 数组中数据定义为短整型 16 位有符 号整形 数组 r 是作为输出数据 函数对 x 倒序后的结果存到 r 中 n 定义为数组中复数的个数 两个实数表示一个复数 即为数组大 小的 1 2 函数的使用函数的使用 函数是对复数进行倒序的 即把数组 x 中的数据认为是复数 有两个相邻 的实数表示一个复数 偶地址为复数的实部 奇地址为复数的虚部 如下式 函数对 X 0 j X 1 X 2 j X 3 X 2n j X 2n 1 X 2 N 2 j X 2 N 1 这些数据进行倒序 倒序后的结果也是按复数的实部 虚部依次存到 r 数组中 的 注意注意 数组中的元素个数必须为偶数 倒序时采用间接寻址 所以数组的首地址的末 log n 1 必须为 0 2 2 voidvoid cfft x n scale cfft x n scale 原理及源程序说明 功能 功能 对复数进行 FFT 变换 各项参数 各项参数 x 2 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 128 256 512 1024 函数 Cfft 要求输入数据为倒序 即经过 cbrev 处理之后的数据 同 cbrev 一样 cfft 也是对 X 0 j X 1 X 2 j X 3 X 2n j X 2n 1 X 2 N 2 j X 2 N 1 进行的 FFT 变换 结果按实部 虚部 存放 注意注意 数组中的元素个数必须为偶数 数组的首地址的末 log n 1 必须为 0 3 3 cifft x n scale cifft x n scale 功能 功能 对复数进行 IFFT 变换 各项参数 各项参数 x 2 n x 是一个 2 n 项的一维数组 数组中数据定义为短整型 16 位有符号 整形 数组 x 既作为输入数据 又存放变换后的输出数据 n 定义为数组中复数的个数 两个实数表示一个复数 即为数组大小 的 1 2 Scale 变换系数 如果为 0 变换后结果乘以 1 nx 否则结果乘以 1 函数的使用函数的使用 函数 cifft x n scale 与函数 rifft x 2 n scale 其实是一个函数 实 现同样的功能 使用同 cfft 一样 如果要进行实数 fft 变换 变换结果实数 则还需调用一个 unpacki x n 函数 4 4 unpacki x n unpacki x n 函数函数 功能功能 对 rfft 变换后的结果进行变换 为了 rifft 得到原始实数的值 各项参数 各项参数 x n x 是一个 n n 必须为偶数 项的一维数组 数组中数据定义为短整型 16 位有符号整形 数组 x 既作为输入数据 又存放变换后的输出数据 n 定义为数组中实数的个数 即等于数组大小 函数的使用函数的使用 可以把这个函数看成 unpack 函数的逆变换 具体原理同上 2 2 库函数的调用 库函数的调用 1 DSPLIB 库函数功能 TMS320C54X 系列函数库 DSPLIB 是对 C 语言编程可调用优化的 DSP 函数 库 它含有 50 个通用目的的信号处理程序 全部由汇编语言编写 并可由 C 语言调用 方便 C 语言与汇编语言混合编程 这些程序用在计算强度大 执行 速度重要的实时运算中 通过使用这些程序 可以取得较用 C 语言编写的相关 程序快的多的运行速度 另外通过使用现成的程序可以使开发速度大大加快 DSPLIB 可进行的运算有 FFT 运算 滤波与卷积运算 自适应滤波运算 相关 运算 数学函数运算 三角函数运算 矩阵运算等 2 DSPLIB 库函数的 FFT 运算 DSPLIB 库函数提供的 FFT 运算程序全部由汇编语言编写 充分发挥 DSP 的 硬件特性 运算速度很快 下面以复数 FFT 运算程序为例进行介绍 快速傅立叶变换在作 N 点傅立叶变换运算时 输入数据常常是一连串的复数 不过在许多实际应用上 这些需要被处理的数据都属于实数 即便如此 我 们还是可以利用复数运算的 DFT 因为一个简单的方法就可以将实数数据转换成复数数据 原本的实数数 据成为复数的实部 而属于复数虚部的部分则全部填上零 如此一来我们就 可以直接应用复数 FFT 了 DSPLIB 库函数提供的 FFT 运算程序可进行 8 1024 点的 FFT 运算 输入数据的存放以自然顺序依次排放 实部在前虚部在后 数进行码位倒序运算形式为 cbrev X X 256 即可将采样数据转换成码位倒 序形式 并放入 X 2N 数组实数部分 为进行实数 FFT 运算输入数据虚部需 置零 3 FFT 运算的归一化 除非输入信号幅度非常小 否则 FFT 运算结果可能导致溢出 为防止溢 出的发生 FFT 运算提供了归一化功能 可选择 就是输出结果被运算长度 N 所除 在 FFT 运算进行归一化后 进行 FFT 逆运算就不需要归一化了 3 3 采样波形的产生 采样波形的产生 void InputWave int i float sample step 1 0 SAMPLEF float j 0 0 for i 0 i SAMPLENUMBER i fInput i 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 128 short INPUT SAMPLENUMBER x SAMPLENUMBER float OUTPUT SAMPLENUMBER void MakeWave void MakeWave int i float sample step 1 0 SAMPLEF float j 0 0 for i 0 i SAMPLENUMBER 2 i INPUT i sin PI 2 j SIGNAL1F 1024 j j sample step void main int i MakeWave for i 0 i SAMPLENUMBER i i 2 x i INPUT i 2 for i 1 i SAMPLENUMBER i i 2 x i 0 0 cbrev x x SAMPLENUMBER 2 cfft x SAMPLENUMBER 2 SCALE unpacki x SAMPLENUMBER 2 cbrev x x SAMPLENUMBER 2 cifft x SAMPLENUMBER 2 SCALE for i 0 i SAMPLENUMBER i OUTPUT i x i while 1 break point 五 实验步骤五 实验步骤 1 实验准备 设置软件仿真模式 2 启动 CCS 打开工程 浏览程序 3 编译程序 4 导入 out 文件并运行 5 分别设置窗口 并出图 六 实验结果六 实验结果 1 1 正弦输入波形 时域 正弦输入波形 时域 分析 由于采样频率为 64HZ 相对于正弦函数频率他的采样频率较小 所以产生的 时域图片会有失真 输入波形 频域 输入波形 频域 分析 有图可得峰值所在点为 20 符合题目要求 经过经过 FFTFFT 处理后的波处理后的波 分析 出现峰值和谷值的地方为 20 和 44 且相对称 出现负值的原因是没有取模 另 外在出图时设置 grath 的采样频率为 2HZ 因为 x i 中有实数和虚数 三个图放在一起比较三个图放在一起比较 六 调试过程中遇到的问题和解决办法六 调试过程中遇到的问题和解决办法 1 在程序运行的过程中会出现 dsplib h 和 tms320 h 文件不存在的现象 这是由于 DSPLIB 安装在固定的子目录上 而应用程序在桌面上 程序编译 连接时 找不到 DSPLIB 中相应的程序 所以需要对工程的 bulid options 选项中的两个地方经行设置 首先是找不到 dsplib h tms320 h 文件时 在 compiler 标签下选中 preprocessor 选项 在 Include Search Path 栏 中填入 dsplib h tms320 h 所在子目录 此处为下图所示 当出现连接时找不到 FFT 运算相应的汇编程序 此时可在 linker 标签下选中 basic 选项 在 Library Search Path 栏中填入 55xdsp lib 库文件所在路径 本次试验示 例如

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论