如何利用周期性来减少信号噪声?

4

从三维周期信号中收集了100个周期。波长略有变化。波长的噪声遵循零均值的高斯分布。良好的波长估计已知,这不是问题。幅度的噪声可能不是高斯的,并且可能被离群值污染。

如何计算一个单周期,以最佳方式近似所有收集的100个周期?

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

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

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

问题起源:我以200Hz的频率测量人类步伐时的加速度。然后,我尝试对数据进行双重积分,以获取重心的垂直位移。当然,噪声在二次积分时会引入巨大误差。我想利用周期性来减小这种噪声。下面是6个步骤(1个左脚和1个右脚为一个周期)对应3个周期的实际数据的粗略图形(y轴:加速度,单位为g;x轴:时间,单位为秒)。

human steps

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


2
你能提供一些虚拟数据来说明你想要估计周期的问题吗? - Gavin Simpson
2
@Ali,你在这个问题上设置赏金真是太好了。但是我仍然不清楚你到底想做什么。就目前而言,至少有两种可能的解释。第一种是“如何拟合时间序列模型”。第二种是“如何确定信号的波长”。你能否请澄清并提供一些虚拟数据? - Andrie
2
@Ali:我认为这里很多人都能够解释时间序列分析、平滑等。然而,你想要实现什么并不是很清楚,这就是为什么你没有得到很多答案的原因。如果你发布一些样本数据并解释你想要做什么(我不在乎它是否是一个粗糙的图表,只要我能理解它),那么它会更好地传达信息,并且你会吸引更多的回答。如果你不能发布一些数据,你能画出你所想的东西并将其作为图像发布吗?如果不可能,数学方程也可以(我更喜欢这个,因为没有歧义)。 - user616736
1
问题对于SO来说仍然过于模糊和不集中。请尝试访问http://stats.stackexchange.com/或阅读一些关于时间序列和信号处理的书籍。 - leonbloy
-1:有趣但离题了。 - Troubadour
显示剩余8条评论
3个回答

5
我们已经使用小波对行走中的牛产生的类似信号进行噪声抑制。我认为噪声在这里不是很大的问题,最大的峰值代表了行走期间加速度的实际变化。
我猜想,在你的实验中,腿的角度和加速度计会发生变化,因此你需要考虑这一点,以便计算距离,即你需要知道每个时间步长中加速度计的方向。例如,参见这篇技术说明technical note
如果您需要获得准确的位置测量结果,最好的解决方案是使用带有磁力计的加速度计,同时也可以测量方向。像这样的东西应该可以起作用:http://www.sparkfun.com/products/10321
编辑:我最近几天对此进行了更深入的研究,因为一个类似的项目也在我的待办列表中...我们过去没有使用陀螺仪,但我们将在下一个项目中使用。
定位的不准确性并不是来自白噪声,而是来自陀螺仪的不准确性和漂移。由于双重积分,误差会非常快地累积。Intersense有一个名为Navshoe的产品,通过在每步之后将误差归零来解决这个问题(参见this paper)。而this是惯性导航的良好介绍。

有趣,谢谢!你可能会发现这个链接有用:http://jap.physiology.org/content/39/1/174.abstract。虽然他们测量的是力量,但是假设你也在使用陀螺仪,那么很容易适应加速度。 - Ali
嗨,阿里,感谢你的论文和Shrimmer,它似乎是一个有趣的产品。我稍微更新了我的答案,希望你觉得有用。 - Matti Pastell
谢谢!我正在尝试计算在稳定行走期间重心的位移,因此导航不适用于此。无论如何,这些链接非常有用,请将它们保留在那里。除非有其他更好的答案,否则我将手动授予您奖励。 - Ali
嗨,谢谢赏金和链接!看起来非常有趣。 - Matti Pastell
感谢您努力回答我的问题并提供链接。(有些人通过对我的问题进行投票来“帮助”我...) - Ali
显示剩余3条评论

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.

这需要针对您数据的每个维度进行操作。如果您使用的是三维数据,则需要应用三次。结果将为(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_1..k_i链与实际数据同步方面存在很大问题。您实际上需要知道如何从实际数据中识别每个周期的起始位置。可能需要手动标记它们。
现在,您计算的所有平均值都将成为以下函数: (x,y,z)> 现在这是三维空间中的曲线。更复杂的误差模型将留给读者作为练习。

所以,你的建议基本上是手动将数据分成时间段... 没有一个能够处理波长噪声的模型吗?我觉得这很难相信。无论如何,还是谢谢! - Ali
环形回归怎么样? - IRTFM

1

如果您有Curve Fitting Toolbox的副本,局部回归可能是一个不错的选择。

  1. Curve Fitting Toolbox支持曲线和曲线拟合的lowess和loess局部回归模型。

  2. 还有一个鲁棒的局部回归选项。

以下博客文章展示了如何使用交叉验证来估计局部回归模型的最佳跨度参数,以及使用自助法估计置信区间的技巧。

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


谢谢。lowess函数是否利用周期性?在我看来,它对信号没有任何假设。 - Ali
1
阿里:loess 只适合拟合由许多二次曲线(或其他多项式)拟合数据部分并连接在一起组成的平滑曲线。它不考虑周期性。 - Richie Cotton
@Richie Cotton 是的,这就是我想的。 - Ali

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接