鑑於一些數據x
:遞歸:用`IIR濾波器scipy.lfilter`
from pandas_datareader.data import DataReader as dr
x = np.squeeze(dr('DTWEXB', 'fred').dropna().values)
我想計算的另一種載體y
如下:
凡阿爾法等於0.03 , 在這種情況下。
我可以用scipy.lfilter?
來做到這一點。類似的問題here,但在這種情況下,結果的起始值是0,這是拋出一些東西。
我嘗試:
from scipy.signal import lfilter
a = 0.03
b = 1 - a
y0 = x[0]
y = lfilter([a], [y0, -b], x)
結果應該是:
true_y = np.empty(len(x))
for k in range(0, len(true_y)):
if k == 0:
true_y[k] = x[0]
else:
true_y[k] = a*x[k] + b*true_y[k-1]
print(true_y)
[ 101.1818 101.176862 101.16819314 ..., 120.9813121 120.92484874
120.85786628]
似乎是在正確的軌道上,但有些事情是關閉的。結果'y'應該從上面等於'true_y'。我也從設置'a [0] = 0',即'[0,1-alpha]'('ValueError:BUG:filter coefficient a [0] == 0 yet supported')中得到錯誤。 –
遞歸關係可以寫成'y [k] - (1-a)* y [k-1] = a * x [k]'。取*表示*的z變換並求解'Y(z)'得到傳遞函數。 –
我需要刷一下我的z轉換技能看起來:-D –