【问题标题】:Low pass filter-Python低通滤波器-Python
【发布时间】:2019-04-29 06:42:46
【问题描述】:

我正在尝试对我的数据使用低通滤波器。我的样本数据是每分钟的,我想用 1440(每天)的时间常数对其进行过滤。 它只是编写一个 for 循环来计算过滤并将数据附加到 y(filtered data) 列表中。

以下是我写的代码:

OD_deltaT=df["OD_deltaT"].values.tolist()
#a=1/(timeconstant)+1
a=1/1441
u, y=[0], []
for i, x in enumerate(OD_deltaT,1):
    u.append(x)
    y[1]=u[1]
    y[i]=(1-a)*y[i-1]+(a)*u[i]

但我得到这个错误:

list index out of range.  

提前谢谢你!

【问题讨论】:

  • 您认为u, y=[0], [] 完成了什么?关于u?我不确定它是否...
  • y 的空列表和 u 的初始值为零。
  • 你可以只使用来自 scipy 的过滤器:docs.scipy.org/doc/scipy/reference/generated/…
  • 好的,所以..y[] ...你认为y[1]=u[1] 会做什么......你的错误是什么?关于超出范围的索引?

标签: python python-2.7 filtering signal-processing


【解决方案1】:

您需要附加您的数据,就像您为 u 所做的那样。你也可以用更简洁的方式编写代码:

u = [0]
y = [0]
for x in OD_deltaT:
    u.append(x)
    y.append((1-a)*y[-1])+a*x)

当然,scipy 过滤器会更快;)

【讨论】:

  • 非常感谢!你说得对,scipy 做得更快。
  • 但是了解他们在做什么是一个很好的练习,尤其是当您进入非 LTI 的世界并且 scipy 无法再提供帮助时。
  • 为什么是 y[-1]?在我的公式中,我的意思是在当前的之前取一个 y。
  • 列表中的最后一项是当前项之前的一项,因为我们正要添加一个新条目。
猜你喜欢
  • 2013-07-23
  • 1970-01-01
  • 2014-07-29
  • 2011-05-29
  • 2015-05-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多