数字滤波器基础:FIR与IIR原理、频率响应、相位特性、稳定性概念,以及嵌入式实时处理中的约束

在CMSIS-DSP滤波器链路设计中,FIR(有限脉冲响应)与IIR(无限脉冲响应)是两大核心滤波器类别。二者在数学结构、频率响应、相位特性、稳定性以及嵌入式实时实现成本上存在本质差异。理解这些差异,是后续进行定点化设计、采样率规划、级联链路搭建的前提。本章将从原理出发,结合嵌入式实时处理的实际约束,建立滤波器选型与设计的系统化判断框架。

FIR 滤波器 有限脉冲响应 线性相位 对称系数保证 无反馈结构 全零点,天然稳定 阶数较高 过渡带陡峭需高N 计算量 O(N) 乘加运算为主 CMSIS-DSP: arm_fir_f32 y[n] = Σ b[k]·x[n-k] k=0..N-1,无递归 IIR 滤波器 无限脉冲响应 非线性相位 相位失真需校正 反馈结构 含极点,需稳定性分析 阶数较低 相同指标下阶数小 计算量 O(M) M通常远小于N CMSIS-DSP: arm_biquad_cascade y[n] = Σa[k]y[n-k] + Σb[k]x[n-k] 含递归项,需关注稳定性 选型关键:相位要求 → 阶数/算力 → 稳定性 → 定点化风险

2.1 FIR滤波器:线性相位与无反馈结构

核心原理

FIR滤波器的输出仅取决于当前及过去的输入样本,其差分方程为:

y[n] = b[0]·x[n] + b[1]·x[n-1] + ... + b[N-1]·x[n-N+1]

其中N为滤波器阶数(抽头数),b[k]为滤波器系数。由于不存在输出到输入的反馈路径,FIR滤波器天然稳定——其系统函数H(z) = Σb[k]·z⁻ᵏ只包含零点,所有极点均位于z=0处。这一特性使得FIR在嵌入式系统中无需进行稳定性校验,降低了设计风险。

FIR最突出的优势是线性相位特性。当系数满足偶对称(b[k] = b[N-1-k])或奇对称条件时,滤波器在所有频率上具有恒定的群延迟,即信号各频率分量经过滤波器后延迟相同,波形形状不发生畸变。这在生物电信号处理(如ECG、EEG)、音频均衡、通信基带成形等对波形保真度要求高的场景中至关重要。

判断方法与设计流程

在CMSIS-DSP环境中,FIR滤波器设计通常遵循以下流程:

  1. 指标定义:确定通带边缘频率fp、阻带边缘频率fs、通带纹波δp、阻带衰减δs。
  2. 阶数估算:使用Kaiser公式或经验公式估算所需阶数N。例如,对于过渡带宽度Δf = fs - fp,N ≈ (A - 8) / (2.285 × 2πΔf),其中A为阻带衰减(dB)。
  3. 系数计算:使用MATLAB的firpm或fir1函数,或Python的scipy.signal.remez生成系数。
  4. 定点化准备:将浮点系数转换为Q格式定点数,并评估量化误差对频率响应的影响。
  5. CMSIS-DSP实现:调用arm_fir_init_f32或arm_fir_init_q15,使用arm_fir_f32或arm_fir_q15执行滤波。
设计参数典型值对实现的影响
阶数N32~256N越大,过渡带越陡,但计算量线性增加
通带纹波0.1~1 dB纹波越小,所需阶数越高
阻带衰减40~80 dB衰减要求越高,系数精度要求越高
采样率fs1 kHz~1 MHz决定归一化频率,影响系数动态范围

案例拆解:心电信号50Hz工频陷波

某可穿戴心电设备采样率为250Hz,需要抑制50Hz工频干扰,同时保留0.5~100Hz的心电信号。设计一个FIR陷波滤波器,要求陷波深度≥40dB,陷波带宽±2Hz。

初始指标:通带0.5~48Hz和52~100Hz,阻带48~52Hz,阻带衰减40dB。使用MATLAB计算得到所需阶数N=185,这在Cortex-M4上以250Hz采样率运行时,每秒需要执行185×250=46,250次乘加运算,CPU负载约5%(以100MHz主频、单周期MAC估算),可以接受。

实现要点:使用arm_fir_f32函数,将系数数组按Q15格式存储(系数范围±1),调用arm_fir_init_f32初始化实例结构体。实际测试中,滤波后信号波形无明显相位失真,R波峰值保持完好。

风险与代价:FIR陷波器阶数高,占用RAM约185×2=370字节(Q15格式),Flash存储系数185×2=370字节。若改用IIR陷波器,仅需2阶即可达到相同衰减,但会引入相位失真。

经验提醒:在嵌入式系统中,FIR滤波器阶数超过200时,建议优先考虑IIR方案或采用多相分解、FFT快速卷积等优化手段。CMSIS-DSP提供了arm_conv_f32和arm_correlate_f32等函数,可辅助实现基于FFT的快速FIR滤波。

2.2 IIR滤波器:反馈结构与稳定性约束

核心原理

IIR滤波器的差分方程包含反馈项:

y[n] = Σa[k]·y[n-k] + Σb[k]·x[n-k]

其系统函数H(z) = B(z)/A(z),同时包含零点和极点。极点的位置决定了系统的稳定性:所有极点必须位于z平面单位圆内(|z| < 1)。一旦某个极点落在单位圆上或圆外,系统将产生振荡或发散。

IIR的主要优势是高效率。例如,一个4阶Butterworth低通滤波器即可达到与40阶FIR相近的幅频响应陡峭程度。这使得IIR在计算资源受限的嵌入式系统中极具吸引力。然而,IIR的相位响应是非线性的,且对系数量化误差敏感——定点化时极点可能偏移,导致稳定性恶化。

稳定性判断与实现结构

在CMSIS-DSP中,IIR滤波器通常以直接I型、直接II型或转置直接II型结构实现。推荐使用级联二阶节(Biquad)形式:

H(z) = Π (b0 + b1·z⁻¹ + b2·z⁻²) / (1 + a1·z⁻¹ + a2·z⁻²)

级联结构将高阶滤波器分解为多个2阶节,每个节的极点独立控制,便于定点化时逐节调整增益,降低数值溢出风险。CMSIS-DSP提供arm_biquad_cascade_df1_f32和arm_biquad_cascade_df2T_f32等函数。

稳定性判断步骤:

  1. 计算每个二阶节的极点:p = (-a1 ± √(a1² - 4a2)) / 2
  2. 检查极点模值:|p| < 1 则稳定;|p| = 1 则临界稳定;|p| > 1 则不稳定
  3. 对于定点化实现,需额外检查量化后的系数a1、a2是否导致极点移出单位圆
风险提示:在Q15定点化中,系数a2接近1时(对应极点靠近单位圆),量化误差可能导致极点偏移到单位圆外。例如,一个极点位于0.995的滤波器,Q15量化后a2的误差约±1/32768≈0.00003,这足以使极点偏移0.00003/0.995≈0.003%,看似微小,但在高Q值滤波器中可能引发持续振荡。务必在定点化后进行极点位置验证。

案例拆解:电机电流环低通滤波

某伺服驱动器电流环采样率20kHz,需要对电流信号进行低通滤波,截止频率2kHz,要求阻带衰减≥60dB,且群延迟尽可能小。若使用FIR,需阶数N≈120,每次滤波需120次乘加;而使用4阶Butterworth IIR,仅需8次乘加(4个二阶节,每节2次乘加)。

实施过程:在MATLAB中使用butter(4, 0.2)设计归一化截止频率0.2(对应2kHz/20kHz×2=0.2π)的4阶滤波器,得到系数。转换为级联二阶节后,调用CMSIS-DSP的arm_biquad_cascade_df1_f32。实测CPU占用从FIR方案的12%降至2%,但相位延迟在2kHz处约为0.5ms,而FIR方案为0.1ms。

结果对比:在电流环PI控制器中,0.5ms的相位延迟可能导致系统相位裕度下降约3.6°(在2kHz处),对稳定性影响有限。若系统对相位敏感,可考虑Bessel型IIR(相位线性度较好)或FIR方案。

2.3 频率响应与相位特性对比

核心原理

频率响应H(e^jω) = |H(e^jω)|·e^jφ(ω)包含幅频响应和相频响应两部分。FIR线性相位意味着φ(ω) = -ω·τ,其中τ为常数群延迟;IIR的相位响应通常是非线性的,群延迟随频率变化。

特性FIRIIR
相位线性度严格线性(对称系数)非线性,需额外校正
群延迟恒定 = (N-1)/2 个采样周期频率相关,边缘频率处延迟增大
稳定性天然稳定需验证极点位置
阶数效率低(需高阶)高(低阶即可)
定点化风险低(无反馈,误差不累积)高(反馈导致误差累积)
典型应用音频均衡、波形整形、匹配滤波平滑滤波、噪声抑制、控制环路

判断方法:如何选择滤波器类型

  • 若系统对相位敏感(如通信解调、心电波形分析),优先选择FIR。
  • 若计算资源极度紧张(如高采样率、多通道),且相位要求不严格,选择IIR。
  • 若需要陡峭的过渡带且阶数受限,IIR的椭圆滤波器可在最低阶数下实现最陡过渡带,但相位失真最大。
  • 若信号动态范围大(如音频24bit),FIR的定点化误差更易控制。

2.4 嵌入式实时处理中的约束

核心约束分析

在Cortex-M系列处理器上运行滤波器,需关注以下约束:

  1. 实时性:每个采样周期内必须完成滤波计算。例如,采样率48kHz时,每个采样间隔约20.8μs,需在此时间内完成所有乘加运算。
  2. 内存带宽:CMSIS-DSP的arm_fir_f32每次迭代需读取2个浮点数(输入样本和系数),写入1个结果。若使用Q15格式,数据量减半,但需额外的格式转换。
  3. 指令周期:Cortex-M4带FPU时,单精度浮点MAC指令为3个周期;Q15定点MAC为1个周期。定点化可显著提升吞吐量。
  4. 中断延迟:滤波计算若在中断服务程序中执行,需考虑中断嵌套和上下文切换开销。

实时性评估方法

计算滤波器所需的CPU负载:

CPU负载(%) = (滤波器阶数 × 采样率 × 每阶周期数) / 主频 × 100%

例如,Cortex-M4 @ 168MHz,运行128阶FIR @ 48kHz,每阶3周期(FPU):

负载 = (128 × 48000 × 3) / 168000000 × 100% ≈ 1.1%

若改用Q15定点,每阶1周期,负载降至0.37%。但需注意Q15的动态范围限制。

案例拆解:多通道音频处理链路

某音频处理器需同时处理8通道、48kHz采样率的信号,每通道包含:10段参数均衡(每段为2阶IIR)、一个分频滤波器(FIR,128阶)、一个动态范围压缩器(含平滑滤波器)。总计算量估算:

  • IIR部分:10段 × 2阶 × 5次MAC = 100次MAC/通道
  • FIR部分:128次MAC/通道
  • 总MAC:8 × (100 + 128) = 1824次MAC/采样周期
  • 每采样周期时间:20.8μs
  • 所需MAC速率:1824 / 20.8μs ≈ 87.7 MMAC/s

在168MHz主频下,浮点MAC速率约56 MMAC/s(3周期/MAC),无法满足;改用Q15定点后,MAC速率可达168 MMAC/s,满足需求。实际实现中,将IIR系数和FIR系数均转换为Q15格式,使用arm_biquad_cascade_df1_q15和arm_fir_q15,最终CPU负载约52%,留有余量。

关键经验:在嵌入式实时滤波设计中,先估算计算量,再选择滤波器类型和定点格式。通常遵循以下优先级:Q15定点IIR(最低算力)→ Q15定点FIR → 浮点IIR → 浮点FIR。但需权衡动态范围和精度损失。

2.5 常见误区与总结复盘

误区一:盲目追求高阶FIR

许多工程师认为FIR阶数越高越好,忽略了计算量和内存开销。实际上,当FIR阶数超过200时,应考虑以下替代方案:

  • 使用IIR滤波器(若相位要求允许)
  • 采用多速率处理(先抽取再滤波)
  • 使用FFT快速卷积(适用于长滤波器)

误区二:忽略定点化对IIR稳定性的影响

浮点仿真稳定的IIR滤波器,在定点化后可能因系数量化导致极点偏移。必须进行定点化后的极点位置验证,并考虑使用误差反馈或双精度累加(CMSIS-DSP的arm_biquad_cascade_df1_q15使用64位累加器)来缓解。

误区三:将相位特性视为无关紧要

在控制环路、同步检测等场景中,非线性相位可能导致系统不稳定或性能下降。设计前应明确系统对群延迟失真的容忍度。

总结复盘

本章建立了滤波器选型的核心判断框架:

  1. 明确需求:列出通带/阻带指标、相位要求、采样率、实时性预算。
  2. 初步选型:根据相位敏感度和算力预算选择FIR或IIR。
  3. 设计验证:在浮点域完成设计,仿真频率响应和相位响应。
  4. 定点化评估:量化系数,验证频率响应偏差和IIR稳定性。
  5. CMSIS-DSP实现:选择合适的函数(arm_fir_q15、arm_biquad_cascade_df1_q15等),进行性能测试。