gpt4 book ai didi

python - 递归:带有 `scipy.lfilter` 的 IIR 滤波器

转载 作者:行者123 更新时间:2023-11-30 22:30:44 29 4
gpt4 key购买 nike

给定一些数据x:

from pandas_datareader.data import DataReader as dr
x = np.squeeze(dr('DTWEXB', 'fred').dropna().values)

我想计算另一个向量y,如下所示:

enter image description here

在本例中,alpha 等于 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]

最佳答案

传递函数系数的正确参数是[a][1, -b]

要处理所需的初始条件,您可以使用scipy.signal.lfiltic为过滤器创建正确的初始状态。 :

zi = lfiltic([a], [1, -b], y=[x[0]])

然后使用 zi 参数调用 lfilter:

y, zo = lfilter([a], [1, -b], x, zi=zi)

这里有一个 xy(使用 lfilterzi 计算得出),以及您的 true_y:

In [37]: x
Out[37]: array([ 3., 1., 2., 0., -1., 2.])

In [38]: y
Out[38]:
array([ 3. , 2.94 , 2.9118 , 2.824446 , 2.70971262,
2.68842124])

In [39]: true_y
Out[39]:
array([ 3. , 2.94 , 2.9118 , 2.824446 , 2.70971262,
2.68842124])

关于python - 递归:带有 `scipy.lfilter` 的 IIR 滤波器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45970182/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com