摘要 .................................................................... I ABSTRACT ............................................................... II 第一章 前言 ........................................................... 1 1.1 语音特性分析 ........................................................ 1 1.2 语音信号的基本特征 ................................................. 2 1.3语音信号处理的理论基础 .............................................. 4 第二章 盲分离的基本概念 ................................................ 6 2.1 盲分离的数学模型 .................................................... 6 2.2 盲源分离的基本方法 .................................................. 7 2.3 盲分离的目标准则 .................................................... 9 2.4 盲分离的研究领域 ................................................... 10 2.5 盲分离的研究内容 ................................................... 11 第三章 独立分量分析的基本算法 .......................................... 13 3.1 ICA的线性模型 .................................................... 13 3.2 ICA研究中的主要问题及限制条件 ..................................... 14 3.3 ICA的基本算法 ..................................................... 16 3.4 FASTICA算法原理 ................................................... 22 第四章 语音信号盲分离仿真及分析 ........................................ 26 4.1 ICA算法实现 ...................................................... 26 4.2 频谱分析 .......................................................... 29 第五章 总结 ............................................................ 34 参考文献 ............................................................... 35
摘要
盲源分离(BSS)是一种多维信号处理方法,它指在未知源信号以及混合模型也未知的情况下,仅从观测信号中恢复出源信号各个独立分量的过程。盲源分离已近成为现代信号处理领域研究的热点问题,在通信、语音处理、图像处理等领域具有非常重要的理论意义和广泛的应用价值。本文主要内容如下:
首先,介绍了语音信号的产生机理,特性,基本特征及语音信号处理的理论基础,为后文语音信号盲分离奠定了基础。
其次,从盲源分离的理论出发,研究了盲分离的数学模型以及基本方法,并对盲分离的目标准则、研究领域以及研究内容进行了探讨。
然后,引出了独立分量分析(ICA),并对其的概念以及相关的知识进行了研究,探讨了ICA研究中的主要问题,列出了ICA的3种基本算法:信息极大化、负熵最大化和最大似然估计法。
最后,用FastICA对三路语音信号进行了盲分离的仿真并求出了混合矩阵和分解矩阵,再接着进行了频谱,幅度,相位的分析,找出了FastICA的特点。
关键词:盲源分离;独立分量分析;频谱分析
I
Abstract
Blind source separation (BSS) is a multidimensional signal processing method, it refers to the unknown source signal and mixed model also unknown cases, only from observation signal in recovering the source signal each independent component of the process. Blind source separation has nearly become modern signal processing to the research of problems, in communication, speech processing, image processing area is very important theoretical significance and broad application value. This paper mainly content as follows:
First of all, introduced the speech signal generation mechanism, characteristics, basic characteristics and the speech signal processing theory foundation for the blind source separation after the speech signal to lay the foundation.
Second, the blind source separation from the theory, the mathematical model of the blind source separation and basic methods, and separation goal standards, research field and the research content are discussed.
Then, leads to a independent component analysis (ICA), and the concept and the related knowledge, this paper analyses the main problems in the study of ICA, lists the three basic ICA algorithm: information maximization, negative entropy maximization and maximum likelihood estimate.
Finally, by the use of FastICA three road voice signal the separation of the simulation and get the mixing matrix and decomposing matrix, and then the spectrum, amplitude, phase analysis, find out the FastICA characteristic.
Key words: the blind source separation; Independent component analysis; Spectrum analysis
II
III
第一章 语音信号概述
1.1 忙语音信号分离技术的背景及意义
近些年来,混合语音信号分离成为信号处理领域的一个研究热点。在信号处理中我们经常遇到这样的问题,如何从一组未知的随机信号经过一组混合系统得到的观测信号中恢复出这些原始信号,如果重构过程中没有混合系统和原始信号的先验知识,我们就城该过程为盲分离。其理论也不断运用到图像、通讯、医学等领域
1.1.1 语音产生机理
发声器官分为三部分:肺、喉(声门)和声道。肺的作用相当于一个动力源,将气流输送到喉部。喉将来自肺部的气流调制为周期脉冲或类似随机噪声的激励声源,并送入声道。喉在发声中的作用是控制声带的开启和闭合,使得气流形成一系列脉冲,声带振动的频率决定了声音频率的高低。由声带振动产生的音统称为浊音,而不由声带振动产生的音统称为清音。
声道包括口腔、鼻腔和咽腔,它们对声源的频谱进行整形而产生不同音色的声音。声道的谐振频率称为共振峰频率,它与声道的形状和大小有关,每种形状都有一套共振峰频率作为其特征,改变声道的形状就产生不同的语音,因而,当声道形状改变时,语音信号的频谱特性就随之改变。
声源经过声道润色频谱后,最后从嘴唇或鼻孔或同时从嘴唇和鼻孔辐射出来,形成可传播的声波,被人感知为语音。
综上所述,语音由空气流经过声门激励,经由声道调制,经过嘴辐射出去,完整的语音信号产生的数学模型可以用三个子模型:激励模型、声道模型和辐射模型的串连来表示。
1
图1.1 语音信号产生模型
1.1.2 语音的特性
(1)短时平稳性
根据对语音信号的研究,语音是一种时变的、非平稳的随机过程,但另一方面,由于人类发声系统的生理结构的变化速度是有一定限度的,在一段短时间内(10~30ms)人的声带和声道形状基本稳定,并且大部分情况下,激励源参数也是如此,因此可认为短时间内语音特征是不变的,语音的短时性特点是对语音信号进行分析和处理的基础。
(2)浊音和清音
语音分为浊音和清音两大类,二者从语音产生的机理上有明显的差异,前者由周期性脉冲产生,后者由随机噪声产生,因而在特征上也有明显的区别。浊音在时域上呈现出明显的周期性,在频域上具有共振峰结构而且能量大部分集中在较低频段内。清音则完全不同,它没有明显的时域和频域特征,类似于白噪声。
浊音在频谱上有共振峰结构,能量重要集中在低频区(<1000Hz),清音没有共振峰结构,能量小且主要集中在高频段(>1000Hz)。
1.2 语音信号的基本特征
(1)语音信号的时域特征
由于说话人在不同时刻的说话内容千变万化,而且没有确定的规律性,因此语音信号是时变的。但由于人类的发声器官的变化速率有限,声道在短时间内(5.500ms)处于
2
平稳状态,因此语音信号具有短时平稳性。而这种短时平稳性,也是语音处理中许多理论和算法的必要前提。由于人们在说话时,各个音节或单词之间总会存在着时间上的间隔,
因此语音信号在时域上存在着有音段和无音段。通过有音段和无音段的检测,可用去除带噪语音中平稳的噪声。此外,无音段所占比例越大,语音的稀疏性越好,利用这一特点,产生了许多基于语音稀疏性的增强算法。 (2)语音信号的频域特征
语音信号的频谱能量主要集中在300-3400Hz范围内。语音本身由浊音和清音组成,浊音含有语音信号的大部分能量,其频谱分布主要集中在低频段中的基音频率及其各次谐波上,呈现出明显的周期性;清音则表现出随机性,在频谱上类似于白噪声。 (3)语音信号的统计特征
语音信号可以看作是一个遍历性随机过程的样本函数,其统计特性可用其幅度的概率密度函数来描述。
对语音信号的统计特性的研究表明,其幅度分布的概率密度函数可以用两种近似的表达式来较好地描述,其中一种是伽马(Gamma)分布
p(x)kekx2xx (1-1)
式中k是一个常数,与标准差σx有下列关系 k32x
(1-2)
另一种是拉普拉斯分布(Laplacian)分布 p(x)0.5e
式中,α是一个由标准差σx决定的常数,即
x (1-3)
3
2x (1-4)
相对说来,伽马分布对语音信号的幅度分布描述更为精确一点,而拉普拉斯分布的函数形式则更加简洁。
1.3语音信号处理的理论基础
进行频谱分析时,在时域数据进行短时FFT处理之前都要进行加窗处理。 在FFT处理之后,普通频谱分析可以进行频域上的滤波处理,从而使频谱更加平滑。为了得到各种音频信号的特技效果,也需要对各种变声算法进行研究。
(1)窗的选择
一般来讲,一个好的窗函数的标准是:在时域因为是语音波形乘以窗函数,所以要减小时间窗两端的坡度,使窗口边缘两端不引起急剧变化而平滑过渡到零,这样可以使截出的语音波形缓慢降为零,减小语音帧的阶段效应;在频域要有较宽的3dB带宽以及较小的边带最大值。另外一方面,不同人的基音周期变化很大,主要集中在 70Hz~1000Hz。所以窗一般选择在10ms~20ms之间。此外,为了避免在加窗时加入多余的高频信号,应该使用平滑窗,例如汉明窗。
(2)变声算法的讨论
语声可以分为声带振动的浊音部分、声带不振动的清音部分以及静音部分。在这里,我们主要是改变原始话音的基音频率,以达到变声的目的。
第一种方法是不修改采样数据,仅改变Fs 。这种方法操作非常简便。 第二种方法是直接乘以一个余弦函数,把语音信号频段搬移到较高频段,以达到变声的目的。
第三种方法是插值以后重新抽样。基本过程是这样的:已知当前帧帧长FL(采样)
4
点,采样频率Fs ,目标变换帧频率Fs’,则目标变换帧帧长FL’=FL*Fs’/Fs 。记Rate = Fs’/Fs ,那么FL’=FL * Rate,其中Rate 为基频变化率。变换开始时,先求得FL 和FL’的最小公倍数AL,再将原音频帧插值为AL点,最后将插值后的语音段重新抽样,得到长FL’点的变声后的数据。
三种方法操作起来都还比较简单,但为了便于分析时域、频域特效,本设计选择了通信中常用的调制方法,即方案二。
(3)Matlab基础
MATLAB是Matrix Laboratory的缩写,由MathWorks公司于1984年正式推出,内核采用C语言编写。MATLAB是一个包括数值计算,高级图形和可视化的集成科技计算环境,也是一种高级程序设计语言。灵活的MATLAB语言可使工程师和科学家简练地表达他们的思想,其强有力的数值计算方法和图形便于测试和探索新的思想,而集成的计算环境便于产生快速的实时结果。MATLAB得到了各个领域专家学者的广泛关注,其强大的扩展功能为用户提供了强有力的支持; 它集数学计算、图形计算、语言设计和神经网络等30多个工具箱于一体,具有极高的编程效率,极大地方便了科学研究和工程应用。
语音处理中往往把数字化的语音信号表示为一维或二维(对应于双声道立体声数据)矩阵,因此基于矩阵运算的MATLAB就很自然地应用到语音处理领域。MATLAB提供了语音文件的读写函数以及录音和放音功能,如表1所示, 使用时只需按照函数的语法规则正确输入参数即可。通过这些函数可以得到语音的采样频率、量化精度和通道数等参数。同时,MATLAB提供了语音的和、 差等线性运算,以及卷积、 相关等非线性运算。对于语音处理中常用到的各种窗函数, MATLAB也都提供了相应的函数, 比如hamming(n)即长度为n点的汉明窗。MATLAB一个重要的特点是易扩展性。近几年来,有许多科学家、 数学家、 工程师等开发了一些新的、 有价值的应用程序, 这些应用程序都可以被纳入MATLAB工具箱。比如voicebox工具箱, 其中包含了很多与语音信号处理相关的函数, 可以在有关网站上下载, 将其加入到MATLAB的搜索路径, 就可以作为MATLAB的库函数来方便地调用了。
表1 与语音输入输出相关的函数
5
函数名 wavread auread wavwrite auwrite sound wavplay soundsc soundview wavrecord 功能描述 读语音文件 写语音文件 放音 归一化放音 可视化语音输出 录音 第二章 盲分离的基本概念
2.1 盲分离的数学模型
盲源分离原理可用如下图所示的数学模型来描述:
s(t) 混合系统A + x(t) 分离系统w y(t)
n(t) 图2.1 盲源分离原理图 BBS的数学模型如图2-1所示,其中sts1t,,snt是n维未知源信号向量,
TA为未知混合系统,xtx1t,,xmt是m维的观测信号矢量,它们均是源信号矢
T量的组合,并受到噪声矢量ntn1t,,nmt的干扰.
T盲源分离的目的就是在源信号s和混合系统A均未知的情况下,仅由观测数据向量x通过调整分离系统W,使得输出y是源信号s的估计,即:
6
yWxs (2-1)
2.2 盲源分离的基本方法
盲源分离包含了线性瞬时混合和卷积混合两种盲源分离问题。解决盲源分离问题的重要方法一独立分量分析(Independent ComponentAnalysis,ICA)通常以线性瞬时混合为模型,而盲解卷积则是一种更为实际的盲源分离问题,其混合模型是一种卷积混合,线性卷积混合模型比较接近实际,这是因为:(1)实际中每一个源信号不会同时到达所有的传感器,每一个传感器对不同的源延时不同,延时值的大小取决于传感器与源信号间的相对位置以及信号的传播速度;(2)源信号到达传感器是经过多途传播的,即多径效应。假设信号是线性组合的,则从传感器观测到的信号是源信号各种延时值的线性组合。解决此类问题的盲信号处理方法就是盲解卷积。特别地,ICA方法也可被用于盲解卷积或盲均衡。此外,盲信号处理还包括许多重要内容,例如非线性BSS或非线性ICA问题、盲多用户检测以及盲波束形成等等。
尽管有许多不同的盲源分离算法可用,但它们的原理却都可以归纳为以下四个方法如图2.2:
相互独立、非高斯、ICA非稳态、时变方差 时序结构、线性可预测
时频、谱和空间多样性 图2.2 盲源分离算法种类 (1)最普遍的方法就是使用代价函数来衡量信号独立性和非高斯性或者稀疏性。当
7
假信号具有统计独立性,且没有时间结构时,高阶统计量方法是求解盲源分离问题的基段(间接或直接的),这种方法对多于一个高斯分布的源信号不适用。
(2)如果源信号具有时序结构,则其有非零的时序相关数,从而可以降低对统计独立性的限制条件,用二阶统计量方法(SOS)就足以估计混合矩阵和源信号。这种(SOS)方法不允许分离功率谱形状相同或i.id(独立同分布)的源信号。
(3)第三种方法即采用非平稳性(Ns)和二阶统计量(SOS)。由于源信号主要随时间有不同的变化,就可以考虑利用二阶非平稳性。Matsuoka等人首先考虑了非平稳性,并证‘明在盲源分离中可以应用简单的解相关技术。与其他方法相比,基于非平稳性信息的方法能够分离具有相同功率谱形状的有色高斯源,然而,却不能够分离具有相同非平稳特性的源信号。
(4)第四种方法运用了信号的不同多样性,典型的是时域多样性、频域多样性(谱或时间相干性”)或者时频域多样性,更一般的,即联合空间一时间一频率(STF)多样性。
自从BSS和ICA的概念产生以来,人们几乎是不加区分地使用这两个概念。但是,如果深入研究BSS和ICA的基本原理和作用对象,两者之间的区别和联系是显而易见的。
Comon对ICA给出了较严格的定义:对于观测信号矢量,存在一个线性变换,使得观测信号在线性变换下各分量的统计独立性最大化。这一过程称之为ICA过程。
与此对应,可以给出BSS的如下定义:对于观测信号矢量,存在线性变换w,使得全局矩阵G的各行及各列中只有一个非零元素(不妨称之为广义对角矩阵),即G=PD。其中P为置换阵;D为对角阵,从而实现信号分离。
ICA的目的是通过线性变换使得观测信号的各个分量的统计独立性最大化。通常用输出信号的互信息、熵等作为统计独立性的量度,如基于信息论的Informax算法、Amari的自然梯度算法等。如果源信号之间具有统计独立性,那么可以通过ICA实现信号的分离。
BSS考察的是在什么条件下可以使全局矩阵实现广义对角化,而不去衡量输出信号的统计独立性是否达到最大化。因此BSS并不一定要求源信号是统计独立的。例如AMUSE、GED算法只要求源信号具有统计不相关性。如果源信号是统计独立的,
8
那么BSS的输出信号也一定是统计独立的,这时BSS和ICA等价。
从作用对象看,ICA除了可以用于多源信号的分离外,还可以用于其它多维数据的分析,例如图像的特征提取、经济数据分析等。而BSS不仅仅局限于瞬时混合信号的分离,还包括实际应用中更重要的卷积混合信号的分离。
可以说ICA是实现BSS的一种方法,而BSS是ICA的一个具体的应用。
2.3 盲分离的目标准则
根据源信号不同的特征,盲源分离的实现方法有很多,但它们的原理可以归纳为以下四种准则:
(1)独立分量分析(Independent Component Analysis,ICA):当假设源信号各分量间彼此统计独立,且没有时间结构时,在某一分离准则下通过对神经网络权值的反馈调整,使得变换后信号的不同分量之间的相依性最小,也即输出达到尽可能的独立。这种方法对多于一个高斯分布的源信号不适用(因为高斯信号的线性叠加仍是高斯信号),这是近年来盲源分离的主要解决方法。
(2)主分量分析(Principal Component Analysis,PCA)的方法:在尽可能保持原始变量更多信息的前提下,导出一组零均值随机变量相对少的不相关线性组合(主分量),并由此恢复出对源信号的估计。
(3)二阶非平稳性:即采用非平稳性和二阶统计量。由于源信号随时间有不同的变化,所以可以考虑利用二阶非平稳性,应用简单的解相关技术实现盲源分离。与其他方法相比,它能够分离具有相同功率谱形状的有色高斯源,然而却不能分离具有相同非平稳特性的源信号。
(4)运用信号的不同多样性,典型的是时域多样性、频域多样性或时频域多样性,更一般的,即联合空间-时间-频率多样性,如果源信号具有不同的时频域多样性,信号的时频域特征不完全重叠,那么可以通过屏蔽时频域的单个源信号或干扰信号,并从一个(或多个)传感器信号中提取源信号,然后再在时频域中合成,然而这些情况下,
9
通常需要一些源信号的先验知识,所以这种分离只能是一种半盲分离。
2.4 盲分离的研究领域
在BSS问题的研究和发展过程中,基于其不同的应用环境,进行了不同角度的扩展,形成了不同的研究领域,可以对BSS的研究领域做如下的分类:
依据信号混合方式不同,盲信号的混合方式有瞬态线性混合、卷积混合、非线性混合等方式,针对不同的混合方式需要采用不同的分离方法。在瞬态线性混合方式下,观测信号是原始信号在相同时刻的线性叠加,即不同信号到达各个传感器的时间差别可以忽略不计,此时混合矩阵是实矩阵,盲分离过程等价于寻找混合矩阵的逆矩阵过程。如果信道的传输延迟等对观测信号的影响较大,观测信号是原始信号在过去不同时刻的线性叠加,则属于卷积混合方式,此时的传递通道矩阵可以用有限长冲激响应滤波器模型来构造,盲解卷过程就需要利用相应的解卷滤波器实现。如果信号所处的环境是动态变化的且具有非线性特征,则需要利用非线性特征函数实现盲分离。
对信号的处理角度不同,BSS可在时域、频域或时频域进行研究。时域盲分离比较直观,但不能利用信号的频谱特征,在瞬态线性混合情况下应用较多;频域盲分离可以将时域上的卷积运算转化为频域上的直接乘积形式,从而可以利用时域盲分离算法解决盲解卷/盲均衡问题,但频域上的尺度与交互不确定性问题以及较大的计算量是阻碍信号进行频域盲分离的主要障碍。利用信号的时频特性进行盲分离,可以充分利用时域和频域分析的优点,其主要困难在于时频点的合理选择。
信号本身的属性有平稳信号与非平稳信号之分、窄带信号与宽带信号的差别。平稳信号的盲分离,常需要利用信号的高阶统计量信息;而对于非平稳信号,如语音信号,则利用信号的二阶时间相关属性实现盲分离;宽带信号通常要先分解为多个窄带信号,逐个进行盲分离。
根据源信号数目与观测信号数目的关系,可分为适定盲分离、超定盲分离、欠定盲分离。当前很多算法都是在适定条件下推导得到的,它是指源信号数目和观测信号数目相等的情况;当观测信号数目大于源信号数目时,称为超定盲分离,超定盲分离通常采用降低观测信号维数,进而进行适定条件下盲分离的方法;欠定盲分离,又称
10
超完备盲分离,是近年来的研究热点和重点,它是源信号数目大于观测信号数目的情况,这相当于信源在经过混合信道后,发生了有损压缩,因此采用传统的ICA通过对混合系统求伪逆的过程已无法恢复出源信号,这些丢失的信息只能通过一些先验、假设或限制条件(如:独立性、稀疏性等)进行弥补。
根据对算法的性能要求,盲分离可以分为离线批处理和自适应在线处理等方式。离线批处理方式可以利用信号的各阶统计量信息,通过特征值分解等运算获得盲信号的分离矩阵,其优点是可以充分利用观测信号的样本数据,能够获得较为精确的解,缺点是计算量大,分离时间长,且对信息的存储空间要求高;而自适应的在线处理方式是基于单次观测样本进行盲分离系统的更新迭代,计算量低,适用于实时性要求较高的场合,如在线故障诊断等。
2.5 盲分离的研究内容
盲源分离的基本框架是根据某种优化准则,先选出合适的目标函数,然后通过某种优化算法来搜索目标函数的极值点,其中优化准则保证了算法实现的可能性和实现途径;具体的目标函数决定了算法的统计性能,优化算法则决定了算法的搜索性能。因此BSS的研究内容涉及优化准则及目标函数的确定、信源概率密度函数(Probability density function,pdf)的估计、各种优化算法、算法的性能评价指标等多个方面。
(1).优化准则
独立分量分析(ICA)是目前解决BSS问题的主要方法,而ICA的目的在于确定一非线性变换使得输出各分量间尽可能的相互独立,因此一般采用输出各分量间的最大化独立性作为算法的优化准则。信号分量间的独立性程度可以采用非高斯性、高阶统计量、熵、互信息、概率密度函数(pdf)以及两种pdf距离的Kullback-Leibler散度等函数进行度量。
(2).信源概率密度函数的估计
目标函数最优解的迭代计算通常需要知道信源s的概率分布,这显然不切实际,所以需要对输出矢量的概率密度函数进行估计。常用的方法有采用级数展开的方法对概率密度函数进行逼近、或通过估计概率模型中未知参数的方法估计概率密度函数、
11
核函数法等方法,以及正在兴起的结合神经网络和机器学习理论的支持向量机(SVM)回归估计方法等,本文正是在这个理论的基础上对原有算法提出了新的改进,并取得而来良好的效果。
(3).优化算法及其性能分析
根据算法的迭代和搜索最优点的过程是基于单次观测样本还是全部样本,可以将算法分为在线自适应算法和离线批处理算法。评价算法性能的指标一般有收敛速度、分离精度、局部(全局)稳定性、算法的复杂性以及适用范围等,常用的具体函数有系统矩阵的串音误差、与对角阵的距离,范数误差等。
12
第三章 独立分量分析的基本算法
3.1 ICA的线性模型
S1 S2 Sn A X1 X2 X3 W Y1 Y2 Y3 图3.1 ICA的线性模型
如图3.1,设x1,x2,…xn为t为n维随机观测混合信号,由m个未知源信号(或称独立源)s1,s2,…sm线性组合而成,忽略时间下标t,并假设每个混合信号xi都是一个随机变量,而不是时间信号。每个观测值xi(t),为该随机变量的一次抽样。不失一般性,设混合的随机变量和独立源都具有零均值。下面用矩阵形式来定义ICA模型。令X=(x1,x2,…xn)T为n维随机向量,S=(s1,s2,…sm)T是m维未知源信号,则ICA的线性模型可表示为:
m XASaisi , i=1,2,…m (3-1)
i1式中,si称为独立分量,A=[a1,a2,…am]是一满秩的n*m矩阵,称为混合矩阵,ai是混合矩阵的基向量。由方程可知,各观测数据xi是由独立源si经过不同的aij线性加权得到的。独立源si是隐含变量,不能被直接测量;混合矩阵A也是未知矩阵,唯一可利用的信息只剩观测的随机矢量X。若没有任何限制条件,要仅由X估计出S和A,方程的解必为多解。而ICA正是在某些限制条件下,根据X的统计特性,给出方程唯一解,实现独立分量的提取。如上所述,ICA的一个重要基本假设就是对未知源信号独立性的要求。针对ICA具体模型,未知源信号间相互独立即要求:
m pspisi (3-2)
i113
在ICA模型中,除了要求源信号相互独立外,还必须满足非高斯分布的特性。此外为简化模型,假设未知混合矩阵A是方阵,即m=n。那么ICA的目的就是寻找一个变换矩阵,对X进行线性变换,得n维输出向量
YWXWAS (3-3) 当允许存在比例不定性和顺序不定性的前提下,Y成为对独立分量si的一个
ˆ. 估计YS以上,从盲源分离观点阐述了ICA的模型,下面给出从多维信号的线性描述观点论述的ICA模型。
设X=(x1,x2,…,xn)T为n维观测数据,ICA的目的即寻找一个坐标系统
1,2,,n,使得当X中各分量x1,x2,…,xn在该坐标系下投影时:
xis11s22snn , i=1,2,…,n (3-4) 投影系数s1,s2,…,sn相互独立。
若令Y=WX,在ICA实现算法中,系统目标是寻找一最优矩阵W使使出yi相互统计独立,即Y互信息为零。可以证明,此时W11,2,,n为ICA线性描述模型中的坐标系统。
3.2 ICA研究中的主要问题及限制条件
1) 对ICA问题的研究有许多方面,但归纳起来主要有以下九个方面: (1)关于源信号不同pdf,如高斯、次高斯pdf的特性描述。给出不同特性pdf随机变量的特征参数:矩(moment)、累积矩(cumulant)和峰起度(kurtosis)。研究解的等价性,去除二阶相关及去除高阶相关等问题。
(2)ICA的目标函数。
(3)ICA的学习算法。与其他神经网络学习算法相同,学习可取批处理方式(针
14
对平稳环境)或在线自适应方式(针对在线或平稳环境)。为了求得使目标函数达到极值的W,所用的算法一般为迭代算法,应尽量简单、收敛快。
(4)ICA算法的稳定性。稳定性是指ICA迭代计算中达到正确源信号分离的解可能是一个平衡点而不是稳定点。
(5)ICA算法实现的源信号分离精度,即相邻源信号的干扰问题。
(6)ICA中源信号pdf的确定。如果关于源信号pdf的先验知识很少甚至完全没有时,必须在学习过程中加以确定,否则将进行反复尝试,可能会浪费大量时间而且使分离效果不佳。
(7)ICA的各种模拟实验和具体应用研究。 (8)盲解卷/均衡和多道盲解卷/均衡问题。 (9)有噪声和M≠N的情况下,ICA的问题求解。
2) ICA的任务是根据观测记录X=AS,在矩阵A未知且对S除独立性外无其它先验知识的情况下,求解混合矩阵W,使得变换结果Y=WX中各分量尽可能相互独立,且逼近S。从数学角度说,该方程的解并不是唯一的,至少会存在以下一些问题:
(1)分离结果的幅度存在不确定性
由于在X=AS中,A和S均未知,如果将S中任一分量Si扩大a倍,只需将A中相应的混合系数乘以1/a,上式仍成立。在观测信号幅度不变的前提下,源信号的幅度存在不确定性。因此,在求解独立分量时,往往事先假设S具有单位方差Esi21,且各分量均值为零。
(2)分离结果的排列存在不确定性
由于A和S的未知,公式XASaisi中独立分量的顺序很容易调换。
i1m在X=AS中插入一个置换矩阵P和它的逆矩阵P-1,得到X=AP﹒P-1S,将AP-1看成新的混合矩阵,则PS中的各分量便成为新的已调换顺序的独立源si。这表明ICA分离结果存在排序上的不确定性。但是幅度和排序的不确定性不会对ICA算法的分离过程产生影响。
15
3.3 ICA的基本算法
ICA是在某一判据意义下进行的寻优算法,所以问题实际包含两个部分:首先是采用什么判据作为一组信号是否接近互相独立的准则(即目标函数);其次是用怎样的算法来达到这个目标(即优化算法)。
ICA算法=目标函数+优化算法
一般来说,不同的目标函数是由不同的估计准则得到得,然后通过恰当的优化方法来实现独立分量分析,也就是求出混合矩阵A和独立分量S,其中这些优化方法大多是基于梯度的方法。为了更清楚的描述实现独立分量分析的方法,假设由不同的估计准则得到的目标函数表示为F(W)且W的第n行表示为wn,则这个优化问题就是(以极大化为例,极小化是与其等价的):
maWxFW (3-5) stw1,n1,,N..n实际独立分量分析的算法主要就是利用最优化的思想和技术。主要包括信息极大化、非高斯性极大化、极大似然估计和互信息极小化等。
3.3.1 信息极大化
Nadal和Parga发现在低噪声的情况下,对神经网络的输入和输出信号之间的互信息化暗含了输出分布是可因式化的。即,非线性神经网络中的最大化信息变换可以将输出信号之间的互信息最小化。Roth、Baram、Bell以及Seinowski分别独立的导出了这种最大化方法的随机梯度学习规则,并将该规则分别运用到预测,时间序列分析和盲源分析中。Bell和Sqnowslki提出了一种简单的前馈神经网络算法,如下图所示:
16
能使用信息最大化法对相互独立的源信号S的线性混合信号X进行分离。他们指出将神经处理器输出信号的联合熵最大化可以将输出分量yi=g(ui)之间的互信息几乎降至最小,这里g(ui)是一个可逆的单调非线性函数,且U=WX。
神经网络输出信号的联合熵是
Hy1,y2,,yNHy1HyNIy1,,yN (3-6) 这里,H(y1)是输出信号的边缘熵,I(y1,…,yN)是输出信号之间的互信息。
将H(y1,…,yN)最大化等于将边缘熵的和H(y1)+…+H(yN)最大化并同时使I(y1,…,yN)降至最小。输出信号Y是振幅有界的随机变量,因此,当输出信号yi服从均匀分布时H(y1)+…+H(yN)最大。当I(y1,…,yN)=0时,联合熵等于边缘熵的和,即:
Hy1,y2,,yNHy1HyN (3-7) 当有界随机变量y1,,yN的互信息等于0,且他们的边缘分布为均匀分布时,Hy1,,yN可取得最大值。这时gui具有源信号si分布的累计密度函数形式。Bell和Sejnowski选择了一个非线性函数作为固定逻辑函数,等于假定所有的源信号都服从超高斯分布,通过调整权矩阵W使联合熵最大化,使联合熵取得最大值的权矩阵W就是我们所要求得的。
上式两端对W求导得:
HyDp1ypy (3-8) WWDp1ypy是多元均匀分布p1y与其估计值py之间的KL散度。其中,
当变换函数gui和权矩阵W取得最优值时,联合熵Hy取得最大值,且
pyp1y,Iy0。如果gui是从ui到yi的可逆映射,则因为KL散度在可逆变换的情况下是不变的,所以KL散度Dp1ypy等于源信号估计分布
pU与源信号分布pS之间的KL散度,即: Dp1ypy=DpSpU (3-9)
如果输出信号之间的互信息Iy1,,yN0,则在非线性变换之前的互信息
17
Iu1,,uN0,因为非线性变换不产生任何相关性。yi与ui有如下关系:
pyipuiguiui (3-10)
如果yi服从均匀分布,则有: puigui (3-11)
ui这表示ui是一个独立的随机变量,它的分布近似于一个非线性函数的导数。 Bell和Sejnowski用信息最大化法分离了几个音乐信号和语音信号的混合信号,不过如果源信号的概率密度函数与非线性函数的斜率不相等,联合熵取得最大值时,互信息Iy1,,yN0。在这样的情况下,信息最大化法不能将互信息最小化,不过这样的情况只有在非线性函数与真实源信号的累计密度函数很不相同时才会发生。
非线性函数gui是将互信息最小化的关键。pX与pY之间有如下关系: pYpX (3-12)
detJX则:HYElogpXElogdetJXElogpX 两边对W求导得:
NyiHY (3-13) logdetWlogWWWi1uiNyTlogdetWW。第二部分上式第一部分logiUXT. WWi1ui这里U是对数似然的梯度,
puNpUpu1 (3-14) U,,Uu1uNpUpu1puN1HYWTUXT 所以,通用学习规则即:
W18
TAmari等人提出了一个高效的学习规则使负熵最大化: WHYTWWIUUTW (3-15) W这里,WTW改变了梯度比例,简化了学习规则并大大的提高了收敛速度。
3.3.2 负熵最大化
另一种使ui之间的互信息最笑话的方法是负熵最大化法。由负熵定义可得,负熵的概率密度pU和高斯分布pGU之间的KL散度,且pU与pGU有相同的数学期望和协方差。即:
JuDpupGupulogpudu (3-16) pGu这里,U是由参数W给出的源信号的估计值UWX。输出的参数形式可因式化的。且只有当输出信号ui之间相互独立,才有pUpui,这时输出
i1N信号之间的互信息IU0,且假设ui之间取出了相关性,ui可因式化,但
JUJui。
i1N则有:
JuiDpuipGuii1i1NNpu1logpu1du1pGu1puNlogpuNduNpGuNpUlogpuiN
puGii1Ni1NdU (3-17)
pUlogpUlogpuii1pGUidUpUdUpGUpui1NpUdUpUlogNDpUpuiJUi1IUJU19
上式还可进一步展开成:
JuIUHUpUlogpUduiGi1N1NIUHXlogdetWlog2edetUUT2pXpY,UWXHUHXlogdetW,detJX (3-18)
.因为我们假设ui之间是去相关性的,所以它们的协方差矩阵相同,因而行列式等于1.
上式可进一步简化为:
12eN (3-19) JuIUHXlogi2i1N可以使用随机梯度搜索使负熵最大化:
W12eIUHXlogJuW2NNii1
IUW (3-20)
这实际上导出了与信息最大化相同的学习规则:
WN1NJupUlogpudUlog2eiiW2i1i1N1NlogdetWlog2eElogpuiW2i1N
WTpUTXUpU(3-21)
20
3.3.3 最大似然估计法
最大似然估计(MaxilIlum Likelihood Estimation,MLE)是将观测信号
ˆX;a找XXAS模式化。在低噪声情况下,我们使用参数化概率密度估计pˆX;a与观测分布p(x)之间的差别最小。这种差别可到参数向量a,使生成模式p以用KL散度来度量:
ˆX;apXlogDpXppXˆX;adX (3-22) dXHXpXlogpˆX;apˆX;a是pX的参数估计,这里,pX是观测信号X的概率密度函数,pˆX;a与pX相等时,DpXpˆX;a才等于0.信息最大化法与只有当估计pMLE从ICA的角度来看是相同的。简要推导如下:
对似然估计取对数并归一化得:
1NˆX;a (3-23) LalogpNi1这里,N是X样本的个数,根据大数定理,对数似然概率收敛于它的数学期望。
LaHXDXˆp;Xa (3-24) pˆX;a与pX的KL散度因为HX与W无关,所以最大化对数似然可将p最小化,即:
LaDpXpˆX;a (3-25)
WW因为A是可逆矩阵,且KL散度在可逆变换下是不变的,所以最小化式中的KL散度等价与最小化源估计信号pU与真实源信号pS之间的散度。
LaDpSpˆU (3-26)
WW
21
3.4 FastICA算法原理
独立分量分析(ICA)的过程如下图所示:在信源s(t)中各分量相互独立的假设下,由观察x(t)通过解混系统B把他们分离开来,使输出y(t)逼近s(t)。
图3.3 ICA的一般过程
ICA算法的研究可分为基于信息论准则的迭代估计方法和基于统计学的代数方法两大类,从原理上来说,它们都是利用了源信号的独立性和非高斯性。基于信息论的方法研究中,各国学者从最大熵、最小互信息、最大似然和负熵最大化等角度提出了一系列估计算法。如FastICA算法, Infomax算法,最大似然估计算法等。基于统计学的方法主要有二阶累积量、四阶累积量等高阶累积量方法。本次课设主要讨论FastICA算法。
3.4.1 数据的预处理
一般情况下,所获得的数据都具有相关性,所以通常都要求对数据进行初步的白化或球化处理,因为白化处理可去除各观测信号之间的相关性,从而简化了后续独立分量的提取过程,而且,通常情况下,数据进行白化处理与不对数据进行白化处理相比,算法的收敛性较好。
若一零均值的随机向量ZZ1,,ZM满足EZZTI,其中:I为单位矩阵,我
T们称这个向量为白化向量。白化的本质在于去相关,这同主分量分析的目标是一样的。在ICA
中,对于为零均值的独立源信号StS1t,...,SNtT,有:
且协方差矩阵是单位阵covSI,因此,源信号StESiSjESiESj0,当ij,
是白色的。对观测信号Xt,我们应该寻找一个线性变换,使Xt投影到新的子空间后变成白化向量,即:
ZtW0Xt (3-27)
22
其中,W0为白化矩阵,Z为白化向量。
利用主分量分析,我们通过计算样本向量得到一个变换
W01/2UT
其中U和分别代表协方差矩阵CX的特征向量矩阵和特征值矩阵。可以证明,线性变换 W0满足白化变换的要求。通过正交变换,可以保证UTUUUTI。因此,协方差矩阵:
EZZTE1/2UTXXTU1/21/2UTEXXTU1/21/21/2I(3-28)
再将XtASt式代入ZtW0Xt,且令W0AA,有
ZtW0AStASt (3-29)
~~由于线性变换A连接的是两个白色随机矢量Zt和St,可以得出A一定是一个正交
~~变换。如果把上式中的Zt看作新的观测信号,那么可以说,白化使原来的混合矩阵A简化成一个新的正交矩阵A。证明也是简单的:
EZZTEASSTATAESSTATAATI (3-30) 其实正交变换相当于对多维矢量所在的坐标系进行一个旋转。
在多维情况下,混合矩阵A是NN的,白化后新的混合矩阵A由于是正交矩阵,其
~~~~~~~~自由度降为NN1/2,所以说白化使得ICA问题的工作量几乎减少了一半。
白化这种常规的方法作为ICA的预处理可以有效地降低问题的复杂度,而且算法简单,
用传统的PCA就可完成。用PCA对观测信号进行白化的预处理使得原来所求的解混合矩阵退化成一个正交阵,减少了ICA的工作量。此外,PCA本身具有降维功能,当观测信号的个数大于源信号个数时,经过白化可以自动将观测信号数目降到与源信号维数相同。
3.4.2 FastICA算法
FastICA算法,又称固定点(Fixed-Point)算法,是由芬兰赫尔辛基大学Hyvärinen等人提出来的。是一种快速寻优迭代算法,与普通的神经网络算法不同的是这种算法采用了批处
23
理的方式,即在每一步迭代中有大量的样本数据参与运算。但是从分布式并行处理的观点看该算法仍可称之为是一种神经网络算法。FastICA算法有基于峭度、基于似然最大、基于负熵最大等形式,这里,我们介绍基于负熵最大的FastICA算法。它以负熵最大作为一个搜寻方向,可以实现顺序地提取独立源,充分体现了投影追踪(Projection Pursuit)这种传统线性变换的思想。此外,该算法采用了定点迭代的优化算法,使得收敛更加快速、稳健。
因为FastICA算法以负熵最大作为一个搜寻方向,因此先讨论一下负熵判决准则。由信息论理论可知:在所有等方差的随机变量中,高斯变量的熵最大,因而我们可以利用熵来度量非高斯性,常用熵的修正形式,即负熵。根据中心极限定理,若一随机变量X由许多相互独立的随机变量Sii1,2,3,...N之和组成,只要Si具有有限的均值和方差,则不论其为何种分布,随机变量X较Si更接近高斯分布。换言之,Si较X的非高斯性更强。因此,在分离过程中,可通过对分离结果的非高斯性度量来表示分离结果间的相互独立性,当非高斯性度量达到最大时,则表明已完成对各独立分量的分离。
负熵的定义:
NgYHYGaussHY (3-31) 式中,YGauss是一与Y具有相同方差的高斯随机变量,H为随机变量的微分熵 HYpYlgpYd
(3-32)
根据信息理论,在具有相同方差的随机变量中,高斯分布的随机变量具有最大的微分熵。当Y具有高斯分布时,NgY0;Y的非高斯性越强,其微分熵越小,NgY值越大,所以NgY可以作为随机变量Y非高斯性的测度。由于根据式(3.6)计算微分熵需要知道Y的概率密度分布函数,这显然不切实际,于是采用如下近似公式: NgYEgYEgYGauss(3-33)
2
为均值运算;g为非线性函数,可取g1ytanh(a1y),或其中,E1a12,这里,通常我们取a11。 g2yyexpy2/2或g3yy3等非线性函数,
快速ICA学习规则是找一个方向以便WXYWX具有最大的非高斯性。这里,
24
TT非高斯性用式(3.7)给出的负熵Ng(WX)的近似值来度量,WTX的方差约束为1,对于白化数据而言,这等于约束W的范数为1。FastICA算法的推导如下。首先,WTX的负熵的最大近似值能通过对EGWTXT进行优化来获得。根据Kuhn-Tucker条件,在
EWTXW221的约束下,EGWTX的最优值能在满足下式的点上获得。
EXgWTXW0 (3-34)
这里,是一个恒定值,
EW0TXgW0TX,W0是优化后的W值。下面我们利用牛
顿迭代法解方程(3.8)。用F表示式(3.8)左边的函数,可得F的雅可比矩阵JFW如下: JFWEXXTg'WTXI (3-35)
为了简化矩阵的求逆,可以近似为(3.9)式的第一项。由于数据被球化,EXXTI,所以,EXXTg'WTXEXXEg'WXEg'WXI。因而雅可比矩阵变成了
TTT对角阵,并且能比较容易地求逆。因而可以得到下面的近似牛顿迭代公式:
WWEXgWTXW/Eg'WTXWW/W (3-36)
这里,W是W的新值,EWXgWX,规格化能提高解的稳定性。简化后就可以得到FastICA算法的迭代公式:
TTWEXgWTXEg'WTXWWW/W (3-37)
实践中,FastICA算法中用的期望必须用它们的估计值代替。当然最好的估计是相应的样本平均。理想情况下,所有的有效数据都应该参与计算,但这会降低计算速度。所以通常用一部分样本的平均来估计,样本数目的多少对最后估计的精确度有很大影响。迭代中的样本点应该分别选取,假如收敛不理想的话,可以增加样本的数量。
25
第四章 语音信号盲分离仿真及分析
4.1 ICA算法实现
下面仿真中所使用的语音源信号是在干扰噪声很小的环境下用麦克风录制的3段不同的语音文件,保存成*.wav文件dragon.wav, man.wav, music.wav,四个男声采样率均为25600Hz,持续时间为10s。
图4.1是这3个语音源信号的时域波形,图中的横坐标表示样本点数,纵坐标表不语音信号的幅度水平。
原始的语音信号如下:
26
图4.1 原始语音信号
该仿真的混合矩阵是由随机函数rand产生的,即该矩阵为一个4x3的方阵, 参数见下图:
图4.2 混合矩阵
混合后的语音信号:
27
图4.3 混合信号
采用混合信号进行训练学习,求出分离矩阵:
图4.4 分离矩阵
FastICA算法分别求出三路分离信号,信号如图4.5:
28
图4.5 分离信号
从试验结果,我们可以看出分离语音信号从波形上看很好地保持了原始信号 的波形,而且实际分离的语音信号在听觉上也很好的实现了分离,而且几乎没有什么失真效果。但是三幅图像的顺序产生了变化:原始输入信号1对应分离信号3,原始输入信号2对应分离信号1,原始输入信号3仍然对应分离信号2。
4.2 频谱分析
本仿真针对原始输入信号,混合信号,分离信号分别进行了频谱分析。图像主要显示了福祉,相位,频谱等信息。
原始三路输入信号频谱图如图4.6---4.8所示:
29
图4.6 输入信号1频谱图
图4.7 输入信号7频谱图
图4.8 输入信号3频谱图
30
混合信号频谱图如图4.9---4.11所示:
图4.9混合信号1频谱图
图4.10 混合信号2频谱图
图4.11 混合信号3频谱图
31
分离信号频谱图如图4.12---4.14所示:
图4.12分离信号1频谱图
图4.13 分离信号2频谱图
图4.14 分离信号3频谱图
仅对各图像进行频谱分析得:
32
图4.15 综合频谱分析
由上图可知:在用FastICA实现语音信号的盲分离过程中,原始输入信号和分离信号形状相同,但是幅度和相位产生了一些变化。对频谱观察可知,频谱形状也未变化,只是幅度相应提高。说明FastICA仅改变信号幅度和相位,并不改变频率分量。
33
第五章 总结
盲源分离技术是近二十年发展起来的一门新型科学,在各国科学家和研究人员的努力下获得了长足的发展,但是它毕竟是一个涉及面广并且仍处在发展前沿的课题,在理论上还远没有成熟,许多问题有待进一步研究和解决。 (1)非线性混合信号的盲源分离算法。
现有的算法研究大部分集中线性领域,仅有的对非线性混合的研究也只是基于在特殊情况下的假设之上。因此,对更一般的非线性混合信号的盲分离需作进一步的研究。
(2)非平稳混合信号的盲源分离算法。
许多情况下源信号可能是非平稳的,如何利用信号的非平稳特性进行盲源分离是摆在广大研究人员面前的一个现实问题。 (3)卷积混合信号的盲源分离算法。
在实际中,系统接收到的混合输入信号是源信号经过不同的传播途径到达接收器.在这个过程中,不可避免的存在信号的时延和反射。针对这种情况的盲源分离算法还很不成熟。
本次课程设计所涉及到的主要知识是数字信号处理、MATLAB方面的。我将把本次毕业设计的心得和体会简述如下:
(1)系统思维。必须有系统的设计思维,把每一个细节都放到整个系统中考虑,考虑整个系统设计的可行性、完整性、稳定性和功能的实现,这样才不会局限在细节上,才能快速的完成性能优越的软件设计。
(2) 把握细节。系统也是由细节构成的,在把握整个系统思维的基础上把握每一个细节,因为每一个细节都有可能决定整个系统的性能。在写代码时,把每一个变量与过程考虑清楚才可能完成整个程序。
(3) 勇于尝试。系统即使经过了非常严格的论证也仍然可能存在问题,或许面对问题一时没有很好的解决方案,但是有一个或许可行的大胆的想法,不要犹豫,试一试吧。勇于尝试往往能够找到更好的解决方法。
34
(4) 保持自信。无论遇到什么困难,我都相信自己一定能够找到解决的方法,有的时候只要稍微再用一点力、使一点劲,结果就会不一样。
参考文献
[1] 胥永刚,张发启,何正嘉.独立分量分析及其在故障诊断中的应用[J] 2004(03) [2] 陈华富,尧德中.独立成分分析及其应用的研究进展[J] 2003 (02)
[3] 杨世锡,焦卫东,吴昭同.基于独立分量分析特征提取的复合神经网络故障诊断法[J]. 2004 (04)
[4] 谭北海,杨祖元.欠定盲分离中源的个数估计和分离算法[J]. 2009 (03)
[5] 申永军,杨绍普,孔德顺.基于奇异值分解的欠定盲信号分离新方法及应用[J] 2009 (08) [6] 张赟,李本威,王永华.基于位势函数的欠定盲源分离识别诊断方法[J]. 2010 (01) [7] 彭煊 基于独立分量分析的语音增强[期刊论文] 2002(05)
[8] 张智林.皮亦鸣 基于独立分量分析的降噪技术[期刊论文] 2005(03) [9] 周成.刘钊 基于独立分量分析的单通道语音降噪算法研究2005(05) [10] 马建芬 盲源分离在单通道语音增强算法中的应用[期刊论文] 2006(11) [11] 徐静波 子带频谱分析的语音增强[期刊论文] 2006(03)
[12] 钟静.傅彦 基于快速ICA的混合语音信号分离[期刊论文] 2005(05) [13] 徐岩 基于谱相减改进算法的语音增强研究[期刊论文] 2004(01) [14] 杨福生.洪波 独立分量分析的原理与应用 2006
[15] 洪欧 麦克风阵列语音增强技术及其应用[期刊论文] 2006
35
附录
%%%%%%%%%%%%%%%%初始化%%%%%%%%%%%%% clc;clear all;close all;
%%%%% 读入原始图像,混合,并输出混合图像 %%%%% fs=25600; %语音信号采样频率为25600 f=fs*(0:2047)/4096;
% 读入混合前的原始图片并显示 I1=wavread ('man.wav')'; I2=wavread ('dragen.wav')'; I3=wavread ('music.wav')';
subplot(6,3,1);plot(I1);title('输入声音1'); subplot(6,3,4);a=I1;
y1=fft(a, 4096); %对信号做4096点FFT变换 plot(f,abs(y1(1:2048))); title('原始语音信号1频谱'); axis([0 1500 0 100]);
subplot(6,3,2);plot(I2);title('输入声音2'); subplot(6,3,5);b=I2;
y1=fft(b, 4096); %对信号做4096点FFT变换 plot(f,abs(y1(1:2048))); title('原始语音信号2频谱'); axis([0 1500 0 100]);
subplot(6,3,3);plot(I3);title('输入声音3'); subplot(6,3,6);c=I3;
y1=fft(c, 4096); %对信号做4096点FFT变换 plot(f,abs(y1(1:2048))); title('原始语音信号3频谱'); axis([0 1500 0 100])
36
% 将其组成矩阵
S=[I1;I2;I3]; % 因此S_all是一个变量个数*采样个数的矩阵 Sweight=rand(size(S,1)); % 取一随机矩阵,作为信号混合的权矩阵 MixedS=Sweight*S; % 得到三个声音的混合信号矩阵
% 将混合矩阵重新排列并输出
subplot(6,3,7),plot(MixedS(1,:)),title('混合声音1'), subplot(6,3,10);d=MixedS(1,:);
y1=fft(d, 4096); %对信号做4096点FFT变换 plot(f,abs(y1(1:2048))); title('混合语音信号1频谱'); axis([0 1500 0 100]);
subplot(6,3,8),plot(MixedS(2,:)),title('混合声音2'), subplot(6,3,11);e=MixedS(2,:);
y1=fft(e, 4096); %对信号做4096点FFT变换 plot(f,abs(y1(1:2048))); title('混合语音信号2频谱'); axis([0 1500 0 100]);
subplot(6,3,9),plot(MixedS(3,:)),title('混合声音3'), subplot(6,3,12);f1=MixedS(3,:);
y1=fft(f1, 4096); %对信号做4096点FFT变换 plot(f,abs(y1(1:2048))); title('混合语音信号3频谱'); axis([0 1500 0 100]);
MixedS_bak=MixedS; % 将混合后的数据备份,以便在恢复时直接调用 %%%%%%%%%%%%%%%% 标准化 %%%%%%%%%%%%% MixedS_mean=zeros(3,1);
37
for i=1:3
MixedS_mean(i)=mean(MixedS(i,:));
end % 计算MixedS的均值 for i=1:3
for j=1:size(MixedS,2)
MixedS(i,j)=MixedS(i,j)-MixedS_mean(i); end end
%%%%%%%%% 白化 %%%%%%%%
MixedS_cov=cov(MixedS'); % cov为求协方差的函数
[E,D]=eig(MixedS_cov); % 对矩阵的协方差函数进行特征值分解 Q=inv(sqrt(D))*(E)'; % Q为白化矩阵
MixedS_white=Q*MixedS; % MixedS_white为白化后的矩阵 IsI=cov(MixedS_white'); % IsI应为单位阵
%%%%%% FASTICA算法 %%%%%%%
X=MixedS_white; % 以下算法将对X进行操作 [VariableNum,SampleNum]=size(X);
numofIC=VariableNum; % 在此应用中,独立元个数等于变量个数 B=zeros(numofIC,VariableNum);% 初始化列向量w的寄存矩阵,B=[b1 ...] for r=1:numofIC
i=1;maxIterationsNum=100; % 设置最大迭代次数 IterationsNum=0;
b=rand(numofIC,1)-.5; % 随机设置b初值
b=b/norm(b); % 对b标准化 norm(b):向量元素平方和开根号 while i<=maxIterationsNum+1
38
if i == maxIterationsNum % 循环结束处理
fprintf('\\n第%d分量在%d次迭代内并不收敛。', r,maxIterationsNum); break; end
bOld=b; a2=1; u=1; t=X'*b;
g=t.*exp(-a2*t.^2/2);
dg=(1-a2*t.^2).*exp(-a2*t.^2/2);
b=((1-u)*t'*g*b+u*X*g)/SampleNum-mean(dg)*b;
% 核心公式,参见理论部分公式2.52 b=b-B*B'*b; % 对b正交化 b=b/norm(b);
if abs(abs(b'*bOld)-1)<1e-9 % 如果收敛,则 B(:,r)=b; % 保存所得向量b break; end
i=i+1; end
% B(:,r)=b; % 保存所得向量b end
%%%%%%%%% ICA计算的数据复原并构图 %%%%%%%% ICAedS=B'*Q*MixedS_bak; % 计算ICA后的矩阵
% 将混合矩阵重新排列并输出
subplot(6,3,13),plot(ICAedS(1,:)),title('ICA解混声音1'), subplot(6,3,16);g=ICAedS(1,:);
39
y1=fft(g,4096); %对信号做2048点FFT变换 plot(f,abs(y1(1:2048))); title('分解语音信号1频谱'); axis([0 1500 0 100]);
subplot(6,3,14),plot(ICAedS(2,:)),title('ICA解混声音2'), subplot(6,3,17);h=ICAedS(2,:);
y1=fft(h,4096); %对信号做2048点FFT变换 plot(f,abs(y1(1:2048))); title('分解语音信号2频谱'); axis([0 1500 0 100]);
subplot(6,3,15),plot(ICAedS(3,:)),title('ICA解混声音3'), subplot(6,3,18);i=ICAedS(3,:);
y1=fft(i,4096); %对信号做2048点FFT变换 plot(f,abs(y1(1:2048))); title('分解语音信号3频谱'); axis([0 1500 0 100]);
40
因篇幅问题不能全部显示,请点此查看更多更全内容