ICA(独立成分分析)在信号盲源分离中的应用
来源:互联网 发布:淘宝运营指数指是什么 编辑:程序博客网 时间:2024/06/10 08:58
ICA简介
ICA是20世纪90年代提出的,起初是神经网络的研究中有一个重要的问题,独立成分分析是一个解决问题的新方法。在许多应用方面,包括特征识别、信号分离。这种方法是用一种解线性方程组的方式的估计方式求解信号源。
ICA与鸡尾酒会
假想一下,在一个房间里的不同位置放着两个麦克风,同时有两个人说话。两个麦克风能同时记录下两个时间信号,如果仅用这两个记录的信号来估计出原来的两个语音信号,那将是一件非常有意义的事情,这也就是所谓的“鸡尾酒会”问题 。
信号盲源分离
以鸡尾酒会声音辨别为例,将每个声音区分出来,这样人大脑就可以很快集中听需要注意的声音。以下以三个独立源为例,三个接收端,每个接收端都含有三个声音源的线性叠加。下图是示例图:
对模型参数的解释
A=[a11,a12,a12;a21,a22,a23;a31,a32,a32]作为一个混合矩阵,这里的每一个元素可以表示鸡尾酒舞会问题中物理意义为距离,X为观测信号,S为独立源也就是声音信号。以上模型中假设每个独立源噪声干扰很小,忽略影响。实际上在ICA信号盲源分离中可以将噪声信号单独一种独立源处理较好,一些文献对于ICA噪声就是采用这种方案进行处理。
半盲源分离信号分离
在混合矩阵A已知的前提下,反解出独立源就很简单。ICA常用的情形是混合矩阵和独立源都不明确的条件下一种估计算法。真正实现信号的盲源分离。
ICA盲源分离流程
上述流程图中,由独立源线性组合成的观测信号X,只需要对S进行求解即可。S=B*X,其中B为A的逆,通过迭代对A进行逼近,当达到设置的精度时即可分离出混合矩阵的近似。盲源分离的目的是求得源信号的最佳估计。
ICA假设的三个条件
独立成分被假设是统计独立。对于这一条可以从概率密度以及其他算法可以判断。我们说随机变量y1,y2..yn独立,是指在i≠j时,有关yi的取值情况对于yj如何取值没有提供任何信息。
独立成分具有非高斯分布。如果观测到的变量具有高斯分布,那么ICA在本质上是不可能实现的。假定S经过混合矩阵A后,他们的联合概率密度仍然不变化,因此我们没有办法在混合中的得到混合矩阵的信息。
假设混合矩阵是方阵。这个条件是为了后续ICA算法求解的便利。当混合矩阵A是方阵时就意味着独立源的个数和监测信号的个数数目是一致。
ICA算法步骤
观测信号构成一个混合矩阵,通过数学算法进行对混合矩阵A的逆进行近似求解分为三个步骤:
1) 去均值。去均值也就是中心化,实质是使信号X均值是零。
2) 白化。白化就是去相关性。
3)构建正交系统。在常用的ICA算法基础上已经有了一些改进,形成了fastICA算法。fastICA实际上是一种寻找wTz(Y= wTz )的非高斯最大的不动点迭代方案。
以上有较多的数学推导,这里就省略了,下面给出fastICA的算法流程:
1 观测数据的中心化2 数据白化3 选择需要估计的分量个数m,设置迭代次数和范围4 随机选择初始权重5 选择非线性函数6 迭代 7 判断收敛,是下一步,否则返回步骤68 返回近似混合矩阵的逆矩阵
算法demo
下面给出一个ICA简单信号盲源分离实例:独立源信号:正弦波、方波、三角波、随机信号(很多情况下可以将噪声信号看做一种独立源),ICA实现对信号的混合分解。
以下是四个独立源信号:
四个观测信号:
分离出的四个源信号:
ICA在进行信号分离时需要注意两点:解分离出的源信号顺序与初始的源信号顺序不对应;另外一个就是分离出的原始信号幅值与原始源信号不对应,形态域上具备相似性。
以下是常见的fastICA算法仿真代码:
%以下程序调用ICA,输入观察信号,输出为解混合信号function Z=ICA(X)%-------------去均值------------[M,T] = size(X); %获取输入矩阵的行/列数,行数为观测数据的个数,列数为采样点点数average= mean(X')'; %按行取均值for i=1:M X(i,:)=X(i,:)-average(i)*ones(1,T); end%------------白化--------------Cx = cov(X',1); %计算协方差矩阵Cx[eigvector,eigvalue] = eig(Cx); %计算Cx的特征值和特征向量W=eigvalue^(-1/2)*eigvector'; %白化矩阵Z=W*X; %正交矩阵%-------------迭代-------------Maxcount=10000; %最大迭代次数Critical=0.00001; %判断是否收敛m=M; %需要估计的分量的个数W=rand(m);for n=1:m WP=W(:,n); %初始权矢量(任意)% Y=WP'*Z;% G=Y.^3;%G为非线性函数,可取y^3等% GG=3*Y.^2; %G的导数 count=0; LastWP=zeros(m,1); W(:,n)=W(:,n)/norm(W(:,n));%单位化一列向量 while abs(WP-LastWP)&abs(WP+LastWP)>Critical %两个绝对值同时大于收敛条件 count=count+1; %迭代次数 LastWP=WP; %上次迭代的值 % WP=1/T*Z*((LastWP'*Z).^3)'-3*LastWP; for i=1:m WP(i)=mean(Z(i,:).*(tanh((LastWP)'*Z)))-(mean(1-(tanh((LastWP))'*Z).^2)).*LastWP(i);%更新 end WPP=zeros(m,1);%施密特正交化 for j=1:n-1 WPP=WPP+(WP'*W(:,j))*W(:,j); end WP=WP-WPP; WP=WP/(norm(WP)); if count==Maxcount fprintf('未找到相应的信号'); return; end end W(:,n)=WP;endZ=W'*Z;
应用ICA需要考虑的几点
ICA主要用于特征提取和信号盲源分离中。在盲源信号分离中,关于源的个数是确定的,因此分离出的源信号数目在分离之前是确定已知的。监测信号的维数与源信号的数目相同,混合矩阵和源信号具体情况在分离之前可以不清除具体表现形式,但是需要满足独立、非高斯分布的条件,这些是在实际中应用ICA需要考虑的条件。
2 0
- ICA(独立成分分析)在信号盲源分离中的应用
- ICA(独立成分分析)
- ICA 独立成分分析
- 独立成分分析(ICA)
- ICA独立成分分析
- 独立成分分析ICA
- ica 独立成分分析
- ICA独立成分分析
- ICA:独立成分分析
- 独立成分分析 ( ICA )
- 独立成分分析算法(ICA)
- 独立成分分析简介(ICA)
- 【模式识别】独立成分分析 ICA 中的几种方法
- 独立成分分析ICA (Independent Component Analysis)
- 独立成分分析ICA系列1:意义
- 独立成分分析ICA系列2:概念、应用和估计原理.
- 独立成分分析(Independent Component Analysis, ICA)
- 尾酒宴会问题---ICA独立成分分析[原创]
- 11.01-11.15 字符串与数字转换/十六进制颜色转RGB/URLSchemes使用/小处注意记录
- Springmvc+uploadify实现文件上传
- Tomcat内存设置详解
- jquery操作checkbox的一个小坑
- 视频监控高清化的五大阻碍
- ICA(独立成分分析)在信号盲源分离中的应用
- javascript正则表达式进行验证
- iOS-OC-WKWebView UIScrollView 全屏截图,网页全屏截图
- js判断手机网站,手机浏览器检测,并跳转到手机网站代码
- Intel汇编程序设计-高级过程(上)
- iOS高级编程之Blocks的应用场景
- 通过构造方法或者工厂方法创建实例的区别
- apache ab压力测试工具的参数详解
- Linux学习之内建命令和外部命令详解