【问题标题】:How to exploit periodicity to reduce noise of a signal?如何利用周期性来降低信号的噪声?
【发布时间】:2011-08-07 20:39:35
【问题描述】:

从 3 维周期信号中收集了 100 个周期。波长略有不同。波长的噪声服从零均值的高斯分布。波长的一个很好的估计是已知的,这在这里不是问题。幅度的噪声可能不是高斯噪声,可能被异常值污染。

如何计算一个近似于所有收集到的 100 个周期的“最佳”周期?

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

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

更新 2: 一个相关问题是 this。就我而言,速度不是问题。收集所有期间后,离线处理。

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

我现在的兴趣纯粹是理论上的,因为http://jap.physiology.org/content/39/1/174.abstract 给出了一个很好的方法来做什么。

【问题讨论】:

  • 你能提供一些虚拟数据来说明你想估计周期的问题吗?
  • 你知道周期的变化是什么吗?还是本质上是随机的?
  • @Ali 很高兴你在这个问题上悬赏。但我仍然不清楚你到底想做什么。就问题而言,至少有两种可能的解释。第一个是“我如何拟合时间序列模型”。第二个是“我如何确定我的信号的波长”。您能否澄清并提供一些虚拟数据?
  • @Ali:我认为这里的很多人都能够解释时间序列分析、平滑等。但是,目前还不清楚你到底想要实现什么,这就是为什么你没有很多答案。如果您发布一些示例数据并解释您到底想做什么(我不在乎它是否是一个粗略的图表,只要我能理解它),它会更好地理解这一点,您会吸引更多的答案.如果你不能发布一些数据,你能画出你的想法并将其作为图像发布吗?如果这不可能,数学方程式就可以了(我更喜欢这个,因为没有歧义)。
  • 对于 SO 来说,问题仍然太模糊且没有重点。尝试更好stats.stackexchange.com 或阅读一些关于时间序列和信号处理的书

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


【解决方案1】:

我们使用小波进行噪声抑制,并在奶牛行走期间测量到类似的信号。 我认为这里的噪音不是什么大问题,最大的峰值代表步行期间加速度的实际变化。

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

如果您需要准确测量位置,最好的解决方案是使用带有磁力计的加速度计,该磁力计还可以测量方向。像这样的东西应该可以工作:http://www.sparkfun.com/products/10321

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

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

【讨论】:

  • 感谢您的回答!对不起,我不能早点回复。我已经在使用加速度计、陀螺仪和磁力计来测量方向,我正在使用 Shimmer 2r 设备。您是如何使用小波进行噪声抑制的?
  • 有趣,谢谢!您可能会发现这个有用:jap.physiology.org/content/39/1/174.abstract。尽管他们测量了力,但如果您也使用陀螺仪,它可能很容易用于加速。
  • 嗨 Ali,感谢您的论文,Shrimmer 似乎是一个有趣的产品。我已经更新了我的答案,希望你觉得它有用。
  • 谢谢!我正在尝试计算稳定行走期间重心的位移,因此导航不适用于此处。无论如何,这些链接非常有用,请留在那里。除非给出另一个更好的答案,否则我将手动奖励您。
【解决方案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 空间中的曲线。更复杂的错误模型将留给读者作为练习。

【讨论】:

  • 所以,基本上你的建议是手动将数据切割成周期......难道没有一个模型可以处理波长中的噪声吗?我觉得这很难相信。无论如何谢谢!
  • 循环回归呢?
【解决方案3】:

如果您有一份 Curve Fitting Toolbox,本地化回归可能是一个不错的选择。

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

  2. 有一个稳健的局部回归选项

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

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

【讨论】:

  • 谢谢。 lowess 是否利用了周期性?在我看来,它对信号没有任何假设。
  • ?Ali: loess 只是拟合一条平滑曲线,该曲线由许多拟合数据部分的二次曲线(或其他多项式)组成并连接在一起。它不考虑周期性。
  • @Richie Cotton 是的,我就是这么想的。
猜你喜欢
  • 2021-10-03
  • 2015-07-16
  • 2017-02-27
  • 2021-11-07
  • 2016-12-20
  • 2021-02-05
  • 1970-01-01
  • 1970-01-01
  • 2014-10-25
相关资源
最近更新 更多