作者:einyboy or alert
(注本文有些圖片來源於網絡)
雞尾酒宴會問題:
假設在party中有n個人,他們可以同時說話,我們也在房間中一些角落裏共放置了n個聲音接收器(Microphone)用來記錄聲音。宴會過後,我們從n個麥克風中得到了一組數據 ,i表示採樣的時間順序,也就是說共得到了m組採樣,每一組採樣都是n維的。我們的目標是單單從這m組採樣數據中分辨出每個人說話的信號。
圖示跟數學表達如下:
S是原始信號,X是麥克峯採集出來的信號,A是表徵信道特徵的混合矩陣。另一種表達如下:
爲了求由X求S,我們能不能寫出S=inv(A)*X?是不行的,因爲我們
沒有A的相關知識。我們換個思路,顯然由常識X的分量是相關的,認爲S的分量是相互獨立的(說白點就是不同的說話人),我們找一個矩陣W,使得U = WX,而U的個個分量是獨立的就行了,有一種叫做ICA的獨立成分分析算法我以解這種問題。請注意ICA算法要求原信號S是獨立同分布的非高斯分佈才行。ICA對高斯分佈來說是病態,爲什麼呢,想想中心極限定理就知道了。下面對ICA的算法做一個介紹,不做深入的數學推導:
1、 中心化:也就是求X均值,然後讓所有X減去均值。
X = X-mean(X)
2、 白化:目的是將x乘以一個矩陣變成 ,使得 的協方差矩陣是 I 即
其中使用特徵值分解來得到E(特徵向量矩陣)和D(特徵值對角矩陣),計算公式爲
這樣做的目的是消除二階統計量的相關性,就是PCA分析了。
3、隨機初始化一個矩陣W,並歸一化:
4、計算
g是一個非線性函數,可以是下面一些函數:
5、W進行歸範化:
6、如果W沒有收斂,轉第4步,否則算法結束
代碼運行截圖如下:
代碼:http://download.csdn.net/source/3321665
man.wav 源信號
music.wav 源信號
MixedS1.wav混合信號
MixedS2.wav混合信號
SS1.wav解混信號
SS2.wav解混信號
ICADemo.m程序文件