2048点FFT在定点DSP上的实现.doc_第1页
2048点FFT在定点DSP上的实现.doc_第2页
2048点FFT在定点DSP上的实现.doc_第3页
2048点FFT在定点DSP上的实现.doc_第4页
2048点FFT在定点DSP上的实现.doc_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

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

文档简介

2048点FFT在定点DSP上的实现摘要 : 针 对线 阵 CC D输 出数据 的 处理 需要 , 介 绍 了2 0 4 8点 F r r在 T MS 3 2 0 C2 4 0 x定点 DS P上 的 实现 。F P T 算 法程 序 采 J ”汇编 语言鳊写 可通过 C语言函数调 用, 因此具有实现简单、 高效的特点, 且扩展性和兼容性强, 可运行于嵌入式线阵 CCD光谱 探 测 系统 中。 关键词: F F T; D S P; 劈分算法; 位反转算法 中图分类号: TP 3 9 1 文献标识码: A 引言 傅立叶变换是一种将信号从时域转变为频域表示的变换手段 ,它在信号的频谱分析以及系统的分 析、 设计中得到了广泛的应用。在计算机系统中, 实际 上是以离散傅立叶变换( Df T r ) 的方式处理数据。由于 D F r的运算量比较大 实际应用中常使用 D F r的快速 算法一 快速傅立叶变换( F 兀 ) 。 快速傅立叶变换算法有 基 2算法、 基 4算法等, 还有按时间抽取( D I T ) 和按频 率抽取( D I F ) 的算法。 目前, 由于线阵 C C D在光谱探测、 光学传感等方面的广泛应用, 常需要嵌入式芯片( 如 D S P ) 对 C C D输 出的数据进行实时分析处理。用于工业探测的线阵 C C D与我们通常认识的面阵 C C D有所不同。我们 日 常生活中出现的面阵C C D少说也有几十万像素, 高的 可达上千万像素, 常用在数码相机等设备上。相比较 而言, 用于工业探测的线阵 C C D像素不高, 但在光谱 响应范围、 几何精度、 动态范围有自己独特的优势。比如我们所用的T C D1 2 0 8 C C D就是一款面向光谱探测 用的线阵C C D,有 2 1 6 0像元,光谱响应范围4 o o纳 米一 1 1 0 0纳米, 并且动态范围大, 灵敏度高, 稳定可靠。 整个嵌入式线阵 C C D光谱探测系的结构框图如图1 所示。 在 D S P上要完成 C C D驱动、 A D转换、 F F T运算、 控制液晶显示等功能, 其中 FFT 运算是重点。考虑到 C C D是 2 1 6 0像元,为了方便运用基2算法计算 F FT ,又不损失太多的像元,我们往在DSP上计算2048点FFT。由于T I 公司提供的 FFT程序只能计算 5 l 2点 FFT, 因此, 就需要我们编写能够寓脱 2 0 4 8 点 FFT的程序。以FFT在嵌入式线阵 C C D光潜探测系统中的应用为例,重点介绍 2 0 4 8点实数基2DIT-FFT在T MS 3 2 0 L F 2 4 0 7定点 D S P中的实现。此程序也可实现 1 0 2 4点复数 F FT。由于 F MS 3 2 0 C 2 4 0 x系列D S P的硬件内核与汇编指令完全相同,此程序可以直接移植到所有 T MS 3 2 0 C 2 4 0 x D S P上。根据此程序,可以方便地扩展至 4 0 9 6点 FFT, 用于 5 0 0 0像元 CCD的数据处理。 1 程序介绍与实现 1 .1 程序流程 FFT的计算量比傅立叶变换的计算量减少了,但是 FFT要做到大点数,实时运算 ,对于普通的单片机来说还是一件比较困难的事。 一方面,FFT需要对原始自然序列进行码位倒序排列; 另一方面,蝶形运算是复数运算, 需要多次查表相乘运算才能实观 。DSP控制器就是针对这些需求而设计的专用芯片:具有专为 F F T 算法而设计的反序间接寻址 ; 可实现增减l或增减一个变址量的间接寻址方式, 为各种查表运算提供方便 :能在一个指令周期完成乘和累加操作,提高了乘法运算的速度。T MS 3 2 0 L F 2 4 0 7定点 D S P是一款专为工业控制、 电机控制和数字信号处理等用途而设计的 D S P , 具备单周期乘加指令, 具有 F F T反序间接寻址功能,最高运行速度为4 0 MI P S 。为了充分利用 D S P 芯片特有的反序间接寻址等功能, F F T算法程序采用 汇编语言编写,主程序采用 C语言,因此程序具有良好的接口性能和可扩展性能。 一般计算 N点实数 F F T时, 简单的把 N点实数数据当作 N点虚部为0的复数数据来处理,直接计算 N 点复数 F F T。 这样不仅浪费了D S P片内资源,还影响了计算的实时性, 尤其是点数比较大时,这种影响更加明显。为了提高实数 FFT 的计算效率, 利用 F FT 计算的特点,把 N点实数数据打包成 N2点复数数据, 通过计算 N2 点复数 F F T来获得 N点实数 F F T, 这样可以把F F T的计算速度提高近一倍。实数 FFT的计算流程为: 1把 2 0 4 8点实数数据打包成为 1 0 2 4点复数数据,并完成复数数据的位反转操作; 2计算 1 0 2 4点基 2复数 F F T : 3劈分还原计算, 获得 2 0 48点实数 F F T r 结果; 4计算幅值的平方, 获得频谱的幅度谱。 根据实际需要, 还可以对数据进行加窗函数处理。 1. 2具体函数介绍 根据上面的程序流程, 介绍具体的函数模块。考虑到程序的效率和代码的精简, F 丌 算法函数全部采用汇编语言编写, 但是在各子程序的入 口和出口都考虑了与 C语言的兼容性,使得各子程序能够直接被 C语言调用 。 1汇编模块 f f t _ b r e v .a s m, 此模块的功能是把 2 0 4 8点实数数据打包成为 1 0 2 4点复数数据 ,并把复数数据进行倒位序排列。 在 C函数中, 通过 F F T _ b r e v 0 来调用。具体声明形式为: v o i d FFT- b r e v( i n t* s o u r c e ,i n t* d o n e , i n t s i z e ) , 其中指针 s o u r c e 指向的数组存放未经倒位序排列的数据。 指针 d o n e 指向的数组存放倒位序排列后的数据, s i z e 是数组的大小,为了节省空间,指针 s o u r c e和 d o n e 可以指向同一数组。 2汇编模块f f t l O 2 4 c a s m。 此模块的功能是计算 1 0 2 4点基2 复数 T 。输入的数据必须是 Q 1 5格式的数据。 3汇编模块f f t 2 0 4 8 a s m。 此模块的功能是劈分 1 0 2 4点复数 F F T的结果, 得到2 0 48点实数 F F T 的真正结果。 4汇编模块 f f t ma g a s m,此模块的功能是计算2 0 48点实数 F F T的结果的幅值平方。得到幅度谱。 输出的数据格式为 Q1 4格式。 主函数调用示例: 几点说明 : 1由于定点 DS P的浮点计算能力有限 为了保证计算的有效性和实时性 , 对输入输出数据采取了定点处理 ,其中输入数据是 Q1 5格式,输出的幅度谱是Q1 4格式。 2在 F F T计算的蝶形运算和劈分计算中涉及到正弦和余弦计算。因此需要预先制好正弦和余弦表。 3简单改变几个参数值和扩展一下正弦和余弦表,就可以用此程序计算 4 0 9 6以及更大点数的实数 F F T 。 但需要注意扩展存储空间以及防止结果精度的降低。 1 .3抗干扰设计 为防止各种干扰使得程序不能正常运行 。 我们从软硬件两个方面采取抗干扰措施。从硬件方面,我们采用 T I 的专用电源芯片T P S 7 3 3 3 ,为DSP提供稳定电源;在集成芯片的电源与地之间放置 0.01和 0.1的去耦电容 ,并让去耦电容尽量靠近集成芯片; 模拟地与数字地分开, 只在一点共接等。在软件方面, 为了使程序跑飞的 D S P回到正常状态,加入看门狗功能。 整个程序是在集成开发环境 C C 4 .1 下开发完成,为了方便程序运行结果的说明,用此程序去计算一组2 0 4 8点正弦数据 , 频率为 1赫兹 , 采样频率为 1 2 8赫兹。数据采用 Q 1 5格式。 正弦数据波形如图 2所示。一般情况下,我们只关心信号频域的幅度谱。 幅度谱t X( k ) I 的计算: ,F F T计算结果的信号幅度谱如图3所示。 先把满量程基准电压先分为 2 m 个区间, 用( 2 m 1)个比较器进行第一步AD转换, 得到 m位的二进制编码作为MS B 。再把每个区间都分成个子区间,用个比较器对个区间中的某一区间进行第二步AD转换 这一区问的选择由前面所得的m位的编码作为图中开关控制信号得以确定。第二步 AD转换得到位二进制编码作为 L S B , 最终得到n 位编码。 要使所用的比较器个数成为最少, 即对函数求最小值。设, 对 m求 导, 得: 令,当n为偶数, 由得: 当n为奇数, 得 , 都得到 由此可知,对比较器个数的优化后的最小值是, 当分辨率 n为偶数时,个数为,当分辨率 n为奇数时, 个数为 根据快速傅立叶变换理论, N点 FFT的结果是 N个复数数据这 N个复数数据代表着原始数据的频域信息。当原始数据是实数时, 那么 F F T的结果会出现复共轭对称, 即。对于信号的幅度谱 来说, N点实数 FFT有用的信息就只有( N2 ) + 1 个。根据公式是原始信号的频率, k表示峰值出现的位置,是采样频率,N是F F T计算的点数, 从幅度谱中看出峰值出现在 k = 1 6处, 那么, , 与原始信号的实际频率一致, 说明计算结果正确。 3小 结实验证明, 此程序在T Ms 3 2 0 L F 2 4 0 7 定点 D S P中运行良好, 满足嵌 式线阵C C D探测系统数据处理的需要, 并已经成功运行于该系统中。同样, 此程序也适用于其它以T MS 3 2 0 C 2 4 0 x 定点 D S P为核心的嵌入式系统中。 参考文献: 【1】刘和平等,TMS 320C240xDSP C语言开发应用M 北京:北京航空航天大学出版社,2003 .1 【2】 邱立存,闻武,刘海英TMS320C54X系列DSP上 FFT运算的实现 J 】 微计算机信息,2005 ,0 7 2:1 3 6 1 3 7 【3】肖宛昂,嵌入式系统中 F FT算法研究 单片机与嵌入式系统应用 J 】 ,2 00 34 3 1 T I F FT L i b r a r y.f f t _ md 1 p d f 【4】王潞钢 等,DSP C 20 0程序员高手进阶【 M】 北京: 机械工业出版社, 2 0 0 5 . 1 作者简

温馨提示

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

评论

0/150

提交评论