摘要:神经网络是近年来信息科学、脑科学、神经心理学等诸多学科共同关注和研究的热点。由于其具有良好的抽象分类特性,现已应用于语音识别系统的研究和开发,并成为解决识别相关问题的有效工具。文章在讲述语音识别过程的基础上重点讨论利用BP神经网络对语音进行识别,用MATLAB完成对神经网络的训练和测试,并获得满意的结果。
1 引 言
人工神经网络(Artificial Neural Network)是一种模拟人脑神经元细胞的网络结构和功能, 运用大量的处理部 件,由人工方式建立起来的自适应非线性动态系统[1]。由于它模拟了人类神经元活动的原理,具有自学习、联想、 对比、分类、推理和概括能力,因此被应用于信息处理和语音识别等领域。数字化的语音信号可作为一维或二维 (双声道立体声数据)矩阵来处理,而MATLAB 的特点和优势就是矩阵运算的能力很强[2][3],因此很自然地 将MATLAB 应用到语音处理领域。基于这种前提和背景,将MATLAB 和BP 神经网络相结合进行语音识别的 研究,已成为语音识别研究领域的又一个热点。本文主要介绍将语音信号经过识别系统预处理后进行特征提取, 再利用BP 神经网络进行训练和测试,得出识别结果,并给出了基于MATLAB 环境下的图形用户界面GUI 的实现。
2 BP 神经网络基本原理
基于误差反向传播(Back Propagation)算法的多层前馈网络(Multiple-layer feed forward network),简记为BP 网 络[4],又称误差信号反馈网络,是神经网络的一个分支,也是目前神经网络中应用多也是成功的网络之一。 它是一种有教师的学习网络,能够实现从N 维到M 维的非线性映射,一般采用梯度下降法实现快速收敛。而构 造一个BP 网络需要确定其处理单元,即神经元的特性和网络的拓扑结构。
2.1 BP 网络的拓扑结构
神经网络的拓扑结构是指神经元之间的互连结构。BP 神经网络采用的是并行网格结构,包括输入层、隐含层和输出层,经作用函数后,再把隐节点的输出信号传递到输出节点,给出输出结果。由图2 可见各层次的神经 元之间形成全互连连接,各层次内的神经元之间没有连接。这种结构使多层前馈网络可在输入和输出间建立合适 的线性或非线性关系,又不致使网络输出限制在-1 和1 之间。图1 是一个三层的BP 网络结构。
2.2 反向传播算法
算法分为两个阶段:
阶段(正向过程)输入信息,从输入层经隐层逐层计算各单元的输出值;根据下式计算每层的输出值:
第二阶段(反向传播过程)输出误差,逐层向前算出隐层各个单元的误差,并用此误差修正前层的值。在BP 算法中常采用梯度法修正权值,为此要求输出函数可微,通常采用Sigmoid 函数作为输出函数。
3 语音识别系统原理
语音识别系统的典型识别方案如图 2 所示。这是一个基于模式匹配原理的自动语音识别系统方框图,也是目 前大多数语音识别系统都采用的设计原理[5]。根据这个原理,未知语音的模式要与已知语音的参考模式逐一进 行比较,选出匹配的参考模式作为识别结果。
该图中,待识别语音先经话筒变换成语音信号,或直接从wav 文件中读取,然后从识别系统前端输入,再 进行预处理。这时前端输入的语音信号还只是模拟信号,必须经过预处理,转化为数字语音信号。预处理包括预 滤波、采样和量化、分帧加窗、端点检测、预加重等,有时还包括模数转换器。特征提取部分用于提取语音中反 映本质特征的声学参数,常用的特征有短时平均能量或幅度、短时平均过零率、短时自相关函数、线性预测系数、 清音/浊音标志、基音频率、短时傅立叶变换、倒谱、共振峰等。训练在识别之前进行,是通过多次重复语音的 方式从原始语音样本中去除冗余信息,保留关键数据,再按一定规则对数据加以聚类,形成模式库。模式匹配是 整个语音识别系统的,是根据一定的准则以及知识(如构词规则、语法规则、语义规则等),计算输入 特征与库存模式之间的相似度,选择相似度作为识别结果,从而判断出输入语音的语意信息。
4 MATLAB 环境下语音识别系统的实现
4.1 分帧加窗
语音信号是一种典型的非平稳信号, 随时间变化而变化,但由于语音的形成过程是与发音器官的运动密切相 关的,因此在10~20ms 的时间段内,语音信号的频谱特性和物理特征参量可近似看作是不变的[6],即可视为短 时平稳的,就可以对语音信号进行分帧处理。
分帧相当于对原始信号加了一个矩形窗。用enframe. 进行分帧,相当于默认加一个矩形窗。加窗的目的就是 使信号在重新拼接的时候,频谱特性和原来比较接近。对语音信号的时域分析来说,窗函数的形状是非常重要的, 矩形窗的谱平滑性较好,但波形的细节丢失,并且矩形窗的旁瓣较大会产生泄漏现象,而汉明窗可以有效的克服 这一点,因此,用enframe. 分帧后,加一个hamming(汉明)窗,分析效果会更好。
4.2 端点检测
语音信号的端点检测可以分为四段:静音、过渡段、语音段、结束[7]。本文用典型的双门限算法,在程序设 计中以变量status 来表示当前所处的状态。在静音段,如果能量或过零率超过了低门限,就应该开始标记起始点, 进入过渡段。在过渡段中,只要两个参数的数值都回落到低门限以下,就将当前状态恢复到静音状态。而如果在 过渡段中的两个参数中的任意一个超过了高门限,就可以确信进入语音段了。以下是该设计的关键代码:
Ⅰ 当 status 为0/1 时:
(1)满足amp(n)>=(1.3*EN)&(zcr(n)>=(0.3*ZR)&zcr(n)<=4.5*ZR))时,进入状态2; (2)满足amp(n)>=(0.10*EN)&(zcr(n)>=(0.10*ZR))时,进入状态1; (3)否则进入状态0。
Ⅱ 当 status 为2 时:当不满足amp(n)>=(0.007*EN)&(zcr(n)>=(0.007*ZR))时,则进入状态3。
考虑到一些突发性的噪声也可以引起短时能量或过零率的数值很高,但由于其往往不能长时间维持,所以, 可以通过设定短时间门限来判别。当前状态处于语音段时,如果两个参数的数值降低到低门限以下,且总的计 时长度小于短时间门限,则认为这是一段噪音,继续扫描以后的语音数据。否则就标记好结束端点,并返回。
4.3 特征参数的提取
语音信号是一种典型的时变信号,特征提取的目的就是对原始语音进行处理后,计算语音对应的特征参数。提取的特征参数满足如下要求:
(1)特征参数能有效地代表语音特征,具有很好的区分性。
(2)参数间有良好的独立性。
(3)特征参数要计算方便,要考虑到语音识别的实时实现。
语音特征参数可以是能量、基音频率、共振峰值等语音参数,目前在语音识别中较为常用的特征参数为线性预测倒谱系数(LPCC)与Mel 倒谱系数(MFCC)[8]。本文采用MFCC 特征参数,其提取及计算步骤如下:
(1)原始语音信号s(n)经过预加重、分帧、加窗等处理,得到每个语音帧的时域信号x(n)。
(2)将时域信号x(n)后补若干0 以形成长为N(一般取N=512)的序列,然后经过离散傅立叶变换(DFT)后得到线性频谱X(k),转换公式为
在实际应用中,常常通过快速傅立叶变换(FFT)过程加以计算,其中N 一般称之为DFT(或FFT)窗宽。
(3)将上述线性频谱X(k)通过Mel 频率滤波器组得到Mel 频谱,并通过对数能量的处理,得到对数频谱S(m)。
(4)将上述对数频谱S(m)经过离散余弦变换(DCT)变换到倒频谱域,即可得到Mel 频率倒谱系数(MFCC 参数)c(n):
5 仿真实验
本实验的样本库为 200 个wav 文件(含男女各50 人,每人两次0~9 的录音),音频格式为音频格式为PCM、 22kHz、16 位、双声道,训练网络采用3 层BP 网络。实验过程中,先对其中100 个样本进行训练,然后再用其 它的样本进行识别,随着隐层神经元数目的改变,步数和识别率也随着改变,从中选择适当的神经元数,作为 训练网络的神经元数目。本实验中,还加入动量因子,对BP 算法进行改进,使其收敛更快。利用本系统对样本 库进行训练和识别,平均识别率为97.8%,达到了预期的目标。图3 为识别结果界面。
通过实验,当隐层神经元个数选定为25 时,BP 网络在训练时间、实时反映速度及识别率上都有明显的提高。表1 为改进后BP 网络识别结果。
6 结论
本文作者的创新点在于充分利用 MATLAB 矩阵运算能力强及可视化特性,并结合BP 神经网络,设计了针 对0~9 等数字的语音识别系统,使语音识别的每个过程实现可视化,达到了期望的识别率,而且还引入动量因子 对BP 网络加以改进,进一步提高了识别的实时性和识别率。
免责声明: 凡注明来源本网的所有作品,均为本网合法拥有版权或有权使用的作品,欢迎转载,注明出处。非本网作品均来自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。