DSP进行浮点快速傅立叶变换剖析

前言
本文目的是演示如何使用stm32f30x 内部的dsp 进行浮点快速傅立叶变换(fft),为联系实际应用,使用adc 对波形发生器进行adc 采样,然后对adc 采样结果进行fft, 与 matlab 仿真结果进行比较察看最终结果的准确性。会使用到armdsp 库文件,以及stm32f30x 的浮点运算单元以及dsp指令等。
模拟adc采样数据实现fft 使用matlab生成am调制波形
波形公式为:am_50= sin(2πfc)*(1+50%*sin(2πfm)), 其中fc 为载波频率,fm 为调制波频率,调制比50%。为了使用adc 采样,将波形进行偏移处理,叠加1.5v 电压,最终波形展开公式如下:
am_50 = sin(2πfc) + 50%*sin(2πfm))* sin(2πfc) + 1.5
matlab 程序如下:
x =sin(2*pi*fm*t); % modulation wave
figure;plot(t,x);y =sin(2*pi*fc*t); % carrier wavefigure;plot(t,y);z1 =y.*(1+m1*x) + 1.5; % am wave with 50% depthfigure; %figure 1plot(t,z1);xlabel('time');ylabel('amplitude');title('am with50% depth');z1 =z1*4096/3.3; % 12-bit adc value
产生波形如下:
图【一】
生成模拟adc数据,使用stm32f30x进行fft运算
生成数据存于am_50_adc_data[]数组中,实数转换为复数,进行cfft 的运算,调用arm_cfft_f32 库函数,1024 点fft。
/* real data to magnitudedata */
for(i=0; i {testinput_f32_10khz[i*2+1] =0;testinput_f32_10khz[i*2] = am_50_adc_data[i];}
/* process the data throughthe cfft/cifft module */
arm_cfft_f32(&arm_cfft_sr_f32_len1024,testinput_f32_10khz, ifftflag, dobitreverse);
/* process the data throughthe complex magnitude module forcalculating the magnitude ateach bin */
arm_cmplx_mag_f32(testinput_f32_10khz,testoutput, fftsize);
结果打印并和matlab计算结果进行比较
为方便显示只取整数部分比较:图【二】为matlab 输出,图【三】为经过stm32f30x计算后的结果.
图【二】
图【三】
从数据上看matlab 仿真以及stm32f30x的fft 两者非常吻合,数据可以直接使用。基于时间数据转换到频域上,理论上直流分量,频率fc处,以及频率fc-fm,fc+fm 处都会有波峰出现,实际看fft 波形如下:
实际adc采样并进行fft操作 使用波形发生器产生50% 调幅波,载波10khz,调制波1khz,调制比50%,偏移1.5v。
使用stm32f30x进行adc 采样,采样结果存于数组,数据导入到matlab 显示波形如下:
根据adc采样数据进行fft 变换,分析结果如下面所示:
结论: 由stm32f30x 的adc 采样的波形可以完整进行快速傅立叶变换,变化结果符合理论变化预期。并且利用stm32f30x 的fpu 以及dsp 模块方便快速进行变化,给实际应用带来很大便利性。

远东电池出资7.5亿增资子公司
深圳正品模胚厂家影响非标模架质量问题的原因有哪些?
印度第三季度智能手机出货量3500万部 中国厂商成为赢家
第二十三届中国国际工业博览会宣布延期举行
锂电池万能充电器设计解析
DSP进行浮点快速傅立叶变换剖析
如何解决IP城域网CR路由异常
AGM推出新款三防手机 售价369元
杭州移动:5G+F5G的组合,全面释放数字经济的新动能
沃达丰声称要在整个欧洲市场部署openRAN站点
INDEMIND:视觉SLAM,助力服务机器人再进化
晶电在美国对两家企业提出专利侵权诉讼
国家统计局:前三季度集成电路产量同比增长14.7%
木制文物防火如何利用热成像技术?
电解液中的锂盐有哪些特性
交流接触器的检查与维护
目前国内已形成七大机器人产业集聚区
刀开关的安装流程
首款可穿戴开发套件 一站式解决开发需求
基于虚拟仪器技术的家用心电仪的设计解析