专家
公告
财富商城
电子网
旗下网站
首页
问题库
专栏
标签库
话题
专家
NEW
门户
发布
提问题
发文章
DSP
利用TI的fftlib进行简单的FFT
2019-07-13 15:52
发布
生成海报
站内文章
/
DSP
12878
0
983
今天终于把DSP中的FFT弄清楚了,现在总结下成果。
一、首先介绍下FFT的理论知识
快速傅里叶变换(FFT)是DFT的一种快速算法实现。
FFT的物理意义如下:
二、然后介绍下具体的编程实现
#include
#include
#include
/* Create an Instance of FFT module */#define PI 3.141592653589793#define N 128 #pragma DATA_SECTION(ipcb, "FFTipcb");#pragma DATA_SECTION(mag, "FFTmag");CFFT32 fft=CFFT32_128P_DEFAULTS; long ipcb[2*N];long mag[N];long data[N];const long win[N/2]=HAMMING128; void main(){int i = 0;/* generate data */for( i = 0; i < N; i++)data[i] = (long)(0x10000000*sin(2*PI*i*1000/16000) + 0x10000000*sin(2*PI*i*2000/16000));// data[i] = (long)(0x10000000*sin(2*PI*i*1/128));/* Initialize FFT module */ fft.ipcbptr=ipcb; fft.magptr=mag;// fft.winptr=(long *)win; fft.init(&fft);for (i=0;i
一开始mag(幅值)数组的值一直为零,但是icpb(傅里叶变换后的x(k))的值却是正确的,先以table的形式解释下两个数组吧
查看了这么多资料还是不及TI的官方资料有用!!!看了TI官方的fft_mdl.PDF后恍然大悟,原来calc计算出来的ipcb是采取Q31格式的,而mag则是Q30格式的。开始之所以出现零,是因为其他一些资料上说是Q15格式,所以导致最
后得到的数据很小,等于零。因此只要放大波形幅值就能解决问题了。不过会过来想想,可能是因为long和int的原因,long是4个字节,即32bit,int是2个字节即16bit,而fftlib中的数据时0-1范围,因此对于32bit应该是采用Q31.
Ta的文章
更多
>>
利用TI的fftlib进行简单的FFT
0 个评论
嵌入式Linux完全开发手册-------------Linux内核移植
0 个评论
cortex A8处理器启动分析一引导代码BL0
0 个评论
热门文章
×
关闭
举报内容
检举类型
检举内容
检举用户
检举原因
广告推广
恶意灌水
回答内容与提问无关
抄袭答案
其他
检举说明(必填)
提交
关闭
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮