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

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

[复制链接]
STMCU小助手 发布时间:2022-2-22 20:57
前言$ c  i5 G3 t* E. _( U
本文目的是演示如何使用 STM32F30x 内部的 DSP 进行浮点快速傅立叶变换(FFT),为联系实际应用,使用 ADC 对波形发生器进行 ADC 采样,然后对 ADC 采样结果进行 FFT, 与 Matlab 仿真结果进行比较察看最终结果的准确性。会使用到 ARM的 DSP 库文件,以及 STM32F30x 的浮点运算单元以及 DSP 指令等。
& F& i- e" b3 u/ @0 e# Z8 w( s4 A% s: Z# x. i
模拟 ADC 采样数据实现 FFT+ R% Y) R3 K( R* ~/ k
使用 Matlab 使用 Matlab 生成 AM 调制波形

3 e' m, j( Q0 b5 q: F# J* Y
- e% _4 u; |3 w) T3 b& i
7 F# v0 i8 w( @* U产生波形如下:# Q3 L1 y- Y# W

$ w) Q( ]& g/ C3 d0 X/ q W3}0XAT7%5K~`6A}0NY%BHV.png ! i% B1 }7 o' s' ^( A
/ J: B# H" Q$ n4 N/ |/ c
生成模拟 ADC 数据,使用 STM32F30x STM32F30x STM32F30x 进行 FFT 运算
% ^$ \+ N! t& j7 F2 E生成数据存于 AM_50_ADC_Data[]数组中,实数转换为复数,进行 CFFT 的运算,调用 arm_cfft_f32 库函数,1024 点 FFT。/ f6 e# r0 p* p# y8 t, _* T6 O

/ u' D% e8 p5 b/ I0 Q- ^7 F
. @. d1 `0 l' k" G
  1. /* Real data to magnitude data */, _  Y" X; N! l2 P1 L2 h8 s1 k
  2. for(i=0; i<1024; i++)% t* \6 @* @( _3 Q4 h( s6 I4 L
  3. {) R/ H2 d2 W& R+ s+ z! V; Y
  4. testInput_f32_10khz[i*2+1] = 0;
    . h5 O! Z9 i9 y' d; p% _7 L3 ]
  5. testInput_f32_10khz[i*2] = AM_50_ADC_Data[i];: p3 K% d5 P" W0 z
  6. }$ }2 Y! N9 m' r/ g: X6 o
  7. /* Process the data through the CFFT/CIFFT module */
    / w& }8 Q, o7 x1 K- w
  8. arm_cfft_f32(&arm_cfft_sR_f32_len1024, testInput_f32_10khz, ifftFlag, doBitReverse);# j9 l2 s7 s4 L- {
  9. 6 ^  H& C$ C) |  R
  10. /* Process the data through the Complex Magnitude Module for
    - m# r9 i" w9 F: Y7 n2 u  ?* w. g) W
  11. calculating the magnitude at each bin */0 b4 P( ]4 X$ _+ x- L! [4 b
  12. arm_cmplx_mag_f32(testInput_f32_10khz, testOutput, fftSize);
复制代码

8 W) M2 q' x0 g) L4 \. j' |
/ Z  c& B0 p4 m结果打印并且和 Matlab 计算结果进行比较/ Z, s' _$ t) r0 e# ]
为方便显示只取整数部分比较:上图为 Matlab 输出,下图为经过 STM32F30x 计算后的结果
9 x6 O5 P5 }9 f5 t5 }% K* m3 E; p
8 F6 f3 |) H: `8 _# h% Q
`${%5HL`68QJGB[96OX4F0G.png
- W4 Q1 r+ J" d3 E, J. _  e# y: n  `7 A& K# P/ ^" u% l
模拟数据进行快速傅立叶结论% b8 F* |; i+ D: a
从数据上看 Matlab 仿真以及 STM32F30x 的 FFT 两者非常吻合,数据可以直接使用。基于时间数据转换到频域上,理论上直流分量,频率 fc 处,以及频率 fc-fm,fc+fm 处都会有波峰出现,实际看 FFT 波形如下:
1 ]# ^: a" Q- H- {! `* n! x7 a$ H8 w. ?: A* u3 g9 h( c" V$ j
KH{$V@3P`[UCU6M9X{KG0Z5.png
, @6 J& U) F# j7 @1 g
- _9 J9 @# Z* j- N

" I0 A* N( n2 [/ S实际 ADC 采样并进行 FFT 操作9 ?, i+ [7 U, P& C  w& T
使用波形发生器产生 50% 调幅波,载波 10KHz,调制波 1KHz,调制比 50%,偏移 1.5V" A: Z/ v% p: N- x& P

4 Q+ w3 h8 W6 l' i3 p( H FW(9V1VPQFAA65KN}~QH{RS.png 5 o" r  s) M( E  w4 a
; i% E2 h* D' z5 |# W
使用 STM32F30x 进行 ADC 采样,采样结果存于数组,数据导入到 Matlab 显示波形如下:
# C6 F$ _# P3 U& c! E: s3 c3 _1 V& o- X2 y: D( a
0OV6U8N)1J0I$}VQFT4F{CT.png ) N. ~! w% S$ Z9 t1 f

6 _' e1 |$ X( Y8 v7 d根据 ADC 采样数据进行 FFT 变换,分析结果如下面所示:
7 o4 j9 i( c7 h5 |( H/ U' ~
  i$ |* C3 Z& b5 n/ L0 i M)BW(A}I8Z$)V~W(68VUZ]A.png
) }# P: K; C, a: w* c, W5 U+ k3 b* O
+ S/ f: W& ~2 C. |" S, A& [
, k# c# `7 O9 Q) G4 ^9 \结论:( d4 y; H8 E  g" j8 H6 \
由 STM32F30x 的 ADC 采样的波形可以完整进行快速傅立叶变换,变化结果符合理论变化预期。并且利用 STM32F30x 的 FPU 以及 DSP 模块方便快速进行变化,给实际应用带来很大便利性。6 [- X+ Y. L' Q$ ?4 l% J" |  A

  T6 V, W* D/ S& q. J! C- v. k5 \' \/ K8 H" E
4 s& J4 I! j( I4 @

  s) V8 c( }8 j/ J5 k1 \. O! l) k4 M& ^% F1 q4 M% V
1 }) c: P; |  g

% x% E  p6 S: {$ G3 k: S4 x8 I! Z% o7 l$ B
7 _) I7 o8 J2 b

6 Y% Y" V# P0 z. V
: X3 |; C1 `6 q, G$ K8 Q5 h" \
4 ]3 n: \" c- i
! r  p8 Q6 z: F
% @# P5 n3 q8 f, e5 N5 W6 Y4 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

: W" Z* p0 h9 S2 s
赞 收藏 评论0 发布时间:2022-2-22 20:57

举报

0个回答

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版