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 与由给定的初始条件相同lfiltic
或lfilter_zi
。
- 退货
- yndarray
数字过滤的输出。
- zfndarray,可选
如果 zi 为NONE,则不返回,否则, zf 保存最终的过滤延迟值。
参见
注意事项
过滤函数被实现为一系列具有直接形式II转置结构的二阶滤波器。它旨在最小化高阶滤波器的数值精度误差。
0.16.0 新版功能.
示例
使用两者绘制13阶过滤的冲激响应
lfilter
和sosfilt
,显示了试图在单个阶段完成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()