你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【经验分享】STM32F30x 的 ADC 采样的傅立叶变换

[复制链接]
STMCU小助手 发布时间:2022-2-22 20:57
前言
本文目的是演示如何使用 STM32F30x 内部的 DSP 进行浮点快速傅立叶变换(FFT),为联系实际应用,使用 ADC 对波形发生器进行 ADC 采样,然后对 ADC 采样结果进行 FFT, 与 Matlab 仿真结果进行比较察看最终结果的准确性。会使用到 ARM的 DSP 库文件,以及 STM32F30x 的浮点运算单元以及 DSP 指令等。

模拟 ADC 采样数据实现 FFT
使用 Matlab 使用 Matlab 生成 AM 调制波形



产生波形如下:

W3}0XAT7%5K~`6A}0NY%BHV.png

生成模拟 ADC 数据,使用 STM32F30x STM32F30x STM32F30x 进行 FFT 运算
生成数据存于 AM_50_ADC_Data[]数组中,实数转换为复数,进行 CFFT 的运算,调用 arm_cfft_f32 库函数,1024 点 FFT。


  1. /* Real data to magnitude data */
  2. for(i=0; i<1024; i++)
  3. {
  4. testInput_f32_10khz[i*2+1] = 0;
  5. testInput_f32_10khz[i*2] = AM_50_ADC_Data[i];
  6. }
  7. /* Process the data through the CFFT/CIFFT module */
  8. arm_cfft_f32(&arm_cfft_sR_f32_len1024, testInput_f32_10khz, ifftFlag, doBitReverse);

  9. /* Process the data through the Complex Magnitude Module for
  10. calculating the magnitude at each bin */
  11. arm_cmplx_mag_f32(testInput_f32_10khz, testOutput, fftSize);
复制代码


结果打印并且和 Matlab 计算结果进行比较
为方便显示只取整数部分比较:上图为 Matlab 输出,下图为经过 STM32F30x 计算后的结果


`${%5HL`68QJGB[96OX4F0G.png

模拟数据进行快速傅立叶结论
从数据上看 Matlab 仿真以及 STM32F30x 的 FFT 两者非常吻合,数据可以直接使用。基于时间数据转换到频域上,理论上直流分量,频率 fc 处,以及频率 fc-fm,fc+fm 处都会有波峰出现,实际看 FFT 波形如下:

KH{$V@3P`[UCU6M9X{KG0Z5.png


实际 ADC 采样并进行 FFT 操作
使用波形发生器产生 50% 调幅波,载波 10KHz,调制波 1KHz,调制比 50%,偏移 1.5V

FW(9V1VPQFAA65KN}~QH{RS.png

使用 STM32F30x 进行 ADC 采样,采样结果存于数组,数据导入到 Matlab 显示波形如下:

0OV6U8N)1J0I$}VQFT4F{CT.png

根据 ADC 采样数据进行 FFT 变换,分析结果如下面所示:

M)BW(A}I8Z$)V~W(68VUZ]A.png


结论:
由 STM32F30x 的 ADC 采样的波形可以完整进行快速傅立叶变换,变化结果符合理论变化预期。并且利用 STM32F30x 的 FPU 以及 DSP 模块方便快速进行变化,给实际应用带来很大便利性。



















收藏 评论0 发布时间:2022-2-22 20:57

举报

0个回答

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版