Scipy Butterworth滤波器移植ARM CMSIS:需自行实现还是有现成函数?
Butterworth滤波器移植到ARM平台(CMSIS库)的疑问
我使用Scipy开展了Butterworth滤波器实验,代码如下:
sos = butter(order, normal_cutoff, btype='low', analog=False, output="sos")我认为
sos即为滤波器系数。现需将该滤波器移植至ARM平台,CMSIS库中包含多种滤波器函数,但我不确定Butterworth是否属于其支持的滤波器类型。请问我需要自行实现Butterworth滤波器,还是CMSIS库中有对应的可用函数?
解答
- CMSIS-DSP库完全支持Butterworth滤波器,无需自行从头实现。
- 针对你用Scipy生成的
sos(二阶级联)系数,CMSIS-DSP提供了现成的二阶节滤波函数:- 单精度浮点:
arm_biquad_cascade_df1_f32 - Q15定点:
arm_biquad_cascade_df1_q15 - Q31定点:
arm_biquad_cascade_df1_q31
- 单精度浮点:
- 注意Scipy的
sos格式是[b0, b1, b2, a0, a1, a2](a0通常为1),而CMSIS要求的二阶节系数顺序是[b0, b1, b2, a1, a2],移植时需要去掉a0并调整顺序。 - 如果你不想依赖Scipy生成系数,也可以直接用CMSIS-DSP的内置函数生成Butterworth滤波器系数,比如部分新版本提供的
arm_butterworth_lowpass_f32等API,可直接生成符合要求的二阶节系数并初始化滤波器实例。
内容的提问来源于stack exchange,提问作者Julien
相关产品推荐
相关产品推荐

