C# 实现List里获取起始递增点和结束递增点

Jakey_Ch 2017-05-10 03:37:25
使用测试仪器获取了一段时间的数据,横轴代表时间,纵轴代表位移。
现在我想知道我获取到的数据,从较低位移升到较高位移共花了多少时间,和位移值大概多少?谢谢~

目的:取出起始位置和结束位置的大概索引值,y轴相减获取位移值,X轴相减获取时间。

图形:


测试使用工程:
http://download.csdn.net/detail/u011062542/9838062

我的想法:
1、获取最小值和最大值,取最后出现的最小值,和最先出现的最大值,但是这样有时候偏差会很大~~
2、相邻两个点之间的差值,取第一个差值最大的为起始点,最后差值最大的为结束点,貌似也不靠谱~
3、取出所有递增序列的索引,如果一个数据满足大于前一个索引的数据且小于后一个索引的数据,则取出来,然而,有个别点会干扰到取值~~
...全文
368 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
Jakey_Ch 2017-05-16
  • 打赏
  • 举报
回复
引用 5 楼 xuggzu 的回复:
简单的可以用中位值平均滤波法,较复杂可用低频低通滤波,滤波系数要摸索。 至于知识点那肯定是数字滤波了。 只要能成功滤除尖峰,做到较平滑,那之后求上升时间就不用考虑太多因素了。
最后没用滤波,我实现的方法: 1、取出最大、最小值 2、开始索引为第一个大于最小值1.1倍的数索引-3(预估数) 3、开始索引为第一个大于最大值0.9倍的数索引+3(预估数) 这样误差基本在10个单位以内,就懒得再整些自己不懂的了~~符合需求就好了~ 数据处理还是需要再学习一下才能处理的更好。希望后面有时间优化一下(滑稽脸.jpg)
xuggzu 2017-05-11
  • 打赏
  • 举报
回复
简单的可以用中位值平均滤波法,较复杂可用低频低通滤波,滤波系数要摸索。
至于知识点那肯定是数字滤波了。
只要能成功滤除尖峰,做到较平滑,那之后求上升时间就不用考虑太多因素了。
Jakey_Ch 2017-05-10
  • 打赏
  • 举报
回复
引用 2 楼 xuggzu 的回复:
楼主的问题是很常见的求上升时间问题。 楼主的想法必须有个前提,就是没有干扰信号,比如短脉冲信号。所以,建议楼主先做个滤波,尽可能去除干扰信号后再计算。
不太懂滤波,搜索了一下,有各种滤波,对于我这个问题的话,用哪个滤波会好一点? - -# 我要解决这个问题,需要再去补充什么知识呢?谢谢了!
Jakey_Ch 2017-05-10
  • 打赏
  • 举报
回复
引用 1 楼 xuzuning 的回复:
观察你的数据,只有 377 ~ 401 处于下降段(由于屏幕坐标系是Y轴反转的,所以看上去是上升段) 其他的都是可相互抵消的脉冲,是需要过滤掉的 曲线的拐点是通过判断 二阶导数 为 0 的点的两边符号不同而确定的 简单计算时可通过 n 周期的移动平均数的变化方向判定
- -# 大学没认真学~ 不太明白,所以我改怎么做呢? 1、把数据进行滤波处理(去掉干扰项) double[] oldList --> double[] newList 2、用什么算法 算出起始索引和结束索引 还是其他什么样的?
xuggzu 2017-05-10
  • 打赏
  • 举报
回复
楼主的问题是很常见的求上升时间问题。
楼主的想法必须有个前提,就是没有干扰信号,比如短脉冲信号。所以,建议楼主先做个滤波,尽可能去除干扰信号后再计算。
xuzuning 2017-05-10
  • 打赏
  • 举报
回复
观察你的数据,只有 377 ~ 401 处于下降段(由于屏幕坐标系是Y轴反转的,所以看上去是上升段) 其他的都是可相互抵消的脉冲,是需要过滤掉的 曲线的拐点是通过判断 二阶导数 为 0 的点的两边符号不同而确定的 简单计算时可通过 n 周期的移动平均数的变化方向判定

110,502

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧