1. 程式人生 > >LMS、NLMS最優步長理論分析與Speex回聲消除可能的改進想法

LMS、NLMS最優步長理論分析與Speex回聲消除可能的改進想法

一、回聲消除演算法模型

  先來分析下自適應回聲消除的主要組成部分,大體上可以把回聲消除模型分為兩個部分

  1. 橫向濾波器結構
  2. 濾波器係數自適應與步長控制

  橫向濾波器用脈衝響應w(n)【有的地方也稱為回聲路徑】與遠端說話者訊號u(n)卷積得到回聲估計,並用y(n)表示該估計。麥克風輸出訊號做為期望響應d(n),從期望響應d(n)中減去濾波器的”合成回聲”,得到誤差訊號e(n)。通過不斷的調整濾波器係數w(n)使誤差訊號的均方值最小化,其結果就是:誤差訊號為本地語音提供了一個近似的估計。這就是為什麼這樣的結構能去掉回聲的原因。

 二、LMS演算法最優步長分析

  下面我們重點說一下LMS濾波器係數自適應更新中的步長控制問題,也就是如何獲得最優步長的問題。我們首先把期望響應用向量的形式表示如下:

\[d(n) = {w^H}u(n) + v(n)\]

  上式中,w是橫向濾波器的未知引數向量,v(n)為加性干擾噪聲。通過LMS濾波器計算得到的抽頭權向量是對w的估計,它們之間的失配用加權誤差向量

\[\varepsilon (n + 1) = w - \hat w(n)\]

來衡量,由橫向濾波器係數的的自適應更新機制

\[\hat w(n + 1) = \hat w(n) + \mu u(n)e(n)\]

  可得

\[\varepsilon (n + 1) = \varepsilon (n) - \mu u(n)e(n)\]
  如果我們對抽頭權向量n次迭代到n+1次迭代的抽頭權向量的增量變化最小為準則來選擇最優步長,即使

\[E\{ |\varepsilon (n + 1){|^2}\}  - E\{ |\varepsilon (n){|^2}\} \]

達到最小,為求最優步長,將其展開,得到

\[E\{ |\varepsilon (n + 1){|^2}\}  - E\{ |\varepsilon (n){|^2}\}  =  {\mu ^2}E\{ {e^2}(n)|u(n){|^2}\}  - 2\mu E\{ e(n){\varepsilon ^T}(n)u(n)\} \]

  設額外誤差向量(有的地方也稱為無干擾誤差,即假設沒有噪聲情況下的係數輸出誤差)與濾波器權值誤差向量之間的關係為

\[\xi (n) = {\varepsilon ^T}(n)u(n)\]

  則

\[E\{ |\varepsilon (n + 1){|^2}\}  - E\{ |\varepsilon (n){|^2}\}  =  {\mu ^2}E\{ {e^2}(n)|u(n){|^2}\}  - 2\mu E\{ e(n)\xi (n)\} \]

  對上式兩邊求導,並置導數為0,很容易就可以得到最優步長為

 \[{\mu _{opt}}(n) = \frac{{E\{ e(n)\xi (n)\} }}{{E\{ {e^2}(n)|u(n){|^2}\} }}\]

  又因為額外誤差可以視為系統輸出誤差與加性干擾噪聲之差

\[\xi (n) = e(n) - v(n)\]

  再假設加性干擾噪聲訊號與額外誤差訊號相關獨立,則最優步長可以寫為

\[{\mu _{opt}}(n) \approx \frac{{E\{ e(n)\xi (n)\} }}{{|u(n){|^2}E\{ {e^2}(n)\} }} = \frac{{E\{ {e^2}(n)\}  - E\{ {v^2}(n)\} }}{{|u(n){|^2}E\{ {e^2}(n)\} }}\]

  可以看出,當噪聲訊號不存在時,LMS演算法的最優步長等於固定步長的NLMS演算法

三、NLMS演算法最優步長分析

  下面再分析下NLMS濾波器的最優步長,NLMS橫向濾波器係數的的自適應更新機制為

\[w(n + 1) = w(n) + \frac{\mu }{{|u(n){|^2}}}u(n)e(n)\]

  兩邊減去w,整理可得

\[\varepsilon (n + 1) = \varepsilon (n) - \frac{\mu }{{|u(n){|^2}}}u(n)e(n)\]

  我們同樣對抽頭權向量n次迭代到n+1次迭代的抽頭權向量的增量變化最小為準則來選擇最優步長,即使

\[E\{ |\varepsilon (n + 1){|^2}\}  - E\{ |\varepsilon (n){|^2}\}  = {\mu ^2}E\left\{ {\frac{{|e(n){|^2}}}{{|u(n){|^2}}}} \right\} - 2\mu E\left\{ {\frac{{e(n)\xi (n)}}{{|u(n){|^2}}}} \right\}\]

  最小,按上面分析LMS濾波器時的思路進行求導並整理,最終得到NLMS的最優步長為

\[{\mu _{opt}} = \frac{{E\{ e(n)\xi (n)/|u(n){|^2}\} }}{{E\{ |e(n){|^2}/|u(n){|^2}\} }}\]

  為了簡化最優步長的計算,我們假設從一次迭代到下一次迭代的輸入訊號能量的波動足夠小,以滿足以下近似

\[E\{ e(n)\xi (n)/|u(n){|^2}\}  = E\{ e(n)\xi (n)\} /E\{ |u(n){|^2}\} \]

  和

\[E\{ |e(n){|^2}/|u(n){|^2}\}  = E\{ |e(n){|^2}\} /E\{ |u(n){|^2}\} \]

  則最優步長可以重寫為

\[{\mu _{opt}} = \frac{{E\{ e(n)\xi (n)\} }}{{E\{ |e(n){|^2}\} }}\]

  又因為加性干擾噪聲訊號與額外誤差訊號相關獨立,再次重寫最優步長

\[{\mu _{opt}} = \frac{{E\{ e(n)\xi (n)\} }}{{E\{ |e(n){|^2}\} }} = \frac{{E\{ [\xi (n) + v(n)]\xi (n)\} }}{{E\{ |e(n){|^2}\} }} = \frac{{E\{ |\xi (n){|^2}\} }}{{E\{ |e(n){|^2}\} }} = \frac{{E\{ |{\varepsilon ^T}(n)u(n){|^2}\} }}{{E\{ |e(n){|^2}\} }}\]

  如果我們接下來假設輸入訊號u(n)的頻譜中,每個頻點分別對加權誤差向量頻譜的對應頻點的影響都是相同的,那麼

\[E\{ |{\varepsilon ^T}(n)u(n){|^2}\}  \approx E\{ |{\varepsilon ^T}(n){|^2}\} E\{ |u(n){|^2}\} \]
  最終得到的最優步長可以近似為

\[{\mu _{opt}} = \frac{{E\{ |{\varepsilon ^T}(n)u(n){|^2}\} }}{{E\{ |e(n){|^2}\} }} \approx \frac{{E\{ |{\varepsilon ^T}(n){|^2}\} E\{ |u(n){|^2}\} }}{{E\{ |e(n){|^2}\} }}\]

  細心的朋友可能已經看出來了,這個結論與Speex回聲消除原理深度解析一文中的最優步長結論意義上可以認為是相同的(採用的符號表示不同,不影響理解),這說明無論從哪個角度分析,在抽頭權向量均方偏差最小的約束準則下,得到的最優步長的結論都是一樣的。

四、改進思路

  既然原理已經分析清楚了,現在再來看看,針對這個原理的Speex實現,可以有哪些改進的思路。本人水平有限,這裡先分享出來,歡迎各位朋友批評指正不足之處!

  1. 最優初始值問題,Speex雖然採用了MDF做為長延時濾波,但本質上仍然是時域濾波原理,只是在頻域做罷了。那麼為了儘可能的在啟動時快速收斂,濾波器權向量的初始值問題就不好簡單的用0來初始化。
  2. 回聲對每個頻點的影響是不同的,不能用一個洩露因子來表示,如果在頻域進行分段處理,每段採用不同的洩露因子,應是可行的一個思路
  3. 沒有考慮不同揚聲器到麥克風回聲路徑的非線性差異。這個差異在手機端效果效果很明顯,如果對遠端參考訊號做非線性處理,可以弱化這個影響。