【发布时间】:2025-12-02 01:30:01
【问题描述】:
我是 python 和 scipy 的新手,我正在尝试过滤 25Hz 的 3 维加速度数据。我遇到了一个奇怪的问题,在应用过滤器后,我的数据图被平滑了,但是根据过滤器的顺序和截止频率,这些值似乎被放大了很多。这是我的代码:
from scipy import loadtxt
from scipy import signal
import numpy as np
import matplotlib.pyplot as plt
my_data = loadtxt("DATA-001.CSV",delimiter=",",skiprows=8)
N, Wn = signal.buttord( [3,11], [.3,18], .1, 10, True)
print N
print Wn
b,a = signal.butter(N, Wn, 'bandpass', analog=True)
filtered_z = signal.filtfilt(a,b,[my_data[1:500,3]],)
filtered_z = np.reshape(filtered_z, (499,))
plt.figure(1)
plt.subplot(411)
plt.plot(my_data[1:500,0],my_data[1:500,3])
plt.subplot(412)
plt.plot(my_data[1:500,0], filtered_z, 'k')
plt.show()
如果有人有任何建议,我不确定如何摆脱这个奇怪的增益问题? 谢谢!
【问题讨论】:
-
你在 signal.filtfilt 中有错误的系数。应该是:
filtered_z = signal.filtfilt(b,a,[my_data[1:500,3]],)。此外,滤波器极点和零点的大小会导致放大。 -
@EngineerCamp 你的评论应该是一个答案!
-
@EngineerCamp 感谢您的回复!但是,当我切换系数时,我的所有数据都变成了“nan”,有解决方案吗?
-
@ZackyBalkhy 听起来您的滤波器不稳定,因此请查看系数以确定。您想使用带通滤波器而不是低通滤波器有什么特别的原因吗?
-
@EngineerCamp 我希望能够滤除高端噪声和低端重力效应(我在某处读到这可以通过滤波器完成)但我会将其切换为低通和然后我可以稍后在算法上解释重力。我的系数应该是什么样的?感谢所有的帮助。