1.1 初学者重要提示" H0 i: _5 e3 E$ W 关于学习方法问题,可以看附件章节A。0 M) _) @. V4 z+ j5 l" l 这几年单片机的性能越来越强劲,DSP芯片的中低端应用基本都可以用单片机来做。: p9 W- d% O$ r+ l2 j4 C& B' g 当前单片机AI也是有一定前景的,ARM一直在大力推进,很多软件厂商和研究机构也在不断的努力。通过此贴可以了解下:单片机AI的春天真的来了,ARM最新DSP库已经支持NEON 1.2 STM32H7的DSP功能介绍: e4 A9 \* H, q" Q' y STM32H7是采用的Cortex-M7内核,而DSP功能是内核自带的,下面我们通过M7内核框图来了解下:) u6 n' \$ Y2 q, C9 r, w , V! Q6 m0 |2 U, g5 A& _! u5 T, { H ) M8 Z8 d" K) p; v( n 重点看如下两个设计单元:( O4 Z; Q; {+ {, s4 Z DSP DSP单元集成了一批专用的指令集(主要是SMID指令和快速MAC乘积累加指令),可以加速数字信号处理的执行速度。" j2 d; [" Y" t FPU' x J$ c2 \5 X0 H% [% F) k Cortex-M7内核支持双精度浮点,可以大大加速浮点运算的处理速度。 2 ]+ f% h8 a+ k: R, c) e! x# w 下面是Cortex-M3,M4和M7的指令集爆炸图:9 G+ A9 y4 ]) Y# r$ `% v 通过这个图,我们可以了解到以下几点: 1 G K& [# J0 N4 L( y3 u4 ]$ a1 e M4和M7系列有相同的DSP指令集。+ h5 [7 V: E3 K" x7 r0 y M7相比M4系列要多一些浮点指令集。 同时这里要注意一个小细节,浮点指令都是以字符V开头的。通过这点,我们可以方便的验证是否正确开启了FPU(MDK或者IAR调试状态查看浮点运算对应的反汇编是否有这种指令)。 2 t/ c' A# h) a$ O# D4 ] 不同M内核的DSP性能比较:) n3 C' u0 T3 b) @1 l ; s) {$ B1 \6 k$ E8 O) C- c3 v/ t) @ Cortex-M7内核的DSP性能最强。3 X1 g% \ [4 t) u9 N# ^$ C Cortex-M3,M4和M33是中等性能,其中M3最弱。 Cortex-M0,M0+和M23性能最弱。! a/ e. c) n) ]3 W 1.3 Cortex-M7内核的DSP和专业DSP的区别" C9 x2 ?* q$ {" ~ M核的DSP处理单元与专业DSP的区别: 1.4 ARM提供的CMSIS-DSP库 为了方便用户实现DSP功能,ARM专门做了一个DSP库CMSIS-DSP,主要包含以下数字信号处理算法:" k/ x. h4 m! A' ]8 G" C" `4 z9 L4 D 2 R& A- B+ ~; Q& u: G' } BasicMathFunctions8 ], g9 r1 h! M7 `: F 提供了基本的数据运算,如加减乘除等基本运算,以_f32结尾的函数是浮点运算,以_q8, _q15, _q31,结尾的函数是定点运算,下面是部分API截图: # O [! _# V& s FastMathFunctions 主要提供SIN,COS以及平方根SQRT的运算。 " J q0 a' f1 J* v8 T) G% h7 {8 E ComplexMathFunctions 复杂数学运算,主要是向量,求模等运算。下面是部分API截图: FilteringFunctions 主要是滤波函数,如IIR,FIR,LMS等,下面是部分API截图:* g6 G' @0 ?8 c0 Q& o + q0 ^5 S+ r9 i' k, c0 R MatrixFunctions: A9 ^9 l/ G' g9 g# W5 X% P( U 主要是矩阵运算。 ( @9 L9 S* P+ g2 V$ @% q ( F- @$ j5 x1 x) \; k3 U TransformFunctions 变换功能。 包括复数FFT(CFFT),复数FFT逆运算(CIFFT),实数FFT(RFFT),实数 FFT 逆运算,下面是部分API截图: ) T6 c$ @0 G2 Z% { ( `) y$ D* }* ^2 g& O! e! c! r ControllerFunctions4 P2 }) s3 N4 g3 D/ r1 [ 控制功能,主要是PID控制函数和正余弦函数。1 F+ D; l. y/ Q3 s) I , ~' k9 T `. j. q% N+ ^ StatisticsFunctions 统计功能函数,如求平均值,最大值,最小值,功率,RMS等,下面是部分API截图。 0 |8 ?: e. k% `" f4 A SupportFunctions; g8 C6 m1 B- w% \& ?, j- f% Q& [ 支持功能函数,如数据拷贝,Q格式和浮点格式相互转换。& |+ B* ~/ G5 Q5 g9 @! A $ J9 m3 |6 \" u- q+ b" v CommonTables arm_common_tables.c 文件提供位翻转或相关参数表。 8 b: B6 y8 n: F/ J, u7 b % _- D4 m( f9 j- w7 { 1.5 TI提供的32位定点DSP库IQmath5 ~7 Z5 r- e! w$ a7 i# r 初次使用这个定点库,感觉在各种Q格式的互转、Q格式数值和浮点数的互转处理上更专业些,让人一目了然。 所以本次教程也会对IQmath做个介绍并配套一个例子。" b# Z+ d* W4 t. F. t1 {4 O( f 1.6 ARM DSP软件替代模拟器件的优势( W% \( {5 ~0 H! R 我们日常生活中用到DSP的地方很多,以生活中的设备为例:6 {* z5 p0 y- } } 通过ARM DSP软件替换模拟组件可以降低成本,PCB的面积和设计时间,同时提高灵活性和适应性。 降低BOM成本 将模拟电路转换为软件的最明显的好处是材料清单成本(BOM)减少。4 g6 H% w. u' c ( j9 H& @5 i! g" W 提高设计灵活性$ _) ^8 J: u: |* P8 x5 A 使用模拟滤波器来不断调节电路以获得最佳性能时,这种情况并不少见。较小的电路板修改会导致新的电气特性突然改变寄生电容或电感,从而导致模拟电路达不到预期。将模拟电路转换为DSP算法不仅可以消除这种风险,还可以根据软件的需要进行调整,且更具灵活性。; }& w) V7 q4 ?) v 减少产品尺寸 降低BOM成本具有额外的好处,也允许开发人员减少其产品的尺寸。 缩短设计周期时间2 i8 l: p+ n4 H ~* V8 D 将模拟电路转换为软件有助于缩短设计周期。这有几个原因:- P0 h3 y! z2 d7 V4 P$ P ( A9 A# u& y7 B, U/ J9 O 首先,有很多工具可供软件设计人员模拟和生成替换模拟电路所需的DSP算法。这通常比通过电路仿真和测试调整电路所需的时间快得多。 其次,如果需要进行更改,可以在软件中进行更改,这可以在几分钟内完成,而不必重新调整电路板或进行硬件修改。 & J% D- y% Y0 u8 g0 p m 现场适应性 在某些产品中,设计者很难预料用户在现场所遇到的各种情况。使用DSP算法,设计者甚至用户都可以进行实时调整,以适应现场条件,而无需进行大量硬件修改。 ' Z4 Z6 A2 w7 m( u 用数字信号处理算法替换模拟电路有很多好处。需要设计者在实际应用中权衡利益,选择最合适的方案。 ( M) T' @3 M6 V& S) E 1.7 Matlab安装; g7 }7 V) o! j+ ]/ j Matlab是学习DSP过程中非常重要的辅助工具,也是需要熟练掌握的,本教程的第2章到第5章进行了入门介绍。' _, h- _* C) |) ?& |" r0 ^8 {* O 1.8 总结% D* P) W' `4 E 本期教程主要是做一些入门性的介绍,下期教程将开始实战。3 J6 ~7 p$ ^; ?: l2 D) B9 L : J8 ~. Q7 j# G# ] 1 e6 K: K L& N: ? |
【STM32H7S78-DK】汽车仪表系统
【STM32H7S78-DK】基于 rtthread 适配 lcd 驱动移植 lvgl
【STM32H7S78-DK评测】TouchGFX (QR Code)二维码生成器
【STM32H7S78-DK】rtthread 增加 psram 内存管理
【STM32H7S78-DK】开箱与rtthread工程初体验
【STM32H7S78-DK评测】-5 LVGL&DMA2D DEMO测试
【STM32H7S78-DK评测】-4 LTDC&DMA2D 基本测试
【STM32H7S78-DK评测】CoreMark移植和优化--兼记printf重定向实现方法及常见问题
【STM32H7S78-DK评测】移植AI框架TensorFlow【DSP指令加速篇】
【STM32H7S78-DK评测】移植AI框架TensorFlow【下篇】