关于TIFFT库的使用

关于TIFFT库的使用

ID:38639205

大小:66.50 KB

页数:5页

时间:2019-06-16

关于TIFFT库的使用_第1页
关于TIFFT库的使用_第2页
关于TIFFT库的使用_第3页
关于TIFFT库的使用_第4页
关于TIFFT库的使用_第5页
资源描述:

《关于TIFFT库的使用》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、这篇文章是应一些找我讨论DSP的同学所写,贴在这里大家一起学习。曾有不少论坛上的同学(包括DSP算法讨论群里的一些同学)问过我关于TI的FFT库的使用,这里我将我使用过的一些经验说一下。TI的这个FFT库在计算速度、计算精度以及数据存储等方面是做了不少优化的,比如数据存储,若作N点的FFT,供查表用的旋转因子必须有N/2点的正弦值与N/2点的余弦值,这个库将其压缩成3N/4点的正弦值,因此就节省了N/4点的存储空间;另外计算N点实数FFT时,一般简单的做法是将N点实数的虚部全化为0来处理,而这个库则把N点实数数据打包成N/2点复数数据来处理,在计算

2、速度和存储空间都有很大改进。之前我浏览helloDSP论坛的帖子,有很多人发出疑问:为什么我计算出的mag值全为零?这样的帖子真不少见;TI的官方工程师论坛不少老外也发问:WhydidIgetallzeros?事实上我想主要原因是输入数据格式不对。我认为使用这个库主要注意一下两点:1.数据输入输出的Q格式;2.存储空间分配。下面以32位实数FFT为例来说明。注意到文档的40页有如下说明:1.在函数voidcalc(RFFT32_handle)有如下一句:NotethattheinputandoutputdataareinQ31format.;2.在

3、函数voidmag(FFT128R_handle)有如下一句:NotethatthemagnitudeoutputisstoredinQ30format.因为28x系列DSP是定点处理器,而FFT计算涉及到不少浮点计算,TI使用Q格式来解决这个问题(Q格式说明可参考sprc087_IQmath)。事实上输入数据采用Q31格式能在避免计算溢出前提下获得最好的计算精度。对AD采样的数据进行FFT计算,定义计算缓冲区数组:longipcb[N+2];因为AD结果寄存器是12位的,在数据左对齐的情况下直接左移15位即可:ipcb[ConversionCou

4、nt]=((unsignedlong)AdcRegs.ADCRESULT0)<<15;另外我记得有份文档提到在某些存储器下是右对齐,此时则需左移19位,大家在使用时注意这个问题。当采样完成后,按照FFT库的文档上的说明或者仿照文档附带的例程,进行相应函数调用来实现自己的FFT计算,比如按计算点数来定义各个变量数组,是否加窗,是否求解幅值平方值等。在进行存储器分配时,文档上要求(128点实数FFT为例):FFTipcbALIGN(256):{}>L0L1RAMPAGE1FFTmag>L0L1RAMPAGE1FFTtf>NVMEMPAGE0/*Nonv

5、olatilememory*/.econst>NVMEMPAGE0/*Nonvolatilememory*/注意两点:FFT计算缓冲区FFTipcb需在page1上连续分配2N个位置(以ALIGN来指定),FFTtf(旋转因子)需放在Nonvolatilememory的page0内(事实上如何才能为Nonvolatile我也不清楚)。FFTtf位置这点我之前在调试时对计算FFT影响很大,因为twiddlefactor若因存储冲突肯定会造成查表值不准确,那计算FFT时肯定就不对了。有个论坛帖子作者说一定要放在origin=0x008000开始位置,其

6、实也不对,大家可自己去试验;后面我也会给出我的存储配置文件(即.cmd文件内容)。无图无真相,下面给出计算实例。假设有一信号包含两个谐波频率值,分别为413.0Hz(幅值设为1.00V)和287.0Hz(幅值设为0.400V),利用函数发生器产生这两路信号再混合,加上偏置后送入AD采样。设采样频率1024Hz,共采样2048点。图1的采样点均是右对齐的12位采样结果值。图1AD采样得到的采样点图利用TI的FFT库进行计算,查看mag数组,得到图2.图2FFT计算结果(mag数组)以1024Hz采样2048点,采样时间2s,对两个谐波频率可采样到整数

7、倍周期;从另一个角度理解,此时最小频率分辨率为0.5Hz,413.0Hz与287.0Hz均是其整数倍数,故不会发生频谱展宽或混叠情况,计算得到的频谱图应该为两根尖峰线。从图2结果也能看出这一点。查看mag数组,可知第一根尖峰线下标574,第二根尖峰线下标826,故真实频率值分别为:574*0.5=287Hz,826*0.5=413Hz若要计算幅值,按照输出的Q30格式除相应系数即可。注意最好另外定义浮点数组来做除运算,因为整型数据做除运算(或者右移位操作)会丢失小数位数据。若要验证DSP的FFT计算结果,可将AD数据从CCS导入到MATLAB中做对

8、比计算。有些同学不清楚如何导入导出,下面说一下步骤。1.save,选择保存类型Integer(若是其他进制还需在MATLA

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。