labview关于数据采集的问题

正在做一个温度采存的,就是串口以一定频率读取温度传感器发送过来的数据,然后处理数据计算出温度,然后用图形显示并存储.txt文档。但是发现偶尔会来个很夸张的突变值,因为正常... 正在做一个温度采存的,就是串口以一定频率读取温度传感器发送过来的数据,然后处理数据计算出温度,然后用图形显示并存储.txt文档。但是发现偶尔会来个很夸张的突变值,因为正常的温度肯定是个大惯性量,短时间不会变化太大,所以想做个滤波的去除这样的野值。具体的就是比较这次计算出的温度值与上次计算的温度值,如果差值的绝对值小于1°,就保留这次的值并写入波形和文档;如果差值的绝对值大于1说明有突变,就舍弃这次的值而用上次的值替代,如此循环往复

。不知道各位有何高见,请指导一下,谢谢!
展开
 我来答
樱雪瑶4W
2015-11-07 · 知道合伙人软件行家
樱雪瑶4W
知道合伙人软件行家
采纳数:450 获赞数:1930

向TA提问 私信TA
展开全部

你这个问题其实要考虑两点:

  1. 第一个数据是不是对的。万一第一个数据就错了,那按照你的方法后面就只有错的数据才能进来了

  2. 就是后面的数据的评估

第一个问题比较难处理,唯一的办法是考虑数据范围。比如你测的是室温,那它一定在0度到+50度之间。用类似的方法确保第一个数据正确。之后第二个问题可以用数组做判断。假设我们需要采集500个数据,你始终与数组的最后一个数据对比,正确的数据插入数组,错误的ekeyi直接抛弃(如果要凑数,也可以像你说的把上次数组最后一个数重新插入)。参见附图

更多追问追答
追问

我这里问的没说详细,所以你不是很了解我说的背景。你应该是懂labview的,我在论坛里发帖说的比较清楚,麻烦你 看下,看看有什么思路没。十分感谢。

http://bbs.elecfans.com/forum.php?mod=viewthread&tid=523073&extra=

追答

  我看了你论坛里的帖子,一般地说,这个问题多数是上位机引起的。这里有几个问题需要考虑:

  第一,如果下位机一秒发200多次,而你只是2秒钟读一次,那么大多数数据会丢失。这样当你读取的时候读到的数据可能不是完整的一组。例如你读到6字节16进制数,有可能读到的数据的前二字节是上一组数的后二字节,然后读到的数据的后四字节是本组数的前四字节。一旦出现这种错位情况则数据一定会突变。建议你首先把数据整理一下,确保它是正确的6字节一组,然后再做数据变换处理。

  第二,既然有校验,当然可以直接用校验剔除错误数据,不用与其他数据作比较。不符合校验规则的一定是错误的数据。

  顺便说一下,这种直接求和的校验方式因为简单易用,在单片机中使用很多。像CRC16这种更可靠个符合标准,但是使用复杂占用资源多,在单片机中不怎么用。

  第三,务必关闭终止符,等待时间要放在“Bytes at Port”控件之前

参考附图:

18442610
2015-11-05 · 超过47用户采纳过TA的回答
知道小有建树答主
回答量:121
采纳率:0%
帮助的人:71.2万
展开全部
思路是可以的啊,你想问什么?
更多追问追答
追问
就是实现比较本次输入与上次输入,如果这次输入跨越太大就说明数据突变了就舍去这次的值并用上次的值代替。用了反馈节点,虽然这次会舍去这个突变值,但是它还是进去了反馈节点,下次正常值来和它比较,那么这个突变值最终还是被记录了。现在就是头疼有不知道该怎么实现比较并舍去突变的值用上次的值替代。请教了,谢谢
追答
可以用两个变量,比如AB,A存上一个数,b存当前的数,如果b偏大就用a代替b
如果b正常,就把b替换掉a的值。下一次新的b值再和a比较
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式