两款DC滤波算法的功能对比与优劣评估咨询
两款DC滤波算法的核心差异与偏好分析
一、核心差异
从数学模型和实现特性拆解两款算法的本质区别:
算法1(dsprelated版本)
代码实现:
y = x - xm1 + 0.995 * ym1; xm1 = x; ym1 = y;
这是一阶差分叠加一阶低通的组合结构,推导后传递函数为:
$$H_1(z) = \frac{1 - z^{-1}}{1 - 0.995z^{-1}}$$
高频段(信号变化快)增益为1,无幅度衰减,需要维护xm1(上一采样输入)和ym1(上一输出)两个状态变量。
算法2(反转低通得到的高通)
代码实现:
y += (x - y) * 0.005; output = x - y;
这里的y是一阶低通的输出,最终高通输出为输入减去低通结果。推导后传递函数为:
$$H_2(z) = 0.995 \cdot \frac{1 - z^{-1}}{1 - 0.995z^{-1}}$$
本质是算法1的幅度缩放版本,高频段增益为0.995(约0.04dB衰减),仅需维护y一个状态变量。
两者核心差异总结:
- 幅度增益:算法2输出幅度是算法1的0.995倍,存在微小衰减
- 状态资源:算法1需2个状态变量,算法2仅需1个,内存占用更少
- 响应感知:你实测算法2响应更慢,是因为初始输出幅度更小,实际两者极点一致(截止频率相同),过渡带斜率完全相同
二、偏好选择依据
两款算法没有绝对的优劣,需结合场景需求选择:
优先选算法1的场景
- 需要无幅度衰减的信号输出:比如音频、精密测量等对信号幅度保真度要求高的场景,0.04dB的衰减虽小,但在多级级联或高精度分析中可能累积影响
- 直流抑制的极致性能:纯直流输入下,算法1的输出会以更快的视觉收敛速度趋近于0(无幅度缩放),极端场景下的直流残留更低
- 相位特性匹配:算法1的差分结构带来的相位偏移,在某些需要保持相位线性度的系统中更适配
优先选算法2的场景
- 资源受限的嵌入式平台:比如8位MCU、小型FPGA等,更少的状态变量能节省宝贵的RAM/寄存器资源
- 代码简洁性与复用性:低通迭代逻辑直观易懂,若系统同时需要提取直流分量(
y变量)和交流分量(output),可直接复用,减少冗余计算 - 对微小衰减不敏感:大多数工业控制、普通传感器信号处理场景中,0.995的增益衰减可忽略,不影响后续分析或控制逻辑
三、总结
两款算法属于同一类一阶高通滤波器,仅在幅度增益和状态资源上有差异。选择时无需纠结"优劣",只需匹配自身需求:
- 追求幅度保真、极致直流抑制或相位适配 → 选算法1
- 看重内存占用、代码简洁或需复用直流分量 → 选算法2
内容的提问来源于stack exchange,提问作者user5343408
相关产品推荐
相关产品推荐

