信号 post 处理中的非因果过滤
Non-causal filtering in signal post-processing
我有速度信号,它是根据记录的位置信号的导数计算出来的。由于计算是在 post 中完成的 - 处理之前和未来的样本都可用。我不想通过过滤来提高计算出的速度信号的质量。我可以很容易地理解例如如何通过移动样本来非随意地完成移动平均滤波器,即
y(k) = (x(i-1) + x(i) + x(i+1))/3
但是它如何用于更高级的滤波器,在信号处理中我曾使用因果切比雪夫滤波器、巴特沃斯滤波器等,在 post 处理和移位中应用这种滤波器是否有意义以与移动平均线类似的方式处理数据,还是有其他合适的过滤器可供使用?
是的,使用 Chebyshev 或 Butterworth 滤波器过滤信号会使信号偏移。这被称为滤波器的 "group delay":令 φ(ω) 为滤波器的相位响应,则群延迟为导数
τ_g(ω) = −dφ(ω)/dω.
群延迟是频率ω的函数,这意味着通常每个频率可能会经历不同的偏移,即色散。
对于像 3-tap 移动平均滤波器这样的 linear phase 滤波器,这不会发生;群延迟在频率范围内是恒定的。
但是对于因果 IIR 滤波器,群延迟的一些变化是不可避免的。对于 Chebyshev 或 Butterworth 等流行的 IIR 设计,群延迟在频率范围内变化缓慢,但滤波器截止点附近除外。
如您所说,您可以在 post-processing 中将信号提前一些样本以抵消偏移。由于群延迟通常随频率而变化,因此要前进的样本数是您希望它最匹配的位置的选择。像通带上的平均群延迟这样的东西是一个合理的起点。
或者,另一种解决偏移的方法是 "forward-backward filtering". Apply the filter running forward, then again going backward. That way the shift introduced by the forward pass is counteracted in the backward pass. You can use Matlab's filtfilt or scipy.signal's filtfilt 执行 forward-backward 过滤。
我有速度信号,它是根据记录的位置信号的导数计算出来的。由于计算是在 post 中完成的 - 处理之前和未来的样本都可用。我不想通过过滤来提高计算出的速度信号的质量。我可以很容易地理解例如如何通过移动样本来非随意地完成移动平均滤波器,即
y(k) = (x(i-1) + x(i) + x(i+1))/3
但是它如何用于更高级的滤波器,在信号处理中我曾使用因果切比雪夫滤波器、巴特沃斯滤波器等,在 post 处理和移位中应用这种滤波器是否有意义以与移动平均线类似的方式处理数据,还是有其他合适的过滤器可供使用?
是的,使用 Chebyshev 或 Butterworth 滤波器过滤信号会使信号偏移。这被称为滤波器的 "group delay":令 φ(ω) 为滤波器的相位响应,则群延迟为导数
τ_g(ω) = −dφ(ω)/dω.
群延迟是频率ω的函数,这意味着通常每个频率可能会经历不同的偏移,即色散。 对于像 3-tap 移动平均滤波器这样的 linear phase 滤波器,这不会发生;群延迟在频率范围内是恒定的。 但是对于因果 IIR 滤波器,群延迟的一些变化是不可避免的。对于 Chebyshev 或 Butterworth 等流行的 IIR 设计,群延迟在频率范围内变化缓慢,但滤波器截止点附近除外。
如您所说,您可以在 post-processing 中将信号提前一些样本以抵消偏移。由于群延迟通常随频率而变化,因此要前进的样本数是您希望它最匹配的位置的选择。像通带上的平均群延迟这样的东西是一个合理的起点。
或者,另一种解决偏移的方法是 "forward-backward filtering". Apply the filter running forward, then again going backward. That way the shift introduced by the forward pass is counteracted in the backward pass. You can use Matlab's filtfilt or scipy.signal's filtfilt 执行 forward-backward 过滤。