scipy.signal.firwin

scipy.signal.firwin(numtaps, cutoff, width=None, window='hamming', pass_zero=True, scale=True, nyq=None, fs=None)[源代码]

冷杉过滤采用窗口法设计。

此函数计算有限脉冲响应过滤的系数。过滤将具有线性相位;如果出现以下情况,则为I型 numtaps 是奇数,如果类型II numtaps 扯平了。

类型II筛选器在奈奎斯特频率上始终为零响应,因此如果使用调用Firwin,则会引发ValueError异常 numtaps 均匀且具有其右端位于奈奎斯特频率的通带。

参数
numtaps集成

过滤长度(系数个数,即过滤顺序+1)。 numtaps 如果通带包括奈奎斯特频率,则必须是奇数。

cutoff浮点或一维阵列_LIKE

过滤截止频率(单位相同 fs )或截止频率阵列(即频带边缘)。在后一种情况下, cutoff 应该是正的,并且在0和0之间单调递增 fs/2 。值0和 fs/2 不得包含在 cutoff

width浮动或无,可选

如果 width 不是NONE,则假设它是过渡区域的大致宽度(使用与相同的单位表示 fs ),用于凯撒冷杉过滤的设计。在本例中, window 参数被忽略。

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

要使用的所需窗口。看见 scipy.signal.get_window 有关窗口和所需参数的列表,请执行以下操作。

pass_zero{True,False,‘BandPass’,‘Low Pass’,‘HighPass’,‘BandStop’},可选

如果为True,则频率0处的增益(即“DC增益”)为1。如果为False,则DC增益为0。也可以是所需过滤类型的字符串参数(等效于 btype 在IIR设计功能中)。

1.3.0 新版功能: 支持字符串参数。

scale布尔值,可选

设置为True可缩放系数,以便在特定频率下频率响应完全一致。该频率为:

  • 如果第一个通带从0开始(即PASS_ZERO为True),则为0(DC)

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

nyq浮动,可选

Deprecated. Use `fs` instead. 这是奈奎斯特的频率。输入的每个频率 cutoff 必须介于0和0之间 nyq 。默认值为1。

fs浮动,可选

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

退货
h(数字敲击,)ndarray

长度系数 numtaps 冷杉过滤。

加薪
ValueError

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

示例

从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])

高通(从0到f的‘STOP’):

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

带通:

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

带阻挡:

>>> 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])