作用
消除輸入信號的“突變”脈沖,如下圖:
中值濾波原理
連續采樣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 ** 中值濾波結果
-
濾波器
+關注
關注
160文章
7749瀏覽量
177737 -
寄存器
+關注
關注
31文章
5325瀏覽量
120053 -
緩沖器
+關注
關注
6文章
1920瀏覽量
45450
發布評論請先 登錄
相關推薦
評論