[讨论] 均值滤波 ---- 欢迎讨论

dontium   2012-4-15 02:03 楼主

在数字电源中,用到均值滤波。传统的滤均值滤波方法是,

设对16个采样时间的值进行均值滤波,则将16个值相加,然后除16(右移四位)。

对于使用F28035,它的并行乘法、加很棒,且有倒数指令。对于均值滤仍采用传统的方法,显得笨拙且耗时,

 

本人设想使用这种方法:如对16个采样值滤波

 

滤波输出 = 上次滤波输出 * 15 / 16 + 本次采样值 /16

 

当然,这样的结果会有小量的误差。

 

[ 本帖最后由 dontium 于 2012-4-15 02:04 编辑 ]

回复评论 (10)

节约代码还是节约时间?
点赞  2012-4-15 09:10
滤波输出 = 上次滤波输出 * 15 / 16 + 本次采样值 /16
好像成了一价滤波了
点赞  2012-4-15 09:39
Out = OldOut * 0.9 + In * 0.1
点赞  2012-4-15 09:40

引用: 原帖由 fffofo 于 2012-4-15 09:10 发表 节约代码还是节约时间?

 

如果使用累加再移位,代码长、时间长,但不必每次循环都计算。

采用这个办法,需要每次都计算,需要两个乘一个加指令,共三条,三个周期,如果使用并行计算,需要两个周期。

点赞  2012-4-15 12:06

引用: 原帖由 mcu5i51 于 2012-4-15 09:40 发表 Out = OldOut * 0.9 + In * 0.1

 

嗯,可以根据所需滤波的时间常数,确实分母的值。

点赞  2012-4-15 12:09
弄一个链表有16个点,每个点保存一个采样值。每次保存一个值之前,用总和(SUM)减去链表下一个节点的值,同时把新的值保存到这个位置并加到总和(SUM)里,则SUM里总是这16个值得总和,那么SUM/16就是平均值了。
        刚开始的那一轮可能误差会很大。
lindabell.taobao.com http://www.lindabell.asia
点赞  2012-4-15 20:07

回复 7楼 lindabell 的帖子

这种方法我用过呀,每次一加一减一移位就好了,设一个初始标志,首次值根据输入合成,可以快速跟踪;
点赞  2012-4-16 08:52
七楼的方法很经典,计算量很小,第二轮后就是真实的平均值。

处理链表的定位方法是由编译器决定的,应该不止一两指令。
点赞  2012-4-16 11:40
楼主提出的滤波器就是一阶RC滤波器,要特别注意采样率和时间常数,对于直流量来说可能影响会小点,但对于交流量相移较大。如果采集的量和故障判断相关,那时间上的延时可能造成故障检测不及时,该滤波器使用要特别注意参数设计
点赞  2012-4-16 15:32
滑动滤波器
点赞  2012-4-16 22:32
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复