独立成分分析

article/2025/11/9 7:51:26

        在已知语音信号方向的情况下,波束形成能明显改善语音质量,提高信噪比;然而在实际环境中,人可能是走动的,即使坐立不动,由于身体的扭曲使得语音到达阵列的方向也是变化的,此时波束形成效果受到限制。如果我们能在不知语音信号方向等先验知识的前提下,把混合的语音分离开来,提取感兴趣的语音信号,达到语音增强的目的,这就是独立成分分析(Independent Component Analysis,ICA)。

1  概述

        独立成分分析是盲源分离(Blind SourceSepatation,BSS)的一种方法,将混合的信号分离成潜在的信息成分。“盲”的意思即这种方法能在不知或知道很少声源信号属性的情况下将其分离开来。

        假设两个说话人同时对着两个位于不同位置的麦克风说话,两个麦克风接收到的信号是两个语音的混合信号,即x1(t)和x2(t),其中x1和 x2表示幅度,t为时间坐标。每个麦克风接收到的信号是两个说话人语音的加权和,假设是线性瞬时混合,则

                        x1(t) = a11s1+ a12s2

                            x2(t) = a21s1+ a22s2

其中a11, a12,a21和a21是由说话人与麦克风之间距离决定的参数。盲源分离就是仅利用麦克风接收到的信号x1(t)和x2(t)去估计出原始语音信号s1(t)和s2(t),这就是著名的“鸡尾酒会”问题。

        解决这一问题的一种方法就是利用信号si(t)的一些统计信息来估测出aij,从而便解方程组得到s1(t)和s2(t)。在s1(t)和s2(t)统计独立的情况下,独立成分分析能很好解决这一问题。

        假设混合变量和独立成分都是零均值的,即使不是零均值,也可通过减去一个平均值使之变为零均值。假设有n个独立成分,用向量和矩阵将独立成分分析模型一般化为

                        x = As

其中x=[x1 x2 …xn]为麦克风接收到的观察信号,A=[ a11a12 …a1n; a21a22…a2n;…an1an2 …ann]T为混合矩阵,s=[ s1s2 …sn]为待求解的独立信号。这里没有考虑噪声,As均是未知的,仅假设si是相互独立的且xi至多只有一个是高斯分布。利用独立成分分析解出A,对其求逆得W=A-1,则独立信号即可解得

                        s = Wx

        一个独立成分分析方法本质是上一个目标函数加上一个自适应更新算法。

2  ICA目标函数

(1) 非高斯性

        独立成分非高斯分布是ICA的基本限制,因为如果混合矩阵是正交的且si是高斯分布的,则x1和x2是高斯分布、非相关且具有单位方差,其联合密度曲线完全对称的,它不包含混合矩阵A列方向上的任何信息,因此A是不可估计的。所以非高斯性意味着独立。

        假设si具有一致的分布,定义z=ATwwW的某一行,则y=wTx=wTAs=zTs为si的线性组合。根据中心极限定理,在一定条件下独立随机变量和的分布比各独立随机变量更接近高斯分布。这样,只要尽可能减少y的高斯性,si就接近于非高斯分布,显然当z中仅有1个非零值时y的高斯性最小,此时y=si。因此,只需要使wTx有最大非高斯性的w就是我们所求的解。

        用非高斯性质方法做独立成分分析,需要一个随机变量非高斯性的数学准则。为了便于分析,假设y是零均值且方差为1。常用的标准有以下几种

        1) 峰态

        峰态,又称4阶累积量,是一种经典的非高斯性准则。y的峰态定义为

                        kurt(y) = E{y4} – 3(E{y2})2

由于假设y的方差为1,所以右式等于E{y4} – 3,因而峰态仅由E{y4}决定。高斯随机变量的峰态为0,而对于大多数非高斯随机变量,峰态不为0。

        峰态值可正可负,具有负峰态的随机变量叫亚高斯随机变量,反之叫超高斯随机变量。超高斯随机变量的概率密度函数曲线两边高中间低,亚高斯随机变量的概率密度函数在零值附近为常数,变量大时峰态很小。

        通常用峰态的绝对值或峰态的平方判定变量的非高斯性,其值为0说明是高斯变量,其值越大非高斯性越强。峰态便于计算,假设s1和s2是两个独立随机变量,则

                        kurt(s1+s2)= kurt(s1)+ kurt(s2)

                        kurt(αs1) =α4kurt(s1)

其中α为标量。正因为如此,峰态广泛应用于ICA非高斯性的判断标准。

         假设两个独立成分s 1 和s 2 具有峰态值kurt( s1 )和kurt( s2 ),由于y= w T x = w T As = z T s =z 1 s1 +z 2 s2 ,则kurt (y )=kurt(z 1 s1 )+kurt(z 2 s2 )=z 1 4 kurt( s1 )+z 2 4 kurt( s2 )。约束 y 使之方差也为1,得E{ y 2 }=z 1 2 +z 2 2 =1。几何上意味着 z 被限定在单位圆上。因而问题转化为求方程| kurt( y )|=| z 1 4 kurt( s1 )+z 2 4 kurt( s2 )|在单位圆上的最大值,即最优规划问题。Delfosse和Loubaton证明当向量 z 中仅有一个元素为0时取得最大值,由于单位圆的限制, z 中非零元素必为1或-1,此时 y 的值就是其中一个独立成分∓s i

        实际应用时可以先初始化权向量w,计算峰态y=wTx增长(峰态为正)或下降(峰态为负)最快的方向,然后运用梯度相关算法更新w,这样就解决了ICA问题。

        然而,峰态作为非高斯性判断准则鲁棒性不好,因为它的值由测量采样值估计而来,对异常值极为敏感,因而可能由于采样的原因由异常值计算出错误的峰态。

        2) 负熵

        负熵是另一种重要的非高斯性判断准则,它由信息论中的熵得来。一个离散随机变量Y的熵H定义为

                        

其中aiY的可能取值。将其扩展到连续随机变量和向量便得到微分熵,一个密度为f(y)的随机向量y的微分熵定义为

                        

        由信息论知,具有相同方差的随机变量中高斯变量有最大熵,这意味着熵可以作为一种非高斯性判断准则。负熵定义为

                        J(y) = H(ygauss)– H(y

        其中ygauss是具有和y相同协方差矩阵的高斯随机变量。负熵一定是非负的,仅当y也是高斯分布时负熵为0。

        然而,负熵的计算复杂度太大,根据定义就算负熵需要计算概率密度函数,因此,常用负熵的近似值替代以减小计算复杂度。

        3)  负熵近似值

        经典的负熵近似值是运用高阶成分,如

                        J( y) ≈ 1/12E{ y 3} 2 + 1/48kurt( y)

其中随机变量y具有零均值和单位方差。由于右式中包含峰态,因而这种近似的有效性受到限制。为了避免这一问题,可运用最大熵原理,即

                        

其中ki为正常数,v为具有零均值和单位方差的高斯随机变量。变量y假设具有零均值和单位方差,Gi是非二次函数。若仅利用非二次函数,上式近似为

                        J( y) ∝ [E{G( y)} – E{G( v)}] 2

        非二次函数G的选取很重要,当G(y)=y4上式等于(5.11)式。下面两个函数G非常有用:

                        G1(u) = 1/a1logcosh(a1u) ,G2(u) = - exp(-u2/2)

式中1≦a1≦2是合适的常数。这种负熵的近似值是峰态和负熵的折中,简单便于计算,有很好的统计特性,尤其是鲁棒性好。

(2) 最小化互信息

        最小化互信息是ICA估计的另一种方法。

        运用微分熵的概念,m个随机变量yi,i=1…m,的互信息I定义为

                        

互信息是随机变量间独立一种判断方法,它等价于联合密度f(y)与边缘密度和的相对熵。互信息总是非负的,当且仅当变量统计独立其值为0。因此,互信息考虑变量间的整体独立性,而不仅仅是协方差。

        由于y=Wx,则根据互信息的性质有

                        

约束yi使之不相关且具有单位方差,即E{yyT}=WE{xxT}WT=I,有

                        detI = 1 =det WE{xxT}WT=(detW)(det E{xxT})(det WT

这意味着W必为常数。因为yi具有单位方差,所以熵和负熵仅相差一个常数和符号。因此可得

                        

其中C是一个与W无关的常数。上式表明了互信息和负熵的基本关系,最小化互信息等价于最大化负熵,因而可通过寻找一个W使互信息最小化来实现独立成分分析。

(3)  最大似然估计

        最大似然估计也是一种常见的ICA估计方法,本质上等价于最小化互信息。

        一般的,对于密度为px的随机变量xy=Wx的密度为px(Wx)|detW|。则长似然定义为

                        

其中fi是si的密度函数。将上式扩展为

                           


        实际上,我们不知道独立成分的分布,可以运用ML估计法估计wiTx的密度,将其看做si密度的估计。此时似然和互信息是相同的。


        然而,实际应用中最大似然估计和最小化互信息是有一点差别的。最大似然估计必须准确估计密度fi,如果独立成分自然属性信息有误,ML估计可能得到完全错误的结果。


http://chatgpt.dhexx.cn/article/PtxvUGMq.shtml

相关文章

独立成分分析(Independent Component Analysis,ICA)原理及代码实现

过程监控中会用到很多中方法,如主成分分析(PCA)、慢特征分析(SFA)、概率MVA方法或独立成分分析(ICA)等为主流算法。 其中PCA主要多用于降维及特征提取,且只对正太分布(高…

清理vdbench后台进程

当我们打开一个终端,用nohup运行vdbench程序。断开连接后,你发现你写的配置文件有误,想关闭已有的vdbench进程。你重新连接上终端,咦,我的jobs命令怎么没有显示我的nohup任务呢?这是因为你的nohup任务的sh进…

Nas性能测试工具-vdbench

版本: vdbench50406 简介: vdbench是一个 I/O 工作负载生成器,用于验证数据完整性和度量直接附加和网络连接的存储的性能。它是一个免费的工具,容易使用,而且常常用于测试和基准测试。 配置参数: 大文…

Linux中vdbench的安装与使用

vdbench是一个 I/O 工作负载生成器,用于验证数据完整性和度量直接附加和网络连接的存储的性能。它是一个免费的工具,容易使用,而且常常用于测试和基准测试。 可以使用vdbench测试磁盘和文件系统的读写性能。 环境:Ubuntu 16.04 …

vdbench和fio测试磁盘性能的对比总结

vdbench和fio测试磁盘性能的对比总结 一、安装 1、安装vdbench,首先安装java:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 其次下载vdbench安装包并进行安装:http://pan.baidu.com/s/1b7XooY&am…

vdbench使用

简介 vdbench是一个 I/O 工作负载生成器,用于验证数据完整性和度量直接附加和网络连接的存储的性能。它是一个免费的工具,容易使用,而且常常用于测试和基准测试。 可以使用vdbench测试磁盘和文件系统的读写性能。 名词解释 vdbench中常用的…

vdbench测试SSD快速入门

介绍 vdbench是一个I/O工作负载生成器,通常用于验证数据完整性和度量直接附加(或网络连接)存储性能。它可以运行在windows、linux环境,可用于测试文件系统或块设备基准性能。我们下面主要以块设备为介绍对象。 下载及安装 下载…

vdbench多主机运行指导

测试工具之vdbench多主机运行 本文介绍vdbench在多机环境下的操作和配置,以及本人在配置过程中遇到的问题和解决方法。 文章目录 测试工具之vdbench多主机运行前言一、vdbench在linux环境下多机运行1.环境参数2.配置说明二、vdbench在windows环境下多机运行1.环境参数2.配置…

Vdbench工具安装使用

一、 概述 1.1 内容简介 Vdbench 是一个命令行使用程序,旨在帮助工程师和客户生成用于验证存储性能和存储数据完 整性的磁盘 I/O 负载。还可通过输入文本文件指定 Vdbench 执行参数。它是一个免费的工具,容 易使用,而且常常用于测试和基准测试…

Vdbench工具的安装及使用

Vdbench工具的安装 Vdbench的运行依赖java环境,请务必先安装java运行环境安装java,Ubuntu OS环境安装java: apt-get install openjdk-8-jdkCentos OS环境安装: yum install openjdk-8-jdk检查是否安装成功 安装vdbench,下载vdbench50407.zip包&#…

Java jre的安装与卸载

文章目录 1. jre安装2. 卸载 Java JDK安装教程 Idea Java开发环境配置教程: https://tangxing.blog.csdn.net/article/details/112392218 1. jre安装 java下载网址: https://www.java.com/zh-CN/download/manual.jsp 这里有联机版和脱机版,…

彻底卸载jdk,jdk安装 ,javaa安装,jdk删除干净

标签: 一.备份安装好的绿色版JDK a.重新安装JDK到任意目录,假设这个目录是C:\java。 b.将装好的JDK,JRE拷贝到任意一个其他目录,如D:\bak,这样做的目的主要是为了备份JDK。(建议打成zip压缩包奔备用)二.彻底卸载JDK1.第一步,首先卸载或删除J…

Java如何卸载?怎么删掉Windows计算机上的Java?Java卸载流程详解!

大家都知道Java版本不是一成不变的,Java会朝着功能增加、漏洞修复和性能优化的方向一直进步。而公布新版Java之后,我们需要使用它,那么卸载掉旧版的Java很有必要,为什么呢? 这是Java官方给出的回复: 我们强烈建议您…

JAVA安装、配置及卸载

基本上从入门到实用非常全面了。 安装 安装Eclipse先配置jdk jdk下载地址:https://www.oracle.com/technetwork/java/javase/downloads/index.html (此处以jdk8为示例) 一、安装jdk 此处默认路径即可,单击下一步 安装完成后会…

Java类的卸载机制

类的生命周期 当Sample类被加载、连接和初始化后,它的生命周期就开始了。 当代表Sample类的Class对象不再被引用,即不可触及时,Class对象就会结束生命周期,Sample类在方法区内的数据也会被卸载,从而结束Sample类的生命…

JAVA的安装与卸载

1.java的卸载 1.删除java的安装目录 2.删除系统环境变量里的JAVA_HOME和Path里面的bin目录和jre/bin目录 3.cmd输入java -version 查看是否删除取消 2.java的安装 1.百度搜索jdk1.8找到下载地址 2.双击安装文件安装 3.配置系统环境变量 1.配置环境变量JAVA_HOME&#xff…

教你如何完全卸载Java

有时候卸载Java时真的让人很烦,明明卸载了但重新安装Java时还报错,今天我就把我卸载Java的过程给大家分享一下。 1. 在控制面板中删除。(但我这么卸载之后java没有完全卸载)。 2.找到java的安装目录,直接将Java文件夹删…

【java基础】Java如何卸载

Java如何卸载 首先右键我的电脑,属性选择高级系统设置,找到环境变量,打开之后在系统变量里找到JAVA_HOME,点击JAVA_HOME复制变量值中的路径 在资源管理器中找到这个目录,将目录删除。 再次打开环境变量&#xff…

Java的安装与卸载方法

Java的安装与卸载方法(附图) JDK的卸载步骤 我的电脑–>属性–>高级系统设置–>环境变量 删除Java的安装目录–>删除JAVA_HOME 双击path,然后删除path下JAVA_HOME相关的 打开DOS输入java -version检查 JDK的安装步骤 百…

如何卸载干净JAVA

有很多小伙伴下载了JAVA的JDK(java开发工具包)并安装成功运行后,发现自己下错了版本。凉了,半天白搞了。卸载之后又发现在再安装出现安装不了的问题。这往往是因为JAVA并没有卸载完全。今天我们就看看如何完全卸载JAVA。 JAVA卸载有两种方式。手动和用J…