scipy.signal.

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

频率采样点处的滤波器增益。根据滤波器类型,对增益值应用某些约束,有关详细信息,请参阅说明。

nfreqsint, 可选

用于构造滤波器的插值网格的大小。为了获得最有效的结果,它应该是一个 2 的幂加 1(例如,129、257 等)。默认值为不小于 numtaps 的 2 的最小幂加 1。 nfreqs 必须大于 numtaps

window字符串或 (字符串,浮点数) 或浮点数,或 None,可选

要使用的窗口函数。默认值为“hamming”。有关可能的完整列表,请参阅 scipy.signal.get_window。如果为 None,则不应用窗口函数。

antisymmetricbool, 可选

结果脉冲响应是否对称/反对称。有关更多详细信息,请参阅说明。

fsfloat, 可选

信号的采样频率。 cutoff 中的每个频率必须在 0 和 fs/2 之间。默认值为 2。

返回:
tapsndarray

FIR 滤波器的滤波器系数,作为长度为 numtaps 的一维数组。

说明

从给定的频率和增益集,在频域中构造期望的响应。将逆 FFT 应用于期望的响应以创建关联的卷积核,并返回该核的前 numtaps 个系数,并按 window 缩放。

FIR 滤波器将具有线性相位。滤波器的类型由‘numtaps` 和 antisymmetric 标志的值决定。有四种可能的组合

  • 奇数 numtapsantisymmetric 为 False,将生成 I 型滤波器

  • 偶数 numtapsantisymmetric 为 False,将生成 II 型滤波器

  • 奇数 numtapsantisymmetric 为 True,将生成 III 型滤波器

  • 偶数 numtapsantisymmetric 为 True,将生成 IV 型滤波器

除 I 型滤波器以外的所有滤波器的幅度响应都受以下约束

  • II 型 – 奈奎斯特频率为零

  • III 型 – 零频率和奈奎斯特频率为零

  • IV 型 – 零频率为零

在版本 0.9.0 中添加。

参考文献

[1]

Oppenheim, A. V. 和 Schafer, R. W.,“离散时间信号处理”,Prentice-Hall,新泽西州英格伍德悬崖(1989 年)。(例如,参见第 7.4 节。)

[2]

Smith,Steven W.,“科学家和工程师的数字信号处理指南”,第 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]