如何利用周期性来降低信号噪声?

时间:2011-04-18 12:36:03

标签: c++ r matlab signal-processing fft

从3维周期信号中收集了100个周期。波长略有变化。波长的噪声遵循具有零均值的高斯分布。已知对波长的良好估计,这不是问题。振幅的噪声可能不是高斯噪声,可能会被异常值污染。

如何计算所有收集的100个期间中“最佳”的单个期间?

时间序列,ARMA,ARIMA,卡尔曼滤波器,自动回归和自相关似乎是关键词。

更新1:我不知道时间序列模型是如何工作的。他们准备好不同的波长吗?他们能处理不平滑的真实信号吗?如果拟合了时间序列模型,我可以计算单个时期的“最佳估计”吗?怎么样?

更新2:相关问题是this。在我的情况下,速度不是问题。在收集所有期间后,处理将在离线状态下完成。

问题的根源:我在200 Hz的人为步骤中测量加速度。之后我试图对数据进行双重积分以获得重心的垂直位移。当然,当您集成两次时,噪声会引入巨大的错误。我想利用周期性来减少这种噪音。下面是对应于3个周期的6个步骤的实际数据(y:以g为单位的加速度,x:以秒为单位的时间)的粗略图表(1个左侧,1个右侧步骤为周期):

human steps

我现在的兴趣纯粹是理论上的,因为http://jap.physiology.org/content/39/1/174.abstract提供了一个非常好的食谱。

3 个答案:

答案 0 :(得分:5)

我们使用小波进行噪音抑制,并在步行时测量奶牛的相似信号。 我不认为噪音在这里是一个很大的问题,最大的峰值代表行走时加速度的实际变化。

我认为在您的实验过程中腿部和加速度计的角度会发生变化,您需要考虑到这一点才能计算距离,即您需要知道每个时间步长中加速度计的方向。例如,请参阅此technical note以了解角度。

如果您需要获得准确的位置测量,最好的解决方案是使用带有磁力计的加速度计,该磁力计也可以测量方向。这样的事情应该有效:http://www.sparkfun.com/products/10321

编辑:我在过去几天对此进行了更多研究,因为类似的项目也在我的待办事项列表中...我们过去没有使用过陀螺仪,但是我们正在下一个项目中这样做。

定位的不准确性不是来自白噪声,而是来自陀螺仪的不准确和漂移。然后由于双重积分,错误会很快累积。 Intersense有一个名为Navshoe的产品,它通过在每个步骤之后将错误归零来解决此问题(请参阅this paper)。 this是对惯性导航的一个很好的介绍。

答案 1 :(得分:2)

无噪声的周期性信号具有以下特性:

f(a) = f(a+k), where k is the wavelength.

需要的下一部分信息是您的信号由不同的样本组成。您收集的每一点信息都基于样本,即f()函数的值。从100个样本中,您可以得到平均值:

1/n * sum(s_i), where i is in range [0..n-1] and n = 100.

这需要针对数据的每个维度进行。如果您使用3d数据,它将被应用3次。结果将是(x,y,z)点。只需执行

,就可以从周期信号方程中找到s_i的值
s_i(a).x = f(a+k*i).x
s_i(a).y = f(a+k*i).y
s_i(a).z = f(a+k*i).z

如果波长不准确​​,这将为您提供额外的误差源,或者您需要调整它以匹配每个周期的实际波长。由于

k*i = k+k+...+k

如果波长变化,则需要使用   k_1+k_2+k_3+...+k_i 而不是k * i。 不幸的是,由于波长存在误差,因此将k_1..k_i链与实际数据保持同步会存在很大问题。您实际上需要知道如何从实际数据中识别每个时段的起始位置。可能需要手工标记它们。

现在,您计算的所有平均值都是这样的函数:

m(a) :: R->(x,y,z)

现在这是一个3d空间的曲线。更复杂的错误模型将留给读者作为一个例外。

答案 2 :(得分:1)

如果您有曲线拟合工具箱的副本,则本地化回归可能是一个不错的选择。

  1. 曲线拟合工具箱支持曲线和曲线拟合的lowess和loess局部回归模型。

  2. 有一个强大的本地化回归选项

  3. 以下博客文章介绍了如何使用交叉验证来估计局部回归模型的优化spaning参数,以及使用bootstrap估计置信区间的技术。

    http://blogs.mathworks.com/loren/2011/01/13/data-driven-fitting/