FastICA算法

        目前比較成熟的線性盲源分離算法有很多,FastICA是其中之一。

1  ICA算法流程

(1) 歸一化

        首先將觀測數據x

歸一化,即減去其均值m=E{x}使其具有零均值。這意味着s也是零均值的。

        歸一化預處理能簡化ICA算法,在估計出歸一後的混合矩陣A後,將計算出的分離信號s再加上s的均值A-1m

(2) 白化

        在歸一化之後,線性變換觀測向量x使其各成分不相關且有單位方差,即白化爲新向量x',其協方差矩陣等於單位矩陣:E{x'x'T}=I

        一種常用的白化方法對數據協方差進行特徵值分解(Eigen-ValueDecomposition,EVD),即E{xxT}=EDET,其中E是E{xxT}特徵向量的正交矩陣,D是其特徵值的對角矩陣,D=diag(d1,…,dn)。因而白化操作可寫爲

                        x'=ED-1/2ETx

        其中D-1/2=diag(d1-1/2,…,dn-1/2)。同理,白化混合矩陣得A',則A‘是正交的。

        白化操作能減少待估計的參數。估計矩陣A要估計n2個參數,而估計正交矩陣A'只需估計n(n-1)/2個參數,這大大減小了ICA算法的計算複雜度。

(3) FastICA算法

        在討論了的ICA估計幾種目標函數中,實際應用中需要一種最大化目標函數的算法,一種常用的算法就是FastICA算法。這裏假設數據已經經過歸一化和白化,z'A’和分別用xA表示。

        首先討論算法的一次處理過程。FastICA算法基於定點迭代結構的算法,目的是使wTx具有最大非高斯性,其中wW的一行。採用式J(y) ∝ [E{G(y)} – E{G(v)}]2爲目標函數,定義g爲非二次函數G的導數。則式G1(u) = 1/a1logcosh(a1u) ,G2(u) = - exp(-u2/2)中函數的導數爲

                        g1(u) = tanh(a1u), g2(u) = u exp(-u2/2) 

其中1≦a1≦2爲一個合適的常量,通常選a1=1。

        可通過E{(wTx)}的最適條件獲得wTx的負熵近似值。根據庫恩 - 塔克條件,在E{(wTx)2}=||w||2=1的約束條件下,E{G(wTx)}的最適條件可通過下式獲得:
                        E{xg(wTx)}-βw=0

用牛頓方法解此方程。定義方程左邊爲F,得到它的雅克比矩陣JF(w)爲

                        JF(w) = E{xxTg’(wTx)}- βI

上式右邊第一項可簡化爲E{xxTg’(wTx)}≈E{xxT}E{g’(wTx)}= E{g’(wTx)}I,雅克比矩陣變成對角的、可逆的。因此獲得近似牛頓迭代:
                        w+ =w – [E{xg(wTx)}- βw]/[ E{g’(wTx)}- β]

兩邊同乘β-E{g’(wTx)},進一步簡化爲w+ =E{xg(wTx)}– E{g’(wTx)}w

        綜上,一次FastICA算法的基本形式爲:

        1)初始化(如隨機)向量w

        2)令w+ = E{xg(wTx)} –  E{g’(wTx)}w;

        3)令w= w+/||w+||;

        4)若未收斂,則回到2)。

其中收斂意味着前後兩次向量w在同一方向上,即它們的點積爲1。

        一次FastICA算法能估計出一個獨立成分,爲了估計出若干個獨立成分,需要進行若干次FastICA算法得到向量w1,…,wn。爲了防止這些向量收斂在同一個最大值,需要對每次迭代後的輸出w1Tx,…,wnTx去相關。

        一種簡單的方法是Gram-Schmidt-like去相關,即一個接一個地估計獨立成分。在估計出p個獨立成分w1,…,wp之後,當估計wp+1時先減去先前預測的p個向量的投影wp+1Twjwj,j=1,…,p,然後標準化wp+1,即

        1)

        2)

        有時希望對稱去相關,這樣所有獨立成分都是平等的,這可通過矩陣平方根完成,即

                        

其中W=[w1,…,wn]T,逆平方根(WWT)-1/2通過特徵值分解獲得,(WWT)-1/2=(FDFT)-1/2=FD-1/2FT。一個很簡單的方法是通過如下迭代算法

        1)

        2) 令W= 3/2W – 1/2WWTW

        3) 重複2),直至收斂。

2 算法仿真效果

(1)對模擬信號分離

        首先用matlab產生4個相互獨立的語音信號,分別爲正弦曲線、不規則曲線、鋸齒形曲線和脈衝噪聲,波形如圖1所示。然後用一個隨機矩陣將它們混合,產生4個混合信號,如圖2所示

                


                                              圖1   4個獨立信號成分

                

                                               圖2    4個混合信號

        運用FastICA算法對混合信號進行獨立成分分析,分離結果如圖3所示。

                

                                                             圖3 獨立成分分析結果

        比較圖3和圖1可以看出,FastICA算法成功分離出了4種獨立信號,效果明顯。唯一不同之處在於分離順序是不確定的,這是線性混合的必然結果。

(2) 聲音信號分離

        語音信號來自赫爾辛基工業大學官網,分別爲警笛聲、樂器聲、男語音和女語音,波形如圖4所示。然後對其進行線性混合,得到4個混合聲音信號,波形如圖5所示。

                


                                                               圖4    4個聲音信號

               

                                                           圖5    4個混合信號

        運用FastICA算法對混合語音信號進行分離,分離結果如圖6所示。

                  

                                                           圖6  盲源分離語音信號

        比較圖6和圖4可以看出,FastICA算法成功對4種聲音信號進行了分離,而且對警笛聲和樂器聲的分離效果很好,分離出的人聲信號依然存在一些干擾,但是可以很明顯分辨出人聲。





發佈了48 篇原創文章 · 獲贊 43 · 訪問量 20萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章