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

【经验分享】STM32的DSP库的应用

[复制链接]
STMCU小助手 发布时间:2022-1-15 21:53
本篇内容将简要分析STM32自带的DSP库文件,其用汇编语言编写,代码执行效率明显优于C语言,ST公司封装好了了库文件,我们不必看懂其汇编代码,只要会调用接口函数即可。
1,代码分析
    首先我们需要在一个已经建立好的工程文件里添加如下编译路径:
262145381378421.jpg
工程需要添加的文件如下图:
262149227151512.jpg

$ s% d$ y1 S0 d+ C. e3 t       为了产生fft变换信号,我们可以自己产生个采样信号:使用三角函数生成采样点,供FFT计算,fx  = 4000 * sin(PI2*i*50.0/Fs) + 4000 * sin(PI2*i*2500.0/Fs) + 4000*sin(PI2*i*2550.0/Fs)。: R" k- j' S0 f$ F
      模拟采样数据,采样数据中包含3种频率正弦波:50Hz,2500Hz,2550Hz, lBUFIN数组中,每个单元数据高字(高16位)中存储采样数据的实部,低字(低16位)存储采样数据的虚部(总是为0)。% k$ |, N2 f# L& w! s0 y
      其中dsp_asm_init()函数的作用是产生采样信号,实际工程应用中我们使用的是ADC采样的处理值。dsp_asm_test()函数的作用是进行FFT变换,并计算各次谐波幅值。具体代码参见下面:
' D; ?1 p8 r9 w$ D- f% P! ]
  1. 1 /*+ h5 h1 L7 q& J1 Z. R5 k4 i# O
  2.   2 *********************************************************************************************************
    5 y( S9 Q" v' B2 n! `  @
  3.   3 *                                     MICIRUM BOARD SUPPORT PACKAGE
    * [' b& L6 `' r0 P
  4.   4 *
    : l, L8 j6 ^% Z+ o% K
  5.   5 *                             (c) Copyright 2007; Micrium, Inc.; Weston, FL$ B4 |3 w+ J/ M$ x: o" Y
  6.   6 *
    / I; q1 h7 `3 H0 }( j9 M
  7.   7 *               All rights reserved.  Protected by international copyright laws.
    . n$ p1 H- h% k
  8.   8 *               Knowledge of the source code may NOT be used to develop a similar product.
    0 x9 {) A! K5 o
  9.   9 *               Please help us continue to provide the Embedded community with the finest
    * r) G& U  }" f1 ~4 n, x
  10. 10 *               software available.  Your honesty is greatly appreciated.
    3 N7 V. [% j" g
  11. 11 ********************************************************************************************************** e" y" u& c% P% n% {
  12. 12 */
    % @' f0 c/ a4 k6 p" l
  13. 13 7 B% z$ U* V4 G
  14. 14 /*
    ! h/ \! R4 K. e( h# z) ^1 l# T: U* S
  15. 15 *********************************************************************************************************
    . h8 C  c& [' f! y! [
  16. 16 */ J$ _* l% }' }7 X" I' J2 [
  17. 17 *                                        BOARD SUPPORT PACKAGE
    1 e7 [" d9 f2 s
  18. 18 *# J4 L3 \% u. D: s5 s3 E
  19. 19 *                                     ST Microelectronics STM328 S4 n8 \' c1 E- C9 Q% H  e, o+ z5 R
  20. 20 *                                              with the
    * V7 b( _. v+ V8 U1 T
  21. 21 *                                   STM3210B-EVAL Evaluation Board
    , d+ j3 p# b: I  ?) N1 M
  22. 22 *
    ! u9 c- q  e2 C' b5 z
  23. 23 * Filename      : bsp.c, \& B9 Y: ]: X& D% d$ U# n/ w  [
  24. 24 * Version       : V1.00. j3 P( T$ k1 `7 V1 a4 @2 `
  25. 25 * Programmer(s) : Brian Nagel& Y; O& B2 z! S
  26. 26 *********************************************************************************************************( s$ q# W0 ?& Y$ z* ~9 r+ f
  27. 27 */
    % V$ x- h1 Q; R3 g$ i
  28. 28 : y" A" h* Z+ Y9 L
  29. 29 /*) ?% J2 q1 q1 w# H; C& b2 G( v: [
  30. 30 *********************************************************************************************************
    6 `. p- h* W; R9 [
  31. 31 *                                             INCLUDE FILES
    & B. \" F; y% ~& e# d
  32. 32 *********************************************************************************************************8 ^: I, g; S4 B
  33. 33 */8 u# C- f" W7 B7 I% V* v% A% {
  34. 34
    % F+ ~, C' y% h" n
  35. 35 #define  DSP_ASM" n7 Q- F0 M$ r
  36. 36 #include "stm32f10x.h") I, ^5 U# M( F$ g
  37. 37 #include "dsp_asm.h"( j- ^) {3 \4 H& @2 [3 W+ u  R1 c
  38. 38 #include "stm32_dsp.h"  U5 D) m! q  p3 p& K1 S/ u# w2 A; K/ ~
  39. 39 #include "table_fft.h"
    0 _3 o' `& [7 c0 d0 Q% E0 k4 I; y
  40. 40 #include <stdio.h>
    ( F% w% z" [$ ]* ]. j& ]
  41. 41 #include <math.h>
    % J( I: q. t: J+ P+ t7 x
  42. 42 - |' G. D* v$ U* Z0 r  L* t9 a
  43. 43 % k- n; v' ~9 o$ q, X
  44. 44 /*
    ' l# e6 v3 X# {8 C: `0 B
  45. 45 *********************************************************************************************************
    + w' Q/ k# O0 W  o; j
  46. 46 *                                           LOCAL CONSTANTS1 H! O6 p2 q( R% B8 M! h
  47. 47 ********************************************************************************************************** W7 I; p% N3 n+ _* @/ _
  48. 48 */% g% A; G( d; v) c6 C" C- A7 A. A& {
  49. 49 #define PI2 6.28318530717959% T$ e- E- _" j8 F! y" O  N2 ^
  50. 50 #define NPT_1024 10249 h1 L0 Y: ~% E! c
  51. 51 //#define NPT_256 2565 T" v; `+ E! E$ c
  52. 52 //#define NPT_1024 10249 N" [- f5 p+ d! s1 U% o/ b4 C' R5 N
  53. 53
    6 t1 l$ d) Z$ |/ d0 G) t
  54. 54 // N=64,Fs/N=50Hz,Max(Valid)=1600Hz
    1 S* S4 \2 |0 F7 }9 T; Q3 d
  55. 55 #ifdef NPT_642 B' J9 ]& B+ }5 E! N# q/ \
  56. 56 #define NPT 64: o* d; A6 |0 w! \; V
  57. 57 #define Fs  3200
    % u  o3 G9 A: X7 m8 x7 P* f8 _' h! c
  58. 58 #endif
    " [7 [% [; \$ Y- _8 L# m9 k  ]% E
  59. 59
    % h: M9 W/ Q" i% t! y6 n  L' i
  60. 60 // N=256,Fs/N=25Hz,Max(Valid)=3200Hz% u+ j9 v2 v" D& b/ O
  61. 61 #ifdef NPT_256* E1 y$ c% y- M1 A
  62. 62 #define NPT 256& F/ g, U& \- F/ v
  63. 63 #define Fs  6400/ V( e: F% S' r$ A
  64. 64 #endif
    ( [1 Y& R; ]- x( I2 i# F
  65. 65
    ( b/ c; M! Y5 g! p6 x5 {7 H/ {: f. z( B
  66. 66 // N=1024,Fs/N=5Hz,Max(Valid)=2560Hz; V: E: \0 ^. D( g6 d& Y* P  x
  67. 67 #ifdef NPT_10249 m9 t! f' i* z+ [8 B
  68. 68 #define NPT 1024) \, X2 j- j/ ?: M# v2 ?6 d/ Z4 Y
  69. 69 #define Fs  5120# q/ p0 m! }$ n* S
  70. 70 #endif
    + J7 o! U' a' Z' e$ f
  71. 71
    . N, K3 \  ]& w: [) K3 U
  72. 72
    - N# k- A7 Y% W! J+ H9 b
  73. 73 /** W  c- i) z" u, L
  74. 74 *********************************************************************************************************1 H" c5 [9 v% \) `
  75. 75 *                                          LOCAL DATA TYPES
    ) E- U5 W6 H+ _
  76. 76 *********************************************************************************************************
    3 s9 }) N$ B5 q* S
  77. 77 */
    ; L2 e0 j8 A2 y' l2 K
  78. 78
    , R, a. F% L" ^" y
  79. 79 , `( u! A9 v9 l4 J# K1 \
  80. 80 /*
    6 a# ]# Y: P9 C# q* M8 M. x
  81. 81 *********************************************************************************************************
    1 k: N! g( u, F' X/ y& O, Z# ~( F
  82. 82 *                                            LOCAL TABLES
    , `6 u% G% F" C' t% W; T4 [
  83. 83 *********************************************************************************************************1 E# u! F4 e% o1 d
  84. 84 */
    1 @' h4 {! i# F# W
  85. 85
    " X- n( D, _+ l# C( O/ G. i# l
  86. 86 6 F0 U: Y2 Q. c
  87. 87 /*
    0 z, F' r4 V6 V: S6 l9 |
  88. 88 *********************************************************************************************************6 V9 O% p5 r1 Y) C( H# I
  89. 89 *                                       LOCAL GLOBAL VARIABLES
    , j% S, t/ M& G2 Y& g" O* R
  90. 90 *********************************************************************************************************
    % r- ^4 `% O7 A7 R7 B
  91. 91 */: P& {! B: U7 ]" v3 H
  92. 92 long lBUFIN[NPT];         /* Complex input vector */
    ) @. ]5 U) j3 a
  93. 93 long lBUFOUT[NPT];        /* Complex output vector */2 }: ~. M/ ]; n
  94. 94 long lBUFMAG[NPT];/* Magnitude vector */
    0 X% F3 |, X2 Q0 p' s; Z
  95. 95 /*$ v" l! K% k5 H/ a. T1 \9 l5 {% ~7 }
  96. 96 *********************************************************************************************************" `  [. \( \0 @) j$ d" q
  97. 97 *                                      LOCAL FUNCTION PROTOTYPES& s( e$ q5 P4 G( ^* ^9 K
  98. 98 *********************************************************************************************************
    3 Y% l0 o4 b$ R2 }3 ^! I
  99. 99 */  z0 K1 Q4 y1 b2 U& d
  100. 100 void dsp_asm_powerMag(void);. i, y% U, N1 X# G. ?3 j
  101. 101
    ( l! V  M( n0 S$ X" x' ~
  102. 102 /*
    * ?+ ]3 H7 g# i8 C  ~' ^1 R8 r! e
  103. 103 *********************************************************************************************************/ Z  G( t, l8 O% T4 {4 g
  104. 104 *                                     LOCAL CONFIGURATION ERRORS
    # {( _7 l! B: B
  105. 105 *********************************************************************************************************
    ! m, k  d9 n: N- s
  106. 106 */
    ) l* c9 ]( T9 [( G' _( p9 N6 }
  107. 107 5 O6 M8 L+ U$ M' o: H, d. i% F
  108. 108   I: [& N7 Q7 G6 z; ?& V
  109. 109 /** m7 l# S- E5 A+ O# Y) L
  110. 110 ******************************************************************************************************************************2 c! o3 w) Y# g& j" D
  111. 111 ******************************************************************************************************************************
    8 L1 ~6 O3 V+ E6 }
  112. 112 **                                         Global Functions: C( [% v; z! {  H# W7 O
  113. 113 ******************************************************************************************************************************
    . T0 B+ P7 D4 _0 B4 ~- B: b8 c
  114. 114 ******************************************************************************************************************************' S7 H: x" z2 K% f4 Z9 s+ ^
  115. 115 */
    4 A& H/ z. }* B0 @9 T" Y
  116. 116
    : E0 {* U3 P, p* ^. y8 J
  117. 117 void  dsp_asm_init()/ c( _  r% I% u# k& v
  118. 118 {! H7 b; N4 t  C
  119. 119   u16 i=0;
    7 P) M) _# w; u0 D
  120. 120   float fx;4 W0 O0 B  z- i, v0 e/ `
  121. 121   for(i=0;i<NPT;i++)
    ) o! P. J8 \  u
  122. 122   {
    ' m& l% E0 Z0 [* W6 O! k5 u" ^# o
  123. 123     fx  = 4000 * sin(PI2*i*50.0/Fs) + 4000 * sin(PI2*i*2500.0/Fs) + 4000*sin(PI2*i*2550.0/Fs);. m+ `/ W7 Z! ^6 C
  124. 124     lBUFIN[i] = ((long)fx)<<16;1 O9 r# C1 @# f: }( ~
  125. 125   }
    , R$ H4 g! G  ~# W- ?
  126. 126 }5 ?* [6 Z9 N& M
  127. 127
    " |0 w+ Q* L1 x2 T
  128. 128 void  dsp_asm_test()
    2 |7 ]2 U3 ?! t" C, q  A* D
  129. 129 {% [! \% V+ f  k* u' Q, r
  130. 130 3 G  M  [/ }; Q7 A% e) b3 ^
  131. 131 #ifdef NPT_64
    1 G3 ~% h0 X0 \7 A
  132. 132   cr4_fft_64_stm32(lBUFOUT, lBUFIN, NPT);
    8 x" M4 x3 X# w6 k5 ?
  133. 133 #endif0 w' Z% r: L* |! P
  134. 134
    4 x2 h1 X# c) l4 b; ^# p1 p% }" B+ N
  135. 135 #ifdef NPT_256- D# M6 e) w2 w. N: E" W+ f
  136. 136   cr4_fft_256_stm32(lBUFOUT, lBUFIN, NPT);) P$ I1 ~1 i1 \& g' |
  137. 137 #endif3 e" F2 \( e; n) K% {! T/ U# u
  138. 138 4 S6 I6 B  {, A; D
  139. 139 #ifdef NPT_1024
    8 u- r) z$ O/ I0 b
  140. 140   cr4_fft_1024_stm32(lBUFOUT, lBUFIN, NPT);# ^  D$ O. K, U4 q$ a
  141. 141 #endif) ~! o( m  r7 x! {; Z
  142. 142
    6 {! h8 q% m# N& S# }7 z. y% K: [
  143. 143   // 计算幅值
      I0 L; i# K+ p* j7 ?+ h
  144. 144   dsp_asm_powerMag();
    / S5 X  }# S2 {
  145. 145   : P" {. a/ h( c/ Q8 f
  146. 146 }8 T: Q) Q" h$ k3 Z: i' M
  147. 147 ; f+ l* K! Z3 `) x
  148. 148 void dsp_asm_powerMag(void)
    6 s  P5 D+ Y* l" H/ R
  149. 149 {7 P! f3 ^% r: S$ k* X
  150. 150   s16 lX,lY;
    & q5 `& J+ @7 ~  V
  151. 151   u32 i;
    3 Y+ S8 O& h  Q' [; m/ `
  152. 152   for(i=0;i<NPT/2;i++)3 o& {. ]7 D* h) g) E
  153. 153   {
    # A8 |  ^" s2 J- y9 c
  154. 154     lX  = (lBUFOUT[i] << 16) >> 16;
    6 ^; R. d+ E# x6 h
  155. 155     lY  = (lBUFOUT[i] >> 16);3 v3 ]. s! y4 Q- @4 q/ Q  {6 F
  156. 156     {: e' X6 H! V% v3 o  ^. `) j7 N
  157. 157     float X    = NPT * ((float)lX) /32768;
    ) L/ }/ v- i4 m3 I& h
  158. 158     float Y    = NPT * ((float)lY) /32768;6 |' _' z! J2 e9 Q6 g* |
  159. 159     float Mag = sqrt(X*X + Y*Y)/NPT;) e" ^9 `# B. D! G) C# M8 V
  160. 160     lBUFMAG[i]    = (u32)(Mag * 65536);: g* [; d+ J9 ^" B
  161. 161     }# g; o! @- r6 U% R- |
  162. 162   }$ F- |# c( x3 b
  163. 163 }
复制代码
  1. 1 /*
    5 U4 W$ f; m: ?/ t
  2. 2 *********************************************************************************************************
    / L7 G" a0 Y4 d& ~4 {% h
  3. 3 *                                     MICIRUM BOARD SUPPORT PACKAGE, n  j* d! u! n( y
  4. 4 *4 U0 ^! W% B" I$ i) |
  5. 5 *                             (c) Copyright 2007; Micrium, Inc.; Weston, FL
    , _# Y0 `, X* _
  6. 6 *
    # N( p% T$ ]# m' |" _2 d6 o
  7. 7 *               All rights reserved.  Protected by international copyright laws.
    - p5 s! N  P  _) R* Y4 ]4 i- e
  8. 8 *               Knowledge of the source code may NOT be used to develop a similar product.
    , d5 w8 N6 J: x, ^8 w( r
  9. 9 *               Please help us continue to provide the Embedded community with the finest! p+ ?/ b* `0 X$ l/ A+ s& @
  10. 10 *               software available.  Your honesty is greatly appreciated.+ F; i' C2 H( I' I# A% F
  11. 11 *********************************************************************************************************
    ) e* |) J2 M# z( ^& `
  12. 12 */
    + b; T+ Z/ r" a- a, A9 H7 {
  13. 13
    7 D8 K+ c3 ]6 L% Y" w& L
  14. 14 /*# n. V' r8 M& M: B7 s
  15. 15 *********************************************************************************************************8 u% ]9 K* s8 k" u, U9 x7 e
  16. 16 *& _: J! x) E2 f4 P# q
  17. 17 *                                        BOARD SUPPORT PACKAGE
    : B$ m% B( N/ ~6 R. M( y2 I1 P
  18. 18 *1 D& M% N* @5 j$ }9 l& j  d, T
  19. 19 *                                     ST Microelectronics STM32
    , A( R+ o* C, @  _( C0 _6 F
  20. 20 *                                              with the- u. R9 ^* x2 ?! o
  21. 21 *                                   STM3210B-EVAL Evaluation Board
    * `$ L' R- `" j/ ?  |
  22. 22 *" ~0 P6 ]7 a8 x' G$ w
  23. 23 * Filename      : bsp.h4 t; w3 ?6 H8 }$ r
  24. 24 * Version       : V1.00
    ' y# }& x9 s$ \5 [
  25. 25 * Programmer(s) : Brian Nagel; X% ?+ I5 |2 ?" A3 Q1 Q$ N2 x% s: e
  26. 26 *********************************************************************************************************
    . p; w5 R7 V" W2 k) f* o( B, W
  27. 27 */
    4 ~  ~0 d" N8 F2 S6 M% t
  28. 28 % Y8 m7 o2 g3 j4 O# v
  29. 29 #ifndef  __DSP_ASM_H__
    , j; v+ z6 f+ d
  30. 30 #define  __DSP_ASM_H__
    " X; K4 K: N! Q6 o& Q! p
  31. 31 8 M- G% T# `: Y" A  N0 Y8 V$ o4 G
  32. 32 /*
    ( `+ S9 N& s; [5 h+ Y6 g+ {8 `  j( j
  33. 33 *********************************************************************************************************
    1 n" l! l. N5 G+ W! T6 W
  34. 34 *                                               EXTERNS
    : b$ L+ A7 N' N3 Q4 s  \. ^' {
  35. 35 *********************************************************************************************************
    9 m  T% g- p, u6 m4 L/ p
  36. 36 */; o! X+ |! r7 G* [7 n
  37. 37 " G' ^* _+ N$ W: V( S( W+ K# a9 B( U
  38. 38 #ifdef   DSP_ASM
    0 `! \$ H! J( Y
  39. 39 #define  DSP_EXT. A$ |7 U. R+ T8 D
  40. 40 #else* k  i0 Z  l& I9 Z  }9 E* U
  41. 41 #define  DSP_EXT  extern, |: x& q3 x) s
  42. 42 #endif0 G& ~, [. }" m. T* {8 f/ j# D$ Q
  43. 43
    5 B  F) R1 d! |& |% q+ N' V/ U
  44. 44 /*
    # V8 r7 d3 a. u! t3 M; r& n  K, U& R
  45. 45 *********************************************************************************************************
    # Z' I$ F4 v$ G/ L9 j
  46. 46 *                                             INCLUDE FILES
    , |& e$ {$ a3 E
  47. 47 *********************************************************************************************************( g1 d) }$ J/ Y% H4 f8 ]/ T
  48. 48 *// W; u% }/ v( t$ o; ~7 [4 T
  49. 49 ) ]" }: \4 y$ p! J) G
  50. 50
    4 F1 I$ m* ^" y# [! ]
  51. 51 0 k8 g2 |" D9 ?! w8 o) M0 z) }! A: _, n  f
  52. 52 ( b* X2 p; h2 R
  53. 53 /*) v+ W# o8 n1 S& o2 e8 E
  54. 54 *********************************************************************************************************
    ) C! z. a( u6 m6 Y
  55. 55 *                                          GLOBAL VARIABLES8 [# A+ Q) M, [* \+ J  y) o* P; W
  56. 56 *********************************************************************************************************
    ) y/ ]! D& @5 M: K2 s4 q  V
  57. 57 */7 t9 Q! T% ~, S' f8 _
  58. 58 " t5 u2 z/ l# H7 i6 E* F$ N1 v
  59. 59 % Q5 R% k' k( ]* N- ^9 O) F1 `
  60. 60 /*
    2 S5 }* p! Y. ?: I; `' g7 \8 g
  61. 61 *********************************************************************************************************$ A! x: _+ ~- s- b7 g/ l
  62. 62 *                                               MACRO'S
    " b( a+ L" ^, m4 m: C
  63. 63 *********************************************************************************************************
    , {+ M8 b, Y+ {  X* q0 _
  64. 64 */! f4 y$ o  ^& Y% e; D
  65. 65
    ! }. y1 G1 A% }) g, @
  66. 66 5 W) ]: w, x6 g0 }" V' M& C) @3 m, r
  67. 67 /*
    9 f$ u3 b4 E) J9 ]4 d  A6 q  u4 S
  68. 68 *********************************************************************************************************5 g/ ?8 {0 k/ l1 X
  69. 69 *                                            FUNCTION PROTOTYPES# W5 E1 ~  u( d, U( W+ T
  70. 70 *********************************************************************************************************, l6 m  h4 L) I/ V. b1 Y
  71. 71 */9 a* t' h" ?6 t& A
  72. 72 - U; g2 a0 ~2 u/ X
  73. 73 void    dsp_asm_test(void);3 w6 M7 E- A1 i* T: E, ]1 l
  74. 74 void  dsp_asm_init(void);
    $ v( `6 j; G) ?! M/ Q; b" v+ c
  75. 75
    ) M! z) @" A/ G' i0 _; F
  76. 76 #endif                                                          /* End of module include.                               */
复制代码
; f+ y; {, K0 C  ~0 T* z
     着重分析下dsp_asm_powerMag()函数的作用,其函数就是求幅值,首先定义的的一个16位的有符号的数据IX 和IY 这两个只是中间变量,然后定义的i,是32位的无符号型。语句的目的是Mag = sqrt(X*X + Y*Y)/NPT。但直接这么写不符合DSP的计算习惯也就是不符合浮点运算的习惯。因此语句在for函数i写道 lX  = (lBUFOUT << 16) >> 16 就是取32位的i的低16位数据,lY  = (lBUFOUT >> 16);是取高16位数据。下面的两句/ z* k9 }6 g- a- o: @
    float X    = NPT * ((float)lX) /32768;  
9 B2 h- n: b1 K. h    float Y    = NPT * ((float)lY) /32768! D+ v; A* w# ^( W2 |: O6 J7 T' @
    目的就是把数据浮点化,至于为什么是除以32768 。可以这么说,浮点化就好像10进制里面的科学计数法。32768=2的15次。除以32768也就是去除了浮点数后面的那个基数,只剩下前面的。比如1991 改写成1.991*10的三次幂,再除以10的三次方,只剩下1.991,便于余下的运算。至于最后一句要乘以65536是因为我们定义的数据和我们需要求得的数据都是无符号32位的,之前已经把32位的数据拆开又分别浮点化了又开了个根号,所以再把它变回来 只需要乘以2的16次,也就是65536.比如说问你什么时候生日,你说是19911030,然而DSP是不习惯这么干的,他需要把它拆开为1991和1030。再写成1.991x10的3次方和1.030x10的3次方。然后才能进行其他的运算。
2 S: c, i5 Q; P# E" W  }) ?     这里是ST公司采用了DSP专用芯片(主要是指TI)的写法,也就是说尽管DSP的芯片类型很多,数据变量的定义也各有差异,但原理是一样的,最终还是要采用DSP习惯的运算方式。至于为什么一定要采用浮点运算,因为机器是傻子,然而TI公司的工程师是天才。
     main函数中我们只需在while(1)前加上dsp_asm_init();  dsp_asm_test();即可。
1 u/ l2 F$ |; B# h2,实验现象
       注意FFT运算结果的对称性,也即256点的运算结果,只有前面128点的数据是有效可用的。
     ① N=64,Fs/N=50Hz,Max(Valid)=1600Hz,64点FFt,采样率3200Hz,频率分辨率50Hz,测量最大有效频率1600Hz
64点FFT运算结果图(局部):
262213093876622.jpg
     上图中,数组下标X对应的谐波频率为:N×Fs/64=N×3200/64=N*50Hz.
     lBUFMAG[1] 对应 50Hz谐波幅值。
    上图中由于FFT分辨率50HZ,最大只能识别1600Hz谐波,导致结果中出现错误的数据。
         ②N=256,Fs/N=25Hz,Max(Valid)=3200Hz,256点FFt,采样率6400Hz,频率分辨率25Hz,测量最大有效频率3200Hz# C* }: w. q) ?& e. W
256点FFT运算结果图(局部):
262216596836465.jpg
     上图中,数组下标X对应的谐波频率为:N×Fs/256=N×6400/256=N*25Hz.
     lBUFMAG[2] 对应 2×25 =50Hz谐波幅值
     lBUFMAG[100] 对应 100×25=2500Hz谐波幅值
     lBUFMAG[102] 对应 102×25=2550Hz谐波幅值
    ③N=1024,Fs/N=5Hz,Max(Valid)=2560Hz,1024点FFt,采样率5120Hz,频率分辨率5Hz,测量最大有效频率2560Hz
1024点FFT运算结果图(局部):
262221245744340.jpg
    上图中,数组下标X对应的谐波频率为:N×Fs/1024=N×5120/1024=N*5Hz.
     lBUFMAG[10] 对应 10×5 =50Hz谐波幅值
     lBUFMAG[500] 对应 500×5=2500Hz谐波幅值
     lBUFMAG[510] 对应 510×5=2550Hz谐波幅值

$ \" d4 ?- q  p
总结:该工程中模拟信号源为:4000 * sin(PI2*i*50.0/Fs) + 4000 * sin(PI2*i*2500.0/Fs) + 4000*sin(PI2*i*2550.0/Fs)。
信号为1个50Hz、1个2500Hz、1个2550Hz的正弦波混合信号,幅值为均为4000。

. b& n8 {& u3 }8 w# \
收藏 评论0 发布时间:2022-1-15 21:53

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版