2013年7月13日 星期六

數位濾波器 (Digital Filter)

https://4rdp.blogspot.com/2013/07/digital-filter.html

數位濾波器,以數學方法處理輸入訊號,讓輸入訊號中的雜訊消除,使得感測訊號穩定變化平滑,這樣控制才不會有跳動的情形。

電子迴路中,有兩類雜訊可以濾除,一是50/60 Hz電源雜訊,另一為隨機雜訊,無論你利用電路硬體或是程式軟件處理皆可,通常兩種方式一起施行,硬體先濾除較高頻率雜訊,軟體再做進一步處理。

現代生活,周遭充滿電器設備,電力公司供給的電源是交流,台灣採 60Hz系統,日本用 50Hz系統,因此,電器設備會散發 50/60 Hz 固定頻率幅射干擾,有些裝有類比信號感應器的電子設備,就會感應到這部分雜訊,因為是固定頻率,只要取 0.1秒 (50/60 Hz 最小公倍數)或倍數時間為一個週期來取樣訊號,如此就自然平均 (正負半週對扣)消除之,這稱之為 50/60 Hz noise rejection。如果你的取樣時間更短,那記得每 0.1 秒平均一次,就可以降低 50/60 Hz 雜訊干擾。

常見數位訊號處理有 IIR (Infinite Impulse Response filter,無限脈衝響應濾波器)、FIR (Finite Impulse Response filter,有限脈衝響應濾波器) 兩種方式,在此彙整自習重點及提出個人工作經驗的淺見,

有限脈衝響應濾波器(FIR filter)的優點:

脈衝響應(impulse response)為有限時間長度,換句話說當輸入數位訊號為有限時間長度的時候,輸出數位訊號也為有限時間長度。比無限脈衝響應濾波器(IIR filter)較容易最佳化(optimize)。是偶對稱(even)或奇對稱(odd)且有限時間長度。輸出數據是穩定的(stable),因為Z轉換(Z transform)後所有的極點(pole)都在單位圓內。

有限脈衝響應濾波器(FIR filter)的缺點:
設計方式較無限脈衝響應濾波器(IIR filter)不容易。主因在必須記憶每一筆輸入訊號及排序移動,硬體電路不易設計。

FIR 輸出值,為輸入訊號的加權計算:
Y(n) = h0 X(n) + h1 X(n-1) + … + hP X(n-P)
常見的 Moving Average 就是 FIR 。

無限脈衝響應濾波器 (IIR filter) 的優點:
較容易設計以及實現。如果無須記憶訊號,硬體電路可利用放大回授電路達成。

無限脈衝響應濾波器 (IIR filter) 的缺點:
脈衝響應 (impulse response)為無限時間長度,當輸入數位訊號為有限時間長度的時候,輸出數位訊號會變成無限時間長度反應。因此比有限脈衝響應濾波器(FIR filter)較不易最佳化(optimize)。輸出不一定是穩定的,因為 Z 轉換 (Z transform) 後所有的極點 (pole)不一定都在單位圓內。

IIR 輸出值,為輸入訊號及回授訊號的加權計算:
 Y(n) = [h0 X(n) + h1 X(n-1) + … + hP X(n-P) - a1 Y(n-1) - a2 Y(n-2) -  … - aQ Y(n-Q)] / a0

因為有回授控制不易直覺理解,請參考試算表分析。以個人經驗,除了使用 IIR 或 FIR 外,還有人使用 Smooth 方式去除雜訊,其實它是另類的 IIR,只是正回授。

在試算表中包含步級響應 (Step Response) 與雜訊排斥 (Noise Rejection) 比較:
步級響應 ─
輸入訊號由零變一,看系統輸出能夠多快反應輸入訊號的改變,結果顯示 Smooth 方法需要很長時間才能縮小誤差。
雜訊排斥 ─
輸入一個定頻弦波,Smooth 可以濾除較多雜訊,但是混合步級訊號後濾雜訊的效果不彰,如果 FIR 設計與特定頻率相符,則可將該頻率濾除。

有興趣的讀者可以研究看看。

PS. 2013.08.10 試算表補充 Kalman Filter 比較
      2021.03.13 常見濾波法整理

6 則留言:

  1. 您好,最近因為工作的關係也在研究關於去雜訊的濾波器

    想問一下關於應用在動態系統上的濾波器是不是只能用像是Kalman filter或是IIR filter這類的濾波器呢?

    雖然文中提到的smooth的方法也能去雜訊像是Savitzky–Golay filter或是移動平均(moving average),但那些是不是只適用在已經存在的數據上?像是我已經有一段充滿雜訊量測訊號,但我事後再用smooth的方法得到比較好的結果

    回覆刪除
    回覆
    1. 是的,動態訊號應該用動態濾波器處理,因為訊號一直接續進來,當然也可以用你的方法,紀錄一段資料後平均,只是這方法的系統反應速度比較慢,但是讀值比較穩定,沒有一種方法可以面面俱到,至於選用何種方法較好,一切看你的系統條件與需求。

      刪除
    2. 事實上就是很矛盾,希望結果很好,又希望雜訊可以處理的很漂亮,我再研究一下更多的方法,謝謝你的回答:)

      刪除
    3. 是啊,通常很難兩全其美,只能折衷處理,能概述你的系統與需求嗎?

      刪除
    4. 我目前是在寫觸控的演算法,在不同頻率的訊號下會有不同程度的雜訊,但實際讀到的電容值已經經過高低通濾波器及IIR filter處理過了,但雜訊還是存在;我目前是用kalman filter去處理,雜訊處裡的不錯,但是在滑動的時候會有點延遲的感覺(為了處理的雜訊,Kalman Gain會小一點,新的點會比較靠近前一點),試過前面提到的smooth的方法,結果都不太理想;跟同事討論過後,他們是希望可以讓Kalman Gain可以動態的調整,而我目前也在往這個方面走。

      刪除
    5. Kalman Gain 本來就是動態調整,可以參考舊文 http://4rdp.blogspot.tw/2013/08/kalman-filter.html,
      一般而言r<q,Kalman Filter 去除雜訊的效果相當於 FIR,此外特性有點像 Smooth 會慢慢爬升,
      若r>q可加快收斂速度,但是估測結果會震盪較大,嘗試調 r q 應該可以試出來。

      刪除