当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Python SciPy signal.lfilter_zi用法及代码示例


本文简要介绍 python 语言中 scipy.signal.lfilter_zi 的用法。

用法:

scipy.signal.lfilter_zi(b, a)#

为阶跃响应 steady-state 构建 lfilter 的初始条件。

计算初始状态为了scipy.signal.lfilter对应于阶跃响应的稳态的函数。

此函数的典型用途是设置初始状态,以便滤波器的输出从与要滤波的信号的第一个元素相同的值开始。

参数

b, a 数组 (1-D)

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

换句话说,它找到了对所有输入的响应为常数的初始条件。

给定滤波器系数 a 和 b,线性滤波器的转置直接形式 II 实现的状态空间矩阵,它是 scipy.signal.lfilter 使用的实现,是:

A = scipy.linalg.companion(a).T
B = b[1:] - a[1:]*b[0]

假设 a[0] 为 1.0;如果 a[0] 不为 1,则 a 和 b 先除以 a[0]。

例子

以下代码创建一个低通巴特沃斯滤波器。然后它将该过滤器应用于值全为 1.0 的数组;正如低通滤波器所预期的那样,输出也全部为 1.0。如果的论点scipy.signal.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])

请注意,参数scipy.signal.lfilter计算使用lfilter_zi并按比例缩放x[0].然后输出y在输入从 0.5 下降到 0.0 之前没有瞬态。

相关用法


注:本文由纯净天空筛选整理自scipy.org大神的英文原创作品 scipy.signal.lfilter_zi。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。