自適應濾波器

自適應濾波器是能夠根據輸入信號自動調整性能進行數碼訊號處理數字濾波器。作為對比,非自適應濾波器有靜態的濾波器係數,這些靜態係數一起組成傳遞函數

對於一些應用來說,由於事先並不知道所需要進行操作的參數,例如一些噪聲信號的特性,所以要求使用自適應的係數進行處理。在這種情況下,通常使用自適應濾波器,自適應濾波器使用反饋來調整濾波器係數以及頻率響應。

總的來說,自適應的過程涉及到將代價函數用於確定如何更改濾波器係數從而減小下一次迭代過程成本的算法。價值函數是濾波器最佳性能的判斷準則,比如減小輸入信號中的噪聲成分的能力。

隨着數碼訊號處理器性能的增強,自適應濾波器的應用越來越常見,時至今日它們已經廣泛地用於手機以及其它通信設備、數碼錄像機和數碼照相機以及醫療監測設備中。

結構框圖

下面圖示的框圖是最小均方濾波器(LMS)和遞歸最小平方英語Recursive least squares filter(RLS)這些特殊自適應濾波器實現的基礎。框圖的理論基礎是可變濾波器能夠得到所要信號的估計。

 

在開始討論結構框圖之前,我們做以下假設:

  • 輸入信號是所要信號   和干擾噪聲   之和
 
  • 可變濾波器有有限脈衝響應結構,這樣結構的脈衝響應等於濾波器係數。  階濾波器的係數定義為
 .
  • 誤差信號或者叫作代價函數,是所要信號與估計信號之差
 

可變濾波器通過將輸入信號與脈衝響應作卷積估計所要信號,用向量表示為

 

其中

 

是輸入信號向量。另外,可變濾波器每次都會馬上改變濾波器係數

 

其中   是濾波器係數的校正因子。自適應算法根據輸入信號與誤差信號生成這個校正因子,LMS 和 RLS 是兩種不同的係數更新算法。

例子

假設醫院正在監測一個患者的心臟跳動,即心電圖,這個信號受到 50 Hz (許多國家供電所用頻率)噪聲的干擾

剔除這個噪聲的方法之一就是使用 50Hz 的點阻濾波器對信號進行濾波。但是,由於醫院的電力供應會有少許波動,所以我們假設真正的電力供應可能會在 47Hz 到 53Hz 之間波動。為了剔除 47 到 53Hz 之間的頻率的靜態濾波器將會大幅度地降低心電圖的質量,這是因為在這個阻帶之內很有可能就有心臟跳動的頻率分量。

為了避免這種可能的信息丟失,可以使用自適應濾波器。自適應濾波器將患者的信號與電力供應信號直接作為輸入信號,動態地跟蹤噪聲波動的頻率。這樣的自適應濾波器通常阻帶寬度更小,這就意味着這種情況下用於醫療診斷的輸出信號就更加準確。

自適應濾波器的應用

偽代碼

以下偽代碼利用二階自適應橫向濾波器對一個加上噪聲的正弦訊號進行濾波,可以用 Python 或 Matlab 實現。

   t ← (0 TO 1 BY 0.0001)
   # 生成sin訊號
   s ← sin(t)
   size_s = LEN(s)
   # 生成雜訊
   n ← randn(size_s)
   # 將雜訊疊加至原sin訊號上
   x ← s + n
   w ← [0, 0.5]
   u ← 0.00026
   for i (1 TO 9999):
       y(i + 1) ← n(i: i+1) * w'
       e(i + 1) ← x(i + 1) - y(i + 1)
       w ← w + 2 * u * e(i + 1) * n(i: i + 1)
   ENDFOR
   plt.subplot(3, 1, 1)
   plt.plot(t, x)
   plt.title("sin + noise")
   plt.subplot(3, 1, 1)
   plt.plot(t, x)
   plt.title("sin")
   plt.subplot(3, 1, 1)
   plt.plot(t, x)
   plt.title("Filtered result")
   plt.show()

濾波器實現

參考文獻

參見