自適應濾波器:維納濾波器3——GSC算法及語音增強

本文轉載自:http://www.cnblogs.com/xingshansi/p/6621185.html

 
前言

仍然是西蒙.赫金的《自適應濾波器原理》第四版第二章,首先看到無約束維納濾波,接着到了一般約束條件的濾波,此處爲約束擴展的維納濾波,全文包括:

  1)背景介紹;

  2)廣義旁瓣相消(Generalized Sidelobe Cancellation, GSC)理論推導;

  3)GSC應用——語音陣列信號增強;

內容爲自己的學習記錄,其中錯誤之處,還請各位幫忙指正! 

 

一、背景介紹

一般約束條件的維納濾波中,有\mathbf{w}^{H} \mathbf{s}\left(\theta_{0}\right)=g的約束條件,即\mathbf{s}^{H}\left(\theta_{0}\right) \mathbf{w}=g. 如\mathbf{s}\left(\theta_{0}\right)爲旋轉向量時,希望在\theta_{0}處保留波束—>對應g_{1}=1,希望在θ2θ2處抑制波束—>對應g_{2}=0,寫成一般形式:

                               

寫成更一般的形式:

                                \mathbf{C}^{H} \mathbf{w}=\mathbf{g}

假設w權值個數爲M,在一般約束維納濾波中可以看出:限定條件使得結果更符合預期的效果。假設C爲M×L的矩陣:L個線性約束條件。對於M個變量的方程組,對應唯一解最多有M個方程,即:對於L個線性約束來講,我們仍可以繼續利用剩下的M-L個自由度進行約束,使得結果更加符合需求(比如增強某信號、抑制某信號等),這便是GSC的背景。

 

二、GSC理論推導

  A-理論介紹

書中的推導較爲繁瑣,我們可以從投影空間的角度加以理解,也就是最小二乘結果的矩陣求逆形式,給出簡要說明:

對於矩陣A(N×M):

  • 如果A是滿列秩(N>=M)對於符合LA=I的矩陣解爲:\mathbf{L}=\left(\mathbf{A}^{H} \mathbf{A}\right)^{-1} \mathbf{A}^{H};
  • 如果A是滿行秩(N<=M)對於符合AR=I的矩陣解爲:\mathbf{R}=\mathbf{A}^{H}\left(\mathbf{A} \mathbf{A}^{\mathbf{H}}\right)^{-1}.

對於\mathbf{C}^{H} \mathbf{w}=\mathbf{g},得出最優解:

                            \mathbf{w}_{q}=\mathbf{C}\left(\mathbf{C}^{H} \mathbf{C}\right)^{-1} \mathbf{g}

記:

                            \mathbf{w}_{r e}=\mathbf{w}-\mathbf{w}_{q}

爲了便於對餘量\mathbf{w}_{r e}進行控制,將C擴展爲:\left[\mathrm{c} | \mathrm{c}_{a}\right]\mathbf{C}_{\mathbf{a}}的列向量爲矩陣C列向量張成空間的正交補空間的基,即:

                                 \mathbf{C}_{a}^{H} \mathbf{C}=\mathbf{0}

分析新的空間特性:

                    

上式有\mathbf{C}^{H} \mathbf{w}_{r e}=\mathbf{0},這就說明只要滿足該條件,\mathbf{r}_{e}=\mathbf{C}_{a}^{H} \mathbf{w}_{r e}就是補空間的餘量,如何保證一定有\mathbf{C}^{H} \mathbf{w}_{r e}=\mathbf{0}呢?可以將\mathbf{w}_{r e}寫爲:-\mathbf{C}_{a} \mathbf{w}_{a}的形式,之所以添加——可能是因爲正交補空間可以認爲C列向量空間不能表徵的成分,我們通常認爲這一部分爲該丟棄的殘差,也因爲是殘差:\mathbf{C}_{a}通常被稱爲阻塞矩陣(取Block之意),很多書籍用B表示。

 重新給出推導的結果:

                              \mathbf{w}=\mathbf{w}_{q}-\mathbf{C}_{a} \mathbf{w}_{a} \quad \text { s.t. } \mathbf{C}_{a} \mathbf{w}_{q}=\mathbf{0}

對應結構圖爲:

                    

簡化後可以認爲上支、下支:

                      

這是維納濾波器的典型結構。

  B-阻塞矩陣的選取

阻塞矩陣這一段摘自:秦博雅《基於低複雜度自適應信號處理的波束成形技術研究》p22~23.

大致有以下幾種方式:

 

三、陣列信號增強

學了這個GSC怎麼應用呢?這裏參考一篇07年adaptive beamforming(引用見最後的參考)的例子,簡要說明思路,關於阻塞矩陣。

文中結構圖:

即:分別利用GSC框架,通過最小互信息實現信號的分離,其中w_{a}C_{a}B都提前給定,優化w_{a 1}w_{a 2}

定義互信息:

其中,

                                         

                                          

在幅度(嚴格來講是傅里葉係數幅度)爲正態條件下,得到:

                                  

給出輸出表達式:

                                   Y_{i}=\left(\mathbf{w}_{\mathbf{q}, i}-\mathbf{B}_{i} \mathbf{w}_{\mathbf{a}, i}\right)^{H} \mathbf{X}

並給出準則函數——相關係數的表達式:

                                             

其中,

                       

                      

其中相關、互相關無法得到統計信息,仍然可以基於遍歷性假設:利用時間換取空間,近似求取。

文中提到引入正則化(regularization)

                          \mathcal{I}\left(Y_{1}, Y_{2} ; \alpha\right)=I\left(Y_{1}, Y_{2}\right)+\alpha\left\|\mathbf{w}_{\mathbf{a}, 1}\right\|^{2}+\alpha\left\|\mathbf{w}_{\mathbf{a}, 2}\right\|^{2}

這個只是優化過程中的限定條件,與GSC框架關係不大,不再補充。

這裏在網上找去了一個8通道(channel)的混合語音(兩個說話人),利用該算法進行分析,給出主要代碼:

主要代碼:

MMI_define_var(Xf1,Xf2);
%initialization
W1 = [0 0 0 0.1 0 0 0.2 ];
W2 = [0 2 0 0 0.2 0 0.1 ];
[Wa1,Wa2]=MMI_EstimateWa([W1 W2]');
其中MMI_define_var定義變量:
function MMI_define_var(Xf1,Xf2)
 
global Wq B covX1X1 covX2X2  covX1X2  len;
 
Wq=[1 1 1 1 1 1 1 1]'*1/8;
B=[1 -1 0 0 0 0 0 0 ;0 1 -1 0 0 0 0 0 ;0 0 1 -1 0 0 0 0 ;0 0 0 1 -1 0 0 0 ;0 0 0 0 1 -1 0 0 ;0 0 0 0 0 1 -1 0 ;0 0 0 0 0 0 1 -1 ]';
 
[~,len]=size(Xf2);
XfMean1=mean(Xf1.');
XfMean2=mean(Xf2.');
for i=1:8
    Xf1(i,:)=Xf1(i,:)-XfMean1(i);
    Xf2(i,:)=Xf2(i,:)-XfMean2(i);
end
 
covX1X1=Xf1*Xf1'/len;
covX2X2=Xf2*Xf2'/len;
covX1X2=Xf1*Xf2'/len;
<span style="font-size: 14px;">MMI_EstimateWa實現參數估計:<br></span>
function [Wa1 Wa2]=MMI_EstimateWa(W)
%obtain the Wa
ww=[real(W)' imag(W)']';
 
options = optimset('LargeScale','off','display','off');
[X,fval] = fminunc('MMI_real_imag_objfun',ww,options);
X_real=X(1:14);
X_imag=X(15:28);
Wa1_real=X_real(1:7);
Wa1_imag=X_imag(1:7);
Wa2_real=X_real(8:14);
Wa2_imag=X_imag(8:14);
 
Wa1=Wa1_real+sqrt(-1)*Wa1_imag;
Wa2=Wa2_real+sqrt(-1)*Wa2_imag;
end

對應結果圖:

                               

可以聽出來:雖然略有雜音,但兩個說話人的聲音已經實現了分離,GSC框架有效。如果不同說話人聲達時間估計準確,迭代算法應用合適,效果會更好,此處主要介紹GSC應用,細節不再琢磨,有興趣的可以探索探索。

 

參考:

  • K. Kumatani, T. Gehrig, U. Mayer, E. Stoimenov, J. McDonough and M. WÖlfel, "Adaptive Beamforming With a Minimum Mutual Information Criterion," in IEEE Transactions on Audio, Speech, and Language Processing, vol. 15, no. 8, pp. 2527-2541, Nov. 2007.
  • Simon Haykin 《Adaptive Filter Theory Fourth Edition》.
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章