作者:einyboy or alert
(注本文有些图片来源于网络)
鸡尾酒宴会问题:
假设在party中有n个人,他们可以同时说话,我们也在房间中一些角落里共放置了n个声音接收器(Microphone)用来记录声音。宴会过后,我们从n个麦克风中得到了一组数据 ,i表示采样的时间顺序,也就是说共得到了m组采样,每一组采样都是n维的。我们的目标是单单从这m组采样数据中分辨出每个人说话的信号。
图示跟数学表达如下:
X=AS
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程序文件