STMCU小助手
发布时间:2022-2-22 20:57
|
前言$ c i5 G3 t* E. _( U 本文目的是演示如何使用 STM32F30x 内部的 DSP 进行浮点快速傅立叶变换(FFT),为联系实际应用,使用 ADC 对波形发生器进行 ADC 采样,然后对 ADC 采样结果进行 FFT, 与 Matlab 仿真结果进行比较察看最终结果的准确性。会使用到 ARM的 DSP 库文件,以及 STM32F30x 的浮点运算单元以及 DSP 指令等。 0 e# Z8 w( s4 A% s: Z# x. i 模拟 ADC 采样数据实现 FFT+ R% Y) R3 K( R* ~/ k 使用 Matlab 使用 Matlab 生成 AM 调制波形
产生波形如下:# Q3 L1 y- Y# W
/ J: B# H" Q$ n4 N/ |/ c 生成模拟 ADC 数据,使用 STM32F30x STM32F30x STM32F30x 进行 FFT 运算 生成数据存于 AM_50_ADC_Data[]数组中,实数转换为复数,进行 CFFT 的运算,调用 arm_cfft_f32 库函数,1024 点 FFT。/ f6 e# r0 p* p# y8 t, _* T6 O
结果打印并且和 Matlab 计算结果进行比较/ Z, s' _$ t) r0 e# ] 为方便显示只取整数部分比较:上图为 Matlab 输出,下图为经过 STM32F30x 计算后的结果 5 t5 }% K* m3 E; p 8 F6 f3 |) H: `8 _# h% Q
`7 A& K# P/ ^" u% l 模拟数据进行快速傅立叶结论% b8 F* |; i+ D: a 从数据上看 Matlab 仿真以及 STM32F30x 的 FFT 两者非常吻合,数据可以直接使用。基于时间数据转换到频域上,理论上直流分量,频率 fc 处,以及频率 fc-fm,fc+fm 处都会有波峰出现,实际看 FFT 波形如下: ! x7 a$ H8 w. ?: A* u3 g9 h( c" V$ j
实际 ADC 采样并进行 FFT 操作9 ?, i+ [7 U, P& C w& T 使用波形发生器产生 50% 调幅波,载波 10KHz,调制波 1KHz,调制比 50%,偏移 1.5V" A: Z/ v% p: N- x& P
; i% E2 h* D' z5 |# W 使用 STM32F30x 进行 ADC 采样,采样结果存于数组,数据导入到 Matlab 显示波形如下: 3 c3 _1 V& o- X2 y: D( a
根据 ADC 采样数据进行 FFT 变换,分析结果如下面所示:
结论:( d4 y; H8 E g" j8 H6 \ 由 STM32F30x 的 ADC 采样的波形可以完整进行快速傅立叶变换,变化结果符合理论变化预期。并且利用 STM32F30x 的 FPU 以及 DSP 模块方便快速进行变化,给实际应用带来很大便利性。6 [- X+ Y. L' Q$ ?4 l% J" | A - v. k5 \' \/ K8 H" E 4 s& J4 I! j( I4 @ ! l) k4 M& ^% F1 q4 M% V 1 }) c: P; | g : S4 x8 I! Z% o7 l$ B 7 _) I7 o8 J2 b 4 L0 B; H. O# f _! N ; I2 v% S1 J* r 3 U- O5 r' J# F) ?% |+ e3 J 8 G# v& i9 i' O8 z ~# s$ P |
DMA 原理从 0 到 1:为什么它能解放 CPU?一文讲透 DMA 的工作流程
基于STM32F303双电机FOC驱动: 无感原理图/BOM表/代码等开源...
stm32cube_pwm配置
stm32f334驱动1.69寸SPI LED屏
stm32f334c8t6实现一个简单的温度湿度检测器
stm32f334温度湿度显示器开发板
stm32f334_硬件IIC跑u8g2移植步骤
详解STM32单片机的堆栈
stm32f334_第二十三章基础定时器6/7非中断方式单次触发
stm32f334_IIC通信点亮0.96OLED
微信公众号
手机版