作者:桂。

时间:2017-05-22 12:12:43

链接:http://www.cnblogs.com/xingshansi/p/6884273.html


前言

今天群里冒出这样一个问题:群里谁有INFORMAX语音分离源程序?看到要程序的就头大,这是一个盲源分离问题,之前没有推导过,借此过一遍思路。

一、问题描述

  经典的鸡尾酒宴会问题(cocktail party problem)。假设在party中有n个人,他们可以同时说话,我们也在房间中一些角落里共放置了n个声音接收器(Microphone)用来记录声音。宴会过后,我们从n个麦克风中得到了一组数据,i表示采样的时间顺序,也就是说共得到了m组采样,每一组采样都是n维的。我们的目标是单单从这m组采样数据中分辨出每个人说话的信号。

将第二个问题细化一下,有n个信号源,每一维都是一个人的声音信号,每个人发出的声音信号独立。A是一个未知的混合矩阵(mixing matrix),用来组合叠加信号s,那么

x的意义在上文解释过,这里的x不是一个向量,是一个矩阵。其中每个列向量是 ,表示成图就是:

的每个分量都由的分量线性表示。A和s都是未知的,x是已知的,我们要想办法根据x来推出s。这个过程也称作为盲信号分离。

,那么

将W表示成

其中,其实就是将写成行向量形式。那么得到:

ICA的主要任务是估计解混矩阵W。

二、理论求解(不感兴趣可跳过)

  A-理论基础

标准ICA理论有几个支撑点:

1)各源信号统计独立;

2)至多有一个源信号服从Gauss分布

对于,并假设,则有:

另一方面,对于任意正交矩阵:,令

可见混合矩阵无法有效估计。

3)混合矩阵为方阵

  B-理论求解

1-中心极限定理:

中心极限定理表明:对于混合信号,其概率密度比任何一个源信号的概率分布都接近高斯分布;反过来,最大化信号的非高斯性与最大化信号的统计独立性是一致的,只是ICA的基本原理。

2-非高斯性度量

a)利用统计量

峭度(kurtosis)

峭度基本性质:

b)利用信息论知识

熵的定义:

负熵

给出基于KL散度的定义:

互信息:

考虑负熵的定义,上式重写为:

该式表明:最小化互信息等价于最大化负熵

对于负熵,有时为了简化常用近似的方法:

上面的逼近通常不够理想,改进版的近似:

其中,且:

c)利用概率估计

利用MLE准则进行参数估计。

三、算法实现

给出利用概率估计的算法原理,准则函数(取对数):

其中:,从而。这里的g表示概率密度,可以用sigmoid函数,也可以用tan函数等等,以sigmoid函数为例:

由于:,利用梯度下降法求解。给出梯度的计算公式:

给出主要code实现:

for iter=1:length(anneal)
iter
% Randomly interate through the samples running stochastic gradient descent
rowIndices = randperm(m);
for i = 1:length(rowIndices)
rowIndex = rowIndices(i);
% Perform the ICA stochastic gradient descent update
W = W + anneal(iter) * ((ones(n,1)-2*ones(n,1)./(ones(n,1)+exp(-W*mix(rowIndex,:)')))*mix(rowIndex,:) + (W')^-1);
end
end;

四、其他

  A-ICA的不确定性

1-分离信号幅度与初始相位的不确定性

信源信号S和混合矩阵A:

可以看出,对于实数信号产生幅度不确定性,对于复数信号,产生幅度与相位的不确定性。

幅度的不确定性可以采用假设信号单位方差的方法修正。

2-分离信号的次序不确定性

P是任意置换矩阵,这就造成了分离信号次序的不确定性。

  B-ICA中的预处理

1-中心化

ICA算法中,均值为零可以使得很多相乘项为零,简化算法复杂性。

2-白化处理

B为白化矩阵。白化操作之前有介绍,白化处理已经包含了中心化。ICA中的白化通常指满秩的白化。

白化的本质就是旋转+方差单位化。白化操作是去除信号的相关性,以基于信息论的ICA为例,各个概率密度独立是理论假设的基本前提。

参考

  • http://www.cnblogs.com/jerrylead/archive/2011/04/19/2021071.html

独立成分分析(Independent component analysis, ICA)的更多相关文章

  1. 独立成分分析(Independent Component Analysis)

    ICA是一种用于在统计数据中寻找隐藏的因素或者成分的方法.ICA是一种广泛用于盲缘分离的(BBS)方法,用于揭示随机变量或者信号中隐藏的信息.ICA被用于从混合信号中提取独立的信号信息.ICA在20世 ...

  2. 机器学习 —— 基础整理(四)特征提取之线性方法:主成分分析PCA、独立成分分析ICA、线性判别分析LDA

    本文简单整理了以下内容: (一)维数灾难 (二)特征提取--线性方法 1. 主成分分析PCA 2. 独立成分分析ICA 3. 线性判别分析LDA (一)维数灾难(Curse of dimensiona ...

  3. Topographic ICA as a Model of Natural Image Statistics(作为自然图像统计模型的拓扑独立成分分析)

    其实topographic independent component analysis 早在1999年由ICA的发明人等人就提出了,所以不算是个新技术,ICA是在1982年首先在一个神经生理学的背景 ...

  4. PCA主成分分析 ICA独立成分分析 LDA线性判别分析 SVD性质

    机器学习(8) -- 降维 核心思想:将数据沿方差最大方向投影,数据更易于区分 简而言之:PCA算法其表现形式是降维,同时也是一种特征融合算法. 对于正交属性空间(对2维空间即为直角坐标系)中的样本点 ...

  5. 独立成分分析 ICA 原理及公式推导 示例

    独立成分分析(Independent component analysis) 前言 独立成分分析ICA是一个在多领域被应用的基础算法.ICA是一个不定问题,没有确定解,所以存在各种不同先验假定下的求解 ...

  6. ICA (独立成分分析)

    介绍 独立成分分析(ICA,Independent Component Correlation Algorithm)简介 X=AS X为n维观测信号矢量,S为独立的m(m<=n)维未知源信号矢量 ...

  7. 斯坦福ML公开课笔记15—隐含语义索引、神秘值分解、独立成分分析

    斯坦福ML公开课笔记15 我们在上一篇笔记中讲到了PCA(主成分分析). PCA是一种直接的降维方法.通过求解特征值与特征向量,并选取特征值较大的一些特征向量来达到降维的效果. 本文继续PCA的话题, ...

  8. Independent Components Analysis:独立成分分析

    一.引言 ICA主要用于解决盲源分离问题.需要假设源信号之间是统计独立的.而在实际问题中,独立性假设基本是合理的. 二.随机变量独立性的概念 对于任意两个随机变量X和Y,如果从Y中得不到任何关于X的信 ...

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

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

随机推荐

  1. (转)机器学习的数学基础(1)--Dirichlet分布

    转http://blog.csdn.net/jwh_bupt/article/details/8841644 这一系列(机器学习的数学基础)主要包括目前学习过程中回过头复习的基础数学知识的总结. 基础 ...

  2. C# ftp ListFilesOnServer

    public static bool ListFilesOnServer(Uri serverUri) { // The serverUri should start with the ftp:// ...

  3. [Functional Programming] mapReduce over Async operations with first success prediction (fromNode, alt, mapReduce, maybeToAsync)

    Let's say we are going to read some files, return the first file which pass the prediction method, t ...

  4. vb.net 模拟UDP通信

    Imports System.Net Imports System.Text.Encoding Public Class Form1 Dim publisher As New Sockets.UdpC ...

  5. PHP表单- PHP $_GET 变量

    PHP $_GET 变量 在 PHP 中,预定义的 $_GET 变量用于收集来自 method="get" 的表单中的值. $_GET 变量 预定义的 $_GET 变量用于收集来自 ...

  6. Camera 预览变形问题解决

    最近开发一款自定义相机采集照片的demo,花了一个上午开发了一个在测试机上功能正常的apk连同测试机一起交付(需求方反馈没有Android设备),然而晚上被喊去说是在华为畅玩某型号上预览会变形,拍到的 ...

  7. request.getSession().setAttribute(&quot;&quot;,..)和request.setAttribute(&quot;&quot;,...)的差别

    request.getSession.setAttribute()是获得当前会话的session,然后再setAttribute到session里面去,有效范围是session而不是request. ...

  8. 算法笔记_197:历届试题 带分数(Java)

    目录 1 问题描述 2 解决方案   1 问题描述 问题描述 100 可以表示为带分数的形式:100 = 3 + 69258 / 714. 还可以表示为:100 = 82 + 3546 / 197. ...

  9. CSS实现水平垂直居中方式

    1.定位 核心代码实现请看示例代码中的注释: <!DOCTYPE html> <html lang="zh"> <head> <meta ...

  10. win7硬盘安装方法

    Windows 7 完全硬盘安装方法 干干净净的C盘 事先准备:装好系统的电脑一台,win 7安装iso. 注: (1).Windows 7要求安装在NTFS分区,但是其他分区可以是FAT32格式! ...