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

发布于 2024-11-02 05:17:25 字数 885 浏览 4 评论 0原文

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

如何计算一个近似“最佳”收集的 100 个周期的单个周期?

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

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

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

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

人类步骤

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

100 periods have been collected from a 3 dimensional periodic signal. The wavelength slightly varies. The noise of the wavelength follows Gaussian distribution with zero mean. A good estimate of the wavelength is known, that is not an issue here. The noise of the amplitude may not be Gaussian and may be contaminated with outliers.

How can I compute a single period that approximates 'best' all of the collected 100 periods?

Time-series, ARMA, ARIMA, Kalman Filter, autoregression and autocorrelation seem to be keywords here.

UPDATE 1: I have no idea how time-series models work. Are they prepared for varying wavelengths? Can they handle non-smooth true signals? If a time-series model is fitted, can I compute a 'best estimate' for a single period? How?

UPDATE 2: A related question is this. Speed is not an issue in my case. Processing is done off-line, after all periods have been collected.

Origin of the problem: I am measuring acceleration during human steps at 200 Hz. After that I am trying to double integrate the data to get the vertical displacement of the center of gravity. Of course the noise introduces a HUGE error when you integrate twice. I would like to exploit periodicity to reduce this noise. Here is a crude graph of the actual data (y: acceleration in g, x: time in second) of 6 steps corresponding to 3 periods (1 left and 1 right step is a period):

human steps

My interest is now purely theoretical, as http://jap.physiology.org/content/39/1/174.abstract gives a pretty good recipe what to do.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

混吃等死 2024-11-09 05:17:25

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

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

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

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

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

We have used wavelets for noise suppression with similar signal measured from cows during walking.
I'm don't think the noise is so much of a problem here and the biggest peaks represent actual changes in the acceleration during walking.

I suppose that the angle of the leg and thus accelerometer changes during your experiment and you need to account for that in order to calculate the distance i.e you need to know what is the orientation of the accelerometer in each time step. See e.g this technical note for one to account for angle.

If you need get accurate measures of the position the best solution would be to get an accelerometer with a magnetometer, which also measures orientation. Something like this should work: http://www.sparkfun.com/products/10321.

EDIT: I have looked into this a bit more in the last few days because a similar project is in my to do list as well... We have not used gyros in the past, but we are doing so in the next project.

The inaccuracy in the positioning doesn't come from the white noise, but from the inaccuracy and drift of the gyro. And the error then accumulates very quickly due to the double integration. Intersense has a product called Navshoe, that addresses this problem by zeroing the error after each step (see this paper). And this is a good introduction to inertial navigation.

静待花开 2024-11-09 05:17:25

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

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 空间中的一条曲线。更复杂的误差模型将留给读者作为练习。

Periodic signal without noise has the following property:

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

Next bit of information that is needed is that your signal is composed of separate samples. Every bit of information you've collected are based on samples, which are values of f() function. From 100 samples, you can get the mean value:

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

This needs to be done for every dimension of your data. If you use 3d data, it will be applied 3 times. Result would be (x,y,z) points. You can find value of s_i from the periodic signal equation simply by doing

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

If the wavelength is not accurate, this will give you additional source of error or you'll need to adjust it to match the real wavelength of each period. Since

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

if the wavelength varies, you'll need to use
k_1+k_2+k_3+...+k_i
instead of k*i.
Unfortunately with errors in wavelength, there will be big problems keeping this k_1..k_i chain in sync with the actual data. You'd actually need to know how to regognize the starting position of each period from your actual data. Possibly need to mark them by hand.

Now, all the mean values you calculated would be functions like this:

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

Now this is a curve in 3d space. More complex error models will be left as an excersize for the reader.

暗恋未遂 2024-11-09 05:17:25

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

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

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

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

http://blogs.mathworks.com/loren/2011/ 01/13/数据驱动拟合/

If you have a copy of Curve Fitting Toolbox, localized regression might be a good choice.

  1. Curve Fitting Toolbox supports both lowess and loess localized regression models for curve and curve fitting.

  2. There is an option for robust localized regression

The following blog post shows how to use cross validation to estimate an optimzal spaning parameter for a localized regression model, as well as techniques to estimate confidence intervals using a bootstrap.

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文