Numpy 补充过滤代码不起作用

Numpy 补充过滤代码不起作用,numpy,python-2.7,Numpy,Python 2.7,我挠头太久了 数据来自3D加速计和3D陀螺仪。我使用一个互补滤波器来控制漂移 我在excel中使用它,但似乎无法让此python代码执行相同的操作: r1_angle_cfx = np.zeros(len(r1_angle_ax)) r1_angle_cfx[0] = r1_angle_ax[0] for i in xrange(len(r1_angle_ax)-1): j = i + 1 r1_angle_cfx[j] = 0.98 *(r1_angle_cf

我挠头太久了

数据来自3D加速计和3D陀螺仪。我使用一个互补滤波器来控制漂移

我在excel中使用它,但似乎无法让此python代码执行相同的操作:

r1_angle_cfx = np.zeros(len(r1_angle_ax))
r1_angle_cfx[0] = r1_angle_ax[0]

for i in xrange(len(r1_angle_ax)-1):
        j = i + 1
        r1_angle_cfx[j] = 0.98 *(r1_angle_cfx[i] + r1_alpha_x[j]*fs) + (0.02 * r1_angle_ax[j])    #complementary filter
在excel(正确)中,我得到:

在python中(不正确),我得到:

出什么事了?在python中有更好的方法实现这一点吗

谢谢, 斯科特

编辑:链接到数据文件- 1.csv文件包含输入到过滤器公式中的加速计、陀螺仪数据以及在excel中计算的值。 2.excel文件包含所有原始数据(上面未提到的步骤,但我已进行了三重检查,并且在输入筛选公式之前是等效的)


编辑2:更新-证明我的代码有效。这是草率的调试。fs应为fs=0.01。在我的代码中,fs=1/100在脚本中最终为=0。

您的Python代码看起来非常合理。没有示例数据,我只能这么说

但我能猜到。我查了一下“互补过滤器”,发现了一个解释它们的链接:

此链接给出了一个与您的公式非常相似的示例:

angle = (1-alpha)*(angle + gyro * dt) + (alpha)*(acc)
您有
fs
,其中有
dt
dt
计算为
1/采样频率
。如果采样频率为
fs
,您是否应该尝试将其反转

编辑:好的,既然你已经发布了数据,我就玩这个。这是我得到正确结果的程序

您的代码看起来基本正确,因此我认为您在收集值的代码中一定犯了错误。我不太确定,因为你的变量名把我弄糊涂了

我使用了
namedtuple
,对于名称,我使用了CSV文件中的列标题(删除空格和句点以生成有效的Python标识符)

check\u line
是CSV文件中保存的
cfX
值与新计算的
cfX
值之间的差异。正如你在图中所看到的,这是一条0处的直线,所以我的计算结果与你的一致

所以我猜名字的映射是:

your_name       my_name
________________________
r1_angle_cfx    cfx
r1_alpha_x      rotX
r1_angle_ax     acc_angX

你能提供一个链接到你的样本数据来尝试它吗?还有,
fs
来自哪里?我想你的意思可能是“补充”,而不是“补充”。现在提供给样本数据的链接,如上所示。fs是1/samplingfreq,是1/100,是dt(采样间隔时间)。而且,是的,是互补的。我想我希望is会对我的分析表示赞赏。添加了编辑2以更新我出错的地方。是的,fs是1/采样频率,在本例中为1/100或0.01。我会得到一些数据来分享。谢谢。谢谢,我来试一试。再次感谢你的工作。你的代码给了我一些新的想法。请参阅我的编辑2,了解我的代码最初不起作用的原因。
your_name       my_name
________________________
r1_angle_cfx    cfx
r1_alpha_x      rotX
r1_angle_ax     acc_angX