滑动平均值滤波

已锁定

水煮花生

  • 帖子

    218
  • 精华

    3
  • 被关注

    3

论坛等级:侠圣

注册时间:2011-04-14

钻石 钻石 如何晋级?

滑动平均值滤波

1205

9

2022-01-13 11:30:02

滑动平均滤波0.7z

背景:以前帮一哥们做的小项目,最近提出要加一路模拟量传感器,测量流动的溶液内部特定离子的浓度,数字波动比较大,采样时间比较长,小众化的应用,供应商是成套卖,专用主机加上几个传感器一起卖,主机内部通过专用模块配合软件处理滤波,这里只要一个传感器,成套主机和单买传感器的成本出入太大,因此想在PLC内部通过程序达到一定的滤波效果。


方案设想:在论坛上查找通读了一些相关帖子,初步的方法是,权重递推(一阶滤波),限幅,滑动平均值。

一,采样,将采样值进行工程量转化(按0.0-1.0进行标准化),

二,和上次的一阶滤波值进行比较,使用工程量绝对比较,更新本次采样的一阶滤波值。

三,上一步比较,超出限幅值,舍去本次采样值;未超出,和前面的采样值求平均值,并输出。

特殊说明:对于第二三步,超出限幅值的采样,依然进行一阶滤波,主要是考虑采样间隔较长时,信号产生真实的较大变化,比如插头拔插,当插头拔出,信号变0后,重新插上信号恢复到0.9,在前一次采样为0,后一次采样为0.9,并且持续为0.9,通过限幅前几次的采样值舍去,后几次即进入均值计算。


程序实现:

输入参数:工程量转化的参考范围(比如5530--27648) INT  

         采样数据源      INT

         限幅值         REAL  (0.0-1.0)

         一阶滤波权重   REAL  (0.0-1.0)

         滤波次数(求平均值的样本数)       BYTE

         计算缓存地址   &地址指针   DWORD

输出参数:计算值输出  (和源数据类型一致)   INT


权重递推(一阶滤波),Y(0)=(1-a)*Y(-1)+a*X(0)

均值计算,使用自带的表指令(最大支持100个INT数据),加上一个和值存储。滤波次数即为表最大容量。

采样后,FIFO,推出最早一次采样值,它用去减和值;然后新采样值添表,并用新采样值加和值;和值除以样本数,形成平均值,输出。

除计算缓存地址外,各输入参数可以运行时修改,便于现场测试。

当滤波次数(样本数)修改时,即表的最大容量修改,从小改大,新数据依次添入;

从大改小时,在新值添表之前,将表已存数据量(元素数量)设置为表容量,进行FIFO ,推出最早一次采样值,它用去减和值,直到表的元素数量等于滤波次数,然后将滤波次数赋值为表容量,随后按正常添表计算。


测试:

条件有限,不能实物测试,通过BITIM,取当前运行时间毫秒数,分别取低10位(1023)和低8位(255)当做数据源,每周期采样。

取低8位的监控图:

取低10位的监控图:


认知有限,还请众侠指点!

滑动平均值滤波 已锁定
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-200 SMART

共有7541条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

快扫描右侧二维码晒一晒吧!

再发帖或跟帖交流2条,就能晋升VIP啦!开启更多专属权限!

top
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。