You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于ARM Cortex-M33的三阶双二阶滤波器(arm_biquad_cascade_df1_f32)溢出问题排查

问题排查与解决

1. 结构体名称拼写错误

代码中定义的滤波器实例结构体名称存在笔误:

static arm_biquad_casd_df1_inst_f32 aweight_inst;

正确的ARM CMSIS-DSP结构体名称应为arm_biquad_cascade_df1_inst_f32(原代码将cascade误写为casd)。这个错误会导致结构体内存布局不匹配,初始化函数无法正确配置滤波器参数,进而引发不可预测的正反馈与溢出问题。

修正后的代码:

static arm_biquad_cascade_df1_inst_f32 aweight_inst;

2. 滤波器系数符号不匹配ARM库公式

ARM CMSIS-DSP中arm_biquad_cascade_df1_f32采用的双二阶滤波器公式为:

y[n] = b0x[n] + b1x[n-1] + b2x[n-2] + a1y[n-1] + a2*y[n-2]

而你引用的文档中,A加权滤波器的系数基于减法形式的公式:

y[n] = b0x[n] + b1x[n-1] + b2x[n-2] - a1_docy[n-1] - a2_doc*y[n-2]

两者的a系数符号完全相反。当前直接使用文档中的a系数,会让ARM库将其当作加法项引入正反馈,导致滤波器不稳定,最终输出溢出。

修正后的系数:

将每个双二阶阶段的a1和a2系数取反:

static const float32_t aweight_coeffs[5 * NUM_STAGES] = {
    // 第一级:b0, b1, b2, -a1_doc, -a2_doc
    0.95616638497f, -1.31960414122f,  0.36343775625f, 1.31861375911f, -0.32059452332f,
    // 第二级
    0.94317138580f, -1.88634277160f,  0.94317138580f, 1.88558607420f, -0.88709946900f,
    // 第三级
    0.69736775447f, -0.42552769920f, -0.27184005527f, 1.31859445445f, -0.32058831623f
};

3. 额外验证建议

  • 初始化后检查aweight_inst的成员变量(如numStages、pCoeffs)是否正确指向预期值,确认初始化无误。
  • 先输入直流信号(如0.5)测试输出是否稳定,再验证音频信号的滤波效果。

内容的提问来源于stack exchange,提问作者monkey

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.11 23:12:40