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

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

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

3 O/ s0 C" k6 [8 b' O' h       为了产生fft变换信号,我们可以自己产生个采样信号:使用三角函数生成采样点,供FFT计算,fx  = 4000 * sin(PI2*i*50.0/Fs) + 4000 * sin(PI2*i*2500.0/Fs) + 4000*sin(PI2*i*2550.0/Fs)。! F3 ~7 U2 r& ]# w
      模拟采样数据,采样数据中包含3种频率正弦波:50Hz,2500Hz,2550Hz, lBUFIN数组中,每个单元数据高字(高16位)中存储采样数据的实部,低字(低16位)存储采样数据的虚部(总是为0)。
! q  N3 k. c' c* J4 S- a! O      其中dsp_asm_init()函数的作用是产生采样信号,实际工程应用中我们使用的是ADC采样的处理值。dsp_asm_test()函数的作用是进行FFT变换,并计算各次谐波幅值。具体代码参见下面:
, b: \% G( H/ w) p; V* C% e
  1. 1 /*1 p! s0 x5 H( P7 q' i& M4 F
  2.   2 *********************************************************************************************************. c0 [& q2 p' |' t( n  _
  3.   3 *                                     MICIRUM BOARD SUPPORT PACKAGE6 ]' j8 ]3 L$ o! V3 X5 ?5 h
  4.   4 *
    , K4 i. Y" f! O, j8 j* B
  5.   5 *                             (c) Copyright 2007; Micrium, Inc.; Weston, FL5 A+ h8 |- f2 P* m
  6.   6 *
    4 \! F' N) q: l4 V8 E
  7.   7 *               All rights reserved.  Protected by international copyright laws.1 A% Y( u) m0 p
  8.   8 *               Knowledge of the source code may NOT be used to develop a similar product.
    ) x% ^) D$ Z4 n# o2 _: G! C
  9.   9 *               Please help us continue to provide the Embedded community with the finest' s6 c- R! Q- o7 R
  10. 10 *               software available.  Your honesty is greatly appreciated./ G% n9 Q7 g" _
  11. 11 *********************************************************************************************************5 {4 n2 ^6 b$ b+ O1 y
  12. 12 */
    ( ~* z1 p' Q% T0 i- Q) j
  13. 13
    ) ^  O/ \- \* k- w8 b
  14. 14 /*
    5 x# Q- w) B% A" A7 Y. u4 n
  15. 15 *********************************************************************************************************
    3 _  }6 Y/ |( X% E: ]3 v
  16. 16 *
    ; Z4 l5 ]8 w3 s+ U; W" s) l1 ~6 f
  17. 17 *                                        BOARD SUPPORT PACKAGE0 M! K* }2 w( C6 N
  18. 18 *
    - d/ |0 Z/ U9 @2 \/ ~5 p) H" X
  19. 19 *                                     ST Microelectronics STM327 I3 ?+ f8 h* D8 [0 p+ U9 A
  20. 20 *                                              with the
    6 v8 b/ }8 e- K5 N* d3 y, h+ @) l
  21. 21 *                                   STM3210B-EVAL Evaluation Board
    * K( A  ~3 ~3 Z0 B, G$ _
  22. 22 *3 {7 M7 C7 z% E+ m- x- N% w
  23. 23 * Filename      : bsp.c
      l# v: b! `( C
  24. 24 * Version       : V1.00
    ( e+ A8 A% \& C, ]" W
  25. 25 * Programmer(s) : Brian Nagel. ?6 D" L, T! {6 b& o$ p- C
  26. 26 *********************************************************************************************************; V$ G8 o3 r$ i& N' Y
  27. 27 *// m" ~2 v8 z& N! t9 F* F
  28. 28 ; V, ?9 s6 ^+ N- L- l+ ^
  29. 29 /*
    3 Q9 |: j$ Z0 m1 }- b/ B/ B
  30. 30 *********************************************************************************************************3 J9 C( e$ H5 Q6 ?5 z1 |0 U4 i
  31. 31 *                                             INCLUDE FILES
    ' u8 s  R9 L2 j) k+ `; W! c9 o' G
  32. 32 *********************************************************************************************************
    0 o2 j8 g/ ?: G5 @- |
  33. 33 */
    ! C6 X, l* t$ b
  34. 34
    5 |. w2 w/ V& x5 s6 A+ f
  35. 35 #define  DSP_ASM. q1 }, U/ v/ z% @) p
  36. 36 #include "stm32f10x.h"9 K! l1 e) o# R' [, K
  37. 37 #include "dsp_asm.h"
    " Y9 {0 p3 [& f1 V6 i5 x( i
  38. 38 #include "stm32_dsp.h"  T6 U& e% Z& [) Z; C
  39. 39 #include "table_fft.h"! m# ~/ G8 g: o% j/ R) X
  40. 40 #include <stdio.h>( ?- ~6 l; P: g
  41. 41 #include <math.h>
    $ S6 r8 P8 X  M. T. F+ ?
  42. 42
    # h( {# j) F- K/ y2 S# K6 J. t
  43. 43
    , b1 a/ M* c) l$ h! `
  44. 44 /*
    * G: _6 s% i, I/ a6 m4 B
  45. 45 *********************************************************************************************************; A6 ]. _6 \" S& p
  46. 46 *                                           LOCAL CONSTANTS
    / l6 A4 |0 N0 U- G
  47. 47 *********************************************************************************************************
    ( B" a/ B- e! y* u( b+ ~
  48. 48 */8 O  e6 [. u6 b' w2 N; z1 x1 K
  49. 49 #define PI2 6.28318530717959, j- E, [6 V: V6 k/ J8 U
  50. 50 #define NPT_1024 10246 x  a2 G: H+ N% z6 b6 @
  51. 51 //#define NPT_256 256
    # a+ c" O) `5 `
  52. 52 //#define NPT_1024 10246 P- U$ S/ B- y4 _9 v% U( t
  53. 53
    7 A, Z; F/ `% ^$ @
  54. 54 // N=64,Fs/N=50Hz,Max(Valid)=1600Hz
    - K' J- V7 i6 g* T! e% X. @" e
  55. 55 #ifdef NPT_64
    ; \& p+ I/ _5 Y' z6 c
  56. 56 #define NPT 64
    8 w. _7 `( p* ]5 k
  57. 57 #define Fs  32000 b0 b* U6 ~6 b4 P# c1 e
  58. 58 #endif" y& k6 R. X: e+ A( b) {
  59. 59
      L5 R. ]- g2 P. l
  60. 60 // N=256,Fs/N=25Hz,Max(Valid)=3200Hz& t3 \% ~) w3 z2 Q6 n, D4 E' S8 I
  61. 61 #ifdef NPT_2568 j  q; `5 a; i& v" N2 _" G
  62. 62 #define NPT 2563 |" ?! [* L: d0 y* d* Y
  63. 63 #define Fs  6400  @; b8 R. }* o/ }& K4 U' d
  64. 64 #endif
    ! x; ^5 H# {% r9 ^
  65. 65 ) S2 [4 p+ [% a% ?2 j1 c
  66. 66 // N=1024,Fs/N=5Hz,Max(Valid)=2560Hz
    8 h. x* i, F# k/ @2 f8 ?3 Z
  67. 67 #ifdef NPT_1024
    $ ?1 L! X1 Q2 z5 C: l
  68. 68 #define NPT 1024, ?9 K. d- w# F- j' T
  69. 69 #define Fs  5120# x! y6 ~$ _: B0 u+ s7 V, q0 ~
  70. 70 #endif& ^8 L+ F  S& [& N5 c9 Q2 c$ H
  71. 71 # j/ \( }. Z7 r" O2 o0 R, X; c
  72. 72
    0 U5 {+ I9 z/ @. _: M# A9 A
  73. 73 /*5 `# U4 ]- U# e4 n
  74. 74 *********************************************************************************************************  I: n& _" o+ E$ H+ ~
  75. 75 *                                          LOCAL DATA TYPES4 J) l7 J. t. h. D, e
  76. 76 *********************************************************************************************************# B% N; G; {( @5 G. Z% `
  77. 77 */, `! U! z- J0 P
  78. 78
    ( k& a% @9 {6 @" P. t! |
  79. 79
    # q- ?, G7 W( D
  80. 80 /*
    2 ?6 d* C+ l6 c- D+ E5 B
  81. 81 *********************************************************************************************************8 ]9 Q9 g" Q( _! {8 p; g; Z
  82. 82 *                                            LOCAL TABLES
    ) Q( w. V0 D, |2 f' T* z! ]
  83. 83 *********************************************************************************************************+ G% Z3 ~! ]7 I4 }( F
  84. 84 */
    9 l- `2 E+ q# a
  85. 85 8 }; j& _3 a. j/ ~0 ?
  86. 86 6 G- I9 ~9 I) z/ o  p6 k
  87. 87 /*
    2 H0 X1 M7 y/ v& Y) p
  88. 88 *********************************************************************************************************
    - s& _' X* f0 w, ^- e, y6 B0 A
  89. 89 *                                       LOCAL GLOBAL VARIABLES( ^- x, g% e( T" P$ o; }8 N
  90. 90 *********************************************************************************************************& M: l6 u* I' K2 {
  91. 91 */
    2 I, t2 n/ m0 ~( f
  92. 92 long lBUFIN[NPT];         /* Complex input vector */; }* e, _: |% T0 t4 ]2 X
  93. 93 long lBUFOUT[NPT];        /* Complex output vector */
    ( V, S# V( j' h. w$ C  l
  94. 94 long lBUFMAG[NPT];/* Magnitude vector */* }% E; u4 o. _/ g$ Y4 n4 W2 y
  95. 95 /*8 a) X' T! D, F9 I+ L
  96. 96 *********************************************************************************************************
    2 p0 j/ ?5 c  Q# c1 b
  97. 97 *                                      LOCAL FUNCTION PROTOTYPES
    " d. Y: ?0 A, N8 W! |
  98. 98 *********************************************************************************************************
    4 T# n$ k& Z; o9 H- m, n: @; v
  99. 99 */
    4 S2 I( h; a5 @" y+ g# u
  100. 100 void dsp_asm_powerMag(void);4 ^+ U$ ]( n, Y( ~8 n
  101. 101 3 L( o1 Y/ {6 ~
  102. 102 /*: T7 l: I% j7 }3 s# B
  103. 103 *********************************************************************************************************
    - ^: d$ e  E+ d
  104. 104 *                                     LOCAL CONFIGURATION ERRORS
    ) Q4 u: F' L( }* ~7 j7 p: |
  105. 105 *********************************************************************************************************
    8 n+ N9 U! E0 [0 m2 V! m' q
  106. 106 */
    # c# a7 d' Z2 }; N
  107. 107 7 o9 I: I# V& s8 c7 A* c
  108. 108 : b* I& U* b5 r% H/ P
  109. 109 /*
      }/ V4 E) M- K6 U( |6 \, U3 y
  110. 110 ******************************************************************************************************************************& u! o/ q+ @) t4 U, v
  111. 111 ******************************************************************************************************************************
    + o! M# Z2 ?( h
  112. 112 **                                         Global Functions/ \6 X' m1 s; Z0 g! i# i) m0 i- p
  113. 113 ******************************************************************************************************************************! {3 l' i# T; X; A% p( {8 E+ r( ~
  114. 114 ******************************************************************************************************************************/ q: {2 w( k4 O. p' Z/ V. ?# ~
  115. 115 */
    * U0 z) F; K; j' F
  116. 116 9 O5 X) m/ ?" S+ [$ c
  117. 117 void  dsp_asm_init(), H- a9 \5 [" T5 }
  118. 118 {
    9 v1 u6 J9 [) z* H! s  E/ Z
  119. 119   u16 i=0;
      i; }. h1 A+ M2 R
  120. 120   float fx;
    3 y% B5 X% ]( T  w
  121. 121   for(i=0;i<NPT;i++)
    % y" O2 }* s8 E, Y1 l% R2 W
  122. 122   {) C( _8 c+ q: m5 j, T' E2 o- p
  123. 123     fx  = 4000 * sin(PI2*i*50.0/Fs) + 4000 * sin(PI2*i*2500.0/Fs) + 4000*sin(PI2*i*2550.0/Fs);. u- Q: L4 w. x: \
  124. 124     lBUFIN[i] = ((long)fx)<<16;
      J5 ~; x* U: t5 ]& u* C6 p8 k
  125. 125   }0 s) B. g8 \" m) a. q$ q/ r) i' x' f
  126. 126 }
    ; ^$ |9 M2 e- x4 ~$ C
  127. 127
    , s, A9 s* X  v. `( ^( ?! B- n
  128. 128 void  dsp_asm_test() 9 q, E% l  |7 U# ^0 S
  129. 129 {
    4 a8 |8 F2 n! u5 k/ H8 g0 d4 U& d
  130. 130
    8 }- ^5 |- X! ~" ]3 h) I
  131. 131 #ifdef NPT_647 K+ L- B# @4 x0 w
  132. 132   cr4_fft_64_stm32(lBUFOUT, lBUFIN, NPT);4 U) A5 y8 j3 r) Y4 l  L( d# B9 L. u
  133. 133 #endif% a9 H! `# v4 m! d  s
  134. 134 2 ~9 t6 p( w6 R# y; d- B( P
  135. 135 #ifdef NPT_256
    / }4 {! s4 f: ]+ Y
  136. 136   cr4_fft_256_stm32(lBUFOUT, lBUFIN, NPT);6 Y( L: [2 a: m( ]1 |- `- I
  137. 137 #endif
    " l: W  _; Y' [4 h9 B
  138. 138 # i9 T  c3 b$ E' Q. K( L0 D3 \
  139. 139 #ifdef NPT_1024
    : k' |$ ]* X! u6 R- G$ I8 Y$ O# {( [! ]
  140. 140   cr4_fft_1024_stm32(lBUFOUT, lBUFIN, NPT);
    $ z. a0 p4 a* y! Y2 w7 q( {5 j
  141. 141 #endif# v) Y) z: v* @0 L8 D8 g
  142. 142 ( t& n: I+ y  ^+ p0 f
  143. 143   // 计算幅值$ I# W/ Z, H0 j" ]; v/ @
  144. 144   dsp_asm_powerMag();! o8 @# G7 P: D2 V% I1 b; W: B4 T
  145. 145   . R' X- z( u- J0 U
  146. 146 }" f$ w) Y4 F' i3 H
  147. 147 2 p' F9 K" U0 ?* @
  148. 148 void dsp_asm_powerMag(void)- a8 C% S6 Y% {* S0 J6 u' K2 ~6 i9 L
  149. 149 {/ i, v- J* m5 \* F0 U
  150. 150   s16 lX,lY;
    ! ^9 V7 J$ W' O3 J# _. D" i/ X
  151. 151   u32 i;* Q, ^6 j3 a) r" j) {$ w
  152. 152   for(i=0;i<NPT/2;i++)
    7 K; q- O; l" A
  153. 153   {
    0 b9 z4 r$ E/ ~% I1 N9 k; b( l* ~
  154. 154     lX  = (lBUFOUT[i] << 16) >> 16;
    # l. |& K# E, U
  155. 155     lY  = (lBUFOUT[i] >> 16);
    0 b+ c# }3 p! m5 N( g3 B
  156. 156     {  X- t4 O) l  v
  157. 157     float X    = NPT * ((float)lX) /32768;
    5 U+ `9 K" X5 ^; B, ~
  158. 158     float Y    = NPT * ((float)lY) /32768;' m) o1 D) d6 o$ H9 Q
  159. 159     float Mag = sqrt(X*X + Y*Y)/NPT;
    * m# O6 f' k0 S! V) s& j. G" h
  160. 160     lBUFMAG[i]    = (u32)(Mag * 65536);
    . z* z+ {' R& k2 z
  161. 161     }
    # T7 i1 ~% ?7 P5 Y5 g' X( |1 ?
  162. 162   }* Q0 K% h9 a' ?8 L" P
  163. 163 }
复制代码
  1. 1 /*6 q. g7 a9 b. Y# N# D
  2. 2 *********************************************************************************************************
    * n. X  C3 s0 j) _  ~/ F
  3. 3 *                                     MICIRUM BOARD SUPPORT PACKAGE8 |3 E, p) I# i/ }7 X
  4. 4 *
    5 v1 F" s- g7 `
  5. 5 *                             (c) Copyright 2007; Micrium, Inc.; Weston, FL  _; f7 ]1 s( r3 Z) x5 O' o1 w+ k
  6. 6 *
    ; l- [% Q8 |- P+ t
  7. 7 *               All rights reserved.  Protected by international copyright laws.
    8 g( m1 y( P2 C4 T
  8. 8 *               Knowledge of the source code may NOT be used to develop a similar product.& F' @4 e. N1 c& u
  9. 9 *               Please help us continue to provide the Embedded community with the finest4 V7 @, m) R+ S1 s
  10. 10 *               software available.  Your honesty is greatly appreciated.
    . w1 e- o! _# {* W7 s* L' O
  11. 11 *********************************************************************************************************7 ^$ r+ x8 O( b; S4 D7 |
  12. 12 */
    6 I1 s* P1 [- D8 N
  13. 13
    2 G! N! ~3 h& \$ A& {3 q: A
  14. 14 /*
    ) g; X1 n, I2 B6 L2 o
  15. 15 *********************************************************************************************************$ a' w+ v7 K" e6 ^$ `, H7 G) y
  16. 16 *
    " F' H8 @0 t8 s. c( q* G
  17. 17 *                                        BOARD SUPPORT PACKAGE9 H% ?# ~# v/ J9 F$ R" R0 C
  18. 18 *3 g' p+ x1 {# r/ X8 d
  19. 19 *                                     ST Microelectronics STM32
    6 J: ?$ L: {) {& L
  20. 20 *                                              with the; R; u4 d5 H0 ~+ ^- S  u  m
  21. 21 *                                   STM3210B-EVAL Evaluation Board
    ! m0 H8 m# L( n
  22. 22 *
    0 Q5 s" S/ |0 V' U( X1 o+ W
  23. 23 * Filename      : bsp.h
    " @, K1 M& H% M
  24. 24 * Version       : V1.00
    3 A6 X1 h1 B8 l  Z& D; ?, i0 g  v
  25. 25 * Programmer(s) : Brian Nagel. M8 _( z0 Q% ~" L& o) x1 {
  26. 26 *********************************************************************************************************" ]/ ^4 s: @" K6 |6 K2 u; `
  27. 27 */
    5 @: t8 N. _$ n5 ^
  28. 28 2 A* x4 b% @3 r# T) M  M& n
  29. 29 #ifndef  __DSP_ASM_H__
    $ C' v' j# ~* {- X1 F
  30. 30 #define  __DSP_ASM_H__) g% Y8 K' Z7 w/ e$ R2 K
  31. 31
    ) l# B6 X' C$ _4 {
  32. 32 /*
    + C& W1 X5 ]1 w: M8 ]' D+ u3 J' X
  33. 33 *********************************************************************************************************
    7 f. M( k) P0 @. ]
  34. 34 *                                               EXTERNS" f% V, R; ]+ ~  |5 m
  35. 35 *********************************************************************************************************. s/ x" f; S+ j  d0 r
  36. 36 */9 H6 R: h$ P$ `8 s) \
  37. 37
    " x8 C- d0 N: y* U* ~
  38. 38 #ifdef   DSP_ASM
    ! v# e* [( y$ u" _; \+ W) q
  39. 39 #define  DSP_EXT* |9 ~# i; F; k
  40. 40 #else
    4 j1 W9 z6 U3 v9 d% b, a
  41. 41 #define  DSP_EXT  extern  l/ \! R6 \& |$ s2 ~
  42. 42 #endif
    - W  y/ n7 a  v! V/ V
  43. 43
    " H/ S# S( ]3 v" H, O5 K% H
  44. 44 /*& m3 R+ ?. [: g7 l1 E) b* y4 W
  45. 45 *********************************************************************************************************
    8 i( x" S1 S! X3 v9 J
  46. 46 *                                             INCLUDE FILES, ~' s0 H: M& B, a0 M% v0 h& }
  47. 47 *********************************************************************************************************
    2 M: u. @  D* B( S& G
  48. 48 */
    * z, J2 Q7 b0 M
  49. 49 5 v& i" e: ~! a3 I9 B! Q) U
  50. 50 * P& k# i2 I9 X% m" q
  51. 51 5 ^) E& o2 T6 j4 X
  52. 52 3 \% m/ X' v) j; `, z* g
  53. 53 /*
    : F+ v  w$ _- K
  54. 54 *********************************************************************************************************: b0 c( ^1 p2 l# [& c
  55. 55 *                                          GLOBAL VARIABLES9 F2 K) v+ j0 K7 |7 ?6 F% J
  56. 56 *********************************************************************************************************- g+ M0 S: p/ G
  57. 57 */
    9 w& G0 S1 L( s9 M% E3 |9 [7 u
  58. 58 4 C' a1 _$ g6 A- A" r$ A" n
  59. 59 / M- y" _8 H8 k4 @% I3 }1 w
  60. 60 /*
    * J( \; ^5 n( C) {& L& n6 s) O
  61. 61 *********************************************************************************************************  L1 |; E% e9 m
  62. 62 *                                               MACRO'S
    # H+ h: H- J) c# J* I9 [5 q
  63. 63 *********************************************************************************************************
    ( x+ t6 p7 M, q! O8 _7 O7 R& D1 y7 \
  64. 64 */
    ! M3 y6 U5 U) v; K
  65. 65 * A# _" F, w! U. l) O0 K: q0 ~
  66. 66 $ G$ @. M+ l$ F# k  Z
  67. 67 /*
    * [2 K  _1 `4 S& O. [
  68. 68 *********************************************************************************************************: U! G. y- i5 I: p1 E% ^
  69. 69 *                                            FUNCTION PROTOTYPES8 P' l+ y. {+ [! b
  70. 70 *********************************************************************************************************# B8 F0 w5 S2 T. X  T& K
  71. 71 */' v; l4 P+ d$ t6 a/ r. n0 M
  72. 72
    , x0 s* T/ s' G9 x
  73. 73 void    dsp_asm_test(void);
    9 H/ N8 l- R. _. \4 w
  74. 74 void  dsp_asm_init(void);$ f3 l5 L% O4 ^! f
  75. 75 % k( T7 F) ~! |2 \$ t
  76. 76 #endif                                                          /* End of module include.                               */
复制代码

! V1 B7 O- r5 `( y! `
     着重分析下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位数据。下面的两句
7 O" N, y; ?5 i4 i6 {" o& a    float X    = NPT * ((float)lX) /32768;  
: e* u7 h& |/ U, O9 _% |/ l# n    float Y    = NPT * ((float)lY) /32768
# E. {+ E3 i7 `0 S" y( J4 s    目的就是把数据浮点化,至于为什么是除以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次方。然后才能进行其他的运算。
9 c9 S! R4 K2 q& i3 C& h     这里是ST公司采用了DSP专用芯片(主要是指TI)的写法,也就是说尽管DSP的芯片类型很多,数据变量的定义也各有差异,但原理是一样的,最终还是要采用DSP习惯的运算方式。至于为什么一定要采用浮点运算,因为机器是傻子,然而TI公司的工程师是天才。
     main函数中我们只需在while(1)前加上dsp_asm_init();  dsp_asm_test();即可。
; R. }( M/ c7 t9 h: X0 X  @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$ l" L7 E5 `; V8 v
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谐波幅值
3 B! d/ y- i7 t+ s7 r1 Z
总结:该工程中模拟信号源为: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。
7 }2 E: E" S5 w2 e1 _: {
赞 收藏 评论0 发布时间:2022-1-15 21:53

举报

0个回答

所属标签

相似技术帖

官网相关资源

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