过滤旋转加速度(适合卡尔曼滤波器使用?)

Filtering rotational acceleration (Appropriate use for Kalman filter?)

我正在进行一个项目,其中一根杆的一端连接到旋转轴上。因此,当轴从 0 度来回旋转(在 xy 平面中)时,杆也是如此。我在移动杆的末端安装了一个三轴加速度计,我测量了加速度计距离旋转中心的距离(即杆的长度)约为38厘米。我收集了很多数据,但我需要帮助才能找到过滤数据的最佳方法。首先,这是原始数据图:

我认为数据是有道理的:如果它在上升,那么我认为在那个点加速度应该是线性增加的,然后当它下降时,它应该是线性下降的。如果它不断移动,加速度将为零。请记住,有时速度会从一个 "trial" 更改(更高)到另一个。在这种情况下,有 ~120 "trials" 或 movements/sweeps,数据以 148 Hz 采样。

对于过滤,我尝试了一个低通滤波器,然后是一个指数下降的移动平均线,两个图都不太热。虽然我不擅长解释这些:这是我在编写工频图时得到的:

我希望在这里得到帮助的是,找到一个非常好的方法来过滤这些数据。一次又一次(尤其是在这个网站上)不断出现的一件事是卡尔曼滤波器。虽然有很多在线代码可以帮助在 MATLAB 中实现这些代码,但我还不能真正理解它,因此忽略了在这里包含我的工作。那么,卡尔曼滤波器是否适用于旋转加速度?如果是这样,有人可以帮我在 matlab 中实现一个并解释它吗?有什么我没有看到的东西可能就像 good/better 一样相对简单吗?

这是我正在谈论的数据。多看 closely/zooming 可以更好地了解运动中发生的事情,我认为:

http://cl.ly/433B1h3m1L0t?_ga=1.81885205.2093327149.1426657579

编辑:好的,这是从加速度计收集的两个相关维度的图。由于加速度计显示接近恒定的 ~1 G,我忽略了包括上下尺寸,所以我认为可以肯定地说它没有捕捉到太多的旋转运动。我认为红色是向心分量,蓝色是切向分量。我不知道如何将它们结合起来,这就是为什么我(也许是错误的?)在我的 post.

中忽略了它

这是另一个维度的数据:

http://cl.ly/1u133033182V?_ga=1.74069905.2093327149.1426657579

我会为你推荐低通滤波器,但不是卡尔曼而是普通的一阶惯性模型。我设计的滤波器通带可达 10 Hz(采样频率的~~0,1)。离散模型具有以下等式:

y[k] = 0.9418*y[k-1] + 0.05824*u[k-1]

其中u是你测量的向量,y是过滤后的向量。此等式从样本编号 1 开始,因此您可以将 0 分配给样本编号 0。

忘记卡尔曼滤波器,请参阅答案末尾的注释了解原因。

使用一个简单的移动平均滤波器(就像我在之前的回复中向您展示的那样),它本质上是一个低通滤波器:

n = 30 ; %// length of the filter
kernel = ones(1,n)./n ;
ysm = filter( kernel , 1 , flipud(filter( kernel , 1 , flipud(y) )) ) ; 
%// assuming your data "y" are in COLUMN (otherwise change 'flipud' to 'fliplr')

注意:如果您可以访问 curvefit 工具箱,您只需使用:ys = smooth(y,30) ; 即可获得几乎相同的结果。

我得到: 一旦放大看起来像:

您可以使用参数 n 来增加或减少平滑度。

灰色信号是您的原始信号。我强烈怀疑你得到的噪音尖峰只是由于你的杆的振动。 (根据杆的比率 length/cross 部分,您可以在 38 厘米杆的末端获得明显的振动。这些振动将采取围绕主载波信号振荡的形状,这绝对看起来像我看到你的信号)。


注意: 卡尔曼滤波器对噪声数据进行简单的过滤有点矫枉过正。当你想根据一些嘈杂的测量计算一个值(如果我按照你的例子是一个位置)时使用卡尔曼滤波器,但是为了改进计算,卡尔曼滤波器还将使用基于先前状态的位置预测(位置) 和惯性数据(例如旋转的速度)。对于该预测,您需要 "model" 系统行为,而您似乎没有。

在您的情况下,您需要根据轴在任何时间点的(已知或理论)旋转速度、加速器到旋转中心的距离、并且可能为了使它更精确,你的杆的主要振动模式的动态模型。然后对于每一步,将其与实际测量值进行比较...对您的情况来说似乎有点重。

查看此维基百科条目中解释卡尔曼滤波过程的快速图表:Kalman filter,如果您想进一步了解它,请继续阅读。