2048点FFT在定点DSP上的实现
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Key wor ds: FFT; DSP; splitting ar ithmetic; bit- r ever sed ar ithmetic
术
引言
傅立叶变换是一种将信号从时域转变为频域表 示的变换手段, 它在信号的频谱分析以及系统的分 析、设计中得到了广泛的应用。在计算机系统中, 实际 上是以离散傅立叶变换( DFT) 的方式处理数据。由于 DFT 的运算量比较大, 实际应用中常使用 DFT 的快速 算法- 快速傅立叶变换( FFT) 。快速傅立叶变换算法有 基 2 算法、基 4 算法等, 还有按时间抽取( DIT) 和按 频 率抽取( DIF) 的算法。
计算的实时性, 尤其是点数比较大时, 这种影响更加明
显。为了提高实数 FFT 的计算效率, 利用 FFT 计算的特
点, 把 N 点实数数据打包成 N/2 点复数数据, 通过计算
N/2 点复数 FFT 来获得 N 点实数 FFT, 这样可以把 FFT
的计算速度提高近一倍。实数 FFT 的计算流程为:
1 把 2048 点 实 数 数 据 打 包 成 为 1024 点 复 数 数
新 用汇编语言编写, 但是在各子程序的入口和出口都考 虑了与 C 语言的兼容性, 使得各子程序能够直接被 C
语言调用。
1 汇编模块 fft_brev.asm, 此模块的功能是把 2048
点实数数据打包成为 1024 点复数数据 , 并把复数数
据进行倒位序排列。在 C 函数中, 通过 FFT_brev()来调
目前, 由于线阵 CCD 在光谱探测 、光 学 传 感 等 方 数据处理。
面的广泛应用, 常需要嵌入式芯片( 如 DSP) 对 CCD 输
出的数据进行实时分析处理。用于工业探测的线阵
CCD 与我们通常认识的面阵 CCD 有所 不同。我们日
常生活中出现的面阵 CCD 少说也有几十万像素, 高的 可达上千万像素, 常用在数码相机等设备上。相比较
2 在 FFT 计算的蝶形运算和劈分计算中, 涉及到 正弦和余弦计算。因此需要预先制好正弦和余弦表。
3 简单改变几个参数值和扩展一下正弦和余弦表, 就可以用此程序计算 4096 以及更大点数的实数 FFT。 但需要注意扩展存储空间以及防止结果精度的降低。
1.3 抗干扰设计 为防止各种干扰使得程序不能正常运行, 我们从 软硬件两个方面采取抗干扰措施。从硬件方面, 我们 采用 TI 的专用电源芯片 TPS7333, 为 DSP 提供稳定电 源; 在集成芯片的电源与地之间放置 0.01μF 和 0.1μF 的去耦电容, 并让去耦电容尽量靠近集成芯片; 模拟 地与数字地分开, 只在一点共接等。在软件方面, 为了 使程序跑飞的 DSP 回到正常状态, 加入看门狗功能。
据, 并完成复数数据的位反转操作;
2 计算 1024 点基 2 复数 FFT;
3 劈分还原计算, 获得 2048 点实数 FFT 结果;
技
4 计算幅值的平方, 获得频谱的幅度谱。
术
根据实际需要, 还可以对数据进行加窗函数处理。 1.2 具体函数介绍
创
根据上面的程序流程, 介绍具体的函数模块。考
虑到 程序的效率 和代码的精 简, FFT 算法函数 全部 采
2048 点实数 FFT 的结果的幅值平方, 得到幅度谱, 输
出的数据格式为 Q14 格式。
主函数调用示例:
void main(void) {… … fft.ipcbptr=ipcb; fft.magptr=mag;
//FFT 计算缓冲区 Baidu Nhomakorabea/存 放 幅 度 谱
fft.init1(); 转因子
//复制 计 算复 数 FFT 所 需 的 旋
技 it has the features of easy realization, high efficiency, good expansibility and compatibility. It had run in the embedded system for
linear CCD spectral detection successfully.
考虑到 CCD 是 2160 像元, 为了方便运用基 2 算
1 程序介绍与实现
1.1 程序流程 FFT 的计算量比傅 立叶变换的 计 算 量 减 少 了 , 但 是 FFT 要 做 到 大 点 数 , 实 时 运 算 , 对 于 普 通 的 单 片 机 来说还是一件比较困难的事。一方面, FFT 需要对原始 自然序列进行码位倒序排列; 另一方面, 蝶形运算是 复数运算, 需要多次查表相乘运算才能实现。DSP 控制 器就是针对这些需求而设计的专用芯片: 具有专为 FFT 算法而设计的反序间接寻址; 可实现增/减 1 或增/
芯片 特有的反序 间接寻址等 功能, FFT 算法程 序采 用
汇编语言编写, 主程序采用 C 语言, 因此程序具有良
好的接口性能和可扩展性能。
一般计算 N 点实数 FFT 时, 简单的把 N 点实数数
据当作 N 点虚部为 0 的复数数据来处理, 直接计算 N
点复数 FFT。这样不仅浪费了 DSP 片内资源, 还影响了
2 汇编模块 fft1024c.asm, 此模块的功能是计算 1024
点基 2 复数 FFT。输入的数据必须是 Q15 格式的数据。
3 汇编模块 fft2048.asm, 此模块的功能是劈分 1024
点复数 FFT 的结果, 得到 2048 点实数 FFT 的真正结果。
4 汇 编 模 块 fft_mag.asm, 此 模 块 的 功 能 是 计 算
文献标识码: A
Abstr act: Because of the demand of data processing in linear CCD, this paper introduces the realization of 2048 points FFT in
TMS320C240x fixed- point DSP. Arithmetic program of FFT is programmed in assembly code, and it can be called by C function. So
文其林:硕士研究生
减一个变址量的间接寻址方式, 为各种查表运算提供
基金项目:北京市优秀人才培养专项经费资助
方便; 能在一个指令周期完成乘和累加操作, 提高了
基金编号: 20041D0501511
乘法运算的速度。TMS320LF2407 定点 DSP 是一款专
《 P LC 技术应用 200 例》
邮局订阅号: 82-946 360 元 / 年 -159-
DS P 开 发 与 应 用
中 文 核 心 期 刊《 微 计 算 机 信 息 》( 嵌 入 式 与 S OC )2006 年 第 22 卷 第 5-2 期
为工业控制、电机控制和数字信号处理等用途而设 计
的 DSP, 具 备 单 周 期 乘 加 指 令 , 具 有 FFT 反 序 间 接 寻
址功能, 最高运行速度为 40MIPS。为了充分利用 DSP
语 言 编 写 , 可 通 过 C 语 言 函 数 调 用 , 因 此 具 有 实 现 简 单 、高 效 的 特 点 , 且 扩 展 性 和 兼 容 性 强 , 可 运 行 于 嵌 入 式 线 阵 CCD 光 谱
探测系统中。
关键词: FFT; DSP; 劈分算法; 位反转算法
中图分类号: TP391
您的论文得到两院院士关注 文章编号:1008- 0570(2006)05- 2- 0159- 02
DS P 开 发 与 应 用
204 8 点 F F T 在定点 DS P 上的实现
Acco m p lis h m e n t o f 2048 p o in ts FFT in TMS 320C240x fixe d - p o in t DS P
fft.init2(); 的旋转因子
//复制 劈 分复 数 FFT 结 果 所 需
fft.calc(&fft); //计算复数 FFT fft.split(&fft); //劈分复数 FFT 结果 fft.mag(&fft); //计算幅度谱 } 几点说明:
1 由于定点 DSP 的浮点计算能力 有限, 为了保 证 计算的有效性和实时性, 对输入输出数据采取了定点 处 理 , 其 中 输 入 数 据 是 Q15 格 式 , 输 出 的 幅 度 谱 是 Q14 格式。
2 实验结果及分析
图 2 2048 点正弦数据波形
整个程序是在 集成开发环 境 CC4.1 下开发完 成 , 为了方便程序运行结果的说明, 用此程序去计算一组 2048 点 正 弦 数 据 , 频 率 为 1 赫 兹 , 采 样 频 率 为 128 赫 兹。数据采用 Q15 格式。
正弦数据波形如图 2 所示。一般情况下, 我们只 关心信号频域的幅度谱。幅度谱|X( k) |2 的计算: X( k) = Xr( k) +jXi( k) , |X( k) |2=|Xr( k) |2+|Xi( k) |2, FFT 计 算 结 果 的信号幅度谱|X( k) |2 如图 3 所示。
用。具体声 明 形 式 为 : void FFT_brev (int *source, int
*done, int size), 其中指针 source 指向的数组存放未经
倒位序排列的数据, 指针 done 指向的数组存放倒位序
排列后的数据, size 是数组的大小, 为了节省空间, 指
针 source 和 done 可以指向同一数组。
创 法 计 算 FFT, 又 不 损 失 太 多 的 像 元 , 我 们 在 DSP 上 计
算 2048 点 FFT。由于 TI 公司提供的 FFT 程序只能计
新 算 512 点 FFT, 因 此 , 就 需 要 我 们 编 写 能 够 实 现 2048
点 FFT 的程序。以 FFT 在嵌入式线阵 CCD 光谱探测 系 统中的应用 为例, 重 点 介 绍 2048 点 实 数 基 2DIT- FFT 在 TMS320LF2407 定点 DSP 中的实现。此程序也 可 实 现 1024 点 复 数 FFT。 由 于 TMS320C240x 系 列 DSP 的硬件内核与汇编指令完全相同, 此程序可以直 接移植到所有 TMS320C240x DSP 上。根据此程序, 可 以方便地扩展至 4096 点 FFT, 用于 5000 像元 CCD 的
图 1 系统结构框图
而言, 用于工 业探测的线 阵 CCD 像素不高 , 但在光谱 响 应 范 围 、几 何 精 度 、动 态 范 围 有 自 己 独 特 的 优 势 。比 如我们所用的 TCD1208 CCD 就是一款面 向光谱探测 用的线阵 CCD, 有 2160 像元, 光谱响应范围 400 纳 米- 1100 纳米, 并且动态范围大, 灵敏度高, 稳定可靠。 整个嵌入 式线阵 CCD 光谱 探测系统的 结构框图如 图 1 所示, 在 DSP 上要完成 CCD 驱动 、A/D 转换、FFT 运 算、控制液晶显示等功能, 其中 FFT 运算是重点。
(北京工业大学)文 其 林 白 晓 东 周 洪 直 贾 宝 敦
Wen , Qilin Bai, Xiaodong Zhou , Hongzhi J ia , Baodun
摘要: 针 对 线 阵 CCD 输 出 数 据 的 处 理 需 要 , 介 绍 了 2048 点 FFT 在 TMS320C240x 定 点 DSP 上 的 实 现 。 FFT 算 法 程 序 采 用 汇 编
图 3 频谱的幅度谱
(转 247 页)
- 160 - 360元 / 年 邮局订阅号: 82-946
《 现场总线技术应用 200 例》
您的论文得到两院院士关注
电子设计
先把满量程基 准 电 压 先 分 为 2m 个 区 间 , 用(2m- 1) 个比较器进行第一步 A/D 转换, 得到 m 位的二进制编 码作为 MSB。再把每个区间都分成 2n-m 个子区间, 用 (2n-m- 1)个比较器对 2m 个区间中的某一区间进行第二步 A/D 转换, 这一区间的选择由前面所得的 m 位的编码作 为图中开关控制信号得以确定。第二步 A/D 转换得到 ( n- m) 位二进制编码作为 LSB, 最终得到 n 位编码。