【下位機軟體】平均值濾波之鬼斧神工演算法

來源:互聯網
上載者:User

標籤:

在十種經典軟體濾波演算法中,可以看到很多演算法都是平均值濾波演算法變種,事實上最常用的也還是平均值濾波演算法。但傳統的平均值濾波演算法很占記憶體,每次運算都要求累加和,再求平均值,導致運算效率不高。
 今天介紹一種超簡潔超高效的平均濾波演算法,此演算法是以前搞單片機時一老師所創(單片機上的記憶體簡直是寸土寸金),僅僅用三個變數,就完成了平均值濾波的計算。剛開始看到這個演算法是只覺得很佩服,後來用了各種各樣的演算法後,才感到此演算法簡直到了鬼斧神工的地步(別以為看完後覺得太簡單沒啥大不了的,正是因為太簡單才突出了它的了不起,最開始能想到將一個複雜的演算法簡化到無法再簡的地步非一般功力所能做到的)。
  
 在該基礎上,我們再演變出一種帶死區和限幅控制的隊列平均值實用演算法。
 採樣值 C、累加器 S,平均值 A,採樣次數 N
  
 傳統的平均值濾波演算法:
 S = C(1) + C(2) + ... + C(N)
 A = S / N
 需要用迴圈來計算累加和,比較耗時,C(1~N)是緩衝,隨採樣數N增大,所需記憶體量也增大
  
 向隊列平均值演算法推進:
 S = C(1) + C(2) + ... + C(N) (第一次)
 C(x) = C(x + 1) (隊列前移)
 C(N) = C
 S = S - C(1) + C(N)
 A = S / N
 運算量有所改進(用指標維護迴圈隊列,不實際移動資料),佔用記憶體問題不變
  
 鬼斧神工演算法:
 初始化:A=初始值,S=A*N
 S = S - A + C
 A = S / N
 就這麼簡單,三個變數(N可以是常數),只要 S 的配量足夠,N可以任意調整。
 可以看出,此演算法是從隊列平均值演算法演變而來,因沒有了隊列,每次計算時不知道該丟棄的最老的一個採樣值是多少,這裡用了個替代的辦法,丟棄上次計算出的平均值。
 去掉了緩衝維護,節省記憶體空間,同時也將運算量壓縮到了最小,執行效率非常高。調試時容易修改採樣數。
  
 最佳化演算法:
 此演算法的核心思想還是平均值濾波,雖然改進了運算量和記憶體佔用,但同樣繼承了平均值濾波法 N 值較大時平滑度好,反應遲鈍的特點。
 為此,對演算法引入 S7-200 系統濾波程式中死區的概念:採樣值偏差在死區範圍內時,進行濾波計算,採樣值偏差在死區範圍以外時直接使用採樣值,達到快速反應的效果。
 再溶合限幅濾波法去掉偶然的幹擾脈衝:採樣值偏差在限幅範圍內時,進行濾波計算,採樣值偏差在限幅範圍以外時直接丟棄,使用上次濾波輸出值。顯然,限幅值應該大於死區值。
  
 將此演算法寫成兩個子函數(也可以做成庫)
 ① 主濾波程式 AveFilter
 
 
  入口參數:
  EN  : 調用使能位
  bType :採樣實值型別,‘W‘=整型、‘F‘=浮點型、‘D‘(或其它)=長整型,參數類型:位元組
  wHi : 採樣值高位字(採樣值為整型是,實參必須為0),參數類型,2位元組
  wLo : 採樣值低位字,參數類型,2位元組
  rDie : 濾波死區,參數類型:浮點數
  rMaxErr : 最大允許偏差,參數類型:浮點數
  rLen :濾波隊列長度,參數類型:浮點數
 出/入口參數:
  rSum :累加和,參數類型:浮點數
  rAve :濾波輸出平均值,參數類型:浮點數
 命令列:CALL   AveFilter, ‘W‘, 0, SMW28, 640.0, 32000.0, 4.0, VD0, VD4
  
 注意:本程式採樣值是參數類型可適應的,用 wHi/wLo 的組合來適應整型、長整型、浮點型的參數類型輸入,避免使用多個相同的子程式來適應不同類型的輸入參數。由 bType 來指定輸入的參數類型。
  
 ②濾波器初始化程式 InitFilter
 
  
 入口參數:
  EN  : 調用使能位
  rInit :初始值(一般為0),參數類型:浮點數
  rLen : 濾波隊列長度,參數類型:浮點數
 出/入口參數:
  rSum :累加和,參數類型:浮點數
  rAve :濾波輸出平均值,參數類型:浮點數
  命令列:CALL   InitFilter, 0.0, 4.0, VD0, VD4

【下位機軟體】平均值濾波之鬼斧神工演算法

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.