当前位置:文档之家› 神经网络在语音识别上的应用

神经网络在语音识别上的应用

H a r b i n I n s t i t u t e o f T e c h n o l o g y
神经网络与智能信号处理
实验报告
神经网络实验报告
1、实验名称:
神经网络在语音识别上的应用
2、实验目的:
进一步了解神经网络在语音识别上的应用,了解神经网络的基本原理,学习神经网络的算法,还可以进一步分析不同的隐节点数以及训练步数对误差性能的影响。

3、实验要求:
1、设计一个标准的BP学习算法网络来对语音信号26个字母进行识别。

2、在训练时采用不同的隐含层神经元个数,分析其对网络性能、语音识别系统的识别率的影响。

3、用所创建的BP神经网络进行26个字母的语音识别,观察并记录结果,并分析其误差。

4、实验步骤:
1、语音识别的基本原理
语音识别的总体流程如下:
语音输入时要先经过预处理,包括预加重、分帧加窗等。

然后进行特征提取,该实验中的特征参数为MFCC 参数。

语音特征参数的时间序列构成语音的模式,将其与获得的参考模式逐一比较,获得最佳匹配的参考模式便是识别结果。

由于语音信号的复杂性,所以在一开始在语音信号输入语音识别系统时需要进行预处理,预处理包括预加重,分帧加窗,端点检测等。

预加重的目的是为了加强语音的高频部分,以便在特征提取阶段进行频谱分析。

分帧加窗的目的是为了使帧与帧之间平滑过渡,保持连续性以及保持语音信号的短时平稳性,降低由于不连续而产生的Gibbs 效应。

端点检测的目的就是从语音信号序列中截取实际有效的语音信号。

特征提取阶段,是从语音数据中提取能反映语音信号特征和变化规律的参数,以唯一表征语音,这儿选用的语音信号特征参数为MEL 频率倒谱系数,即MFCC 。

MEL 频率倒谱的实现过程如下图所示:
(1)对语音信号进行预处理,加窗、分帧将其变为短时信号。

(2) 将短时时域信号转变为频域信号,并计算其短时能量,离散傅立叶变换。

将时域信号
后补若干0形成长为N 的序列,再经过离散傅立叶变换得到线性频谱,变换公式:
0n,k N-1
(3)在频标内三角带通滤波器个加于坐标得到滤波器组,转化关系为
(4)求对数能量。

为了使计算结果对噪声和谱估计噪声有更好的鲁棒性,一般将上述经过Mel频谱取对数能量。

则由线性频谱得到对数频谱的总的传递函数为:
(5)离散余弦变换(DCT)
将上述的对数频谱经过离散余弦变换到倒谱域,即可得到MEL倒谱系数即MFCC系数
2、BP神经网络的建立
BP神经网络是一种多层前馈神经网络,采用的算法是误差反传法,误差反传法特点就是使输入输出层连接权值进行调整,而且隐含层连接权值可根据误差与上层输出进行修改,即有了学习能力。

在BP神经网络中存在前向传播信息流和误差反传信息流。

前向传播信息流就是输入信号从输入层进入到隐含层,再从输出层输出。

它的输出是整个神经网络的计算结果。

网络会计算最后输出与期望间的误差。

如果误差超过一定的范围,就沿着神经网络反传,进行误差反传。

误差反传就是误差从输出层经隐含层到输入层的过程。

误差衡量的是输出信息与期望信息的距离。

在误差反传的过程中,连接权值根据误差值等一些参数来进行调整,使得调整后的BP网络的实际输出更接近于理想输出。

本实验中的BP神经网络设计为3层,即其隐含层只有一层。

在训练阶段和识别阶段BP网络的输入均是由输入语音的MFCC参数组成。

这些特征参数构成一个矩阵,矩阵的每一列代表一个单独的语音,矩阵的行数为每个输入的维数,矩阵的列数为语音样本数。

要识别所有的字母,BP神经网络的输出层采用5维的来识别26个英文字母。

00000~11010分别对应字母A~Z。

但实际中我们只识别A~E,所以只需3维就够了,001~101分别对应A~E。

当神经网络的各节点采用S型传递函数时一个隐含层就可以实现任意判决分类问题。

对于规模不大的神经网络的模式分类、边界判决问题,使用两层隐含层并不一定比一层隐含层更优越。

同时考虑到语音识别系统的效率问题,所以本实验只采用一层隐含层,隐含层神经元的数目为15个。

BP神经网络的创建函数:net=newff(pr,sn,transf,trainf)
其中pr为输入的数值范围;sn为一维数组,数组的维数表示神经网络的层数,数组的大小表示该层的神经元个数。

transf也是一维数组,表示神经网络各层的传递函数。

trainf为神经网络的训练函数。

BP神经网络的训练函数:net=train(net,sample,target)
参数中的net是指未经训练的BP神经网络,sample为供训练的语音样本,target为相对应的sample的期望输出,该函数返回一个已经训练好的BP神经网络。

BP神经网络的仿真函数:Y=sim(net,sample)
Net为已经训练好的BP神经网络,sample为供测试使用的语音样本特征。

该仿真函数返回每个样本特征对应的识别结果。

5、试验结果分析
由于识别26个字母的输入较大,本实验中只用A~E五个字母来训练识别,它们的基本原理是一样的。

BP神经网络的网络参数设置为:BP网络共3层,输入神经元的个数为30,隐含层神经元的个数为20,输出层神经元的个数为3。

如果训练步数为150。

则输出为
每一列代表一个字母,则输出Y接近于[001,010,011,100,101…….]即输出为A,B,C,D,E,A,B,C,D,E,A,B,C,D,E
下图为其误差图:
当隐含层为15,训练步数为150时,则其输出为:
输出Y的误差就比较大,下图是其误差图:
当隐含层为30时,训练步数为150时,其输出:
其误差也比较大,误差图如下:
比较上面3幅误差图可以发现,当训练步数为150时,隐含层数目为20时,其误差最小,隐含层数目为15和30时,其误差都较大。

得出结论,BP神经网络隐含层个数的选择对网络性能的影响很大。

若隐含层神经元个数较少,神经网络就可能训练不出所期望的输出结果,因为个数较少时,网络容易陷入局部较小,鲁棒性能较弱,容错能力不强,结果造成识别率低。

若隐含层神经元个数过多,网络的训练时间很长性能也不定能得到提高。

所以综上所述,隐含层神经元数目最终选取20个。

当神经元个数选取20个时,训练步数分别选取100,150,200,比较其误差。

训练步数=100
训练步数=150
训练步数=200
通过比较上面3幅图发现训练步数越多,其误差越小。

但是训练步数越多带来的问题就是训练时间较长,在误差要求不是太高情况下,选取训练步数为150就能够满足误差要求了。

6、实验体会与收获
语音识别时BP神经网络研究的热点。

由于水平和时间的有限,本实验内容难免有不足之处,本实验仍有很大的改进空间。

本实验的语音库包含的字母元素少,实际应用中需要更大的语音库,不仅包含数字,字母,还包括单词,难度也要高得多。

通过本实验对BP神经网络的工作原理有了进一步的了解。

能够简单运用神经网络实现一些简单的识别,为以后神经网络的应用打下基础。

本实验的语音识别仍未具有可连续性,神经网络的样本数据是在预处理从原始语音中提取实际语音段后再从该数据段提取出来的多个MFCC参数的总和,但是语音是连续变化的,所以未来可以让语音识别具有可连续性,即语音在时域上进行着语音识
别系统不断地对语音进行预处理,特征提取。

相关主题