前情提示:ICA算法成立的前提是:假设每个人发出的声音信号各自独立。
1.鸡尾酒宴会问题
n个人在一个房间开party,房间的不同配置摆放了n个声音接收器,每个接收器在每个时刻同时采集到n个人声音的重叠声音。每个接收器和每个人的距离是不一样的,所以每个接收器接收到的声音的重叠情况也不同。party结束后,我们得到m个声音样例,每个样例是在具体时刻t,从n个接收器接采集的一组声音数据(一个接收器得到一个数据,所以有n个数据),如何从这m个样本集分离出n个说话者各自的声音呢?
2.问题数字化
首先把m个声音样例就是一个样本集X,shape=(m, n),则行表示m个样例,n表示每个样例有n个数据,n个数据是由n个接收器在当前时刻接收到的信号数据。
2.1样本集数字化
X=
其中i表示在时刻i的样例,1~n表示第1~n个接收器采集的数据,一个样例就是在时刻i从n个接收器采集到的信号数据组成的。
2.2每个说话者的独立声音数字化
假设我们最后分离出来的n个说话者的声音组成的样本集是s,s中每个元素都是每个人的独立声音,可以如下表示s:
1~n表示第几个说话者的声音数据,每一维都是一个人的声音信号,每个人发出的声音信号独立
2.3目标问题的公式数字化
则一定存在一个矩阵A,使得X=As成立,数字化形式如下所示:
可知shape(X)=(n,m), shape(A)=(n,n), shape(s)=(n,m)
对上面公式解释一下:
x是一个矩阵,由m个列向量组成,每个列向量是一个时刻采集的样例
可知样本集X:每个时刻t的样例有n个声音数据,每个数据是此时刻n个说话者的声音数据的线性组合。这句话理解了,就可以容易理解X=As公式了。其中A是一个未知的混合矩阵(Mixing Matrix),就是用来组合叠加信号s的。混合矩阵A就是提供"线性组合"功能的,如果知道了A就轻松求出了s,因为X是party已采集的样本集,是已知的。
现在的任务就是根据X求出A和s,没错,这听起来太扯了,确实很扯,哈哈,但是ICA可以搞定这么扯的事情。
这个比较扯的事情,还有个学名,叫盲信号分离:
知道n个说话者的混合声音的样本集X,求出混合矩阵A和每个说话者的独立声音数据s的过程,称为盲信号分离。
2.4每个时刻的样例=n个说话者的独立声音线性组合
这个就是对的示例具体化,让其更容易理解,举例如下:
看过上面手稿示例,应该已经理解每个时刻的每个声音接收器接收到的声音都是此时刻n个说话者的独立声音的线性组合,而混合矩阵A决定了这个线性组合。
2.5决定线性组合的混合矩阵W的数字化
第一要务:此时存在公式s=WX,如果我们知道了W就可以求出s了,我们现在的任务就是想法设法求出W
3.ICA计算过程的原理推理
假设我们的随机变量ss有概率密度函数p