当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Python SciPy signal.firwin用法及代码示例


本文简要介绍 python 语言中 scipy.signal.firwin 的用法。

用法:

scipy.signal.firwin(numtaps, cutoff, *, width=None, window='hamming', pass_zero=True, scale=True, nyq=<object object>, fs=None)#

使用窗口方法设计 FIR 滤波器。

该函数计算有限脉冲响应滤波器的系数。滤波器将具有线性相位;如果 numtaps 为奇数则为 Type I,如果 numtaps 为偶数则为 Type II。

II 型滤波器在奈奎斯特频率处始终具有零响应,因此如果使用 numtaps 偶数调用 firwin 并且具有右端位于奈奎斯特频率的通带,则会引发 ValueError 异常。

参数

numtaps int

滤波器的长度(系数的数量,即滤波器阶数 + 1)。如果通带包括奈奎斯特频率,则 numtaps 必须是奇数。

cutoff 浮点数或一维 数组

滤波器的截止频率(以与 fs 相同的单位表示)或一组截止频率(即频带边)。在后一种情况下,截止频率应该是正的,并且在 0 和 fs/2 之间单调增加。值 0 和 fs/2 不得包含在截止值中。

width 浮点数或无,可选

如果 width 不是 None,则假定它是用于 Kaiser FIR 滤波器设计的过渡区域的近似宽度(以与 fs 相同的单位表示)。在这种情况下,window 参数将被忽略。

window 字符串或字符串和参数值的元组,可选

想要使用的窗口。有关窗口和所需参数的列表,请参见 scipy.signal.get_window

pass_zero {真,假,‘bandpass’, ‘lowpass’, ‘highpass’, ‘bandstop’},可选

如果为 True,则频率 0(即 “DC gain”)处的增益为 1。如果为 False,则直流增益为 0。也可以是所需滤波器类型的字符串参数(相当于 IIR 设计函数中的 btype )。

scale 布尔型,可选

设置为 True 以缩放系数,以便频率响应在某个频率处完全一致。该频率是:

  • 0 (DC) 如果第一个通带从 0 开始(即 pass_zero 为真)

  • fs/2(奈奎斯特频率),如果第一个通带以 fs/2 结束(即滤波器是单频带高通滤波器);否则为第一通带中心

nyq 浮点数,可选,已弃用

这就是奈奎斯特频率。每个截止频率必须在 0 和 nyq 之间。默认值为 1。

fs 浮点数,可选

信号的采样频率。每个频率在隔断必须介于 0 和fs/2。默认值为 2。

返回

h (numtaps,) ndarray

长度系数 numtaps FIR 滤波器。

抛出

ValueError

如果有任何值隔断小于或等于 0 或大于或等于fs/2,如果值在隔断不是严格单调递增的,或者如果小数点是偶数,但通带包括奈奎斯特频率。

例子

Low-pass 从 0 到 f:

>>> from scipy import signal
>>> numtaps = 3
>>> f = 0.1
>>> signal.firwin(numtaps, f)
array([ 0.06799017,  0.86401967,  0.06799017])

使用特定的窗口函数:

>>> signal.firwin(numtaps, f, window='nuttall')
array([  3.56607041e-04,   9.99286786e-01,   3.56607041e-04])

High-pass(‘stop’ 从 0 到 f):

>>> signal.firwin(numtaps, f, pass_zero=False)
array([-0.00859313,  0.98281375, -0.00859313])

Band-pass:

>>> f1, f2 = 0.1, 0.2
>>> signal.firwin(numtaps, [f1, f2], pass_zero=False)
array([ 0.06301614,  0.88770441,  0.06301614])

Band-stop:

>>> signal.firwin(numtaps, [f1, f2])
array([-0.00801395,  1.0160279 , -0.00801395])

多频段(通带为 [0, f1]、[f2, f3] 和 [f4, 1]):

>>> f3, f4 = 0.3, 0.4
>>> signal.firwin(numtaps, [f1, f2, f3, f4])
array([-0.01376344,  1.02752689, -0.01376344])

多频段(通带为 [f1, f2] 和 [f3,f4]):

>>> signal.firwin(numtaps, [f1, f2, f3, f4], pass_zero=False)
array([ 0.04890915,  0.91284326,  0.04890915])

相关用法


注:本文由纯净天空筛选整理自scipy.org大神的英文原创作品 scipy.signal.firwin。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。