我使用scipy.signal.firwin
来过滤我拥有的信号。现在我想报告使用的截止频率,但是文档在这些方面并不清楚:
如何指定截止频率?半功率(-3dB)还是半幅(-6dB)? ...
“定位”的截止频率在哪里?过渡带中间?在通带和过渡带之间的边缘? ...
在我的情况下,了解scipy.signal.firwin
的speficis已经有所帮助。但是一个额外的答案是展示我如何通过计算方式找到这个(或者可能通过绘图?)
答案 0 :(得分:1)
fc
是期望的半幅频率。在firwin
设计的实际滤波器中,fc
的增益约为0.5,随着抽头数量的增加,近似值也会提高。
这是一个图表,显示了使用firwin
和几个不同窗口设计的几个低通滤波器的频率响应。生成绘图的脚本如下所示。
import numpy as np
from scipy.signal import firwin, freqz
import matplotlib.pyplot as plt
# Desired half-amplitude cutoff
fc = 0.2
# Length of the FIR filter
numtaps = 51
windows = ['boxcar', 'hann', 'hamming', 'blackman']
for window in windows:
taps = firwin(numtaps, fc, window=window, scale=False)
w, h = freqz(taps, worN=8000)
plt.plot(w/np.pi, np.abs(h), label=window)
plt.legend(title='Window Function', loc='best', framealpha=1, shadow=True)
plt.axhline(0.5, alpha=0.3, color='k', linestyle='--', linewidth=1)
plt.grid(True)
plt.xlim(0, 2*fc)
plt.xlabel('Normalized frequency (1 = Nyquist)')
plt.ylabel('Gain')
plt.show()
答案 1 :(得分:0)
窗口方法是一种启发式方法,用于近似理想(砖墙)滤波器(具有无限抽头)的频率响应。因此,"截止"频率对应于您尝试近似的理想滤波器的截止频率(半功率/幅度截止的概念在理想设置中没有意义)。当然,由于最终设计只是理想的近似值,您必须检查其频率响应,看它是否足以满足您的需求。