scipy.signal.sosfilt

scipy.signal.sosfilt(sos, x, axis=- 1, zi=None)[源代码]

过滤数据沿着一维使用级联二阶截面。

过滤一个数据序列, x ,使用由定义的数字IIR过滤 sos

参数
sosarray_like

二阶过滤系数数组,必须具有形状 (n_sections, 6) 。每行对应于一个二阶部分,前三列提供分子系数,后三列提供分母系数。

xarray_like

N维输入数组。

axis整型,可选

要沿其应用线性过滤的输入数据数组的轴。过滤沿此轴应用于每个子阵列。默认值为-1。

ziARRAY_LIKE,可选

级联过滤延迟的初始条件。它是(至少2D)形状的矢量 (n_sections, ..., 2, ...), where ..., 2, ... 表示的形状为 x ,但使用 x.shape[axis] 替换为2。如果 zi 为无或未给定,则假定首字母睡觉(即全零)。请注意,这些初始条件是 not 与由给定的初始条件相同 lfilticlfilter_zi

退货
yndarray

数字过滤的输出。

zfndarray,可选

如果 zi 为NONE,则不返回,否则, zf 保存最终的过滤延迟值。

注意事项

过滤函数被实现为一系列具有直接形式II转置结构的二阶滤波器。它旨在最小化高阶滤波器的数值精度误差。

0.16.0 新版功能.

示例

使用两者绘制13阶过滤的冲激响应 lfiltersosfilt ,显示了试图在单个阶段完成13阶过滤所导致的不稳定性(数值误差将一些极点推到单位圆之外):

>>> import matplotlib.pyplot as plt
>>> from scipy import signal
>>> b, a = signal.ellip(13, 0.009, 80, 0.05, output='ba')
>>> sos = signal.ellip(13, 0.009, 80, 0.05, output='sos')
>>> x = signal.unit_impulse(700)
>>> y_tf = signal.lfilter(b, a, x)
>>> y_sos = signal.sosfilt(sos, x)
>>> plt.plot(y_tf, 'r', label='TF')
>>> plt.plot(y_sos, 'k', label='SOS')
>>> plt.legend(loc='best')
>>> plt.show()
../../_images/scipy-signal-sosfilt-1.png