STMCU小助手
发布时间:2022-7-19 16:00
|
引言 声级计库软件用户手册描述了SoundMeterR(SMR)模块配置及其接口。 该用户手册描述了如何将模块集成到主程序,例如X-CUBE-AUDIO扩展软件中。它还提供了对基础算法的基本理解。$ V# J# X7 y) F& J$ H; k8 `. S 声级计库软件扩展适用于16或32位输入/输出格式。它是X-CUBE-AUDIO固件包的一部分。, U+ [ D& J4 x* | 1 模块概述 1.1 算法功能 SoundMeteR(SMR)模块负责在对数尺度上测量传入信号的电平。它以尺度转换、平滑滤波和加权滤波为基础。 当前实现对所有计算使用32位分辨率,可与16或32位输入/输出格式一起使用。支持的采样率为8 kHz、16 kHz和48 kHz。 1.2 模块配置 SMR模块支持单声道和立体声16位或32位I/O数据。其存储器受限于960个采样的最大输入帧大小,相当于10 ms的48 kHz立体声信号。 根据I/O格式、Cortex®内核和使用的工具链,有多个模块版本可供使用: • 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 1.3 资源总结! z( \0 l, x$ i, N 表 1包含模块对存储器和频率(MHz)的要求。 使用:IAR Embedded Workbench for ARM V7.40(IAR Embedded Workbench common components v7.2)测量板上的内存占用量。 ! N, ^% m7 K8 b: v( W5 d+ M
1 n3 ^9 t! B' \+ F. z 3 M9 T6 ?% Y3 j" ~; X6 u 2 模块接口 使用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 , R( T/ a& P s! F5 r 2.1 API 六个通用函数软件接口: • smr_reset函数 • smr_setParam函数# s( ]& p5 y1 Y* s" ^1 {! a9 @3 ? • smr_getParam函数( q3 B) F1 j, `9 o1 w • smr_setConfig函数 • smr_getConfig函数 • smr_process函数 下面几节将分别描述每一个函数。& 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); - D& [% K6 P, i* E
当实时处理尚未开始时,在初始化阶段,必须至少调用一次该例程。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); ; p4 j4 e4 f& l8 \ , K9 b6 W0 q7 y; B! N1 d# U, @ t
* r, S, K( l& o# Q& a 2.1.3 smr_getParam函数 该例程从模块内存为主框架获取模块静态参数。可以在复位例程后,实时处理开始前对其进行调用。它负责处理静态参数(即模块处理期间参数值不能更改的参数)。 int32_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
2.1.4 smr_setConfig函数3 n: |4 q* R$ |3 ?/ l2 O 该例程从主框架为模块内存设置模块动态参数。可以在处理期间的任何时间对其进行调用。 int32_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.5 smr_getConfig函数 该例程从内部persistent memory为主框架获取模块动态参数。可以在处理期间的任何时间对其进行调用。 int32_t smr_getConfig(smr_dynamic_param_t *input_dynamic_param_ptr, void *static_mem_ptr); 4 O) {' B: a4 E2 O2 m- j+ d0 v
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 随时可以被调用来处理每帧数据。 int32_t smr_process(buffer_t *input_buffer, buffer_t *output_buffer, void *persistent_mem_ptr);# S1 u+ j' M$ e: Q( B
* 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
【STM32H735G-DK 测评】STM32H735G-DK External Loder 编译和测试
Keil-MDK 在线调试设置断点的高级用法
请教下STM32N6570 怎么把分辨率改成320x240并可以全屏显示
【福利三:逢7发帖赢大礼】想要充分利用STM32H743VI片内的RAM空间(但并不顺利)
基于stm32平台上的IC-MU磁绝对值编码器SPI通讯和码盘数据处理
使用STM32 MCU和MPU连接PDM数字麦克风
分享STM32资料-采用 STM32U031R8 MCU 的 STM32 Nucleo-64 开发板,官方资料,数据手册等资料
HRTIM 指南
使用 STM32 的 DWT 单元监控内存
DAC,COMP,HRTIM Fault 功能的使用
微信公众号
手机版