您的位置:首页 > 其它

尾酒宴会问题---ICA独立成分分析[原创]

2011-05-29 08:36 309 查看
作者: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 即





我们只需用下面的变换,就可以从x得到想要的





其中使用特征值分解来得到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程序文件
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: