scipy.signal.lfilter_zi¶
- scipy.signal.lfilter_zi(b, a)[源代码]¶
构造lfilter阶跃响应稳态的初始条件。
计算初始状态 zi 对于
lfilter
与阶跃响应的稳态相对应的函数。此功能的典型用法是设置初始状态,以便过滤的输出从与要过滤的信号的第一个元素相同的值开始。
- 参数
- b, aARRAY_LIKE(一维)
过滤的IIR系数。看见
lfilter
了解更多信息。
- 退货
- zi一维ndarray
过滤的初始状态。
注意事项
阶为m的线性过滤具有状态空间表示(A,B,C,D),对于该状态空间表示,过滤的输出y可以表示为:
z(n+1) = A*z(n) + B*x(n) y(n) = C*z(n) + D*x(n)
其中z(N)是长度为m的向量,A具有形状(m,m),B具有形状(m,1),C具有形状(1,m),D具有形状(1,1)(假设x(N)是标量)。lfilter_zi解算::
zi = A*zi + B
换句话说,它找出对所有1的输入的响应为常数的初始条件。
给定过滤系数 a 和 b ,scipy.signal.lfilter使用的线性过滤的转置直接形式II实现的状态空间矩阵是:
A = scipy.linalg.companion(a).T B = b[1:] - a[1:]*b[0]
假设 a[0] 为1.0;如果 a[0] 不是1, a 和 b 首先被一个 [0] 。
示例
下面的代码创建一个低通巴特沃斯过滤。然后,它将该过滤应用于一个值都为1.0的数组;输出也都是1.0,这与低通过滤的预期不谋而合。如果 zi 论证
lfilter
如果没有给出,输出就会显示瞬态信号。>>> from numpy import array, ones >>> from scipy.signal import lfilter, lfilter_zi, butter >>> b, a = butter(5, 0.25) >>> zi = lfilter_zi(b, a) >>> y, zo = lfilter(b, a, ones(10), zi=zi) >>> y array([1., 1., 1., 1., 1., 1., 1., 1., 1., 1.])
另一个示例:
>>> x = array([0.5, 0.5, 0.5, 0.0, 0.0, 0.0, 0.0]) >>> y, zf = lfilter(b, a, x, zi=zi*x[0]) >>> y array([ 0.5 , 0.5 , 0.5 , 0.49836039, 0.48610528, 0.44399389, 0.35505241])
请注意, zi 参数为
lfilter
是使用以下方法计算的lfilter_zi
并按以下比例进行缩放 x[0] 。然后输出 y 在输入从0.5下降到0.0之前没有瞬变。