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 判断收敛,是下一步,否则返回步骤6
8 返回近似混合矩阵的逆矩阵

算法demo

下面给出一个ICA简单信号盲源分离实例:独立源信号:正弦波、方波、三角波、随机信号(很多情况下可以将噪声信号看做一种独立源),ICA实现对信号的混合分解。

以下是四个独立源信号:

四个观测信号:

分离出的四个源信号:

ICA在进行信号分离时需要注意两点:解分离出的源信号顺序与初始的源信号顺序不对应;另外一个就是分离出的原始信号幅值与原始源信号不对应,形态域上具备相似性。

以下是常见的fastICA算法仿真代码:

%以下程序调用ICA,输入观察信号,输出为解混合信号
function Z=ICA(X)
%-------------去均值------------
[M,T] = size(X); %获取输入矩阵的行/列数,行数为观测数据的个数,列数为采样点点数
average= mean(X')';  %按行取均值
for i=1:MX(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);%更新endWPP=zeros(m,1);%施密特正交化for j=1:n-1WPP=WPP+(WP'*W(:,j))*W(:,j);endWP=WP-WPP;WP=WP/(norm(WP));if count==Maxcountfprintf('未找到相应的信号'); return; endendW(:,n)=WP;
end
Z=W'*Z;

应用ICA需要考虑的几点

ICA主要用于特征提取和信号盲源分离中。在盲源信号分离中,关于源的个数是确定的,因此分离出的源信号数目在分离之前是确定已知的。监测信号的维数与源信号的数目相同,混合矩阵和源信号具体情况在分离之前可以不清除具体表现形式,但是需要满足独立、非高斯分布的条件,这些是在实际中应用ICA需要考虑的条件。

ICA(独立成分分析)在信号盲源分离中的应用相关推荐

  1. 基于独立分量分析的语音信号盲源分离

    一.盲源分离介绍 语音信号处理是当今通信技术领域的研究热点之一.在实际应用中,我们常常遇到多个语音信号混杂在一起的情况,这就需要对这些混合信号进行分离,提取出原始的独立语音信号.盲源分离(Blind ...

  2. 结合matlab代码案例解释ICA独立成分分析原理

    目录 介绍 什么是ICA? 对数据进行白化 ICA算法 ICA特性 本分享为脑机学习者Rose整理发表于公众号:脑机接口社区 QQ交流群:941473018 关于ICA,可以查看Rose小哥之前分享的 ...

  3. ICA(独立成分分析)笔记

    ICA又称盲源分离(Blind source separation, BSS) 它假设观察到的随机信号x服从模型,其中s为未知源信号,其分量相互独立,A为一未知混合矩阵. ICA的目的是通过且仅通过观 ...

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

    作者:einyboy or alert (注本文有些图片来源于网络) 鸡尾酒宴会问题:       假设在party中有n个人,他们可以同时说话,我们也在房间中一些角落里共放置了n个声音接收器(Mic ...

  5. ICA独立成分分析去除脑电伪影

    今天分享的这篇利用独立成分分析ICA去除EEG伪影是翻译自jung大神的一篇文章. 目录 1 介绍 2 方法 3 实验数据样本 1 介绍 眼动,眨眼,肌肉,心脏和线的噪音会严重污染脑电图活动,这在脑电 ...

  6. ICA独立成分分析—FastICA基于负熵最大

    1. 概念 官方解释:利用统计原理进行计算的方法,是一种线性变换. ICA分为基于信息论准则的迭代算法和基于统计学的代数方法两大类,如FastICA算法,Infomax算法,最大似然估计算法等. 这里 ...

  7. 如何使用ICA(独立成分分析)来去除伪影

    关于使用ICA,可以采用mne的库来进行实现.具体可以查看官网:ICA使用 ICA的大致原理是:找到一个分解的矩阵,将原始数据分解成时间独立和空间固定的分量之和.然后先根据自己的经验去除伪迹分量,再通 ...

  8. ICA独立成分分析去除EEG伪影

    目录 介绍 ICA假设 方法 组件投影 实验数据样本 移除眨眼和肌肉伪影 一些严重污染的脑电数据 本分享为脑机学习者Rose整理发表于公众号:脑机接口社区 .QQ交流群1:903290195(已满,请 ...

  9. 【机器学习】【ICA-2】ICA独立成分分析的原理 + ICA前的预处理(中心化+漂白)

    前情提示:ICA算法成立的前提是:假设每个人发出的声音信号各自独立. 1.鸡尾酒宴会问题 n个人在一个房间开party,房间的不同配置摆放了n个声音接收器,每个接收器在每个时刻同时采集到n个人声音的重 ...

  10. 独立成分分析ICA系列1:意义

    1.前言 独立成分分析思想和方法最早源于上世纪八十年代几个法国学者的研究工作,尽管当时他们并没有命名其为ICP;在1986年举行的神经网络计算会议上,法国学者Heraull和Jutten提出了一个基于 ...

最新文章

  1. centos 6.5下编译安装、配置高性能服务器Nginx
  2. libSVM应用举例
  3. 105.敏捷开发模型
  4. Apache Flink 零基础入门(十三)Flink 计数器
  5. phpstorm知识点
  6. JVM系列之:JIT中的Virtual Call
  7. Flume 1.7 源码分析(四)从Source写数据到Channel
  8. WordPress Event Easy Calendar插件多个跨站请求伪造漏洞
  9. 垃圾阿言之Maven与环境变量(这一波是卑微的)
  10. network 一级,二级,子域名
  11. SPSS 有调节的中介与有中介的调节【SPSS 042期】
  12. 鸿蒙2.0系统刷机包,鸿蒙系统2.0刷机包
  13. Win7 安装.Net 4.7.2 失败
  14. TD幅度预测、幅度膨胀突破、TD通道
  15. 入驻商家卖违禁药物、评论造假、试水会员,直播能让新氧再次“乘风破浪”吗?
  16. SAP OOALV-SD模块实战开发案例(增删改查)
  17. 前端中文汉字转换为拼音、拼音首字母的插件Chinese-to-Pinyin
  18. 毕业四年后的程序员继续租房子
  19. 《2020年全球程序员收入报告》,看完报告我酸了!
  20. 【web安全】——XXE漏洞快速入门

热门文章

  1. 据我所知目前就只飞秋表情库
  2. 使用Bandicam录屏
  3. linux网络服务配置说课,说课稿 LINUX.ppt
  4. opencv3和opencv4多线程内存泄漏问题
  5. PDF怎么快速统计文档字数?这两种方法很简单
  6. ubuntu下安装anjuta
  7. 信息学奥赛一本通pdf_新手如何参加信息学竞赛NOIP,怎么入门(常见问题解答)?...
  8. 安卓阅读器开发_全球首个彩屏阅读器 掌阅这一脚油门“彩”的够深
  9. ERP系统合理制定生产计划流程,简化排产步骤
  10. 「需求广场」需求词更新明细(四)