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

C++ 如何利用周期性来降低信号的噪声?,c++,r,matlab,signal-processing,fft,C++,R,Matlab,Signal Processing,Fft,从三维周期信号中采集了100个周期。波长略有不同。波长噪声服从零均值高斯分布。已知波长的良好估计,这在这里不是问题。振幅噪声可能不是高斯噪声,并且可能受到异常值的污染 如何计算一个周期,使其接近收集的100个周期中的“最佳”值? 时间序列、ARMA、ARIMA、卡尔曼滤波、自回归和自相关似乎是这里的关键词 更新1:我不知道时间序列模型是如何工作的。他们准备好适应不同的波长了吗?他们能处理非平滑的真实信号吗?如果拟合了时间序列模型,我可以计算单个周期的“最佳估计”吗?怎么做 更新2:一个相关问题正

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

如何计算一个周期,使其接近收集的100个周期中的“最佳”值?

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

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

更新2:一个相关问题正在讨论中。速度不是我的问题。在收集完所有期间后,离线完成处理

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


我现在的兴趣纯粹是理论上的,因为它给出了一个很好的方法来做什么。

如果你有一份曲线拟合工具箱,局部回归可能是一个不错的选择

  • 曲线拟合工具箱支持lowess和黄土局部回归模型用于曲线和曲线拟合

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

  • 下面的博客文章展示了如何使用交叉验证来估计局部回归模型的optimzal spaning参数,以及使用bootstrap估计置信区间的技术


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

    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.
    
    这需要针对数据的每个维度进行。如果使用三维数据,将应用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)


    这是三维空间中的一条曲线。更复杂的误差模型将留给读者练习。

    我们使用小波对行走时从奶牛身上测得的类似信号进行噪声抑制。 我不认为噪音是一个很大的问题,最大的峰值代表了行走过程中加速度的实际变化

    我假设腿的角度和加速计在实验过程中会发生变化,为了计算距离,你需要考虑到这一点,也就是说,你需要知道加速计在每个时间步的方向。关于角度的解释,请参见示例

    如果你需要精确地测量位置,最好的解决方案是用一个带有磁强计的加速计,它也可以测量方向。类似这样的东西应该可以工作:

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


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

    你能提供一些虚拟数据来说明你想从中估算周期的问题吗?你确切地知道周期的变化是什么吗?还是基本上是随机的?@Ali你能赏金解决这个问题真是太好了。但我仍然不清楚你到底想做什么。目前的问题是,至少有两种可能的解释。第一个问题是“如何拟合时间序列模型”。第二个问题是“如何确定信号的波长”。你能澄清并提供一些虚拟数据吗?@Ali:我认为这里的很多人都能解释时间序列分析、平滑等。然而,你到底想实现什么还不是很清楚,这就是为什么你没有很多答案的原因。如果你发布一些样本数据,并解释你到底想做什么(只要我能理解,我不在乎它是否是一个粗糙的图表),它会更好地理解这一点,你会吸引更多的答案。如果你不能发布一些数据,你能画出你的想法并将其作为图像发布吗?若那个不可能,那个么数学方程就可以了(我更喜欢这样,因为并没有歧义)。这个问题仍然太模糊,并没有重点。不择手段