学生: 专业班级: 通信1103
指导教师: 许建霞 工作单位: 信息学院 题 目: 语音信号的盲分离 初始条件:Matlab软件、PC机
要求完成的主要任务: (包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)
设计任务
根据盲信号分离原理,用matlab采集两路以上的语音信号,选择合适的混合矩阵生成若干混合信号。选取合适的盲信号分离算法(如独立成分分析ICA等)进行训练学习,求出分离矩阵和分离后的语音信号。 设计要求
(1) 用matlab做出采样之后语音信号的时域和频域波形图
(2) 选择合适的混合矩阵,得到混合信号,并做出其时域波形和频谱图
(3) 采用混合声音信号进行训练学习,求出分离矩阵,编写出相应的确matlab代码。
(4) 用求出的分离矩阵从混合信号中分离出原语音信号,并画出各分离信号的时域波形和频谱图。 (5) 对结果进行对比分析。
时间安排:
序号 1 2 设 计 容 根据课题的技术指标,确定整体方案,并进行参数设计计算 根据实验条件进行全部或部分程序的编写与调试,并完成基本功能 所 用 时 间 2天 7天 3 总结编写课程设计报告 合 计 1天 2周 指导教师签名: 2014年 6 月 10 日 系主任(或责任教师)签名: 2014 年 6 月 10 日
摘 要
盲信号处理(Blind Signal Processing,BSP)是指从观测到的混合信号中,在没有任何先验条件的情况下,恢复出未知的源信号过程。盲信号分离已成为信号处理学界和通信工程学界共同感兴趣的一个极富挑战性的研究热点问题,并获得了迅速的发展。 盲分离根据信号源的不同可以分为确定信号盲分离、语音信号盲分离和图像盲分离等,本设计主要讨论语音信号的盲分离。
语音信号的盲分离主要是利用盲源分离(Blind Signal Separation,BSS)技术对麦克风检测到的一段语音信号进行处理,本文重点研究了以语音信号为背景的盲处理方法,在语音和听觉信号处理领域中,如何从混有噪声的的混叠语音信号中分离出各个语音源信号,来模仿人类的语音分离能力,成为一个重要的研究问题。根据盲信号分离原理,本设计用matlab采集3路语音信号,选择合适的混合矩阵生成若干混合信号。
具体实现主要结合独立分量分析ICA技术,选取混合矩阵对3个语音信号进行混合,并从混合信号中分离出原语音信号,最后画出各分离信号的时域波形和频谱图和原来的信号进行比较。此外还运用PCA算法进行了混合语音信号的分离实现,最终对两种算法进行比较。
关键字:盲信号处理;语音信号;盲源分离BSS;独立分量分析ICA技术
Abstract
Blind Signal Processing (Blind Signal Processing, BSP) from the observed mixed-signal, to recover the unknown source signal process without any prior conditions. Blind signal separation has become a signal processing academia and communication engineering communities of common interest a challenging research focus and rapid development.
Blind source separation based on the signal source can be divided to determine the blind signal separation, blind separation of speech signals and Blind Image Separation, the design focuses on the blind separation of speech signal.
Blind separation of speech signal using blind source separation (Blind the Signal Separation, BSS) detected by the microphone a voice signal processing, the paper focuses on the blind approach to speech signal as the background in voice and acoustic signal processing in the field, how isolated from a mixture of noise aliasing voice signal voice source signal to mimic the human voice separation ability, become an important research question. Blind signal separation principle, the design collection of three-way voice signal using matlab, select the appropriate mixing matrix to generate a number of mixed-signal.
Concrete realization of the combination of independent component analysis ICA technology, select the mixing matrix of three speech signals mixed and separated from the mixed signal to the original speech signal, and finally draw the separation of signals in time domain waveform and frequency spectrum and the original signal . In addition, use of the PCA algorithm for the separation of mixed speech signals to achieve the final two algorithms.
Keywords: blind signal processing;speech signal ; blind source separation BSS independent ; component analysis ICA technology
目录
摘要 ..................................................................................................................................................................................... Ⅰ Abstract ............................................................................................................................................................................. Ⅱ 摘 要 ...................................................................................................................................................................... II Abstract ............................................................................................................................................................... III 1盲信号处理BSP ............................................................................................................................................... 3
1.1盲信号处理简介 .................................................................................................................................... 3
1.1.1盲信号处理方法 ........................................................................................................................ 4 1.1.2盲分离的数学模型 .................................................................................................................... 5 1.2盲源分离的发展 .................................................................................................................................... 7 1.3盲源分离的应用 .................................................................................................................................... 7
1.3.1 语音处理领域 ........................................................................................................................... 8 1.3.2 图像处理领域 ........................................................................................................................... 8 1.3.3 生物医信号处理学领域 ........................................................................................................... 9
2 Matlab语音信号的采集 .............................................................................................................................. 11
2.1语音信号的采集方法 .......................................................................................................................... 11 2.2三路语音信号的采集 .......................................................................................................................... 12 2.3三路原始语音信号的分析 ................................................................................................................. 12
2.3.1语音信号时域波形 .................................................................................................................. 12 2.3.2语音信号FFT频谱 ................................................................................................................. 13
3盲信号分离的两种算法介绍 ......................................................................................................................... 16
3.1 独立分量分析ICA ............................................................................................................................. 16
3.1.1 Fast-ICA算法简介 ................................................................................................................. 17 3.1.2 基于负熵最大的快速ICA ..................................................................................................... 17 3.2 主分量分析PCA ................................................................................................................................ 21
3.2.1 主成分分析原理 ................................................................................................................... 21 3.2.2 PCA算法原理 ......................................................................................................................... 22 3.3 主分量分析PCA和ICA ................................................................................................................... 23 4语音信号的盲分离实现 ................................................................................................................................. 24
4.1 语音信号的混合 ................................................................................................................................. 24 4.2 语音信号的分离实现 ......................................................................................................................... 25
4.2.1 FAST-ICA算法分离 ............................................................................................................ 25 4.2.2 主分量分析算法分离 .......................................................................................................... 27 4.2.3 分离语音频谱分析 .............................................................................................................. 28 4.2.4 FAST-ICA和PCA分离比较 ............................................................................................. 30
5总结 ................................................................................................................................................................... 31 参考文献 .............................................................................................................................................................. 32 附录1 原始语音的时频matlab程序 ........................................................................................................... 33 附录2 预处理部分matlab程序 ................................................................................................................... 34 附录3 算法的matlab程序 ............................................................................................................................ 37 附录4 录音的matlab程序 ............................................................................................................................ 42
1盲信号处理BSP
盲信号处理作为计算机智能学的核心研究的容,是20世纪最后的10年迅速发展起来的一个新的研究领域,没事人工神经网络、统计信号处理、信息理论结合的产物,已经成为一些领域研究与发展的重要课题,特别是在生物医学、医疗图像、图像增强、远程传感、雷达与通信系统、地震勘测等方面均具有突出的作用。
1.1盲信号处理简介
在现实生活中及自然界中存在大量的信息,人们通过传感器检测获取含有信息的数据或信号,并处理这些数据来获取相应的信息,这信息进一步加红来获得知识和改造自然的能力。然而,传感器检测往往是多个成分(包括噪声、无用的信号)混合在一起的信号,而且是未知的,又由于信号传输信道的特性复杂未知,给信号处理带来了很大的困难。
虽然各种信号处理的方法,如滤波器、时频分析、小波理论神经网络信号处理等,二盲信号处理 (Blind Signal Processing, BSP)与传统的信号处理方完全不同,它是对源信号和传输通道几乎没有可利用的信息的情况下,仅从观测的混合信号中提取或恢复出源信号的一种处理方法。
盲处理的工作原理框图如图1-1所示: 源向量 S(k) 混合矩阵 H 观测向量噪声向量n(k) 分离系统 W 输出向量
y(k) x(k) 图1-1 盲处理的工作原理框图
其中,S(k)是未知源的信号向量,x(k)是混合信号向量(或观测信号、传感器检测信号),n(k)是噪声信号向量,混合信号向量经过分离系统可以得到分离的信号,可与原信号比较。
在图1-1中,源信号的个数、有用源信号的分量和无用信号的分量、源信号的特性、源信号的传输混合通道特性、噪声特性都是未知的,观测信号x(k)是传感器检测信号,被认为是已知量,x(k)中含有未知源信号和未知混合系统的特性。处理具有盲信号特性的信号x(k),以估计出盲信号或辨识相互混合系统特性就是盲信号要处理的任务。
有上述的简述可知,盲信号处理的实质及主要的任务就是对于未知的混合系统在其输入信号完全未知或者仅有少量的先验知识情况下,仅有系统的输出信号(即混合信号)来重构输入信号。
顺便指出,盲处理前的信号预处理常常很重要,这些预处理包括去均值、幅值归一化或单位化、限制带宽、信号分解、白化解相关及主分量提取等。另外,盲分离的算法的计算量通常很大,常常限制了实时实现,提高算法效率和高速的硬件是有效的技术途径。
1.1.1盲信号处理方法
盲号理中,就源信号经过传输通道的混合方式而言,其处理的方法可以分为线性瞬时混合信号的盲处理、线性卷积混合信号的盲处理和非线性混合信号盲处理三类;根据通道的传输特性中是否含有噪声、噪声特性、噪声混合形式、可以分为有噪声、无噪声,盲处理,含加性噪声和乘性噪声和乘性噪声混合信号盲处理等。目前,盲信号的分离算法大部分集中在针对加性白噪声或有色高斯噪声等,含噪声的盲处理算法通常称为文件算法。
盲处理的目的可以分为盲辨识和盲源分离两大类。盲辨识的目的就是求得传输混合矩阵。盲源分离的目的是求得源信号的最佳估计。当盲源分离各分量相互独立时,就成为独立分量分析,即独立分量分析是盲源分离的一种特殊情况。当盲源分离是逐个分离并紧缩实现时称为盲抽取。
盲处理的方法大部分是依据一定的理论构造目标函数的无监督学习方法。盲处理采用的目标函数主要是负熵、高斯累积量、互信息量、最大似然估计等。确定了目标之后就要用一定的算法寻优处理,实现算法的主要是各种自适应的优化算法。
下面简介盲辨识(BI)、盲源分离、独立分量分析(ICA)的概念。 盲辨识:盲辨识是针对输入信号传输通道混合特性辨识问题提出的。
盲辨识是针对输入信号传输通道混合特性辨识问题提出的。在传统的系统辨识方法中,需同时已知系统的输入信号和输出信号,再利用经典的辨识算法就可以精确的估算出系统的特性参数,从而完成系统的辨识任务。而对于盲辨识而言,系统的输入信号是未知的,仅仅已知系统的输出,要由输出信号确定传输通道的模型结构及特性参数,从而完成系统的辨识任务。
盲源分离:盲源分离是针对从检测的混合信号中估计后恢复源信号的问题提出的。盲源分离(BSS)是指源信号、传输通道特性未知的情况系,仅有观测信号和源信号的一些先验知识估计出先好的各个分量的过程。一个典型的例子就是“鸡尾酒会”问题,仅根据多个麦克风检测信号的分离恢复出某语音信号的源信号。
1.1.2盲分离的数学模型
盲分离的早期研究始于二十世纪八十年代中后期,短短的十几年里,有关盲分离理论和算法研究得到了较快的发展,包括盲分离问题本身的可解性以及求解原理等方面的基本理论问题已经在一定的程度上部分得到了解决,并提出了一些在分离能力、存需求、计算量等方面性能各异的盲分离算法。
一般认为,对盲分离问题的最早研究是由法国HeraultJutten于1985年左右开始的,1991年发表论文[1],现在通常称他们的方法为H-J算法,H-J算法中提出了一种针对两个源信号和两个混叠信号的递归连接人工神经网络,利用梯度下降算法调整网络权值对网络输出信号的残差最小化实现盲分离。
Herault和Jutten之后,不少学者对H-J算法的收敛性进行了系统的研究,在只存在两个源信号和两个混叠信号的最简单情况下,收敛性问题得到了完满的解决。此后盲分离问引起了神经网络领域和信号处理领域的广泛研究兴趣,盛况空前。瞬时线性混叠盲分离相对而然最为简单目前为止,研究成果也最为丰富。瞬时线性混叠数学模型如下:
x(t)As(t) (1-1)
y(t)Wx(t) (1-2)
其中(1)式为混叠模型,(2)式为分离模型;s(t)(s1(t),s2(t),...,sn(t))T为源信号,AW为未知的mn的混叠矩阵,源信号s(t)也是未知的,W为分离矩阵。瞬时线性混叠盲分离的目的就是通过调节分离矩阵W(或混叠矩阵A),使得分离信号与对应的源信号的波形保持一致,即:
y(t)PDs(t) (1-3) 其中P为置换矩阵,D为对角矩阵。y(t)是对源信号s(t)的估计,瞬时线性混叠盲分离问题允许存在两个方面的不确定性:
(1)排列顺序的不确定性,无法了解所抽取的信号应是源信号s(t)为哪一个分量。 (2)信号幅度的不确定性,即无法知道源信号的真实幅值。
由于信号的信息很大一部分隐含在波形中,所以很多时候这两种不确定性并不影响盲分离技术的应用。瞬时线性盲分离实现的数学模型如图1-2所示,其中LA表示学习算法(LearningAlgorithm)。
S(t)
混合矩阵 A x(t) 分离矩阵 W y(t)LA 图1-2 瞬时线性盲分离实现的数学模型图
对于这样一个模型,如果没有关于A和源信号的任何先验信息,仅从观测的信号x(t)恢复出s(t)时,一般对模型做如下的假设:
(1)信号源的各个分量之间相互统计独立; (2)至少有一个独立源满足高斯分布; (3)没有噪声或者噪声能量很小。
上述的假设是实现盲信号分离即盲分离的独立分量分析方法的先决条件。盲分离的核心问题是求解分离矩阵,其基本思想是抽取统计独立的特征作为输入的表示,而又不丢失任何信息。 一般情况下借助独立分量分析求解信号盲分离,两者等价。
1.2盲源分离的发展
1986年4月,法国学者Jeanny Herault和Christian Jutten提出了递归神经网络
模型和基于Hebb学习律的学习算法,以实现2个独立源信号混合的分离。这一开创性的论文在信号处理领域中揭开了新的一章,即盲源分离问题的研究。
在盲信号分离问题研究中,学者们提出了很多的算法,每种算法都在一定程度上取得了成功。从算法的角度而言,BSS算法可分为批处理算法和自适应算法;从代数函数和准则而言,又分为基于神经网络的方法、基于高阶统计量的方法、基于互信息量的方法、基于非线性函数的方法等。
尽管国对盲信号分离问题的研究相对较晚,但在理论和应用方面也取得很大的进展。清华大学的贤达教授在其1996年出版的《时间序列分析——高阶统计量方法》一书中,介绍了有关盲分离的理论基础,其后关于盲分离的研究才逐渐多起来。近年来国各类基金支持了盲信号处理理论和应用的项目,也成立了一些研究小组。
虽然盲源分离理论方法在近几年已经取得了长足的发展,但是还有许多问题有待进一步研究和解决。首先是理论体系有待完善。实际采用的处理算法或多或少都带有一些经验知识,对于算法的稳定性和收敛性的证明不够充分。盲源分离尚有大量的理论和实际问题有待解决,例如多维ICA问题、带噪声信号的有效分离方法、如何更有效地利用各种先验知识成功分离或提取出源信号、一般性的非线性混合信号的盲分离、如何与神经网络有效地结合、源信号的数目大于观察信号的数目时ICA方法等。另外,盲源分离可同其他学科有机结合,如模糊系统理论在盲分离技术中的应用可能是一个有前途的研究方向;盲源分离技术与遗传算法相结合,可以减少计算复杂度,提高收敛速度。如何有效提高算法对源信号统计特性的学习和利用也需要进行深入研究。
1.3盲源分离的应用
近年来,盲信号处理逐渐成为当今信息处理领域中热门的课题之一,并且已经在尤其在、地震探测、移动通信、语音处理、阵列信号处理及生物医学工程领域展现出诱人的应用前景。下面介绍盲处理应用中的三个主要方面。
1.3.1 语音处理领域
语音信号分离、语音识别是盲处理应用的一个重要领域。最典型的应用就是声控计机,计算机所接受到的语音指令肯定是肯定是带有各种环境噪声的,还可能存在其他的
50-50.010x 10-3050010001500200025003000混合信号13500400045005000amplitude-0.0150-50.020-0.020x 10-350010001500200025003000混合信号23500400045005000050010001500200025003000混合信号33500400045005000050010001500200025003000混合信号4sample3500400045005000语音信号(如有其他人说话),而且这些信号源与接收器的相对位置也未知,计算机需要在这种情况下识别出正确的语音命令。
在移动通信中,往往存在通信质量问题,极大的影响了通话效果,而盲源分离或盲均衡技术能够消除噪声、抑制干扰及增强语音,提高通话质量。
如图1-3所示的是4段语音信号的混合信号,用忙信号处理算法可以将源语音信号分离出来,虽然不知道源语音信号的类型。
图1-3 4段混合语音信号
如图只知道混合的语音信号,其他的未知,要分离出源语音信号就是语音信号盲分
离要做的工作,也是本次设计的主要目的。
1.3.2 图像处理领域
盲信号分离同样应用于二维数据,如图像滤波、图像增强等处理。在图像恢复和重构问题中,主要的任务就是从被污染的图像中恢复出图像的原来面目,消除获取图像时
各种因素如相机抖动、镜头变形、传输噪声叠加等造成的图像质量问题,可用盲处理的方法获得比较满意的效果。
1.3.3 生物医信号处理学领域
在生物医学领域,盲信号处理可应用于心电图(ECG)、脑电图(EEG)信号分离、听觉信号分析、功能磁共振图像(FMRI)分析等。例如人们常常需要从肌电图中确定神经元细胞信号的触发模式,而EMG信号通常由多个特殊的传感器在人体表处测得,从信号源到传感器之间的信号传输介质参数是未知的,而人们之间各不相同。目前已经有一些学者将盲源分离技术成功地够应用于脑电图等信号的数据处理。
此外,盲分离技术还应用于阵列信号的处理领域。在阵列传感器中,各传感器接收到的混合信号,而源信号及混合特性完全未知,这是典型的盲信号处理应用问题。在军事领域中,近年来发展起来的雷达由于只接受信号而不发出任何信号受到广泛的重视,这种雷达的工作原理就是盲信号处理技术。
2 Matlab语音信号的采集
2.1语音信号的采集方法
在Matlab环境中,主要可以通过以下几种方法驱动声卡,采集语音信号: 1.将声卡作为对象处理采集语音信号Matlab将声卡作为对象处理,其后的一切操作都不与硬件直接相关,而是通过对该对象的操作来作用于硬件设备(声卡)。操作时首先要对声卡产生一个模拟输入对象,给对象添加一个通道设置采样频率后,就可以启动设备对象,开始采集数据,采集完成后停止对象并删除对象。
2.调用wavrecord功能函数采集语音信号。wavrecord功能函数只适用windows95/98/N平台,它使用windows声音输入设备录制声音。
函数调用方式:wavrecord(N,fs,ch,nbits),其中N采集的样本数据量,fs是样本采集频率有8000Hz、11025Hz、22050Hz和44100Hz几个选项,默认值为11025Hz;ch是样本采集通道,1为单声道,2为双声道,默认值为单声道;nbits是每个样本的位数(或称解析度),double、single或int16、uint8。
3.运用audiorecorder对象采集语音信号audiorecorder(fs,nbits,ch)可以创设一个audiorecorder对象。fs是样本采集频率,为8000Hz、11025Hz、22050Hz和44100Hz之一,默认值为8000Hz;nbits是每个样本的位数,8位或16位,默认值为8位;ch:样本采集通道,1为单声道,2为双声道,默认值为1(单声道);audiorecorder对象创设后,就可以进行相应的录音、暂停、停止、播放以及数据读取等操作。
在这次的设计中,利用windows自带的录音机录制语音文件,图2-1是基于PC机的语音信号采集过程,声卡可以完成语音波形的A/D转换,获得WAVE文件,为后续的处理储备原材料。调节录音机保存界面的“更改”选项,可以存储各种格式的WAVE文件。
声音 麦克风 声卡 滤波
采样 A/D转换 Wav
图2-1 基于PC机的语音信号采集过程
2.2三路语音信号的采集
这次设计用Matlab程序采集三路语音信号,基本步骤如下:创建工程文件-编写程序-调试-运行-录音,程序如下。在干扰噪声很小的环境下用麦克风录制进行3段不同的语音文件,保存成*.wav文件。为了便于语音信号的盲分离要将这3段语音用软件进行处理使其文件大小一样,仿真时所用的3段语音是gequ1 gequ2, gequ3,时间是5秒,单通道。
在matlab中对上述语音信号进行分析,接下来对3段语音信号进行的时域分析、频谱分析。
2.3三路原始语音信号的分析
利用MATLAB中的wavread命令来读入(采集)语音信号,将它赋值给某一向量。再将该向量看作一个普通的信号,对其进行FFT变换实现频谱分析,再依据实际情况对它进行滤波。对于波形图与频谱图(包括分离前后的对比图)都可以用 MATLAB画出。我们还可以通过sound命令来对语音信号进行回放,以便在听觉上来感受声音的变化,格式如下:
[y,fs,bits]wavread('Blip',[N1N2]);用于读取语音,采样值放在向量y中,fs表示
采样频率(Hz),bits表示采样位数。[N1 N2]表示读取从N1点到N2点的值(若只有一个N的点则表示读取前N点的采样值)
sound(x,fs,bits); 用于对声音的回放。向量y则就代表了一个信号(也即一个复杂的“函
数表达式”)也就是说可以像处理一个信号表达式一样处理这个声音信号。
2.3.1语音信号时域波形
在 MATLAB中画出gequ1.wav、gequ2.wav、gequ3.wav这三段语音信号的时域波形如图图2-2所示。程序见附录1:
10gequ1原始语音信号
-100.511.522.533.5x 1044gequ2原始语音信号0.50-0.500.511.522.533.5x 10gequ3原始语音信号0.50-0.500.511.522.533.5x 104444
图2-2 三段原始信号时域波形
在时域,语音信号具有“短时性”的特点,即在总体上,语音信号的特征是随着时间而变化的,但在一段较短的时间间隔,语音信号保持平稳。在浊音段表现出周期信号的特征,在清音段表现出随机噪声的特征。
2.3.2语音信号FFT频谱
在频域,语音信号的频谱分量主要集中在300~3400Hz的围。利用这个特点,可以用一个防混迭的带通滤波器将此围的语音信号频率分量取出,然后按8kHz的采样率对语音信号进行采样,就可以得到离散的语音信号。
函数FFT用于序列快速傅立叶变换,一种调用格式为:yfft(x,N)式中,x,y意义同前,N为正整数。函数执行N点的FFT。若x为向量且长度小于N,则函数将x补零至长度N。若x的长度大于N,则函数截短x使之长度为N。
在 MATLAB中画出gequ1.wav、gequ2.wav、gequ3.wav这三段语音信号的时域波形和频谱如图2-3所示。程序见附录1:
10-10123x 10gequ2原始语音信号0.50-0.50123x 10gequ3原始语音信号0.50-0.50123x 1044gequ1原始语音信号0.40.244gequ1原始语音信号FFT频谱0050010001500
gequ2原始语音信号FFT频谱10.5440050010001500gequ3原始语音信号FFT频谱10.50050010001500图2-3 原始语音1、2、3的时域和FFT频谱图
从上面的频谱可以看出,语音信号大部分分布于低频部分,这三路语音信号的时域波形形状、信号幅度差别明显,这给分离出来的信号做一个衡量的标准。
3盲信号分离的两种算法介绍
盲源分离在许多领域中都有成功的应用,近十几年来,受到了越来越多的重视,已经有大量的算法不断地提出。其算法可以大致的分为基于高阶累积量的盲源分离、基于信息理论的盲源分离和基于神经网络的盲源分离三种类型。这三类也包含很多不同类型的算法,下面主要介绍本次设计要用到的ICA算法和PCA算法。
3.1 独立分量分析ICA
对于盲源分离问题,独立分量分析(Independent Component Analy2sis,ICA)是指在只知道混合信号,而不知道源信号、噪声以及混合机制的情况下,分离或近似地分离出源信号的一种分析过程。
假设源信号若干个统计上相互独立的信号组成的,它们在空间中形成交叠,独立分量分析(Independent Component Analysis,ICA)是借助于多个信道同步观察交叠信号,将观察信号经过解混分解成若干独立成分,作为对源信号的一组估计,如图3-1所示:
图3-1 独立分量分析法
sM(t)信号源s1(t)s2(t)s3(t)观察信号 混合信道1估计信号y1(t)
x1(t)x2(t)x3(t)系统信道2 解混y2(t)y3(t)信道3矩阵AS(t)B信道n
xM(t)yM(t)X(t)Y(t)可以假设:A是线性系统可用矩阵表示,实际仿真时是随机阵。且信道对信号无影响,观察信道数与信号数相同(A,B方阵)。
独立分量分析ICA有多种算法,如基于代数结构的AMUSE,SOBI,JADE以及基于信息论的Fast-ICA和Info-max。其中,Fast-ICA的收敛速度快,且有一定的精度保证。
Fast-ICA算法能够更科学的去除元素组合之间的相关性,得到的元素组合比传统方法更具有说服力。
从处理技术上看,依据独立性分解势必涉及概论密度函数或高阶统计量,而处理过程常常要引入非线性环节。而地球化学数据从本质上将也是非线性的,所以应用该技术来对地球化学数据进行处理是合理的、可行的。从这一意义上看,Fast-ICA技术优越于常用的只建立在二阶统计量的线性处理技术,接下来的小节对Fast-ICA原理进行阐述。
3.1.1 Fast-ICA算法简介
Fast-ICA算法是一种快速而数值稳定的方法,采用拟牛顿算法实现寻优,具有超线性收敛速度,通常收敛速度较梯度下降寻优算法快得多;矩阵特征值分解盲分离方法通过对矩阵进行特征分解或者广义特征分解估计分离矩阵,是一种解析方法,可直接找到闭形式解,没有迭代寻优过程,因此运行速度很快。
快速ICA算法,由于采用了定点迭代的思想,所以又称固定点(Fixed-Point)算法或定点算法,是一种快速寻优神经网络算法。与普通的神经网络算法不同的是这种算法采用了牛顿迭代的思想对采样点采用批处理的方式,在每一步迭代中有大量的样本数据参与运算。基于目标函数的选择不同,从而产生了FastICA算法的基于负熵最大、峭度、互信息最小、最大似然估计等的多种形式。FastICA算法的优点如下:
1.收敛速度快,FastICA收敛速度为2次以上,普通的ICA算法收敛仅为1次。 2.能利用任何的非线性函数直接找出任何非高斯分布的独立分量,而对于其他的算法来说,概率密度函数的估计不得不首先进行。
3.独立分量可被逐个估计出来,类似于做投影追踪,这在仅需要估计几个(不是全部)独立分量的情况下,能减小计算量。
4.Fast-ICA算法有许多神经算法的优点,它是并行、分布式的且计算简单,存要求很少,它的性能能够通过选择适当的非线性函数来最佳化。
然而FastICA算法也有其自身的缺点,首先是它对初值的选择较自然梯度算法敏感,当初值的选择不是很合适的时候,算法的分离性能急剧的下降,其次算法的迭代步长有待进行自适应的优化。
3.1.2 基于负熵最大的快速ICA
Fast-ICA算法有基于峭度、基于似然最大、基于负熵最大等形式,这里,我们介绍基于负熵最大的FastICA算法。它以负熵最大作为一个搜寻方向,可以实现顺序地提取独立源,充分体现了投影追踪(Projection Pursuit)这种传统线性变换的思想。
由信息论理论可知:在所有等方差的随机变量中,高斯变量的熵最大,因而我们可以利用熵来度量非高斯性,常用熵的修正形式,即负熵。根据中心极限定理,若一随机变量X由许多相互独立的随机变量Sii1,2,3,...N之和组成,只要Si具有有限的均值和方差,则不论其为何种分布,随机变量X较Si更接近高斯分布。换言之,Si较X的非高斯性更强。因此,在分离过程中,可通过对分离结果的非高斯性度量来表示分离结果间的相互独立性,当非高斯性度量达到最大时,则表明已完成对各独立分量的分离。
负熵的定义: NgYHYGaussHY (3-1)
式中,YGauss是一与Y具有相同方差的高斯随机变量,H为随机变量的微分熵 HYpYlgpYd (3-2) 根据信息理论,在具有相同方差的随机变量中,高斯分布的随机变量具有最大的微分熵。当Y具有高斯分布时,NggY0;Y的非高斯性越强,其微分熵越小,NY值
越大,所以NgY可以作为随机变量Y非高斯性的测度。由于根据式(3.6)计算微分熵需要知道Y的概率密度分布函数,这显然不切实际,于是采用如下近似公式: NgYEgYEgYGauss (3-3)
2其中,E为均值运算;g为非线性函数,可取g1ytanh(a1y),或
g2yyexpy2/2或g3yy3等非线性函数,这里,1a12,通常我们取a11。
快速ICA学习规则是找一个方向以便WTXYWTX具有最大的非高斯性。这里,非高斯性用式(3.7)给出的负熵Ng(WX)的近似值来度量,WTX的方差约束为1,对
T于白化数据而言,这等于约束W的数为1。FastICA算法的推导如下。首先,WTX的负熵的最大近似值能通过对EGWTX进行优化来获得。根据Kuhn-Tucker条件,在
EWTX EXgWTXW0 (3-4) 这里,是一个恒定值, EW0XgW0X,W0是优化后的W值。下面我们利用牛
TTW221的约束下,EGWTX的最优值能在满足下式的点上获得。
顿迭代法解方程(3.4)。用F表示式(3.4)左边的函数,可得F的雅可比矩阵JFW如下:
JFWEXXTg'WTXI (3-5)
为了简化矩阵的求逆,可以近似为(3.9)式的第一项。由于数据被球化,EXXTI,所以,EXXTg'WTXEXXTEg'WTXEg'WTXI。因而雅可比矩阵变成了对角阵,并且能比较WEXgWTXEg'WTXWWW/W到下面的近似牛顿迭
容易地求逆。因而可以得
代公式:
WTXgWTX,规格化能提高解的稳定性。简化后就可这里,W是W的新值,E以得到FastICA算法的迭代公式:
(3-6)
实践中,FastICA算法中用的期望必须用它们的估计值代替。最好的估计是相应的样本平均。
对于Fast-ICA算法,数据预处理是一个最基本、最必要的过程。该过程包括去均值和白化(或球化)。
去均值过程起到了简化ICA算法的作用,白化也是信号源盲分离算法中一个经常用到的预处理方法,对于某些盲分离算法,白化还是一个必须的预处理过程。对混合信号的白化实际上就是去除信号各个分量之间的相关性。
从图3-2是Fast-ICA算法流程图可以看出,通常先对数据进行初步的白化或球化处理,白化处理可去除各观测信号之间的相关性,从而简化了后续独立分量的提取过程。这是由于一般情况下,所获得的数据都具有相关性。通过去均值和白化等预处理在对其进行真正的算法分离。通常情况下,数据进行白化处理与不对数据进行白化处理相比,算法的收敛性比较好,快速ICA算法一般的步骤如下: 1. 对观测数据X进行中心化,使它的均值为0; 2. 对数据进行白化,XZ;
3. 选择需要估计的分量的个数m,设迭代次数p1 ; 4. 选择一个初始权矢量(随机的)Wp ;
5. 令WpEZgWpZEg'WpZW,非线性函数g的选取见前文;
TT 6. WpWpWWW ;
p1j1Tpjj 7. 令WpWp/Wp。
8. 假如Wp不收敛的话,返回第5步;
9.令pp1,如果pm,返回第4步。
观测信号x去均值
对去均值后的观测信号x进行白化 基于负熵最大化理论确定目标函数E[G(W Tx)] 应用牛顿迭代算法求目标函数的最大值,即分离矩阵w 收敛? 是 获得信号源
图3-2 Fast-ICA算法流程图
否 由wxy 概括来说,Fast-ICA算法主要包含两部分:预处理部分和核心算法部分。预处理部分主要包括去均值化和白化处理;核心算法部分是基于拟牛顿算法,具体的实现见附录程序。
3.2 主分量分析PCA
3.2.1 主成分分析原理
主成分分析(Principal Component Analysis,PCA)是一种掌握事物主要矛盾的统计分析方法,它可以从多元事物中解析出主要影响因素,揭示事物的本质,简化复杂的问题。计算主成分的目的是将高纬数据投影到较低维空间。
给定n个变量的m个观察值,形成一个n *m的数据矩阵,n通常比较大。对于一个由多个变量描述的复杂事物,认识难度会很大,于是我们可以抓住事物主要方面进行重点分析,如果事物的主要方面刚好体现在几个主要变量上,那么我们只需要将体现事物主要方面的较少的几个主要变量分离出来,对此进行详细分析。但是,在一般情况下,并不能直接找出这样的关键变量。这时我们可以用原有变量的线性组合来表示事物的主要方面,PCA 就是这样一种分析方法。 PCA主要用于数据降维,对于由一系列特征组成的多维向量,其中某些元素本身没有区分性,比如某个元素在所有的样本中都相等,或者彼此差距不大,那么这个元素本身就没有区分性,如果用它做特征来区分,贡献会非常小。所以我们的目的是找那些变化大的元素,即方差大的那些维,而去除掉那些变化不大的维,从而使特征留下的都是“精品”,使得计算量也相应变小。 对于一个k维的特征来说,相当于它的每一维特征与其他维都是正交的(相当于在多维坐标系中,坐标轴都是垂直的),那么我们可以变化这些维的坐标系,从而使这个特征在某些维上方差大,而在某些维上方差很小。
所以我们的做法就是求得一个k维特征的投影矩阵,这个投影矩阵可以将特征从高维降到低维。投影矩阵也可以叫做变换矩阵。新的低维特征必须每个维都正交,特征向量都是正交的。通过求样本矩阵的协方差矩阵,然后求出协方差矩阵的特征向量,这些特征向量就可以构成这个投影矩阵了。
3.2.2 PCA算法原理
令x为表示环境的m维随机向量。假设x均值为零,即:E[x]=O。令w表示为m维单位向量,x在其上投影。这个投影被定义为向量x和w的积,表示为:
YwkxkwTx (3-7)
k1n满足约束条件:
w(wTw)1/21 (3-8)
而主成分分析的目的就是寻找一个权值向量w使得表达式E[y2]的值最大化:
E[y2]E[(wTx)2]wTE[xxT]wwTCxw (3-9)
根据线性代数的理论,可以知道满足式子值最大化的训应该满足下式:
Cxwjjwjj1,2,...,m. (3-10)
即使得上述式子最大化的w是矩阵Cx的最大特征值所对应的特征向量。特征向量的选择取决于协方差矩阵的特征值的大小。经过 PCA 分析,一个多变量的复杂问题被简化为低维空间的简单问题。可以利用这种简化方法进行作图,形象地表示和分析复杂问题。
3.3 主分量分析PCA和ICA
主分量分析(ICA)的目的在于降低向量的维数,取出随机信号间的线性相关性,找出原始信号中隐含的在能量较大的信号。但是由于PCA方法在实际的计算式只涉及到输入数据概率分布函数的二阶统计特性(仅利用到信号的协方差矩阵),所以分解出的各分量相互正交,主分量之间并不一定不相关,所以并不满足ICA方法对输入信号的独立要求。
从数理统计的角度来说,实际信号的大部分重要的信息往往包含在高阶的统计特性中,因此只有当多变量观测数据是由高斯分布的源信号构成时,PCA方法才能用来实现信号的分离,这是由于服从正态分布的随机过程的不相关性和统计独立是等价的,用一阶、二阶统计特性就可以完全描述信号。然而,在实际的问题中,真正满足正态分布的随机信号很少,绝大部分的随机信号(如自然景物图像、语音信号和脑电波等等)都不是高斯的。
此外,ICA方法往往需要高阶量,也就是在学习阶段需要使用一定的非线性,然而非线性的使用并不影响输入和输出的线性映射关系。许多情况下ICA能够提供比PCA更有意义的数据,而PCA仅在源信号为高斯分布时才能实现ICA。尽管如此,在信号的预处理阶段,PCA方法可以实现数据的预白化,为后续的工作提供了方便。
4语音信号的盲分离实现
本设计用matlab采集3路语音信号,选择合适的混合矩阵生成若干混合信号。然后结合语音信号的分离算法对混合信号进行分离出原始信号。
具体实现主要结合独立分量分析ICA技术,选取混合矩阵对3个语音信号进行混合,并从混合信号中分离出原语音信号,最后画出各分离信号的时域波形和频谱图和原来的信号进行比较。此外还运用PCA算法进行了混合语音信号的分离实现,最终对两种算法进行比较。
4.1 语音信号的混合
有题目要求根据盲信号分离原理,用matlab采集两路以上的语音信号,选择合适的混合矩阵生成若干混合信号,接下来在 MATLAB中实现gequ1.wav、gequ2.wav、gequ3.wav的混合,具体的程序先进行初始化、然后去均值,白化,用随机矩阵对这三路语音信号进行混合,具体的程序代码见附录,运行的结果如图4-1所示:
原始语音信号gequ110-10244原始语音信号gequ20.50-0.50244原始语音信号gequ30.50-0.50244
0.50-0.5x 10混合语音信号1x 10混合语音信号20.50x 10混合语音信号30.10
0244-0.50244-0.10244x 10x 10x 10混合语音信号1FFT频谱混合语音信号2FFT频谱混合语音信号3FFT频谱0.410.20.200100020000.500100020000.10010002000
图4-1 三路混合语音信号波形及频谱
上图的混合采用的随机混合3*3矩阵是Sweight =[ 0.6449 0.3420 0.5341 0.8180 0.2897 0.7271 0.6602 0.3412 0.3093]
4.2 语音信号的分离实现
4.2.1 FAST-ICA算法分离
独立分量分析的含义是把信号分解成若干个互相独立的成分,它是为了解决盲信号分离的问题而发展起来的。如果信号本来就是由若干独立信源混合而成的,ICA就能恰好把这些信源分解开来。故在一般的文献常把ICA等同于BSS,ICA不同于主分量分析把目光投注于信号的二阶统计量,研究信号间的相关关系,而是基于信号的高阶统计量,研究信号间的独立关系。
独立分量分析中Fast-ICA算法是一种快速而数值稳定的方法,采用拟牛顿算法实现寻优,具有超线性收敛速度,通常收敛速度较梯度下降寻优算法快得多用FAST-ICA快速主成分分析算法实现混合信号的分离,我们可以借鉴下面的波形,原始的语言信号及用FAST-ICA算法分离的语音信号图形如图4-2所示:
原始语音信号gequ110-1012344fastICA分离语音信号1200-20012344x 10原始语音信号gequ20.50-0.50123x 10fastICA分离语音信号210044-10012344x 10原始语音信号gequ30.50-0.50123x 10x 10fastICA分离语音信号310044-100123x 1044
图4-2 原始的语言信号FAST-ICA算法分离的语音号
将原始3路语音信号与分离出来的语音信号作对比,发现分离出来的语音信号和原来的信号的形状一样,不同的是顺序不一样,信号的幅度也减少了,这恰好说明了盲分离算法中允许存在两个方面的不确定性:
(1)排列顺序的不确定性,无法了解所抽取的信号应是源信号S(t)为哪一个分量. (2)信号幅度的不确定性,即无法知道源信号的真实幅值。
4.2.2 主分量分析算法分离
当多变量观测数据是由高斯分布的源信号构成时,PCA方法也可以用来实现信号的分离,同样用FAST-ICA快速主成分分析算法实现混合信号的分离,我们可以借鉴下面的波形,原始的语言信号级PCA算法分离的语音信号图如图4-3示:
原始语音信号gequ110-1012344PCA分离语音信号110-1012344x 10原始语音信号gequ20.50-0.50123x 10PCA分离语音信号20.2044-0.2012344x 10原始语音信号gequ30.50-0.50123x 10x 10PCA分离语音信号30.05044-0.050123x 1044
图4-3 原始的语言信号及PCA算法分离的语音号
同样,将原始3路语音信号与分离出来的语音信号作对比,发现分离出来的语音信号和原来的信号的形状基本一样,不同的是顺序不一样,信号的幅度也减少了,这恰好说明了盲分离算法中允许存在两个方面的不确定性:排列顺序的不确定性和信号幅度的不确定性,
还有一点可以看到,gequ1和gequ3的语音信号恢复的效果更好,gequ2的恢复波形有些失真,但总体上达到分离效果。
4.2.3 分离语音频谱分析
在 MATLAB中画出gequ1.wav、gequ2.wav、gequ3.wav这三段语音信号经过混合,并对FAST-ICA快速主成分分析算法成功实现混合信号的分离的信号进行频域分析,其时域波形和频谱如图4-4所示,原始信号的时域和频域图如图4-5所示,具体程序见附录1。
对比可以发现,不管是从时域波形来看还是频谱来看,FAST-ICA算法分离的效果很好,PCA算法分离频域分析和FAST-ICA算法分离类似,在此不再重复。
200-20012344fastICA分离语音信号1fastICA分离语音信号1的FFT频谱10
012344500200400600x 10fastICA分离语音信号2100-10fastICA分离语音信号2的FFT频谱201000200400600
x 10fastICA分离语音信号3100-100123x 10fastICA分离语音信号3的FFT频谱2010002004006004
4
图4-4 FAST-ICA分离信号时域和频域图
gequ1原始语音信号10-10123x 10gequ2原始语音信号0.50-0.50123x 10gequ3原始语音信号0.50-0.50123x 10 44gequ1原始语音信号FFT频谱0.40.20050010001500 10.50gequ2原始语音信号FFT频谱4 4050010001500 4 10.50gequ3原始语音信号FFT频谱0500100015004
图4-5 原始信号的时域和频域图
PCA分离语音信号10.50-0.5012344
PCA分离语音信号1的FFT频谱10.500200400600
0.10-0.100.20-0.20x 10PCA分离语音信号2PCA分离语音信号2的FFT频谱0.40.21234400200400600x 10PCA分离语音信号3PCA分离语音信号3的FFT频谱0.40.2123x 104400200400600图4-6 PCA分离信号时域和频域图
4.2.4 FAST-ICA和PCA分离比较
以上对3路语音信号gequ1.wav、gequ2.wav、gequ3.wav,选取混合矩阵对语音信号进行混合,并从混合信号中分离出原语音信号,分别使用了FAST-ICA和PCA分离算法,最后画出各分离信号的时域波形和频谱图和原来的信号进行比较。此外还运用PCA算法进行了混合语音信号的分离实现,下面对两种算法进行比较。
图4-6是原始信号,混合信号,两种不同算法分离信号的集合,由此一起来比较两种算法的分离效果。
原始语音信号gequ1原始语音信号gequ2原始语音信号gequ310.50.5 000-1-0.5-0.502404024 2x 10混合语音信号10.50-0.54
x 10 混合语音信号20.50-0.54x 10混合语音信号30.20-0.24 00244
2440244x 10x 10x 10 fastICA分离语音信号1fastICA分离语音信号2fastICA分离语音信号3102010000 -10-20-10024024024x 10x 10x 10PCA分离语音信号1PCA分离PCA分离语音信号3 语音信号20.50.20.1000 -0.5-0.2-0.1024024024x 1044
44
x 104x 104图4-6 两种算法比较波形图
分析:由上面的分离效果可以看出两种算法都能够对混合信号进行分离,发现分离出来的语音信号和原来的信号的形状大体一样,顺序和原来的都不一样,信号的幅度有的增大了,有的减少了。这些情况都比较符合盲分离算法中允许存在的排列顺序的不确定性和信号幅度的不确定性值这两种不确定性。从波形分离效果来说,在这次语音盲分离中FAST-ICA算法比PCA分离算法分离效果好。
5总结
这次的设计主要对是忙语音分离,这方面在课程学习中均没有涉及,但是在图像处理以及Matlab 使用基础上是这一次的学习更加有意义,在查找资料到进入语音信号分离课题的设计过程中对相关的领域有新的认识,掌握了简单的语音分离方法。
在设计过程中,感受到算法在类似“鸡尾酒会”语音信号中起到的作用,尤其是独立分量分析方法,大量的算法均是在ICA算法的基础上发展改进而来的,这次的设计是一个入门,盲信号分离是一个广阔的领域,不仅包括语音信号,还有确定信号方面,图像处理方面等等,在这些领域以后可以进一步了解。
语音信号是一种非平稳信号,本文研究了快速定点(FastICA)算法以及主分量分析算法(PCA),利用这两种算法能够有效地实现3路语音信号中的分离问题,设计的Matlab实现得到良好的分离效果。
这次设计中也遇到一些问题,这些问题的解决很好的使我对盲信号处理有更全面的认识。比如,在用电脑自带的录音机录制语音信号的过程中,当时录制了三首歌的时间大概都在20秒左右,用matlab进行仿真时,软件一直都处于运行阶段,后来才意识到,语音信号太大,软件的处理需要耗费大量的时间。后来缩短了语音的时间,又遇到了新的问题,根据matlab的错误提示得知,三段语音信号矩阵的大小要一样,最后将信号缩短4s,大小设定一样才成功。同样,在图像处理方面也要注意同样的问题。
语音信号的盲分离中涉及大量的概率论、高数等数学基础,是各科知识的一个综合,在接下来的学习中,希望在复习旧的知识点,学习新的知识点,继续了解学习盲信号处理BSP这个领域。
参考文献
[1] 马建仓,牛奕龙,海洋.盲信号处理. 国防工业, 2006.6 [2] 艳.盲源分离与盲信号提取问题研究. :理工大学.2004.3 [3] 马建芬.语音信号分离与增强算法的研究.电子工业.2012.3 [4] 福生,洪波.独立分量分析的原理与应用嗍.:清华大学,2003. [5] 行峻,君里.人工神经网络与盲信号处理.清华大学,2003.5
附录1 原始语音的时频matlab程序
fs=52050; %语音信号采样频率为52050
s1=wavread('gequ1.wav'); %读取语音信号的数据,赋给变量s1 s2=wavread('gequ2.wav'); s3=wavread('gequ3.wav');
sound(s1,55000); y1=fft(s1,1024); y2=fft(s2,1024); y3=fft(s3,1024);
f=fs*(0:511)/1024; figure(1) subplot(3,1,1);
plot(s1) title('gequ1原始语音信号');
subplot(3,1,2);
plot(s2) title('gequ2原始语音信号');
%播放语音信号gequ1 %对信号做1024点FFT变换 %画出原始语音信号gequ的时域图形 %画出原始语音信号gequ2的时域图形 subplot(3,1,3);
plot(s3) %画出原始语音信号gequ3的时域图形 title('gequ2原始语音信号');
附录2 预处理部分matlab程序
混合、算法分离部分matlab的代码: (1)预处理 clc;
clear all; close all;
% 读入混合前的原始语音信号
S1=wavread ('gequ1.wav')'; S2=wavread ('gequ2.wav')'; S3=wavread ('gequ3.wav')';
S=[S1;S2;S3]; % 3x176401矩阵
Sweight=rand(size(S,1)); % 取一随机3*3矩阵,作为信号混合的权矩阵
MixedS=Sweight*S; % 得到三个信号的混合信号3x176401矩阵
figure(1) subplot(4,3,1),plot(S1),title('原始语音信号gequ1') subplot(4,3,2),plot(S2),title('原始语音信号gequ2') subplot(4,3,3),plot(S3),title('原始语音信号gequ3') % 将混合矩阵重新排列并输出
subplot(4,3,4),plot(MixedS(1,:)),title('混合语音信号1'), subplot(4,3,5),plot(MixedS(2,:)),title('混合语音信号2'), subplot(4,3,6),plot(MixedS(3,:)),title('混合语音信号3'),
MixedS_bak=MixedS; % 将混合后的数据备份,以便在恢复时直接调用
(2)归一化处理
MixedS_mean=zeros(3,1); %3*1矩阵 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
(3)白化处理
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应为单位阵
附录3 算法的matlab程序
FAST-ICA算法和PCA算法代码:
(1)FAST-ICA算法
X=MixedS_white; % 以下算法将对X进行操作 [VariableNum,SampleNum]=size(X);
numofIC=VariableNum; % 在此应用中,独立元个数等于变量个数 B=zeros(numofIC,VariableNum) % 初始化列向量w的寄存矩阵,B=[b1 b2 ... bd] 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
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; % 核心公式 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
%fastICA算法语音分离
ICAedS=B'*Q*MixedS_bak % 计算ICA后的矩阵 % fastICA分离语音信号
subplot(4,3,7),plot(ICAedS(1,:)),title('fastICA分离语音信号1') subplot(4,3,8),plot(ICAedS(2,:)),title('fastICA分离语音信号2')
subplot(4,3,9),plot(ICAedS(3,:)),title('fastICA分离语音信号3') (2)PCA算法
[V,D]=eig(MixedS_cov); % 协方差矩阵对角化 Vtmp=zeros(size(V,1),1);
for j=1:2 for i=1:2
if D(i,i) %PCA算法语音分离 t1=(MixedS'*V(:,1))'; t2=(MixedS'*V(:,2))'; t3=(MixedS'*V(:,3))'; subplot(4,3,10),plot(t1),title('PCA分离语音信号1') subplot(4,3,11),plot(t2),title('PCA分离语音信号2') % 选择最大的主元向量并排序 subplot(4,3,12),plot(t3),title('PCA分离语音信号3') %分离后语音信号时域波形图和频域频谱 fs=52050; %语音信号采样频率为52050 y11=fft(ICAedS(1,:),1024); %对信号做1024点FFT变换 f=fs*(0:511)/1024; figure(2) subplot(3,2,1); plot(ICAedS(1,:)) %做分离语音信号1的时域图形 title('fastICA分离语音信号1'); subplot(3,2,2); plot(abs(y11(1:512))) %做分离语音信号1的FFT频谱图 title('fastICA分离语音信号1的FFT频谱') y12=fft(ICAedS(2,:),1024); %对信号做1024点FFT变换 subplot(3,2,3); plot(ICAedS(2,:)) %做分离语音信号2的时域图形 title('fastICA分离语音信号2'); subplot(3,2,4); plot(abs(y12(2:512))) %做分离语音信号2的FFT频谱图 title('fastICA分离语音信号2的FFT频谱') y13=fft(ICAedS(2,:),1024); %对信号做1024点FFT变换 subplot(3,2,5); plot(ICAedS(3,:)) %做分离语音信号3的时域图形 title('fastICA分离语音信号3'); subplot(3,2,6); plot(abs(y13(1:512))) %做分离语音信号3的FFT频谱图 title('fastICA分离语音信号3的FFT频谱') sound(ICAedS(1,:),52050) 附录4 录音的matlab程序 clc; fs=50000; channel=1; t=5; fprintf('按任意键后开始 %d 秒录音:',t); pause; fprintf('录音中...');%文字提示 y=wavrecord(t*fs, fs,channel,'double');%录制语音信号 fprintf('录音结束\\n');%文字提示 wavwrite(y,fs,'D:\\Documents\\Desktop\\gequ1.wav');% 建文件 存储录音信号,先创 本科生课程设计成绩评定表 姓 名 专业、班级 课程设计题目:语音信号的盲分离 课程设计答辩或质疑记录: 性 别 女 通信1103 成绩评定依据: 序 号 1 2 3 4 容 完成相关算法的设计 通过编写与调试程序,完成基本功能 设计报告的完成 课程设计答辩 分值 25分 35分 20分 20分 最终评定成绩(以优、良、中、及格、不及格评定) 指导教师签字: 年 月 日 因篇幅问题不能全部显示,请点此查看更多更全内容