求一种中值滤波器的设计方案

电子说

1.3w人已加入

描述

作用

消除输入信号的“突变”脉冲,如下图:

滤波器

中值滤波原理

连续采样N次(N取奇数),把N次采样值按大小排列,取中间值为本次有效值。

下面以3次中值滤波原理为例说明原理:输入数据里面a3点为毛刺,b3点是由a1 a2 a3三个点排序得出的,由于a3>a2>=a1,所以,b3=a2或者a1,这样中间的毛刺信号就没了。

滤波器

图1 3次采样中值滤波示例

优点

能有效克服因偶然因素引起的波动干扰,对温度、液位的变化缓慢的被测参数有良好的滤波效果。

代码设计

以3次采样中值滤波器为例,设计方案如图2所示。源码和仿真测试代码链接:

缓存用寄存器打拍实现,比较需要任意两两比较,所以比较次数为C n ^2^次,选择输出在比较完成以后,进行简单排序,确定中间值输出。其中比较麻烦的是后面两步,比较次数和排序随着中值滤波规模的变大而变大,是二次增长。

滤波器

图2 中值滤波器方案

代码详解

很多小伙伴反应吗,最多到上一步方案设计就难以往下走了,不知道代码怎么设计。为了让大家学会怎么设计代码,这里给大家提供代码含义解释和设计思路解释。

滤波器

根据图2,首先写缓存器,din是输入端口。代码如下:

滤波器

比较部分为了简便,我们用一个bit位代表某两两比较的结果,比如com[2]=1就代表din_buf[0]大于din_buf[2],反之din_buf[0]小于din_buf[2]。这样用3bit的线就可以保留比较结果了。wire类型的代表线,assign代表将结果引到某根线上,所以比较结果输出到comp[*]没有经过任何时钟,延时是纯粹的组合逻辑延时。代码如下:

滤波器

排序筛选的部分由于只有3个比较所以直接用枚举法,全部列出来处理。注释部分表示了排序结果,根据排序结果选择将哪个缓冲器输出即可。代码如下:

滤波器

仿真测试

仿真测试文件和代码在同一个文件夹下,欢迎下载。第二行周期波形是输入波形,带有一个正尖峰和一个负尖峰,经过中值滤波后如第三行所示,毛刺都没了。

滤波器

**图3 ** 中值滤波结果

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分