Arm_math 库
功能介绍
ARM Math (CMSIS-DSP) 是 ARM 官方提供的数字信号处理库,包含 600+ 个优化函数,充分利用 Cortex-M4 的 SIMD 指令和 FPU 硬件加速。库涵盖:基本数学运算、三角函数、矩阵运算、滤波器 (FIR/IIR)、FFT 变换、统计分析等。
ARM Math 主要用于:数字滤波 (去除噪声)、FFT 频谱分析、电机控制中的坐标变换、PID 控制器实现、音频处理、传感器数据融合等。相比自行实现的算法,ARM Math 库经过深度优化,执行效率更高且代码更可靠。
常用函数
三角函数
arm_sin_f32, arm_cos_f32
数学运算
arm_sqrt_f32, arm_atan2_f32
滤波器
FIR, IIR, 滑动平均
矩阵运算
矩阵乘法、求逆
使用方法
| 1 | #include "arm_math.h" |
| 2 | |
| 3 | // 计算正弦值 |
| 4 | float sin_val = arm_sin_f32(PI / 4); // sin(45) |
| 5 | |
| 6 | // 计算余弦值 |
| 7 | float cos_val = arm_cos_f32(PI / 3); // cos(60) |
| 8 | |
| 9 | // 计算平方根 |
| 10 | float sqrt_val; |
FIR 滤波器
配置步骤
- 定义滤波器系数
- 初始化滤波器实例
- 调用滤波函数
| 1 | #define NUM_TAPS 32 |
| 2 | float32_t fir_coeffs[NUM_TAPS] = {...}; |
| 3 | float32_t fir_state[NUM_TAPS + BLOCK_SIZE - 1]; |
| 4 | |
| 5 | arm_fir_instance_f32 S; |
| 6 | arm_fir_init_f32(&S, NUM_TAPS, fir_coeffs, fir_state, BLOCK_SIZE); |
| 7 | |
| 8 | // 执行滤波 |
性能优化
FPU:STM32G4 内置 FPU,浮点运算高效
DSP 指令:使用 SIMD 指令加速运算
DSP 指令:使用 SIMD 指令加速运算