scipy.signal.

gammatone#

scipy.signal.gammatone(freq, ftype, order=None, numtaps=None, fs=None)[source]#

gammatone 滤波器设计。

此函数计算 FIR 或 IIR gammatone 数字滤波器的系数 [1]

参数:
freqfloat

滤波器的中心频率(以 fs 相同的单位表示)。

ftype{‘fir’, ‘iir’}

函数生成的滤波器类型。如果是 ‘fir’,该函数将生成一个 N 阶 FIR gammatone 滤波器。如果是 ‘iir’,该函数将生成一个 8 阶数字 IIR 滤波器,建模为一个 4 阶 gammatone 滤波器。

orderint,可选

滤波器的阶。仅在 ftype='fir' 时使用。默认值为 4,以对人耳进行建模。必须介于 0 和 24 之间。

numtapsint,可选

滤波器的长度。仅在 ftype='fir' 时使用。如果 fs 大于 1000,则默认为 fs*0.015;如果 fs 小于或等于 1000,则默认为 15。

fs浮点,可选

信号的采样频率。xref py py-obj>freq 必须介于 0 和 fs/2 之间。默认值为 2。

返回:
b, andarray,ndarray

滤波器的分子(b)和分母(a)多项式。

引发:
ValueError

如果 xref py py-obj>freq 小于或等于 0 或大于或等于 fs/2,如果 xref py py-obj>ftype 不是“fir”或“iir”,如果 xref py py-obj>order 小于或等于 0 或大于 24,则 ftype='fir'

另请参见

firwin
iirfilter

参考资料

[1]

Slaney,Malcolm,“Patterson-Holdsworth 听觉滤波器组的有效实现”,Apple Computer 技术报告 35,1993 年,第 3-8、34-39 页。

示例

440 Hz 上的 16 样本 4 阶 FIR Gammatone 滤波器

>>> from scipy import signal
>>> signal.gammatone(440, 'fir', numtaps=16, fs=16000)
(array([ 0.00000000e+00,  2.22196719e-07,  1.64942101e-06,  4.99298227e-06,
    1.01993969e-05,  1.63125770e-05,  2.14648940e-05,  2.29947263e-05,
    1.76776931e-05,  2.04980537e-06, -2.72062858e-05, -7.28455299e-05,
   -1.36651076e-04, -2.19066855e-04, -3.18905076e-04, -4.33156712e-04]),
   [1.0])

频率为 440 Hz 的 IIR Gammatone 滤波器

>>> import matplotlib.pyplot as plt
>>> import numpy as np
>>> b, a = signal.gammatone(440, 'iir', fs=16000)
>>> w, h = signal.freqz(b, a)
>>> plt.plot(w / ((2 * np.pi) / 16000), 20 * np.log10(abs(h)))
>>> plt.xscale('log')
>>> plt.title('Gammatone filter frequency response')
>>> plt.xlabel('Frequency')
>>> plt.ylabel('Amplitude [dB]')
>>> plt.margins(0, 0.1)
>>> plt.grid(which='both', axis='both')
>>> plt.axvline(440, color='green') # cutoff frequency
>>> plt.show()
../../_images/scipy-signal-gammatone-1.png