cupyx.scipy.signal.firwin#
- cupyx.scipy.signal.firwin(numtaps, cutoff, width=None, window='hamming', pass_zero=True, scale=True, fs=2)[source]#
使用窗方法进行 FIR 滤波器设计。
此函数计算有限脉冲响应滤波器的系数。滤波器将具有线性相位;如果 numtaps 为奇数,则为 I 型,如果 numtaps 为偶数,则为 II 型。
II 型滤波器在奈奎斯特频率处响应始终为零,因此如果在调用 firwin 时 numtaps 为偶数且通带的右端在奈奎斯特频率处,则会引发 ValueError 异常。
- 参数:
numtaps (int) – 滤波器长度(系数数量,即滤波器阶数 + 1)。如果通带包含奈奎斯特频率,numtaps 必须为奇数。
cutoff (float 或 1D array_like) – 滤波器的截止频率(单位与 fs 相同)或截止频率数组(即带边)。在后一种情况下,cutoff 中的频率应为正值,并在 0 和 fs/2 之间单调递增。不得将值 0 和 fs/2 包含在 cutoff 中。
width (float 或 None, 可选) – 如果 width 不为 None,则假定它是过渡带的近似宽度(单位与 fs 相同),用于 Kaiser FIR 滤波器设计。在这种情况下,window 参数将被忽略。
window (string 或 string 和参数值组成的元组, 可选) – 要使用的期望窗口。有关窗口列表和所需参数,请参阅 cusignal.get_window。
pass_zero ({True, False, 'bandpass', 'lowpass', 'highpass', 'bandstop'},) – 可选 如果为 True,则频率 0 处(即“直流增益”)的增益为 1。如果为 False,则直流增益为 0。也可以是表示所需滤波器类型的字符串参数(等同于 IIR 设计函数中的
btype
)。scale (bool, 可选) –
设置为 True 以缩放系数,使频率响应在某个频率处恰好为 1。该频率为以下之一:
0 (DC),如果第一个通带从 0 开始(即 pass_zero 为 True)
fs/2(奈奎斯特频率),如果第一个通带结束于 fs/2(即滤波器是单带高通滤波器);否则为第一个通带的中心。
fs (float, 可选) – 信号的采样频率。cutoff 中的每个频率必须介于 0 和
fs/2
之间。默认值为 2。
- 返回:
h – 长度为 numtaps 的 FIR 滤波器的系数。
- 返回类型:
(numtaps,) ndarray
- 引发:
ValueError – 如果 cutoff 中的任何值小于或等于 0 或大于或等于
fs/2
,如果 cutoff 中的值不是严格单调递增的,或者如果 numtaps 为偶数但通带包含奈奎斯特频率。
另请参阅
firwin2
,firls
,minimum_phase
,remez
示例
0 到 f 的低通
>>> import cusignal >>> numtaps = 3 >>> f = 0.1 >>> cusignal.firwin(numtaps, f) array([ 0.06799017, 0.86401967, 0.06799017])
使用特定的窗函数
>>> cusignal.firwin(numtaps, f, window='nuttall') array([ 3.56607041e-04, 9.99286786e-01, 3.56607041e-04])
高通(从 0 到 f 为 '阻带')
>>> cusignal.firwin(numtaps, f, pass_zero=False) array([-0.00859313, 0.98281375, -0.00859313])
带通
>>> f1, f2 = 0.1, 0.2 >>> cusignal.firwin(numtaps, [f1, f2], pass_zero=False) array([ 0.06301614, 0.88770441, 0.06301614])
带阻
>>> cusignal.firwin(numtaps, [f1, f2]) array([-0.00801395, 1.0160279 , -0.00801395])
多带(通带为 [0, f1], [f2, f3] 和 [f4, 1])
>>> f3, f4 = 0.3, 0.4 >>> cusignal.firwin(numtaps, [f1, f2, f3, f4]) array([-0.01376344, 1.02752689, -0.01376344])
多带(通带为 [f1, f2] 和 [f3,f4])
>>> cusignal.firwin(numtaps, [f1, f2, f3, f4], pass_zero=False) array([ 0.04890915, 0.91284326, 0.04890915])