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

2019-07-18 02:21发布

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

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


1103-04~14h.png



友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
19条回答
ShuiMoLise
1楼-- · 2019-07-19 18:02
关于终止符,千万别启用,不适合你现在的程序。
你说“如果某次校验发现数据不对,想用上一次的代替,或者直接舍去进行下次循环读取串口然后计算”,关于这个首先找出帧头帧尾就是确定数据是否有效的方法一,然后那个代码和校验就是确定这一帧数据发送过程中是否收到干扰出现错误。这两个解决了基本不会有问题。
现在说一下那个怎么用上一次的值替换,可以利用移位寄存器,本次的值先和移位寄存器里的值相减后取绝对值,然后看差值占原值的百分比,超过100%就认为数据无效把就使用上次的值
hejin515
2楼-- · 2019-07-19 23:51
ShuiMoLise 发表于 2015-11-6 20:48
关于终止符,千万别启用,不适合你现在的程序。
你说“如果某次校验发现数据不对,想用上一次的代替,或者直接舍去进行下次循环读取串口然后计算”,关于这个首先找出帧头帧尾就是确定数据是否有效的方法一,然后那个代码和校验就是确定这一帧数据发送过程中是否收到干扰出现错误。这两个解决了基本不会有问题。
现在说一下 ...

判断数据是否有突变好说,关键是有什么好的滤波方法。下面图中三通道的,是判断某一通道有突变值时,把该突变值用该通道的平均值代替,所以还是有些小毛刺,但是比滤波前好多了。下图中一个通道的,是直接判断出如果有突变,直接舍去,不进行显示也不写入TXT。但是我们老师不满意,那个用平均值代替突变值的还是有毛刺,看起来给人感觉很不好。那个去掉突变值不显示不存储的也不好,虽然看着曲线很完美,但是写入的文本会少一些时刻的温度。我测了一些,突变率大概是0.5%,可能是我程序时序有问题,但是这个真的很难发现,所以就行用滤波的方法处理。关于你说的移位寄存器的,我试过了,假设有突变值来,虽然这次比较通不过可以用上次的值代替,但是这个突变值会进入移位寄存器而不被删除,所以下次正常值来了和它比较肯定会被判断有突变,反而正常值会被这个突变值代替了。现在就是想想有啥好的滤波方法,不知道这个你有何高见。
1105-06~16h.png
1105-06-16h.png
ShuiMoLise
3楼-- · 2019-07-20 03:26
使用移位寄存器,你已经判断出当前值无效,再写入移位寄存器的值应该是上次的值,不是无效的值。还有要注意首次运行,移位寄存器里没有有效值,所以要判断是否是首次运行,
18442610
4楼-- · 2019-07-20 07:02
 精彩回答 2  元偷偷看……
hejin515
5楼-- · 2019-07-20 09:49
18442610 发表于 2015-11-7 17:40
数值突变可能是你的线路接触不紧密导致的信号变化

我焊接的确实不是很好,但是我就放这里测一晚上的又没人动,应该不会吧。
hejin515
6楼-- · 2019-07-20 10:10
ShuiMoLise 发表于 2015-11-7 17:29
使用移位寄存器,你已经判断出当前值无效,再写入移位寄存器的值应该是上次的值,不是无效的值。还有要注意首次运行,移位寄存器里没有有效值,所以要判断是否是首次运行,

把你说的想了很久,可能我对labview还不是很了解,感觉这个逻辑似乎不对啊。我是合移位寄存器里的值比较,所以怎么做到把正确的值写入移位寄存器然后再写入文本。搞这个滤波几天了,一直没想明白这个怎么处理。如果可以,烦请你稍具体说一下或者给个图吧,十分感谢!

一周热门 更多>