STMCU小助手
发布时间:2022-2-22 20:57
|
前言 本文目的是演示如何使用 STM32F30x 内部的 DSP 进行浮点快速傅立叶变换(FFT),为联系实际应用,使用 ADC 对波形发生器进行 ADC 采样,然后对 ADC 采样结果进行 FFT, 与 Matlab 仿真结果进行比较察看最终结果的准确性。会使用到 ARM的 DSP 库文件,以及 STM32F30x 的浮点运算单元以及 DSP 指令等。 模拟 ADC 采样数据实现 FFT 使用 Matlab 使用 Matlab 生成 AM 调制波形
产生波形如下:
生成模拟 ADC 数据,使用 STM32F30x STM32F30x STM32F30x 进行 FFT 运算 生成数据存于 AM_50_ADC_Data[]数组中,实数转换为复数,进行 CFFT 的运算,调用 arm_cfft_f32 库函数,1024 点 FFT。
结果打印并且和 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 模块方便快速进行变化,给实际应用带来很大便利性。 |
微信公众号
手机版