firwin2#
- scipy.signal.firwin2(numtaps, freq, gain, *, nfreqs=None, window='hamming', antisymmetric=False, fs=None)[source]#
使用窗函数法设计 FIR 滤波器。
根据给定的频率 freq 和对应的增益 gain,此函数构造一个具有线性相位和(近似)给定频率响应的 FIR 滤波器。
- 参数:
- numtapsint
FIR 滤波器的抽头数量。numtaps 必须小于 nfreqs。
- freqarray_like, 1-D
频率采样点。通常为 0.0 到 1.0,其中 1.0 为奈奎斯特频率。奈奎斯特频率是 fs 的一半。freq 中的值必须是非递减的。一个值可以重复一次以实现不连续性。freq 中的第一个值必须是 0,最后一个值必须是
fs/2
。值 0 和fs/2
不得重复。- gainarray_like
频率采样点处的滤波器增益。根据滤波器类型,对增益值施加某些约束,详见注意事项 (Notes)。
- nfreqsint, optional
用于构造滤波器的插值网格大小。为获得最高效率,此值应为 2 的幂加 1(例如,129, 257 等)。默认值是不小于 numtaps 的最小 2 的幂再加 1。nfreqs 必须大于 numtaps。
- windowstring or (string, float) or float, or None, optional
要使用的窗函数。默认为“hamming”。有关所有可能值的完整列表,请参见
scipy.signal.get_window
。如果为 None,则不应用任何窗函数。- antisymmetricbool, optional
所得脉冲响应是否对称/反对称。详见注意事项 (Notes)。
- fsfloat, optional
信号的采样频率。cutoff 中的每个频率都必须在 0 和
fs/2
之间。默认值为 2。
- 返回:
- tapsndarray
FIR 滤波器的滤波器系数,为长度为 numtaps 的 1-D 数组。
另请参见
注意事项
根据给定的一组频率和增益,在频域中构造出所需的响应。对所需响应应用逆 FFT 以创建相关的卷积核,并返回此核的前 numtaps 个系数,这些系数按 window 进行缩放。
FIR 滤波器将具有线性相位。滤波器的类型由 ‘numtaps` 的值和 antisymmetric 标志决定。有四种可能的组合:
奇数 numtaps,antisymmetric 为 False,生成 I 型滤波器
偶数 numtaps,antisymmetric 为 False,生成 II 型滤波器
奇数 numtaps,antisymmetric 为 True,生成 III 型滤波器
偶数 numtaps,antisymmetric 为 True,生成 IV 型滤波器
除 I 型滤波器外,所有滤波器的幅度响应都受以下约束:
II 型 – 在奈奎斯特频率处为零
III 型 – 在零频率和奈奎斯特频率处为零
IV 型 – 在零频率处为零
0.9.0 版本新增。
参考文献
[1]Oppenheim, A. V. and Schafer, R. W., “Discrete-Time Signal Processing”, Prentice-Hall, Englewood Cliffs, New Jersey (1989)。(例如,参见第 7.4 节。)
[2]Smith, Steven W., “The Scientist and Engineer’s Guide to Digital Signal Processing”, 第 17 章。 http://www.dspguide.com/ch17/1.htm
示例
一个低通 FIR 滤波器,其响应在 [0.0, 0.5] 上为 1,并在 [0.5, 1.0] 上从 1 线性递减到 0
>>> from scipy import signal >>> taps = signal.firwin2(150, [0.0, 0.5, 1.0], [1.0, 1.0, 0.0]) >>> print(taps[72:78]) [-0.02286961 -0.06362756 0.57310236 0.57310236 -0.06362756 -0.02286961]