我正在开展一个项目,其中杆的一端连接到旋转轴。因此,当轴从0到100度前后旋转(在xy平面内)时,杆也是如此。我在移动杆的末端安装了一个3轴加速度计,我测量了加速度计从旋转中心(即杆的长度)的距离约为38厘米。我收集了大量数据,但我需要帮助才能找到过滤它的最佳方法。首先,这是原始数据的图表:
我认为数据是有意义的:如果它正在上升,那么我认为在那一点上加速度应该线性增加,然后当它逐渐减小时,它应该线性减小。如果它不断移动,加速度将为零。请记住,有时速度从一个“试验”变为另一个“更高”。在这种情况下,有大约120次“试验”或移动/扫描,数据采样频率为148 Hz。
对于过滤,我尝试了低通滤波器,然后是指数递减的移动平均线,两个地块都不太热。虽然我不擅长解释这些:这是我在编写电源频率图时所得到的:
我希望在这里得到帮助,获得一个非常好的方法,我可以通过它来过滤这些数据。一次又一次地(特别是在这个网站上)不断出现的是卡尔曼滤波器。虽然网上有很多代码可以帮助在MATLAB中实现这些代码,但我还是无法真正理解它那么好,因此忽略了我的工作。那么,这里的卡尔曼滤波器是否适用于旋转加速度?如果是这样,有人可以帮我在matlab中实现一个并解释它吗?是否有一些我没有看到的东西可能同样好/更好而且相对简单?
这是我正在谈论的数据。我认为,更密切地放大/放大,可以更好地了解运动中发生的事情:
http://cl.ly/433B1h3m1L0t?_ga=1.81885205.2093327149.1426657579
编辑:好的,这是从加速度计收集的两个相关维度的图。我忽略了包括上下维度,因为加速度计显示接近恒定的~1 G,所以我认为可以说它没有捕获太多的旋转运动。红色是我认为的向心成分,蓝色是切向的。我不知道如何将它们组合起来,这就是为什么我(可能是错误的?)在我的帖子中忽略了它。
以下是其他维度的数据:
http://cl.ly/1u133033182V?_ga=1.74069905.2093327149.1426657579
答案 0 :(得分:1)
我会为你建议低通滤波器,但普通的一阶惯性模型代替卡尔曼。我设计了带通带的滤波器,直到10 Hz(采样频率的~~ 0,1)。离散模型具有以下等式:
y[k] = 0.9418*y[k-1] + 0.05824*u[k-1]
其中u是您的测量向量,y是过滤后的向量。此等式从样本编号1开始,因此您只需将0分配给样本编号0。
答案 1 :(得分:1)
忘记卡尔曼滤波器,请参阅答案末尾的注释。
使用一个简单的移动平均滤镜(就像我在早先的回复中给你看的那样,如果我记得),它本质上是一个低通滤镜:
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
来增加或减少平滑效果。
灰色信号是您的原始信号。我强烈怀疑你得到的噪音尖峰只是由于杆的振动。 (根据杆的比例长度/横截面,您可以在38厘米杆的末端获得显着的振动。这些振动将采取围绕主载波信号的振荡形状,这看起来就像我所看到的那样你的信号)。
注意: 卡尔曼滤波器过于苛刻,无法对噪声数据进行简单滤波。卡尔曼滤波器用于根据某些噪声测量值计算一个值(一个位置,如果我按照您的示例),但为了优化计算,卡尔曼滤波器还将使用基于先前状态的位置预测(位置) )和惯性数据(例如你的旋转速度)。对于那个预测,你需要一个"模型"系统的行为,你似乎没有。
在您的情况下,您需要根据轴在任何时间点的(已知或理论)旋转速度,加速度到旋转中心的距离以及可能的距离来计算加速度计所看到的加速度。使其更加精确,是杆的主要振动模式的动态模型。然后对于每个步骤,将其与实际测量值进行比较......对于您的情况看起来有点沉重。
在这个维基百科条目中查看解释卡尔曼滤波器过程的快速图:Kalman filter,如果您想了解更多信息,请继续阅读。