使用 SciPy 实现相位中性带通滤波器

信息处理 过滤器 过滤器设计 Python 带通
2022-02-11 08:27:51

以下代码是否使用 SciPy 正确实现了相位中性带通滤波器?

freq_fraction = FREQ / (SAMPLE_RATE/2)
sharpness = 0.1
filter_length=128
fir = sig.firwin(filter_length, [freq_fraction*(1-sharpness),freq_fraction*(1+sharpness)], pass_zero=False )
filtered = sig.lfilter( fir, 1, data_to_filter )
filtered = sig.lfilter( fir, 1,filtered[::-1] )[::-1]

该代码基于以下问题的答案:

从原始信号中减去低通滤波信号并将结果用作“高通”是否正确?

它没有给出如何保持相位中性的最终代码清单。我假设这只是向前和向后运行过滤器的问题,但想要仔细检查。

另外,如果有更好/不同的方法(除了另一个问题中列出的 remez 和 firwin2 方法)我很想知道。

2个回答

scipy.signal.filtfiltscipy.signal.butter过滤器怎么样请参阅文档底部的示例。

这是另一个有和没有相中性的例子:Applying filter in scipy.signal: Use lfilter or filtfilt?

计算滤波器的频率响应 ( https://en.wikipedia.org/wiki/Frequency_response ) 看看自己。