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

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

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

) B$ \4 ^! V  O+ ]7 \" Z       为了产生fft变换信号,我们可以自己产生个采样信号:使用三角函数生成采样点,供FFT计算,fx  = 4000 * sin(PI2*i*50.0/Fs) + 4000 * sin(PI2*i*2500.0/Fs) + 4000*sin(PI2*i*2550.0/Fs)。* m# x' c5 `. U
      模拟采样数据,采样数据中包含3种频率正弦波:50Hz,2500Hz,2550Hz, lBUFIN数组中,每个单元数据高字(高16位)中存储采样数据的实部,低字(低16位)存储采样数据的虚部(总是为0)。
) G+ F8 U; j  C3 i8 q      其中dsp_asm_init()函数的作用是产生采样信号,实际工程应用中我们使用的是ADC采样的处理值。dsp_asm_test()函数的作用是进行FFT变换,并计算各次谐波幅值。具体代码参见下面:
) j+ ]9 |, q7 ^7 F6 ~1 r& D5 i
  1. 1 /*
      `# R8 m  K2 [9 h5 ]% R6 N% m: {9 Q6 v
  2.   2 *********************************************************************************************************$ O1 q! h0 x: J& T. P; U
  3.   3 *                                     MICIRUM BOARD SUPPORT PACKAGE
    & B/ p3 I% F7 ^5 a+ E0 W5 s
  4.   4 *
    % I2 _% g; l, [  N) O
  5.   5 *                             (c) Copyright 2007; Micrium, Inc.; Weston, FL1 T& K$ y2 E3 ]3 L
  6.   6 *
    - y. ]0 X8 J) |8 m; i
  7.   7 *               All rights reserved.  Protected by international copyright laws.
    # `7 e0 t1 ~- r3 E6 o) B2 ?' d9 N) y
  8.   8 *               Knowledge of the source code may NOT be used to develop a similar product.
    . F9 E8 F1 {0 A
  9.   9 *               Please help us continue to provide the Embedded community with the finest
    ' z& _# {+ [; Y# h+ ?
  10. 10 *               software available.  Your honesty is greatly appreciated.: v- [4 v. W; o1 W
  11. 11 *********************************************************************************************************
    $ P& v1 A/ B; \8 d; R* b1 Q
  12. 12 */
    $ g# v* ]+ B( k4 z% G' d9 E6 C
  13. 13 5 k# n9 q1 L2 c9 m4 B
  14. 14 /*
    / A/ u. `4 P3 ?+ e5 l3 g( K2 ?! G
  15. 15 *********************************************************************************************************0 r, x4 {2 U! ~
  16. 16 *
    / ?. _" x& |3 k
  17. 17 *                                        BOARD SUPPORT PACKAGE- h8 \+ G7 t+ L& o& J% M; E4 `
  18. 18 *3 U+ q  a  F! C. y/ U% g
  19. 19 *                                     ST Microelectronics STM32
    : t' A; W6 t1 B, b3 W% d6 N
  20. 20 *                                              with the/ Q" j! Y) w3 ?8 Q- L5 r! C2 D4 {& q
  21. 21 *                                   STM3210B-EVAL Evaluation Board8 i, M4 F; t4 }8 `: p: w
  22. 22 *
    & ^1 W) ]* o; |  v  @; U1 X
  23. 23 * Filename      : bsp.c' X# C+ {6 u4 {$ h1 `
  24. 24 * Version       : V1.00: z& ^6 o8 X) t' ?( C5 f+ N
  25. 25 * Programmer(s) : Brian Nagel7 g( T5 ~1 G: q7 `9 V8 \; ?7 V
  26. 26 *********************************************************************************************************- _! P. K! l1 z' @: o  }
  27. 27 */: N5 ~3 Q* c, }0 |3 c# X! U
  28. 28 4 Y2 f, r1 ^* \6 r: Y  o
  29. 29 /*7 f2 d4 R( D: z6 n2 Q" l( Y$ w$ ^9 P; X
  30. 30 *********************************************************************************************************
    2 P+ Y6 @. z" r+ V4 |" e
  31. 31 *                                             INCLUDE FILES4 x! a; ^( {0 Z$ S7 `5 n
  32. 32 *********************************************************************************************************% v! e- A/ u+ }* i6 r/ x
  33. 33 */
    ' s1 d6 M4 D2 J" @7 S- R
  34. 34 " _% C) D6 Y+ c4 @7 ^" j. e
  35. 35 #define  DSP_ASM' o1 L: D+ y. o- N- f0 k/ D: l8 C) Y
  36. 36 #include "stm32f10x.h"
    5 |0 N1 c. }" r" y" C
  37. 37 #include "dsp_asm.h"
    ! L! S& c3 Y, r- x& B5 h; y: ^; q+ p# D
  38. 38 #include "stm32_dsp.h", m/ g' ~! R5 N- D; o! ]" `! P
  39. 39 #include "table_fft.h"
    0 \& \6 g3 U, {/ Q
  40. 40 #include <stdio.h>5 h8 Z- J+ \8 a: G' d
  41. 41 #include <math.h>8 h; T% A6 I" z+ s7 G7 ]) l
  42. 42
    # ]; ?3 P+ u) S5 y! q% ?: z
  43. 43
    6 @& @& }7 O# c0 c( W& A  Y
  44. 44 /*: C0 u+ K: L5 V; E( {
  45. 45 *********************************************************************************************************
    8 `- ]: O2 u: k' |6 U
  46. 46 *                                           LOCAL CONSTANTS
    ! {' k% U0 N# p; k
  47. 47 *********************************************************************************************************( C6 ]4 l! {. v3 M
  48. 48 */4 O9 H6 Y1 L: Q! k; f! I  o
  49. 49 #define PI2 6.283185307179591 I$ [3 a( ^4 m* f8 |2 f: c" |2 V
  50. 50 #define NPT_1024 1024' j5 m- O6 ~/ |0 h1 ^+ H9 ~  R
  51. 51 //#define NPT_256 256; R- z; A4 T$ q/ k* C+ ]
  52. 52 //#define NPT_1024 1024( F$ \8 G8 c+ r+ W/ ?7 c8 i
  53. 53
    . A: @. [: x  z' {9 q
  54. 54 // N=64,Fs/N=50Hz,Max(Valid)=1600Hz
    & S! k9 e; d; p* z6 E
  55. 55 #ifdef NPT_64* v& S" D9 G- M4 o  ~! A
  56. 56 #define NPT 64
    . D" j, D% z6 x% n& l% E- L
  57. 57 #define Fs  3200
    ) @+ R# c  r* G" n! m; }6 m/ T
  58. 58 #endif7 K+ j1 n5 }# r, O% o. y7 f, D7 u6 W
  59. 59 9 n0 Z4 R' s4 t4 }( O
  60. 60 // N=256,Fs/N=25Hz,Max(Valid)=3200Hz3 i3 l$ K. ]7 m0 r5 u: p
  61. 61 #ifdef NPT_2569 {* R- O* E4 ?0 Y& F0 t4 r" y
  62. 62 #define NPT 256& N( @, s9 y# e1 P. c3 f8 A
  63. 63 #define Fs  6400
      L5 E1 V% X$ H5 J
  64. 64 #endif
    : W& ?2 }4 Z2 Z- |* U6 Q7 q, R2 j
  65. 65 1 Q  i3 P! {7 m
  66. 66 // N=1024,Fs/N=5Hz,Max(Valid)=2560Hz
    " D' f# I: V. I
  67. 67 #ifdef NPT_1024
    , }+ \$ Y2 ~* J
  68. 68 #define NPT 1024( e4 `6 K) a) ?2 d8 d: @, ~
  69. 69 #define Fs  5120: O  s7 N1 }4 ~2 f( x* N
  70. 70 #endif
    & s: g' m0 B1 s" B- y; G& `# K
  71. 71 / U# v6 ?' n, I
  72. 72 % r9 V' L' ?- M5 r* G1 D7 k7 R7 b
  73. 73 /*
    - `. |. V$ p; S& r
  74. 74 *********************************************************************************************************
    ; M$ j4 l! P% D$ w- |5 |* l
  75. 75 *                                          LOCAL DATA TYPES& O4 @: s( b" ^0 c5 p, @( F* h5 B
  76. 76 *********************************************************************************************************& }& g) E/ c7 i5 C- f9 C. |# Y0 G) A
  77. 77 */
    ) e% N, F, M& _5 A* M
  78. 78 0 c/ G/ q  y  a, \- h# V7 i
  79. 79 4 l& b7 r# {3 S$ ^
  80. 80 /*# G; Q# N6 |) a" C
  81. 81 *********************************************************************************************************
    & Z4 B+ C' o+ `
  82. 82 *                                            LOCAL TABLES
    $ A! P1 B/ ]0 \
  83. 83 *********************************************************************************************************. v& q0 V) @  p: ?: E
  84. 84 */
    : X( K0 n- X9 n& R
  85. 85 & M4 l0 G* k# t" h/ Y! F+ R
  86. 86
    ; Y8 |& S1 v4 ]9 X  I( a
  87. 87 /*
    ; a$ _' I! \" l8 l
  88. 88 *********************************************************************************************************; l) T1 F0 I' A8 j8 {
  89. 89 *                                       LOCAL GLOBAL VARIABLES1 A/ L+ T1 \- H
  90. 90 *********************************************************************************************************
    3 k& B2 s& D$ g: r
  91. 91 */
    " y5 |/ l6 A, F  S) E! \9 X
  92. 92 long lBUFIN[NPT];         /* Complex input vector */
    8 u+ u! d) [* D' t- R+ A( W; b
  93. 93 long lBUFOUT[NPT];        /* Complex output vector */. V3 f; c5 B& R" E5 h
  94. 94 long lBUFMAG[NPT];/* Magnitude vector */
    + `: @3 c1 g8 O0 a% A% n0 ?- E8 G
  95. 95 /*4 t* ^- N: @& i  o  V! c- |& f7 ]
  96. 96 *********************************************************************************************************
    * |  e8 s  Q8 T  t: B* i2 |
  97. 97 *                                      LOCAL FUNCTION PROTOTYPES
    ) B; B) `/ @9 y5 p
  98. 98 *********************************************************************************************************2 S+ F$ u  L# X  Q
  99. 99 */
    / @: d5 H. y$ m3 S2 k
  100. 100 void dsp_asm_powerMag(void);
    / {" ^! {7 U3 W3 W: G
  101. 101
    0 g8 c8 {% s/ N2 \7 P# }% E: v
  102. 102 /*/ t" v4 k5 R. ?1 A
  103. 103 *********************************************************************************************************, Z5 g' J1 s% F
  104. 104 *                                     LOCAL CONFIGURATION ERRORS
    4 q( [) }$ W3 V' a4 T  M  v
  105. 105 *********************************************************************************************************6 F  U$ V9 K/ y# T; W1 Y
  106. 106 */
    9 T  _0 @' t4 Z7 o" L3 Q# ]/ I
  107. 107
    * d$ T+ {& S# l" `) |- _: P9 J% r
  108. 108 6 k1 O: s1 }7 N4 B1 X
  109. 109 /*# l! R4 v' T0 q( W
  110. 110 ******************************************************************************************************************************1 E* H6 |  r# \* X* n
  111. 111 ******************************************************************************************************************************
    0 z" Y# b$ G9 Q3 V; L5 i  V3 R
  112. 112 **                                         Global Functions8 x! V2 {7 `7 U! f
  113. 113 ******************************************************************************************************************************
    / ~2 B; D8 y" K6 `! O5 V+ C2 _
  114. 114 ******************************************************************************************************************************
    5 I! K! @4 O2 L& m1 x1 M& q9 v
  115. 115 */) U  a2 C$ G" }. u
  116. 116
    & b* r9 W" N$ [  u& t2 I8 y
  117. 117 void  dsp_asm_init()) _4 B" D: L: }
  118. 118 {% a# S) s2 S: _1 s6 i
  119. 119   u16 i=0;7 N; G$ k$ i$ K3 k
  120. 120   float fx;4 Z; ?6 n4 U# D  |. T8 L, G# a9 V
  121. 121   for(i=0;i<NPT;i++)7 s) X6 m0 l8 F/ N$ o
  122. 122   {
    ! U8 c( j' a/ [& u
  123. 123     fx  = 4000 * sin(PI2*i*50.0/Fs) + 4000 * sin(PI2*i*2500.0/Fs) + 4000*sin(PI2*i*2550.0/Fs);
    , r  G' [" S9 z" c7 B
  124. 124     lBUFIN[i] = ((long)fx)<<16;
    3 l% q- A# N* b  S$ n* `3 O& e
  125. 125   }
    ; g* m" k6 ^. \1 C5 ?/ \
  126. 126 }
    : r8 I! g& R! r2 r! m
  127. 127
    7 R+ X, V" U- b2 h; \
  128. 128 void  dsp_asm_test()
    * D, |  j1 B  S9 ~( K
  129. 129 {: R" h, O* d# j2 x' v
  130. 130
    6 h1 N+ \$ g5 V$ L; n
  131. 131 #ifdef NPT_64
    3 [1 f' F5 n2 z, C% }& w. {
  132. 132   cr4_fft_64_stm32(lBUFOUT, lBUFIN, NPT);3 Y* `) E. ?- C/ m# j; Z
  133. 133 #endif% [2 |2 E8 y8 M
  134. 134
    0 L4 b5 u6 a, G$ \; L5 V- i4 f3 g  G$ G
  135. 135 #ifdef NPT_256
    ; w) C$ z2 M7 U4 z4 q, V( u* _) k
  136. 136   cr4_fft_256_stm32(lBUFOUT, lBUFIN, NPT);
    2 t( _! e1 R0 [  O4 V
  137. 137 #endif
    - d  O* H6 N& d9 R' ^! k! F
  138. 138
    % ^2 ~3 ~# p" }9 K3 a
  139. 139 #ifdef NPT_1024
    & t( O6 e- X4 E2 G7 D, u+ k; ], q5 E
  140. 140   cr4_fft_1024_stm32(lBUFOUT, lBUFIN, NPT);1 H1 t- ]) u0 u$ A% a3 d
  141. 141 #endif
    ( y5 L2 u  f2 M
  142. 142
    + X$ s$ A, U2 d0 z9 }( U3 m
  143. 143   // 计算幅值( C) |) _$ M% n4 H, X
  144. 144   dsp_asm_powerMag();
      O* w0 ?; C: R3 H' ?% D+ }  T
  145. 145   # U: ?; K% C6 i* c1 T' l& l! h* Q
  146. 146 }. ]! {/ d5 P7 k& h8 W5 f( }
  147. 147 8 P: k8 n3 E1 F7 n3 s4 |
  148. 148 void dsp_asm_powerMag(void), V( @) p$ m4 u7 t  l" G% K# z, b, m
  149. 149 {
    7 g+ x+ D6 L; ?) n) C, F9 Z
  150. 150   s16 lX,lY;: Q) M/ m. ~7 ?, a+ f# F% c
  151. 151   u32 i;% M& C  t1 U4 H; t3 q; s
  152. 152   for(i=0;i<NPT/2;i++)
    7 _) [8 d9 P7 o7 J# _; e, q
  153. 153   {
      H" g. F- ^9 q: O! i/ m
  154. 154     lX  = (lBUFOUT[i] << 16) >> 16;
    . c- ^4 N1 r8 m! D: m
  155. 155     lY  = (lBUFOUT[i] >> 16);
    : P% m8 Y* [+ y3 o, y9 C2 w4 D+ ^* x
  156. 156     {
    & G* a5 A- I! W% s# ~3 z5 g2 a
  157. 157     float X    = NPT * ((float)lX) /32768;
    + x) w5 n1 |2 ~+ \. X8 b
  158. 158     float Y    = NPT * ((float)lY) /32768;3 T* m4 l$ t% B  q
  159. 159     float Mag = sqrt(X*X + Y*Y)/NPT;, S' V2 V+ a9 p( Q. s5 P
  160. 160     lBUFMAG[i]    = (u32)(Mag * 65536);
    * R- D; h0 R% ^. M$ ?- [
  161. 161     }3 X  S4 S' P. ]' J7 V
  162. 162   }
    # L: K# q' `+ }' s* a
  163. 163 }
复制代码
  1. 1 /*2 e6 }+ P7 I, z1 P' F5 o
  2. 2 *********************************************************************************************************$ v/ s$ Z1 \6 a% o1 q0 d' J1 I; e
  3. 3 *                                     MICIRUM BOARD SUPPORT PACKAGE1 \: x& z- j8 h# u
  4. 4 *
    % ~- u2 k# b5 e; u; j% l' m
  5. 5 *                             (c) Copyright 2007; Micrium, Inc.; Weston, FL8 w' Q" g9 O8 }& _
  6. 6 *
    : O& s8 m! {) a! G
  7. 7 *               All rights reserved.  Protected by international copyright laws.7 A# q! W, d# V* w1 Q
  8. 8 *               Knowledge of the source code may NOT be used to develop a similar product.& @: O6 L; a* [/ y8 D8 |/ q
  9. 9 *               Please help us continue to provide the Embedded community with the finest
      s* w5 \" i. O3 e) `
  10. 10 *               software available.  Your honesty is greatly appreciated.$ Q2 l# B3 z4 u% ^, k9 B
  11. 11 *********************************************************************************************************
    8 G; g" i( c- f! U  }
  12. 12 */
    : s! t5 [( `9 F
  13. 13
    / M) a) d% {: Q+ S; N% R- A1 K
  14. 14 /*
    ) ]# L% u! N; t7 ~2 L1 D) u1 N
  15. 15 *********************************************************************************************************2 ~6 ]; c3 U  H$ H# ]0 t( L
  16. 16 *2 w0 }6 @( g  v' B# H! p6 u% `  ], _8 b
  17. 17 *                                        BOARD SUPPORT PACKAGE; j4 B% ^) z) j5 c& ?' M
  18. 18 *7 i0 O' b* ]4 w" F1 S6 U- U
  19. 19 *                                     ST Microelectronics STM32
    9 n& n- x) U  H
  20. 20 *                                              with the
    : j" y4 t3 A" j8 `
  21. 21 *                                   STM3210B-EVAL Evaluation Board
    5 t+ P- P1 ^) f. Z/ M
  22. 22 *
    # y0 e# u: O& X" L7 \4 S( Z. U
  23. 23 * Filename      : bsp.h3 k0 _6 {! i. U/ O
  24. 24 * Version       : V1.00
    5 C4 t* ?9 Z. E7 U/ y0 C9 |
  25. 25 * Programmer(s) : Brian Nagel9 u- _! E4 c. I# I* z$ y* G
  26. 26 *********************************************************************************************************1 K, \$ i5 K- B/ b" L9 s3 ~- l
  27. 27 */
    ) \+ a0 H- ?5 j. _% Z4 `1 |
  28. 28
    & a" R: y: g7 H- v# J- q
  29. 29 #ifndef  __DSP_ASM_H__) q: y4 J" F% K4 J- N( g7 C
  30. 30 #define  __DSP_ASM_H__
    ' b& W4 u: Y! K% C: w! ^
  31. 31 . Q% X0 ]: H  g
  32. 32 /*
    2 D9 O: Q) T% E" o
  33. 33 *********************************************************************************************************
    $ _  ^; @+ c& J) c
  34. 34 *                                               EXTERNS
    , W" a; ], a- l( \
  35. 35 *********************************************************************************************************; L- F0 j/ D) J' ?% }
  36. 36 */# y0 ]4 B0 F7 \. ^
  37. 37   ?& Y# \4 ~" U6 f# \2 ?" i% z
  38. 38 #ifdef   DSP_ASM
    5 g/ L4 \& l, S! K7 b$ M8 ?8 @
  39. 39 #define  DSP_EXT4 A8 _5 G8 K4 l3 E# m
  40. 40 #else" o$ u5 E3 x9 l- j/ E5 f; Y
  41. 41 #define  DSP_EXT  extern
    ) m8 u3 i5 i: Y5 h* F
  42. 42 #endif% f$ {6 j1 j* j2 M
  43. 43 9 z% q( j0 b2 F0 |
  44. 44 /*
    9 z* {' z7 T  c) p
  45. 45 *********************************************************************************************************  v# ?4 Z) {7 r, B. d* r/ y4 ^
  46. 46 *                                             INCLUDE FILES* [$ k! J- F2 b6 Q7 w- Q' Q  k
  47. 47 *********************************************************************************************************
    3 ]* S( M* q6 ]' B
  48. 48 */, ~& v1 i! {" m, k- e% u5 b( \
  49. 49
    ) r! g( F- ^: p
  50. 50
    " z' B+ ]- i( a8 o0 I7 A
  51. 51
    2 W- z- Y5 h$ P7 H. E0 n
  52. 52 ; q3 i% `% U1 Q& p& e8 W
  53. 53 /*
    % t1 G, p! E# y5 {9 y
  54. 54 *********************************************************************************************************5 ^( V6 d7 u2 I6 D& X
  55. 55 *                                          GLOBAL VARIABLES
    - Q0 N- N1 X7 g5 u' l& ^5 [1 X$ ]2 C& ]
  56. 56 *********************************************************************************************************2 M+ U0 u, q7 F/ @4 M$ D( @0 m4 n
  57. 57 */
    ) `1 J  }/ L- |' @7 i( T
  58. 58
    2 C9 ]+ h( c% s" V  T
  59. 59 ( {( v: P+ k, z/ r1 h* f" g% ]0 Z
  60. 60 /*
    % O/ O# w6 Y5 j0 _
  61. 61 *********************************************************************************************************# |8 R. r7 E8 o3 e+ Y# i  S
  62. 62 *                                               MACRO'S6 G' U: q# W5 S8 x
  63. 63 ********************************************************************************************************** G2 G; B3 n" ~
  64. 64 */4 [1 o+ |8 ?5 _; a
  65. 65 # X9 I# z& q- J3 ?& W* ]! J
  66. 66
    5 \+ x  Z' H5 o
  67. 67 /*: C" k) B' i( ?$ H1 U* v
  68. 68 *********************************************************************************************************
    1 P9 {. z2 ?4 Y5 O
  69. 69 *                                            FUNCTION PROTOTYPES3 h5 j& a5 W& F
  70. 70 *********************************************************************************************************
    ( O. |) f) F' T% H1 p( z! _. ]
  71. 71 */
    4 f" w7 y" i4 n+ X
  72. 72 * c$ L& P. q, c$ V" W& {: b6 D& @$ g& Y
  73. 73 void    dsp_asm_test(void);
    4 A1 M( s5 W$ R% @
  74. 74 void  dsp_asm_init(void);5 K( Q, m: `: C9 [
  75. 75 : c" B# H1 C! M) ^0 ]  B6 m
  76. 76 #endif                                                          /* End of module include.                               */
复制代码

9 f3 n) J8 l: G: i
     着重分析下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位数据。下面的两句
( S2 s- p) H2 U8 m6 {& Y( w' S    float X    = NPT * ((float)lX) /32768;  ! d3 e  t; ~/ g6 ]
    float Y    = NPT * ((float)lY) /32768& M1 r: O( B* f; D2 m* J
    目的就是把数据浮点化,至于为什么是除以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次方。然后才能进行其他的运算。, _. m, S/ a6 d) K) |
     这里是ST公司采用了DSP专用芯片(主要是指TI)的写法,也就是说尽管DSP的芯片类型很多,数据变量的定义也各有差异,但原理是一样的,最终还是要采用DSP习惯的运算方式。至于为什么一定要采用浮点运算,因为机器是傻子,然而TI公司的工程师是天才。
     main函数中我们只需在while(1)前加上dsp_asm_init();  dsp_asm_test();即可。: y8 \, R8 f5 }; D
2,实验现象
       注意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
1 f1 x& ^1 Z* w* R$ |8 C5 @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谐波幅值
! W2 A( o* v, u. r) O( i; ^
总结:该工程中模拟信号源为: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。

% O: E9 H5 c4 R3 J$ \' `  k& X
收藏 评论0 发布时间:2022-1-15 21:53

举报

0个回答

所属标签

相似分享

官网相关资源

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