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

STM32Cube的声级计库软件扩展

[复制链接]
STMCU小助手 发布时间:2022-7-19 16:00
引言
* j" d  F, ^+ y; p$ P; o$ K1 D" v声级计库软件用户手册描述了SoundMeterR(SMR)模块配置及其接口。
; D$ h/ G& f/ c  |3 Z该用户手册描述了如何将模块集成到主程序,例如X-CUBE-AUDIO扩展软件中。它还提供了对基础算法的基本理解。$ V# J# X7 y) F& J$ H; k8 `. S
声级计库软件扩展适用于16或32位输入/输出格式。它是X-CUBE-AUDIO固件包的一部分。, U+ [  D& J4 x* |

/ @+ B) i* n& x+ `# v) m1 模块概述
7 h( P' U( Q7 p0 w6 @# @  E1 y1.1 算法功能
; E: e( u) l: F. KSoundMeteR(SMR)模块负责在对数尺度上测量传入信号的电平。它以尺度转换、平滑滤波和加权滤波为基础。
& r# ]# }0 R8 o5 `  E' }" z0 J1 h1 g当前实现对所有计算使用32位分辨率,可与16或32位输入/输出格式一起使用。支持的采样率为8 kHz、16 kHz和48 kHz。
3 Z0 r/ L& V4 y4 Z; q: t
1.2 模块配置
- _/ O6 [. ], R3 e6 t& U; M- G/ SSMR模块支持单声道和立体声16位或32位I/O数据。其存储器受限于960个采样的最大输入帧大小,相当于10 ms的48 kHz立体声信号。
  E1 V2 c4 J8 i* s9 _9 O根据I/O格式、Cortex®内核和使用的工具链,有多个模块版本可供使用:
$ j& ]) t' I0 I9 L% c9 m• SMR_CM4_IAR.a / SMR_CM4_GCC.a / SMR_CM4_Keil.lib:适用于16位输入/输出缓冲区,在任何使用包含Cortex®-M4指令集的内核的STM32微控制器上运行。1 K* Y5 D) X! @. s7 `5 b* {
• SMR_32b_CM4_IAR.a / SMR_32b_CM4_GCC.a / SMR_32b _CM4_Keil.lib:适用于32位输入/输出缓冲区,在任何使用包含Cortex®-M4指令集的内核的STM32微控制器上运行。( |( I2 q$ o' D4 v9 i% Y' M# M  s
• SMR_CM7_IAR.a / SMR_CM7_GCC.a / SMR_CM7_Keil.lib:适用于16位输入/输出缓 冲区,在任何使用包含Cortex®-M7指令集的内核的STM32微控制器上运行。8 Z  ]/ U- d* s
• SMR_32b_CM7_IAR.a / SMR_32b_CM7_GCC.a / SMR_32b _CM7_Keil.lib:适用于32位输入/输出缓冲区,在任何使用包含Cortex®-M7指令集的内核的STM32微控制器上运行。4 \9 ^) \6 W& \. W6 H

+ X& D6 m$ w& ?% L/ r, e
1.3 资源总结! z( \0 l, x$ i, N
表 1包含模块对存储器和频率(MHz)的要求。
, B+ s- o% Y4 W0 b9 k使用:IAR Embedded Workbench for ARM V7.40(IAR Embedded Workbench common components v7.2)测量板上的内存占用量。
1 I" C, p8 i. {0 T3 H9 W ! N, ^% m7 K8 b: v( W5 d+ M
91_A@0G$Q_W~`0ABC_}4RPP.png
) n/ ?- t) {7 c; V9 t0 l1 n3 ^9 t! B' \+ F. z
3 M9 T6 ?% Y3 j" ~; X6 u
2 模块接口
! x9 D$ O* o8 L: X: f- e使用SRM模块时需要集成其两个文件:SMR_xxx_My.a/.lib库和smr_glo.h头文件。它们包含所有要导出到软件集成框架的定义和结构。* O9 d+ P2 h( N/ v2 v' o, l
) G  y, I8 @. G# a
% d: Z+ @: W* @
注: audio_fw_glo.h文件是通用头文件,它对于所有音频模块都通用且必须包含在音频框架中。1 A, @: w* d( v

, c* V4 t9 s' s/ ~* X' Y% h
, R( T/ a& P  s! F5 r
2.1 API
5 m6 U# ]0 {+ A8 j0 `; s. o6 W六个通用函数软件接口:
3 f7 W2 }/ f* U0 k. Q5 j6 G: N9 p• smr_reset函数
' @6 [9 _0 g  x• smr_setParam函数# s( ]& p5 y1 Y* s" ^1 {! a9 @3 ?
• smr_getParam函数( q3 B) F1 j, `9 o1 w
• smr_setConfig函数
4 j  N, [& t* f& m9 g) P  T• smr_getConfig函数
. |5 T  Q* c! @% n, P• smr_process函数
; A$ s3 H6 ?( J下面几节将分别描述每一个函数。& L# H/ y$ f4 P( W* S  J3 n
2.1.1 smr_reset函数8 f4 W( y9 t; J
该例程初始化SMR模块的persistent memory,并使用默认值初始化静态和动态参数。9 N9 q' B9 ~' z7 A$ ?* o
int32_t smr_reset(void *persistent_mem_ptr, void *scratch_mem_ptr);
7 u3 A2 K1 y- y+ Z% ]0 Z3 T% Q
2 @3 u( E" ]4 r% a
- D& [% K6 P, i* E
3D3[RAKRGJIX[}K9WXNM[9P.png
% H& _' v' b: ~- B0 @, I

0 J: M0 o& N- x" d* T6 {当实时处理尚未开始时,在初始化阶段,必须至少调用一次该例程。1 X* h& e' [4 R+ X% v, y$ c" X% k
+ D) L0 h" ~2 U! z8 ]+ F
2.1.2 smr_setParam函数( M1 J" z+ B- ]( O3 y/ J
该例程从主框架将模块静态参数写入模块内存。可以在复位例程后,实时处理开始前对其进行调用。它负责处理静态参数(即模块处理期间参数值不能更改的参数)。( v! P3 }5 k! f% x
int32_t smr_setParam(smr_static_param_t *input_static_param_ptr, void *persistent_mem_ptr);
8 h9 V2 R' B+ G7 E( Z; p4 j4 e4 f& l8 \
, K9 b6 W0 q7 y; B! N1 d# U, @  t
Q}372SDIN8QF%AG{{B0MV52.png
  h3 x. |2 C/ s+ N0 J* r, S, K( l& o# Q& a
2.1.3 smr_getParam函数
: ?: W) ^' i! H  k* ^该例程从模块内存为主框架获取模块静态参数。可以在复位例程后,实时处理开始前对其进行调用。它负责处理静态参数(即模块处理期间参数值不能更改的参数)。
  N7 q! i; ]* b) @5 M2 O3 Bint32_t smr_getParam(smr_static_param_t *input_static_param_ptr, void *persistent_mem_ptr);7 z, G& R+ g% ], G
; v  Y; l9 z, c, K* p1 n6 o- u

" k% J# \4 ^) k %EWF7VLSDTIO[21JE47[{WG.png 0 v; ~+ \' U  x% l

4 f; y- Q7 p7 d; i4 g5 P2.1.4 smr_setConfig函数3 n: |4 q* R$ |3 ?/ l2 O
该例程从主框架为模块内存设置模块动态参数。可以在处理期间的任何时间对其进行调用。
* f( S) t! `6 H  E' V1 |) A$ dint32_t smr_setConfig(smr_dynamic_param_t *input_dynamic_param_ptr, void *persistent_mem_ptr);, Z0 t* e/ f7 w4 a9 Z8 H4 z1 O

2 @1 M. g- t7 b  ? {V(2M%UQUJ_5TN@N7RBIWVA.png # O5 y+ K4 L" A9 ]) V

; g4 S. r+ h# M
  k) K0 \& \* f* ~" }8 s2 h2.1.5 smr_getConfig函数
0 }7 D. X, ~/ c; r9 @该例程从内部persistent memory为主框架获取模块动态参数。可以在处理期间的任何时间对其进行调用。
" h: v- m9 Q: L7 ]- p+ L2 v5 @int32_t smr_getConfig(smr_dynamic_param_t *input_dynamic_param_ptr, void *static_mem_ptr);
* ~. X! A8 R& h5 E 4 O) {' B: a4 E2 O2 m- j+ d0 v
H2MT~UY2FHTK[@E`M]H4CV0.png $ ]# G9 A9 Q7 k: S
0 }5 u" D6 v1 ]  |, B5 n
2.1.6 smr_process函数9 H; }1 C. l5 A: x  j( O& L" v
该例程是模块的主要处理例程。8 s  l2 k, _- X4 C
随时可以被调用来处理每帧数据。
0 a$ |1 E+ H# a, O. Y5 Oint32_t smr_process(buffer_t *input_buffer, buffer_t *output_buffer, void *persistent_mem_ptr);# S1 u+ j' M$ e: Q( B

5 Y( z6 y2 ~  D/ F5 P# n* X: ? $(J}SOF5KHLZSFOL0NIAF}8.png % n$ z& @9 Z% z1 j6 k
* t7 ]" P- t, X; F% O' a$ G
+ I: g# K% {9 Z
完整版请查看:附件
1 V; a  M/ s2 ^& E% o; x# R% o2 T
: L; n4 n: C1 n$ w1 @
4 S( Y. y$ R) K$ V% q, ?

DM00275616_ZHV1.pdf

下载

425.93 KB, 下载次数: 5

赞 收藏 评论0 发布时间:2022-7-19 16:00

举报

0个回答

所属标签

相似技术帖

官网相关资源

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