當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。