




全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
这篇文章是应一些找我讨论DSP的同学所写,贴在这里大家一起学习。曾有不少论坛上的同学(包括DSP算法讨论群里的一些同学)问过我关于TI的FFT库的使用,这里我将我使用过的一些经验说一下。TI的这个FFT库在计算速度、计算精度以及数据存储等方面是做了不少优化的,比如数据存储,若作N点的FFT,供查表用的旋转因子必须有N/2点的正弦值与N/2点的余弦值,这个库将其压缩成3N/4点的正弦值,因此就节省了N/4点的存储空间;另外计算N点实数FFT时,一般简单的做法是将N点实数的虚部全化为0来处理,而这个库则把N 点实数数据打包成N/2点复数数据来处理,在计算速度和存储空间都有很大改进。之前我浏览helloDSP论坛的帖子,有很多人发出疑问:为什么我计算出的mag值全为零?这样的帖子真不少见;TI的官方工程师论坛不少老外也发问:Why did I get all zeros ?事实上我想主要原因是输入数据格式不对。我认为使用这个库主要注意一下两点:1. 数据输入输出的Q格式;2. 存储空间分配。下面以32位实数FFT为例来说明。注意到文档的40页有如下说明:1. 在函数void calc(RFFT32_handle)有如下一句:Note that the input and output data are in Q31 format.;2. 在函数void mag(FFT128R_handle)有如下一句:Note that the magnitude output is stored in Q30 format.因为28x系列DSP是定点处理器,而FFT计算涉及到不少浮点计算,TI使用Q格式来解决这个问题(Q格式说明可参考sprc087_IQmath)。事实上输入数据采用Q31格式能在避免计算溢出前提下获得最好的计算精度。对AD采样的数据进行FFT计算,定义计算缓冲区数组:long ipcbN+2;因为AD结果寄存器是12位的,在数据左对齐的情况下直接左移15位即可:ipcbConversionCount = (unsigned long)AdcRegs.ADCRESULT0) L0L1RAM PAGE 1FFTmag L0L1RAM PAGE 1FFTtf NVMEM PAGE 0 /* Non volatile memory */.econst NVMEM PAGE 0 /* Non volatile memory */注意两点:FFT计算缓冲区FFTipcb需在page1上连续分配2N个位置(以ALIGN来指定),FFTtf(旋转因子)需放在Non volatile memory的page0内(事实上如何才能为Non volatile我也不清楚)。FFTtf位置这点我之前在调试时对计算FFT影响很大,因为twiddle factor若因存储冲突肯定会造成查表值不准确,那计算FFT时肯定就不对了。有个论坛帖子作者说一定要放在origin = 0x008000开始位置,其实也不对,大家可自己去试验;后面我也会给出我的存储配置文件(即.cmd文件内容)。无图无真相,下面给出计算实例。假设有一信号包含两个谐波频率值,分别为413.0Hz(幅值设为1.00V)和287.0Hz (幅值设为0.400V),利用函数发生器产生这两路信号再混合,加上偏置后送入AD采样。设采样频率1024Hz,共采样2048点。图1的采样点均是右对齐的12位采样结果值。图 1 AD采样得到的采样点图利用TI的FFT库进行计算,查看mag数组,得到图2.图 2 FFT计算结果(mag数组)以1024Hz采样2048点,采样时间2s,对两个谐波频率可采样到整数倍周期;从另一个角度理解,此时最小频率分辨率为0.5Hz,413.0Hz与287.0Hz均是其整数倍数,故不会发生频谱展宽或混叠情况,计算得到的频谱图应该为两根尖峰线。从图2结果也能看出这一点。查看mag数组,可知第一根尖峰线下标574,第二根尖峰线下标826,故真实频率值分别为:574*0.5=287Hz , 826*0.5= 413Hz若要计算幅值,按照输出的Q30格式除相应系数即可。注意最好另外定义浮点数组来做除运算,因为整型数据做除运算(或者右移位操作)会丢失小数位数据。若要验证DSP的FFT计算结果,可将AD数据从CCS导入到MATLAB中做对比计算。有些同学不清楚如何导入导出,下面说一下步骤。1. save,选择保存类型Integer(若是其他进制还需在MATLAB中转换),点“确定”后,在“address”栏填入要保存数据的起始地址(填变量数组名或真实存储器地址皆可),在“length”栏内填入数据长度,“page”肯定选“data”页了;全部设好后点“OK”data-点菜单栏file-2. 找到保存的数据文件,将后缀改成.txt,再用记事本打开(也可以不改后缀直接用记事本打开),删去第一行数据;3. 打开MATLAB,点开“load data file”,选中刚才的数据文件,然后按照提示一步步往下导入即可。最后不妨用变量temp来保存这些数据。在MATLAB内运行如下代码:%f_sample = 1024; %采样频率N = 2048; %采样点Ny=temp; %temp即为导入数据的变量名n = 0:N-1;t = n/f_sample;%做采样点图plot(t,y);figure;stem(t,y,.);figure;%fft变换并作图fft_result = fft(y);mag = abs(fft_result)/(N/2);mag(1)=0; %为观察谐波分量,此处特意将直流分量置为0 %求解真实频率值f = (0:length(fft_result)-1)*f_sample/length(fft_result);%作频谱图stem(f(1:N/2),mag(1:N/2),b.);grid;%可将MATLAB计算结果与CCS内的结果做些对比。附:存储器分配(.cmd文件内容),我用的是2808的板子,2812或其他的稍作改动即可。MEMORYPAGE 0 :BEGIN : origin = 0x000000, length = 0x000002 RAMM0 : origin = 0x000002, length = 0x0003FEPRAMH0 : origin = 0x3FA000, length = 0x002000 RESET : origin = 0x3FFFC0, length = 0x000002BOOTROM : origin = 0x3FF000, length = 0x000FC0 TESARAM : origin = 0x008000, length = 0x002000 PAGE 1 : BOOT_RSVD : origin = 0x000400, length = 0x000080 RAMM1 : origin = 0x00A000, length = 0x001000 L0L1RAM : origin = 0x00B000, length = 0x001000HL0SARAM : origin = 0x3F8000, length = 0x001010 DRAMH0 : origin = 0x3F9010, length = 0x000ff0 SECTIONS/* Setup for boot to SARAM mode: The codestart section (found in DSP28_CodeStartBranch.asm)re-directs execution to the start of user code. */codestart : BEGIN, PAGE = 0ramfuncs : RAMM0 PAGE = 0 .text : PRAMH0, PAGE = 0.cinit : RAMM0, PAGE = 0.pinit : RAMM0, PAGE = 0.switch : RAMM0, PAGE = 0.reset : RESET, PAGE = 0, TYPE = DSECT /* not used, */FFTipcb ALIGN(4096): HL0SARAM, PAGE = 1FFTtf : DRAMH0 , PAGE = 1FFTmag : L0L1RAM, PAGE = 1.const : DRAMH0, PAGE = 1.bss : DRAMH0, PAGE = 1.stack : RAMM1, PAGE = 1.sysmem : RAMM1, PAGE = 1.ebss : DRAMH0, PAGE = 1.econst : PRAMH0, PAGE = 0 .esysmem : L0L1RAM, PAGE = 1IQmath : PRAMH0, PAGE = 0IQmathTables : BOOTROM, type = NOLOAD, PAGE = 0另外,有些同学一开始运行FFT附带的例程,会遇上两个问题:一
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025河南许昌市建安区招聘公益性岗位人员13人模拟试卷及完整答案详解1套
- 2025广西百色市第三人民医院(百色市应急医院)公开招聘5人考前自测高频考点模拟试题附答案详解(考试直接用)
- 2025年宁波市鄞州区面向社会公开招聘社区专职工作者55人模拟试卷及一套答案详解
- 2025平煤集团国际贸易公司面向集团内部招聘1人笔试题库历年考点版附带答案详解
- 2025年枣庄市立医院公开招聘备案制工作人员(36人)考前自测高频考点模拟试题参考答案详解
- 2025湖南新宁县招聘教师30人模拟试卷及答案详解1套
- 2025昆明市官渡区司法局辅助人员招聘(1人)考前自测高频考点模拟试题带答案详解
- 2025江西吉安市青原区青鸾文化传媒有限公司招聘5人模拟试卷及答案详解(夺冠)
- 2025安徽皖岳信合项目管理有限公司招聘9人笔试题库历年考点版附带答案详解
- 2025河南许昌市消防救援支队招聘政府专职队员50人考前自测高频考点模拟试题及答案详解(易错题)
- 2025-2026学年道德与法治八年级上册第四单元维护国家利益综合素质测评卷(含答案)
- 5s考试试题及答案
- 白酒分销商合同协议书
- 卫星通信技术的前沿发展及其在物联网中的应用-洞察阐释
- 《医学中心肺癌诊疗》(讲课课件)
- 物流公司法人代表个人简介范文
- 规模灵活资源广域接入的新型配电系统分层分群架构与规划技术研究
- 2025年恒丰银行烟台分行招聘笔试参考题库含答案解析
- 中外建筑史课件
- 2024年度商业保理合同:保理公司与出口商之间的商业保理协议3篇
- 宣传网络安全文明上网
评论
0/150
提交评论