当前位置:  开发笔记 > 编程语言 > 正文

如何"平滑"数据并计算线条渐变?

如何解决《如何"平滑"数据并计算线条渐变?》经验,为你挑选了2个好方法。

我正在从测量距离的设备上读取数据.我的采样率很高,因此我可以测量距离(即速度)的较大变化,但这意味着,当速度较低时,设备会提供相同的多个测量值(由于设备的粒度).这导致"阶梯"曲线.

我需要做的是平滑曲线以计算速度.然后,我需要计算加速度.

如何最好地解决这个问题?

(采样率高达1000Hz,计算速率为10Hz即可.在VS2005中使用C#)



1> GvS..:

来自moogs的维基百科条目是平滑数据的良好起点.但它并没有帮助你做出决定.

这一切都取决于您的数据和所需的处理速度.

移动平均线 将使最高值变平.如果您对最小值和最大值感兴趣,请不要使用此值.另外我认为使用移动平均线会影响您对加速度的测量,因为它会使您的数据变平(一点点),因此加速度似乎会更小.这一切都归结为所需的准确性.

Savitzky-Golay 快速算法.和移动平均线一样快.这将保持高峰的高度.实施起来有点困难.而且你需要正确的系数.我会选这个.

卡尔曼滤波器 如果你知道分布,这可以给你很好的结果(它用于GPS导航系统).实施起来可能有些困难.我提到这个是因为我过去曾经使用过它们.但对于这种东西的首发,它们可能不是一个好的选择.

以上将减少信号噪音.

接下来你需要做的是检测"加速度"的起点和终点.您可以通过创建原始信号的微分来完成此操作.导数与Y轴(零)相交的点可能是信号中的峰值,可能表示加速度的开始和结束.

然后,您可以创建二阶导数以获得最小加速度和最大加速度.


此链接提供了一个JavaApplet来实际查看Moving,Savitzky-Golay和Ensemble Average的工作方式http://www.chem.uoa.gr/applets/appletsmooth/appl_smooth2.html

2> moogs..:

你需要一个平滑滤波器,最简单的是"移动平均线":只计算最后n个点的平均值.

这里的问题是,如何确定n,您能告诉我们更多关于您的申请的信息吗?

(还有其他更复杂的过滤器.它们在保存输入数据方面有所不同.维基百科中有一个很好的列表)

编辑!:对于10Hz,平均最后100个值.

推荐阅读
k78283381
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有