基于MATLAB的说话人识别系统

一、课题介绍

说话是人类相互沟通交流最方便、最快捷的一种方式,世界上每一个说话人都拥有自己特定的语音,正如每个人的指纹一样,都是绝无仅有的。说话人识别应用广泛,现已应用到通信、消费电子产品等各个领域。本文将把语音进行数字化传输、存储、然后进行识别等。说话人识别系统主要包括预处理、特征提取、训练和识别四个模块。其中预处理和特征提取尤为重要。有许多的预处理方法,对语音信号的采样和量化是第一,然后预加重和加窗。特征提取是指提取语音信号的重要特征的过程。信号的时域分析包括信号的短时平均能量和短时过零率等。频域分析可以采用LPC倒谱系数法和Mel倒谱系数法。为了训练得到模版语音信号,可以利用矢量量化(VQ)、隐马尔可夫模型(HMM)、BP神经网络(ANN)等对说话人的语音信号进行训练识别。

说话人识别实现过程中的算法是多种多样的。本文将运用MATLAB仿真工具强大的编程、图形开发功能和数学计算能力。本文将把BP神经网络作为训练识别的方法,利用MFCC(MEL频率倒谱系数)产生的语音信号特征向量,最后运用十字交叉法,建立起一个说话人识别系统。结合MATLAB平台中的GUI设计预处理、特征提取、训练等几个模板,最后利用神经网络的模式识别,真正实现说话人的识别。

二、 研究背景及意义

说话人识别技术也被称之为声纹识别技术,它属于一种生物的识别技术。说话人识别技术拥有方便,经济,准确等特点,广受世人瞩目。

最早的语言研究被称为“口耳之学”。因为当时没有可供研究的仪器,只能通过耳听口模仿来进行研究。

最早的语音信号处理研究起源于1876年,电话的发明者贝尔首次使用声电、电声转换技术实现了语音的远距离传输

v2-4f89913ab376925632be5823a038f938_b.png

语音信号经过语音合成,语音编码和语音识别三个发展过程。语音识别的实验追溯到20世纪50年代贝尔实验室的Audry系统,此系统仅仅只能识别10个英文数字。又经过很长时间的研究发展,现在我们已经完全进入语音识别时代。

三 说话人识别的基本原理

3.1 语音识别基本过程

说话人识别即提取说话人语音中特征,然后将此特征作为确定说话人身份的过程。因此,需要找出每一个已知说话人发音中存在的差异,这些差异包括声道差异,发音习惯差异等等。

对于如何找出这些差异,确定说话人的身份,需要解决以下问题

v2-4f89913ab376925632be5823a038f938_b.png

(1)对说话人的语音进行预处理;

(2)提取说话人语音中的特征;

(3)用提取出的这些特征为指定说话人建立一个只属于此说话人的语音特征库;

(4)用一段未知语音与新建立的语料库进行对比,从而得出结论:此未知语音是否属于已知说话人。

为了解决以上问题,说话人识别系统一般进行以下四个模块的过程:预处理模块、特征提取模块,训练模块与识别模块。

3.2 预处理模块

3.2.1 采样

为了对语音数据进行数字处理,首先必须对模拟信号数字化。在数学上,声波可以表达为变量t(时间)的连续函数,用

v2-4f89913ab376925632be5823a038f938_b.png

表示。对模拟信号

v2-4f89913ab376925632be5823a038f938_b.png

进行周期采样,得到数字信号序列

v2-4f89913ab376925632be5823a038f938_b.png

v2-4f89913ab376925632be5823a038f938_b.png

就是离散信号或称之为数字信号。

对于这样的采样过程,最令人关注的问题就是采样之后的数字信号知否能准确的表示原始模拟信号,并且是全是模拟信号的唯一表示。经过调查研究,只要满足采样定理,就能保证已知模拟信号的准确性。

采样定理

v2-4f89913ab376925632be5823a038f938_b.png

:如果信号

v2-4f89913ab376925632be5823a038f938_b.png

的傅里叶变换

v2-4f89913ab376925632be5823a038f938_b.png

是带宽受限,即当

v2-4f89913ab376925632be5823a038f938_b.png

(

v2-4f89913ab376925632be5823a038f938_b.png

是奈奎斯特频率)时,

v2-4f89913ab376925632be5823a038f938_b.png

,则当抽样周期

v2-4f89913ab376925632be5823a038f938_b.png

时,用等间隔的抽样序列

v2-4f89913ab376925632be5823a038f938_b.png

能够唯一地恢复出原始信号

v2-4f89913ab376925632be5823a038f938_b.png

3.2.2 量化

在上节采样的过程当中,语音信号必定会产生一系列的振幅片段。为了把语音进行完整传输,存储等,必需把这些振幅片段进行量化,然后组成一个有限的振幅片段集。

量化过程只需两步

v2-4f89913ab376925632be5823a038f938_b.png

:首先必须产生量化幅度

v2-4f89913ab376925632be5823a038f938_b.png

的量化级,其次是用码字

v2-4f89913ab376925632be5823a038f938_b.png

表示每个量化后采样值的码化级。量化过程一般有两种实现方法:有些包含了过量的带宽,可以使用非线性量化加以缩减;在量化之前先压缩或扩张信号,然后均匀量化。这两种方法可以有效地实现减少码字,并且可以表示声音振幅的影响。

量化的过程中误差的产生是不可避免的

v2-4f89913ab376925632be5823a038f938_b.png

。量化之后的信号值和原始的信号值之间的差被称为量化误差,也可称为量化噪声。信号的量化信噪比是指信号与量化噪声之间的功率比。量化信噪比可表示为:


v2-4f89913ab376925632be5823a038f938_b.png

(2.5)

其中,

v2-4f89913ab376925632be5823a038f938_b.png

代表输入语音信号的方差,

v2-4f89913ab376925632be5823a038f938_b.png

代表信号的峰值,B代表量化分辨率,

v2-4f89913ab376925632be5823a038f938_b.png

代表噪声的方差。

3.2.3 预加重

由于发生过程中声门的激励与鼻辐射会产生能量的损耗,语音信号的平均功率谱受到影响。这使得在低频和中频的语音信号能量比在高频率处高得多。这样的现象不利于语音信号的分析和处理,所以预加重的目的在于增强信号的高频部分。

据了解,能量的损耗存在以下特点:当语音信号的频率加大2倍时,它的功率谱

v2-4f89913ab376925632be5823a038f938_b.png

约下降

v2-4f89913ab376925632be5823a038f938_b.png

。因此,我们可以采用

v2-4f89913ab376925632be5823a038f938_b.png

(一阶)来增强高频部分,以实现预加重的目的。语音信号预加重后,高频部分的能量的振幅和频率与低中频部分基本一致。

3.2.4 加窗

语音信号拥有短时平稳性,所以在短时段内(20~30ms的时间段内),语音信号的频域特征和少许物理特征基本保持稳定。为语音信号加窗就是利用它的这一重要特性。加窗即是对语音信号进行分帧。通常使用一个长度固定的窗函数来选取语音信号的某一段,每一段称为一个帧。

目前常用的窗函数有两种:

1.矩形窗,窗函数如下:


v2-4f89913ab376925632be5823a038f938_b.png

(2.6)

2.哈明窗(Hamming窗),窗函数如下:


v2-4f89913ab376925632be5823a038f938_b.png

(2.7)

3.汉宁窗(Hanning窗),窗函数如下:


v2-4f89913ab376925632be5823a038f938_b.png

(2.8)

帧的长度表示为N(单位是ms),一般帧长取10~20ms。分帧既可重叠,也可连续。在分割语音信号时,前一帧和后一帧重叠的部分叫作帧移。为了尽可能的使语音信号在变化的过程中存在信息丢失,在滑动窗函数分帧时必须交叠,一般交叠部分为帧长的一半,所以帧移与帧长的比值通常取

v2-4f89913ab376925632be5823a038f938_b.png

3.3 特征提取模块

特征提取是将通过加窗后获得的语音分析帧进行时频域的变化,用一些特定的参数来表示。说话人语音信号的特征采用每一帧语音所特有的参数所构成的参数集合来表示。所以对于说话人的识别,特征向量的提取是至关重要的。

经过不断的实验研究,能够表示时域特征的参数有:短时平均能量、短时平均幅度和短时过零率等。语音信号的特征不仅表现在时域上,还表现在频域上。频域上的特征有:线性预测系数(LPC)、LP倒谱系数(LPCC)、Mel频率倒谱系数(MFCC)等。下面将对这些特征参数进行一一说明。

3.3.1 短时平均能量分析

对于一个语音信号,它的能量随时间的变化。所以,一个已知语音信号在时刻

v2-4f89913ab376925632be5823a038f938_b.png

的短时平均能量

v2-4f89913ab376925632be5823a038f938_b.png

表达式如下

v2-4f89913ab376925632be5823a038f938_b.png


v2-4f89913ab376925632be5823a038f938_b.png

(2.9)

其中,N表示窗长,

v2-4f89913ab376925632be5823a038f938_b.png

表示输入语音信号,

v2-4f89913ab376925632be5823a038f938_b.png

表示窗函数,

特殊地,当窗函数为矩形窗时,

v2-4f89913ab376925632be5823a038f938_b.png

表示如下:


v2-4f89913ab376925632be5823a038f938_b.png

(2.10)

从另一个角度来解释,令:


v2-4f89913ab376925632be5823a038f938_b.png

(2.11)


v2-4f89913ab376925632be5823a038f938_b.png

是与

v2-4f89913ab376925632be5823a038f938_b.png

有关的滤波器,则

v2-4f89913ab376925632be5823a038f938_b.png

还可以表示为:


v2-4f89913ab376925632be5823a038f938_b.png

(2.12)

上式可以理解为:已知语音信号的平方值,经过一个冲激函数为

v2-4f89913ab376925632be5823a038f938_b.png

的滤波器,最后输出得到由短时能量构成的时间序列,如下图表示

v2-4f89913ab376925632be5823a038f938_b.png


v2-4f89913ab376925632be5823a038f938_b.png


图2.2 短时平均能量流程图

所以,冲激函数

v2-4f89913ab376925632be5823a038f938_b.png

的选取,也可以说窗函数的选取直接关系着短时平均能量的计算。窗长N的选择则成为重点。N不能选得过大,也不能选的过小。选得过大,则平滑作用很大,使得短时平均能量大致没有变化,没法反应语音信号的时域变化特征;选得过小,平滑力度又不够,以至于语音振幅时变的很多小特点被保存了下来,因此看不出振幅包络的改变情况。一般N的选择与语音信号的基因周期有关系。通常语音信号的基因频率在50~500Hz的范围内,从而确定了帧长(一般去10~20ms)。

短时平均能量能够作为区别清音与浊音的特征参数,因为试验研究表明,清音的短时平均能量明显低于浊音。还可以利用短时平均能量区分一段语音信号的有声段和无声段等。

3.3.2 短时平均幅度分析

对于短时平均能量,由于其需要计算语音信号的平方,这不仅使计算变得复杂还使得高信号和低信号之间的差距增大。因此将采用短时平均幅度

v2-4f89913ab376925632be5823a038f938_b.png

来衡量语音能量幅度的变化:


v2-4f89913ab376925632be5823a038f938_b.png

(2.13)

上式可以理解为:语音信号的各个样点值的绝对值,通过一个

v2-4f89913ab376925632be5823a038f938_b.png

的线性滤波器,最后输出得到由短时平均幅度构成的时间序列。

所以短时平均幅度继承了短时平均能量的所有优点和用途。

3.3.3 短时过零率分析

短时平均过零率作为语音信号在时域研究中的一种重要特性参数。它指每一帧内语音信号经过零值的次数。单位时间内经过零值的次数称为过零率。某段时间内过零率的平均值称为平均过零率。语音信号不是简单的正弦信号,所以平均过零率的表示方法就不那么简单。但由于语音信号是一种短时平稳信号,利用短时平均过零率能在某种程度上反应语音信号的频谱特性。短时平均过零率

v2-4f89913ab376925632be5823a038f938_b.png

表示如下:


v2-4f89913ab376925632be5823a038f938_b.png

(2.14)

其中,

v2-4f89913ab376925632be5823a038f938_b.png

为窗函数,

v2-4f89913ab376925632be5823a038f938_b.png

为符号函数,其公式如下:


v2-4f89913ab376925632be5823a038f938_b.png

(2.15)

短时平均过零率同样能够应用于清音与浊音的辨别,也能应用在语音信号的端点检测。但是仅仅使用过零率进行端点检测有一定难度,往往将短时平均能量与其结合起来进行检测使用。

3.3.4 短时自相关分析

自相关函数的功能在于权衡语音信号本身时间函数的相似性。由于浊音和清音的发音机理不同,因此二者在短时平均能量,短时平均幅度,短时平均过零率上都存在显著差异。这些差异使得它们在时间波形上也有很大不同。清音的时间波形杂乱无章,没有规律,并且波形间的相似性较差;浊音则恰好相反,它的时间波形表现出规律的周期性,波形间的相似性较好。所以能够利用短时自相关函数来分辨浊音和清音。语音信号的短时自相关函数

v2-4f89913ab376925632be5823a038f938_b.png

表示如下:


v2-4f89913ab376925632be5823a038f938_b.png

(2.16)

其中

v2-4f89913ab376925632be5823a038f938_b.png

式(2.16)表示,语音信号的自相关函数

v2-4f89913ab376925632be5823a038f938_b.png

可由信号

v2-4f89913ab376925632be5823a038f938_b.png

通过一个冲激函数

v2-4f89913ab376925632be5823a038f938_b.png

的滤波器组成。

通过实验,可知浊音与清音的短时自相关函数存在以下特征:

(1)浊音信号的短时自相关函数具有一定的周期性;

(2)清音信号的短时自相关函数杂乱无章,不存在周期性,其性质与噪声信号类似;

(3)窗函数影响着自相关函数,窗长直接影响自相关函数。

3.3.5 LPC倒谱系数(LPCC)

倒谱系数是指语音信号

v2-4f89913ab376925632be5823a038f938_b.png

变换的对数模函数的逆

v2-4f89913ab376925632be5823a038f938_b.png

变换。通常先求信号的傅里叶变换,然后区模的对数,再求傅里叶逆变换。

使已知语音的采样值与线性预测采样值之间达到最小均方差误差,便可得出线性预测系数LPC。LPC是一种参数谱估计方法,并且它的函数的频率响应

v2-4f89913ab376925632be5823a038f938_b.png

反应了声道的频率响应和被分析语音信号的频谱包络。因此,可对

v2-4f89913ab376925632be5823a038f938_b.png

做傅里叶变换得到倒谱系数。,这样的倒谱系数是一种良好的表述信号的参数。

LPC倒谱系数的优点在于:比较完整地去除了语音信号产生的激励信息,LPCC系数的计算量较小,易实现,表述元音的能力强。往往只需几个倒谱系数就可以准确的表述语音信号的共振峰特性。弊端有:表述辅音的能力不好,抗噪声性能也不好。LPCC也继承了LPC的缺点,LPC中包含语音信号高频部分的大部分噪声特征,这会影响系统的性能。

3.3.6 Mel频率倒谱系数(MFCC)

MFCC倒谱系数数拥有良好的辨别能力和抗噪声能力,但它的计算量很大,计算精度要求很高。Mel频率倒谱系数是频率轴的信号频谱转换为Mel尺度变换的倒谱域,然后获得倒谱系数。

由于人类对约1000Hz以上的声响频率范围的感知不遵循线性关系,而是遵循在对数频率坐标上的近似线性关系。所以, Mel频率的计算公式可以表示为:


v2-4f89913ab376925632be5823a038f938_b.png

(2.17)

MFCC参数的计算过程如下:

(1)对计算已知语音信号的傅里叶变换获得其频谱;

(2)对频谱的幅度求平方,得到能量谱;

(3)使用一组三角滤波器对(2)中得到的能量谱进行带通滤波,滤波器的数量一般和临界带数一致。假设滤波器的个数为

v2-4f89913ab376925632be5823a038f938_b.png

,滤波后得到的输出为

v2-4f89913ab376925632be5823a038f938_b.png

,其中

v2-4f89913ab376925632be5823a038f938_b.png

(4)对滤波后的输出取对数,然后做

v2-4f89913ab376925632be5823a038f938_b.png

点的傅里叶逆变换,并进行反离散余弦变换,得到的值即为MFCC:


v2-4f89913ab376925632be5823a038f938_b.png

(2.18)

其中,MFCC系数的个数L一般取12~16左右。

3.4 训练和识别模块

语音识别中的训练模块是把语音信号中提取的特征参数组成一个模型库,这个模型库的形成过程就是训练。而一个模型库的形成则需要几十甚至上百个特征参数。

语音识别的基本原理:将未知语音与训练获得模板集合进行对比,找出模板集合和未知语音匹配最优的集合。通过此模板识别出位置语音。

一般来说语音识别有以下几种方法:基于声道模型与语音知识的方法、模式匹配法、统计模型法与人工神经网络法。其中后三种方法使用比较广泛,其中实现模式匹配的方法有:矢量量化(VQ)和动态时间规整(DTW);实现统计模型法最常用的方法是隐马尔科夫模型(HMM);常用的人工神经网络法有:反向传播(BP)网络、径向基函数网络(RBF)和小波网络。

3.4.1 矢量量化模型(VQ)

在语音识别研究中,矢量量化(Vector Quantization,VQ)是一种极其重要的语音信号压缩和识别算法,其具有良好模型训练和模式匹配性能。矢量量化的关键在于是否设计了一个好码本,任何一个说话人的语音特征在特征空间中都会形成一个具体的量化码书。识别说话人时只需要求得说话人特征与量化码本之间的距离,以最小距离作为说话人识别的准则。所以量化码本的设计直接关系着量化质量。目前最常用最直接的生成码本的算法是LGB算法。LGB算法是一个递推的过程,其具体步骤如下:

(1)设置量化码本与迭代所需要的参数:假定存储量化码本所需的全部输入矢量参数X的集合为S;设定码本的大小为M;设定最大迭代次数是L;设定畸变改进阈值为δ;

(2)设置M个码字的初始化值:

v2-4f89913ab376925632be5823a038f938_b.png

;设置畸变初值

v2-4f89913ab376925632be5823a038f938_b.png

;设置迭代初值:

v2-4f89913ab376925632be5823a038f938_b.png

(3)根据最邻近规则将S划分为了M个集合

v2-4f89913ab376925632be5823a038f938_b.png

,当

v2-4f89913ab376925632be5823a038f938_b.png

时,有下列不等式成立:


v2-4f89913ab376925632be5823a038f938_b.png

(2.19)

其中,

v2-4f89913ab376925632be5823a038f938_b.png

v2-4f89913ab376925632be5823a038f938_b.png

v2-4f89913ab376925632be5823a038f938_b.png

表示X与Y之间的欧氏距离。

(4)计算总畸变

v2-4f89913ab376925632be5823a038f938_b.png


v2-4f89913ab376925632be5823a038f938_b.png

(2.20)

(5)计算畸变改进量

v2-4f89913ab376925632be5823a038f938_b.png

的相对值

v2-4f89913ab376925632be5823a038f938_b.png


v2-4f89913ab376925632be5823a038f938_b.png

(2.21)

(6)计算新码字

v2-4f89913ab376925632be5823a038f938_b.png


v2-4f89913ab376925632be5823a038f938_b.png

(2.22)

(7)判定

v2-4f89913ab376925632be5823a038f938_b.png

成立与否:若成立则运行(8);否则运行(9);

(8)停止迭代,输出训练码本的码字

v2-4f89913ab376925632be5823a038f938_b.png

和总畸变量

v2-4f89913ab376925632be5823a038f938_b.png

(9)判断m

3.4.2 隐马尔可夫模型(HMM)

隐马尔可夫模型是目前使用最普遍的一种模型。每个说话人的语音特征是关于时间的函数,用改变状态间的转换来描述声音的特征,这是隐马尔可夫模型。建立一个隐马尔可夫模型具体步骤如下:

(1)设置总状态数N;

(2)设置从状态

v2-4f89913ab376925632be5823a038f938_b.png

到状态

v2-4f89913ab376925632be5823a038f938_b.png

的转移概率为

v2-4f89913ab376925632be5823a038f938_b.png

。则用

v2-4f89913ab376925632be5823a038f938_b.png

矩阵

v2-4f89913ab376925632be5823a038f938_b.png

表示HMM中状态之间的转移,称为状态转移矩阵;

(3)设

v2-4f89913ab376925632be5823a038f938_b.png

是状态j时的特征向量x的概率密度,则有:


v2-4f89913ab376925632be5823a038f938_b.png

(2.23)

其中

v2-4f89913ab376925632be5823a038f938_b.png

是p维特征向量的特征空间;

(4)特征在状态i的初始值设为

v2-4f89913ab376925632be5823a038f938_b.png

v2-4f89913ab376925632be5823a038f938_b.png

,称之为初始概率向量,则有:

v2-4f89913ab376925632be5823a038f938_b.png

;各个状态时的概率密度函数可由一组

v2-4f89913ab376925632be5823a038f938_b.png

的参数B确定。

上述的HMM称为连续HMM模型。如果用矢量量化的方式对特征参数进行量化,特征向量只能用码本中固定的码字来表示。对于无状态j时特征的概率密度,只有状态j时特征为码本中的第k个码字的概率

v2-4f89913ab376925632be5823a038f938_b.png

,有下式成立:


v2-4f89913ab376925632be5823a038f938_b.png

(2.24)

其中参数B是一个

v2-4f89913ab376925632be5823a038f938_b.png

的矩阵,

v2-4f89913ab376925632be5823a038f938_b.png

,这样的HMM称为离散HMM模型。

离散HMM中最关键的问题是训练问题,解决这个问题最有效的方法是Baum-Welch算法和Viterbi算法。Viterbi算法和Baum-Welch算法的思想是一致的,但Viterbi算法是Baum-Welch算法的改进。

经过

v2-4f89913ab376925632be5823a038f938_b.png

时刻,用状态

v2-4f89913ab376925632be5823a038f938_b.png

到状态

v2-4f89913ab376925632be5823a038f938_b.png

的几率来表示训练得到信号的特性,输出时从状态

v2-4f89913ab376925632be5823a038f938_b.png

到状态

v2-4f89913ab376925632be5823a038f938_b.png

的转移发生次数的期望值,由此可以估计

v2-4f89913ab376925632be5823a038f938_b.png

v2-4f89913ab376925632be5823a038f938_b.png

。Viterbi算法的公式可以表示如下:


v2-4f89913ab376925632be5823a038f938_b.png

(2.25)

3.4.3 人工神经网络模型(ANN)

ANN的具体内容是模仿人类大脑的模型,将听觉体系中人类神经机制的信息处理系统引用到机器的研究中,因此具有学习和理解的能力。ANN在语音识别中的应用十分广泛,如分类区分、共振峰检测等。其中用的最多的是利用神经网络的分类区分能力。人工神经网络可以分辨浊音和清音,鼻音、摩擦音和爆破音。长期的实验证明了人工神经网络强大的分类区分能力。

将神经网络之所以能应用到语音识别中,是经过大量研究和训练而建立的,是语音特征在系统中的一种映射。它与传统的识别方法完全不同的地方是:单个权值与识别基元之间没有十分明确的对应关系,只存在整个权值构成的系统参数与整个识别空间之间的对应关系。从处理信息方面来看:一组信息存储在人工神经网络内部是乱中有序的,在存储信息过程中ANN对信息进行了大量的处理,而不是单纯的把信心孤立地存在内部。存储和处理信息是密不可分的。但用人工神经网络识别语音有个很大的缺陷:时序性很差,没有解决时间一致的问题。人工神经网络的具体模型如下:

当神经元j有多个输入

v2-4f89913ab376925632be5823a038f938_b.png

与一个输出

v2-4f89913ab376925632be5823a038f938_b.png

时,输入与输出的关系可表示成以下关系式:


v2-4f89913ab376925632be5823a038f938_b.png

(2.26)

其中

v2-4f89913ab376925632be5823a038f938_b.png

表示阈值,

v2-4f89913ab376925632be5823a038f938_b.png

表示从神经元i到神经元j的连接权重因子,

v2-4f89913ab376925632be5823a038f938_b.png

表示激励函数。上式也可简化为:


v2-4f89913ab376925632be5823a038f938_b.png

(2.27)

其中,

v2-4f89913ab376925632be5823a038f938_b.png

v2-4f89913ab376925632be5823a038f938_b.png

激励函数

v2-4f89913ab376925632be5823a038f938_b.png

可选择线性函数,也可选择非线性函数。常见的有:

(1)阶跃函数:

v2-4f89913ab376925632be5823a038f938_b.png

(2)S型函数:

v2-4f89913ab376925632be5823a038f938_b.png

(3)双曲正切函数:

v2-4f89913ab376925632be5823a038f938_b.png

(4)高斯函数:

v2-4f89913ab376925632be5823a038f938_b.png

最为常见、最具典型性且最简的人工神经网络是BP神经网络。BP神经网络是采用误差的反向传播算法的多层感应器神经网络,是一种单向传输的多层前向网络,网络不仅有输入与输出节点,又有单层或多层隐层的节点,同层节点中没有任何祸合。输入的语音信号首先从输入节点挨个传送到每个隐层的节点,然后传输至输出节点,每一隐层节点的输出只关系着下一隐层节点的输出。

3.4.4 HMM和ANN的混合模型

隐马尔可夫模型(HMM)和人工神经网络模型(ANN)的混合模型完整的使用了ANN的以下优点,成功掩盖了HMM的大部分缺点与不足,主要有以下三个:

(1)混合模型可以很好地适应语音数据无规律的变化。这可以不必刻意选取特殊的语音特征参数输入模型库进行训练和识别。

(2)把人类的听觉模型也融入人工神经网络中,在人工神经网络的开始端可以在同一时刻输入邻近帧的语音特征参数矢量,因此它与语音信号的真实形态更加一致。

(3)ANN的结束端可以和任何形式的概率分布函数达到一致,不仅可以很好地掌控训练模型库中的概率分布的特性,还可以很真实地描述语音信号的概率分布曲线。

四 基于Matlab的说话人识别

4.1 说话人识别系统平台介绍

对于说话人识别系统平台的搭建十分简单,只需用到一台电脑,麦克风,matlab软件。

Matlab是一款强大仿真、编程软件。自1984年问世以来,经过时间的凝练,已经成为广大学者、师生最常用和最信赖的仿真软件。Matlab对人们强大的影响表现在两个方面:传统的分析设计方法在Matlab平台上运用十分方便快捷,准确度也很可靠;而新的分析设计方法也在Matlab上不断发展。基于matlab的说话人识别会用到matlab的编程功能和GUI仿真功能。

麦克风的主要作用是采集说话人语音。

本系统对于电脑的要求不高,只需安装matlab软件。以上这些平台的基础准备好了,一个说话人识别系统平台就搭建起来了。这样搭建起来的说话人识别系统不仅方面快捷,而且价格便宜。

4.2 语音采集模板(Speech Recording Plane)

语音采集模板的主要目的便是采集说话人的声音,为后来的语音处理、识别做好准备。图4.1为语音采集模块:


v2-4f89913ab376925632be5823a038f938_b.png


图4.1 语音采集模板

图4.1是利用matlab的GUI制作的。它包含了说话人的信息,如:姓名、年龄和性别。这些信息需要预先设置。对于语音的采集,设置了三个采集的下拉框:频率、时间和通道,和三个按键采集、显示语音和回放。语音信号的采集频率是指采样模块在1s内对声音信号的采集次数,采样频率越高,语音复原后就更接近实际情况。图4.1中设置了四种采集频率,

v2-4f89913ab376925632be5823a038f938_b.png

下拉框中可以选择11.025

v2-4f89913ab376925632be5823a038f938_b.png

、22.050

v2-4f89913ab376925632be5823a038f938_b.png

、44.100

v2-4f89913ab376925632be5823a038f938_b.png

和88.200

v2-4f89913ab376925632be5823a038f938_b.png

。语音采集的时间的长短也是可变的,Times(s)下拉框中设置了5s、10s、15s、30s、60s和120s六种不同的采集时间。上图实现了语音的采集(Record)、显示语音(Display)和回放(Play),并且存储采集到的语音信号,这里采集的语音信号将被命名为“西瓜.mat”而存储下来。

4.3 预处理模板(Voice Preprocessing Plane)

预处理就是将语音进行一些基本的处理,使语音更有利于识别。前面已经介绍过预处理的方法和过程。这个模块的主要作用是截取语音有声音的部分,舍弃没有声音的时间段,然后将有声音的部分拼接在一起。同样利用matlab的GUI做了一个预处理模块,如图4.2:


v2-4f89913ab376925632be5823a038f938_b.png


图4.2 预处理模板

图4.2中设置的第一个按钮是Load Voice,即载入语音。这里载入的语音是图4.1采集的语音。点击Load Voice按钮,将出现图4.3的画面。


v2-4f89913ab376925632be5823a038f938_b.png


图4.3 载入语音

图4.2可以计算所采集语音的平均能量(mean energy)和过零率(zero cross rate)。对于平均能量,可以设置其阈值(如图4.4)并且画出平均能量的波形图。过零率同样可以设置阈值(如图4.5)并画出其波形。


v2-4f89913ab376925632be5823a038f938_b.png

v2-4f89913ab376925632be5823a038f938_b.png


图4.4 平均能量阈值 图4.5 过零率阈值

图4.2中的最后还设置了两个按钮:plot cut(切割波形)、save this data(保存语音)

4.4 特征提取模板(Feature Extraction Plane)

特征提取模板的作用是提取经过预处理的语音信息的特征。图3.6描述了特征提取的过程。


v2-4f89913ab376925632be5823a038f938_b.png


图4.6特征提取模板

在特征提取过程中,首先对语音信号进行加窗。在window name下拉框中有四种窗口可供选择:hamming window(哈明窗)、hanning window(汉宁窗)和rectangular window(矩形窗)。不仅可以设置这些窗口的窗长(从128到4096),还可将不同窗口、不同窗长的窗画出来。

Extracting静态窗是语音的分帧过程。分帧分为两部分,一是帧重叠的多少;二是分帧的方法。分帧的方法采用短时傅里叶变换(STFT)。

在cepstral analysis(倒谱分析)这个大的静态框中,选择用MFCC系数的方法提取特征。因为倒谱的频率越高,其计算的准确度就越低,所以在选择倒谱的频率时往往选择低频。关于倒谱的频率,和采集频率一样,有四种(11.025

v2-4f89913ab376925632be5823a038f938_b.png

、22.050

v2-4f89913ab376925632be5823a038f938_b.png

、44.100

v2-4f89913ab376925632be5823a038f938_b.png

和88.200

v2-4f89913ab376925632be5823a038f938_b.png

)可供选择。

4.5 训练识别模板(Speech Recognition Plane)

训练识别模块采用的是MATLAB中自带的神经网络。它可以实现对语音特征的训练和识别,使用起来非常的方便,而且快捷。运行main程序,程序的最后一条指令为nnstart。这样就会弹出神经网络模板,如下图:


v2-4f89913ab376925632be5823a038f938_b.png


图4.7 神经网络识别模式

进入图4.7画面之后,点击pattern recognition tool(模式识别)进入matlab自带的神经网络模式识别工具,见图4.8。


v2-4f89913ab376925632be5823a038f938_b.png


图4.8 识别模式介绍

由图4.8可以看到关于神经网络模式识别工具的简介和模型图。人后单击next进入下一画面,如下图3.9:


v2-4f89913ab376925632be5823a038f938_b.png


图4.9 训练数据选择

图4.9中将设置输入值(inputs)和目标值(targets),这两个值将用于特征向量的训练和识别。继续点击next,知道出现图4.10的画面:


v2-4f89913ab376925632be5823a038f938_b.png


图4.10 设置神经元个数

图4.10中的number of hidden neurons(神经元的个数)可以根据自己的需要进行设置。继续点击next出现如图4.11画面:


v2-4f89913ab376925632be5823a038f938_b.png


图4.11 训练模板

图4.11将实现语音的训练过程。点击train就开始了语音的训练,训练的次数是无限的。在results框中可以看到训练结果的误差有多大。继续点击next,知道出现图4.12画面:


v2-4f89913ab376925632be5823a038f938_b.png


图4.12 保存训练结果

图4.12是语音信号训练识别的最后一步。点击save results(保存数据)实现对训练识别数据的保存。

Mian程序中编写了可以看到前20个语音信号的频谱的程序,如图4.13:


v2-4f89913ab376925632be5823a038f938_b.png


图4.13 20个语音的频谱

运行完main程序,经过神经网络的模式识别保存好数据之后。运行start程序,得到识别结果。哪一说话人的识别有错误,被误识别为哪个说话人,识别的准确率都可以表示在MATLAB的指令窗,如下图4.14:


v2-4f89913ab376925632be5823a038f938_b.png


图4.14 识别准确率

其中Q表示识别率。

四、参考代码

Main函数:

load_wav;%(1)载入数据,数据在矩阵Y中,每列一个说话人

%(2)预处理及特征提取

w=512;%窗口大小

P=0.5;%能量大小

N=size(Y,2);

fs=8000;

YY=[];%装载所有说话人向量,行向量

for i=1:N

V=preprocessing1(Y(:,i),w,P,fs);

[M1,N1]=size(V);

T=ones(M1,1)*i;

YY=[YY;[V,T]];

end

%构造ANN的多类分类数据

X=YY(:,1:end-1);

Y=YY(:,end);

clear YY;

N=size(X,1);

%识别小规模分类问题

SN=[1:10];

indx=[];

for i=1:length(SN)

indx1=find(Y(:,1)==SN(i));%

indx=[indx;indx1];

end

X1=X(indx,:);

Y1=Y(indx,:);

N1=size(X1,1);

YY=zeros(N1,length(SN));

for i=1:N1

YY(i,Y1(i,1))=1;

end

X1=X1';

YY=YY';

save XY2.mat X1 YY Y1;

clear all;

load XY2.mat;

pause(1);

nnstart

Load_wav函数:

clear;clc;

cd dataset20

N=6;%the number of sec.

Y=[];

for i=2:21

if i<10

eval(['[y,fs,Nbits,Opts]=wavread(''000' num2str(i) '-cell-A.wav'');']) ;

else

eval(['[y,fs,Nbits,Opts]=wavread(''00' num2str(i) '-cell-A.wav'');']) ;

end

i

fs

Y(:,i)=y(fs:fs*N);

end

Y(:,1)=[];

cd ..

L=size(Y,1);

for i=1:20

subplot(4,5,i)

plot([1:L]/fs,Y(:,i));

axis tight;

end

preprocessing1函数:

function V_feature=preprocessing1(Y,w,P,Fs)

y=Y;

w=300;

N=length(y);

N_w=length(y)/w;

mean_y=mean(abs(y));

y_new=[];

for i=1:N_w-1

y_mean_eng(i)=mean(abs(y(((i-1)*w+1):(i+1)*w)));

if y_mean_eng(i)>=P*mean_y

y_new=[y_new;y(((i-1)*w+1):i*w)];

end

End

y_new=y_new';

WS=1024;

Over_size=0.1;

N_Banks=36;

V_feature=extraction(y_new,Fs,WS,Over_size,N_Banks);

Start函数:

[a,b]=max(output);

Y2B=[Y1(:,1),b']

Q=length(find(Y1(:,1)==b'))/length(Y1(:,1))*100

N=max(Y1);

A=[N,Q];

eval(['save A.mat'])

plot(N,Q,'O')

title('人数--识别率')

xlabel('人数')

ylabel('识别率')

你可能感兴趣的:(神经网络,算法,机器学习,人工智能,深度学习)