串口采集数据偶尔出现突变值

2019-07-18 02:21发布

本帖最后由 hejin515 于 2015-11-4 16:23 编辑

如图,程序是采集串口发送来的数据,处理后实时显示在波形图表上然后存入TXT文档。但是昨晚采集了一晚上,整体曲线是对的,但是发现有几个夸张的突变(如图,一晚上的室内温度变化)。现在想两种解决方法:一时看看谁知道我程序哪里有问题,所以出现了那么夸张的野值。二是,进行适当的滤波,比较前后两个温度值,如果差值太大就舍弃新值用上一次的值代替。但是不知道这种方法具体该如何实现。各位有何高见,请不吝赐教!多谢了!! 单通道调试程序.png


1103-04~14h.png



友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
19条回答
hejin515
2019-07-19 23:51
ShuiMoLise 发表于 2015-11-6 20:48
关于终止符,千万别启用,不适合你现在的程序。
你说“如果某次校验发现数据不对,想用上一次的代替,或者直接舍去进行下次循环读取串口然后计算”,关于这个首先找出帧头帧尾就是确定数据是否有效的方法一,然后那个代码和校验就是确定这一帧数据发送过程中是否收到干扰出现错误。这两个解决了基本不会有问题。
现在说一下 ...

判断数据是否有突变好说,关键是有什么好的滤波方法。下面图中三通道的,是判断某一通道有突变值时,把该突变值用该通道的平均值代替,所以还是有些小毛刺,但是比滤波前好多了。下图中一个通道的,是直接判断出如果有突变,直接舍去,不进行显示也不写入TXT。但是我们老师不满意,那个用平均值代替突变值的还是有毛刺,看起来给人感觉很不好。那个去掉突变值不显示不存储的也不好,虽然看着曲线很完美,但是写入的文本会少一些时刻的温度。我测了一些,突变率大概是0.5%,可能是我程序时序有问题,但是这个真的很难发现,所以就行用滤波的方法处理。关于你说的移位寄存器的,我试过了,假设有突变值来,虽然这次比较通不过可以用上次的值代替,但是这个突变值会进入移位寄存器而不被删除,所以下次正常值来了和它比较肯定会被判断有突变,反而正常值会被这个突变值代替了。现在就是想想有啥好的滤波方法,不知道这个你有何高见。
1105-06~16h.png
1105-06-16h.png

一周热门 更多>