您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 第33章ARM官方DSP库实数FFT的逆变换实现
安安富富莱莱UUMM440033DDSSPP教教程程SSTTMM3322--VV55开开发发板板系系统统篇篇手手册册22001155年年0011月月1155日日版版本本::11..00第第11页页共共55页页第第3333章章实实数数FFFFTT的的逆逆变变换换实实现现本章主要讲解实数FFT的逆变换实现。本章节使用的复数FFT函数来自ARM官方库的TransformFunctions部分33.1实数FFT的逆变换实现33.2总结3333..11实实数数FFFFTT的的逆逆变变换换实实现现本小节主要讲解实数FFT的逆变换实现,通过函数arm_cfft_f32实现浮点数的逆变换。3333..11..11aarrmm__rrfffftt__ffaasstt__ff3322逆逆变变换换函数定义如下:voidarm_rfft_fast_f32(arm_rfft_fast_instance_f32*S,float32_t*p,float32_t*pOut,uint8_tifftFlag)参数定义:[in]*Spointstoanarm_rfft_fast_instance_f32structure.[in]*ppointstotheinputbuffer.[in]*pOutpointstotheoutputbuffer.[in]ifftFlagRFFTifflagis0,RIFFTifflagis1注意事项:结构arm_rfft_fast_instance_f32的定义如下(在文件arm_math.h文件):typedefstruct{arm_cfft_instance_f32Sint;/**InternalCFFTstructure.*/uint16_tfftLenRFFT;/**lengthoftherealsequence*/float32_t*pTwiddleRFFT;/**Twiddlefactorsrealstage*/}arm_rfft_fast_instance_f32;下面通过函数arm_rfft_f32计算一个正弦波的FFT,然后再使用函数arm_rfft_f32做FFT逆变换,并使用Matlab计算变换前后的结果对比。/**********************************************************************************************************安安富富莱莱UUMM440033DDSSPP教教程程SSTTMM3322--VV55开开发发板板系系统统篇篇手手册册22001155年年0011月月1155日日版版本本::11..00第第22页页共共55页页*函数名:arm_rfft_fast_f32_app*功能说明:调用函数arm_rfft_fast_f32计算逆变换*形参:无*返回值:无**********************************************************************************************************/staticvoidarm_rfft_fast_f32_app(void){uint16_ti;arm_rfft_fast_instance_f32S;/*实数序列FFT长度*/fftSize=1024;/*正变换*/ifftFlag=0;/*初始化结构体S中的参数*/arm_rfft_fast_init_f32(&S,fftSize);/*按照实部,虚部,实部,虚部.....的顺序存储数据*/for(i=0;i1024;i++){/*50Hz正弦波,采样率1KHz*/testInput_f32_10khz[i]=1.2f*arm_sin_f32(2*3.1415926f*50*i/1000)+1;printf(%f\r\n,testInput_f32_10khz[i]);}/*1024点实序列快速FFT*/arm_rfft_fast_f32(&S,testInput_f32_10khz,testOutput_f32_10khz,ifftFlag);/*逆变换*/ifftFlag=1;/*1024点实序列快速FFT*/arm_rfft_fast_f32(&S,testOutput_f32_10khz,testInput_f32_10khz,ifftFlag);printf(****************************分割线**********************************\r\n);/*串口打印求解的模值*/for(i=0;ifftSize;i++){printf(%f\r\n,testInput_f32_10khz[i]);}}运行如上函数可以通过串口打印出原始正弦波和经过RFFT,RIFFT的正弦波,下面我们就通过Matlab对比变换前和变换后的波形。对比前需要先将串口打印出的两组数据加载到Matlab中,并给原始正弦波起名signal,变换后的数组起名sampledata,加载方法在前面的教程中已经讲解过,这里不做赘述了。Matlab中运行的代码如下:Fs=1000;%采样率N=1024;%采样点数n=0:N-1;%采样序列f=n*Fs/N;%真实的频率subplot(2,1,1);plot(f,signal);%绘制原始信号安安富富莱莱UUMM440033DDSSPP教教程程SSTTMM3322--VV55开开发发板板系系统统篇篇手手册册22001155年年0011月月1155日日版版本本::11..00第第33页页共共55页页title('原始信号');xlabel('时间');ylabel('幅值');subplot(2,1,2);plot(f,sampledata);%绘制RFFT和RIFFT后的信号title('RFFT和RIFFT后的信号');xlabel('时间');ylabel('幅值');Matlab运行的结果如下:波形前端部分:01002003004005006007008009001000-10123原始波形时间幅值01002003004005006007008009001000-10123和后的波形RFFTRIFFT时间幅值安安富富莱莱UUMM440033DDSSPP教教程程SSTTMM3322--VV55开开发发板板系系统统篇篇手手册册22001155年年0011月月1155日日版版本本::11..00第第44页页共共55页页波形后端部分:从上面的对比结果中可以看出,函数arm_rfft_fast_f32计算前后的正弦波基本是一致的。05101520253035012原始波形时间幅值0510152025303540012和后的波形RFFTRIFFT时间幅值9109209309409509609709809901000-1012原始波形时间幅值9309409509609709809901000-1012和后的波形RFFTRIFFT时间幅值安安富富莱莱UUMM440033DDSSPP教教程程SSTTMM3322--VV55开开发发板板系系统统篇篇手手册册22001155年年0011月月1155日日版版本本::11..00第第55页页共共55页页3333..22总总结结本章节内容较少,主要验证了函数arm_rfft_fast_f32正变换和逆变换,有兴趣的可以验证Q31和Q15两种数据类型的正变换和逆变换。
本文标题:第33章ARM官方DSP库实数FFT的逆变换实现
链接地址:https://www.777doc.com/doc-5072136 .html