资源描述
上海海事大学
神经网络与语音识别
院 系: 物流工程学院
课 程 名 称: 制造与物流决策支持系统
学 生 姓 名:
学 号:
时 间:
目录
一. 绪论 3
1.1 研究背景及意义 3
1.2 语音识别的国内外研究现状 3
1.3研究内容 4
二. 语音识别技术 5
2.1语音信号 5
2.2语音信号的数学模型 5
2.3 语音识别系统结构 6
2.4 语音信号预处理 7
2.4.1 语音信号的采样 8
2.4.2语音信号的分帧 8
2.4.3语音信号的预加重 9
2.4.4 基于短时能量和过零率的端点检测 9
2.5 特征参数提取 12
三. 基于BP神经网络语音识别算法实现 14
3.1 BP神经网络原理 14
3.2 输入层神经元个数的确定 14
3.3网络隐含层数的确定 15
3.4隐含层神经元个数的确定 15
3.5 BP神经网络构造 15
3.6 BP神经网络的训练 16
3.6.1训练样本集合和目标值集合 16
3.6.2 网络训练 16
3.7网络训练 17
3.8 语音的识别结果 18
四.总结 19
参考文献 20
附录 21
一. 绪论
计算机的飞速发展,使人们的生活方式发生了根本性的改变,鼠标、键盘,这些传统的人机接口使人们体会到了生活的便利。科学技术日新月异,假如让“机器”能够听懂人的语言,并根据其信息去执行人的意图,那么这无疑是最理想的人机智能接口方式,因此语音识别作为一门极具吸引力的学科应运而生,很多专家都指出语音识别技术将是未来十年信息技术领域十大重要的科技发展技术之一。
语音识别(Speech Recognition)是指,计算机从人类获取语音信息,对语音信息进行分析处理,准确地识别该语音信息的内容、含义,并对语音信息响应的过程。语音信号具有非稳定随机特性,这使得语音识别的难度大。目前人类甚至仍没有完全理解自身听觉神经系统的构造与原理,那么要求计算机能像人类一样地识别语音信号很有挑战性。
1.1 研究背景及意义
语言在人类的智能组成中充当着很重要的角色,人与人之间的交流和沟通大部分是通过语言的方式有效的完成。作为人与人之问交流最方便、自然、快捷的手段,人们自然希望它成为人与计算机交流的媒介。随着数字信号处理及计算机科学的飞速发展,人们对实现人机对话产生越来越迫切的要求,使得语音识别技术近年来得到了迅速的发展,语音识别技术的研究进入了一个比较成熟的时期。语音识别是一门交叉科学,它综合了声学、语言学、语音学、生理科学、数字信号处理、通信理论、电子技术、计算机科学、模式识别和人工智能等众多学科。也是人机交互最重要的一步。
1.2 语音识别的国内外研究现状
通过语音传递信息是人类最重要,最有效,和最方便的交换信息的形式,语音识别主要指让机器转达人说的话,即在各种情况下,准确的识别出语音的内容,从而根据其信息,执行人的各种意图。
广义的语音识别包括说话人的识别和内容的识别两部分。这里所说的语音识别,是指内容识别方面。采用计算机进行语音识别到现在已经发展了50年。
从特征参数上改进,采用各种办法进行语音增强是一个研究方向,但是到目前为止,还没有一种办法能把语音信号完美地从噪音环境提取出来。语音识别有广泛的商业化运用前景,主要可以分为通用场合和专用场合两个方面。
1.3研究内容
本文研究的主要内容是结合模式识别的基本理论,研究BP神经网络孤立词语音识别的问题,实现1-5共5个数字的识别。分析了语音信号的预处理,特征提取及BP神经网络算法实现。
二. 语音识别技术
2.1语音信号
语音信号是随时间变化的一维信号,由一连串的音素组成,各个音素的排列有一定的规则。语音具有声学特征的物理性质,声音质量与它的频率范围有关,语音信号的频谱分量主要集中在200~3400Hz的范围内。语音信号的另一个重要特点是它的短时性。语音信号的特征是随时间变化而变化,只有在一段很短的时间间隔中,才保持相对稳定的特性。研究表明,在5ms~40ms的范围内语音信号的频谱特性和一些物理特征基本保持不变。语音信号短时特征和短时参数包括它的短时能量、短时过零率、短时相关函数、短时频谱等。
语音信号的最基本组成单位是音素。音素可分成浊音和清音两大类。如果将只有背景噪声的情况定义为“无声”,那么音素可分成“无声”、“浊音”和“清音”三类。在短时分析的基础上可以判断一小段语音属于哪一类。如果是浊语音段,还可测定它的另一些重要参数,如基音频率和共振峰等。
2.2语音信号的数学模型
建立语音信号的数学模型是语音信号处理的基础。从人的发音器官的机理来假设,将语音信号分为一些相继的短段进行处理,在这些短段中可以认为语音信号特征是不随着时间变化的平稳随机过程。这样在这些短段时间内表示语音信号时可以采用线性时不变模型。通过上面的分析,将语音生成系统分成三个部分,喉的部分称为声门,在声门(声带)以下,称为“声门子系统”,它负责产生激励振动,是“激励系统”。从声门到嘴唇的呼气通道是声道,是“声道系统”,声道的形状主要由嘴唇和舌头的位置来决定。在说话的时候,声门处气流冲击声带产生振动,然后通过声道响应变成声音,由于发不同音时,声道的形状不同,所以能够听到不同的语音。语音从嘴唇辐射出去,所以嘴唇以外是“辐射系统”。激励的不同情况发不同性质的音,激励一般分为浊音激励和清音激励。发浊音时声道受到声带振动的激励引起共振,产生间歇的类斜三角形脉冲;发清音时声道被阻碍形成湍流,可以把清音激励模拟成随机白噪声。完整的语音信号的数学模型
可以用三个子模型:激励模型、声道模型、辐射模型的串联来表示。
激励模型一般分为浊音激励和清音激励。发浊音时,由于声带不断张开和关闭将产生间歇的脉冲波,这个脉冲波类似于斜三角形的脉冲。发清音时,无论是发阻塞音或摩擦音,声道都被阻碍形成湍流。所以,可把清音激励模拟成随机白噪声。
声道模型有两种最常见的建模方式。一是把声道视为由多个等长的不同截面积的管子串联而成的系统,按此观点推导出的叫“声管模型”;另一个是把声道视为一个谐振腔,按此推倒出的叫“共振峰模型”。
从声道模型输出的速度波与语音信号的声压波之倒比称为辐射阻抗,它表征口唇的辐射效应。由辐射引起的能量损耗正比于辐射阻抗的实部,所以辐射模型是一阶类高通滤波器。
2.3 语音识别系统结构
孤立词语音识别是对特定的不连续的词语作为处理单元。语音识别系统的基本组成一般可以分为预处理模块、特征值提取模块及模式匹配三个模块。如图2.1所示为语音识别系统结构框图。
图2.1 语音识别系统结构框图
从图2.1的系统整体架构可以看到,建立基于BP神经网络的语音识别系统可分为两个阶段,即训练阶段和识别阶段。首先由用户通过麦克风输入语音形成原始语音,然后系统对其进行预处理。预处理包括预加重,加窗分帧和端点检测三个过程。系统的前端采用了端点检测,目的是在一段语音信号中确定起点和终点。在特征提取部分,本系统采用了MFCC作为特征参数,用于有效地区分数字
1-5.
在训练阶段,通过说话人多次重复语音,本系统从原始语音样本中去除冗余信息,提取说话人的特征参数并存储为BP神经网络的输入样本,在此基础上建立输入与输出的BP神经网络模型。在识别阶段,待测语音经过预处理,使用已经训练好的BP神经网络进行识别得到结果。
2.4 语音信号预处理
图2.2是语音信号的预处理的流程图。从图2.2可以看到预处理模块包括预加重,加窗分帧和端点检测。前级预加重、加窗分帧及端点检测是语音识别的准备工作,每一个环节对整个识别系统的性能有着重要的影响。前级预处理主要是对信号进行一定的滤波和分帧;加窗分帧就是将语音信号进行分段处理,使语音信号连续并保持一定的重叠率:端点检测是确定语音有用信号的起始点与终止点,并通过一定的手段处理,将没有意义的语音信号去除,从而减少语音匹配识别模块的运算量,同时也可以提高系统的识别率。预处理不合理或语音起止点及终止点判别不够准确都会使后续的特征矢量提取及模式匹配过程等工作受到很大的影响,甚至达不到语音识别的效果,因此预处理工作作为语音识别的第一步工作,必须达到所需的要求,为下一步的特征参数提取做好铺垫。
图2.2 语音信号预处理流程图
2.4.1 语音信号的采样
Matlab环境中语音信号的采集可使用wavrecord(n,fs,ch,dtype)函数录制,也可使用Windows的“录音机”程序录制成.wav文件然后使用wavread(file) 函数读入。在本实验中,使用matlab的语音工具包录取0-共10段语音。如图2.3所示为数字0的训练语音0a.wav的信号波形图,第(I)幅图为完整的语音波形,第(II)、(III)幅图分别为语音的起始部分和结束部分的放大波形图。
2.4.2语音信号的分帧
语音信号是一种典型的非平稳信号,它的均值函数u(x)和自相关函数R(xl,x2)都随时间而发生较大的变化。但研究发现,语音信号在短时间内频谱特性保持平稳,即具有短时平稳特性。因此,在实际处理时可以将语音信号分成很小的时间段(约10~30ms),称之为“帧”,作为语音信号处理的最小单位,帧与帧的非重叠部分称为帧移,而将语音信号分成若干帧的过程称为分帧。分帧小能清楚地描绘语音信号的时变特征但计算量大;分帧大能减少计算量但相邻帧间变化不大,容易丢失信号特征。一般取帧长20ms,帧移为帧长的1/3~1/2。
在语音信号数字处理中常用的窗函数是矩形窗、汉明窗等,它们的表达式如下(其中N为帧长):
矩形窗:
(2-1)
汉明窗:
(2-2)
2.4.3语音信号的预加重
预加重是指在A/D转换后加一个6dB/倍频程的高频提升滤波器,语音信号的平均功率谱由于受声门激励和口鼻辐射的影响,高频端大约在800Hz以上按6dB/Oct(倍频程)跌落。所以求语音信号频谱时,频率越高相应的成份越小,高频部分的频率比低频部分的难求。因此,预加重的目的是加强语音中的高频共振峰,使语音信号的短时频谱变得更为平坦,还可以起到消除直流漂移、抑制随机噪声和提高清音部分能量的效果,便于进行频谱分析和声道参数分析。此外,通常的方法是使用一阶零点数字滤波器实现预加重,其形式为:
(2-3)
频域相对应的形式为:
(2-4)
其中,a为预加重系数。
2.4.4 基于短时能量和过零率的端点检测
在语音信号的预处理中,端点检测是关键的一步,语音信号的模型参数和噪声模型参数以及自适应滤波器中的适应参数都得依赖对应的信号段(语音段或噪声段)来计算确定。因此,只有准确地判定语音信号的端点,才能正确地进行语音处理。
端点检测的目的是从包含语音的一般信号中确定出语音的起点以及终点,一般采用平均能量或平均幅度值与过零率相乘的方法来判断。这种利用短时能量和短时平均过零率两种特征共同参与检测,也被称为双门限法。
(1)短时能量
设S(n)为加窗语音信号,第t帧语音的短时平均能量为:
(2-5)
(2-6)
其中N为分析窗宽度,St(n)为第t帧语音信号中的第n个点的信号取样值。上面两式原理是相同的,但后式有利于区别小取样值和大取样值,不会因为取平方而造成很大的差异。短时平均能量是时域特征参数,把它用于模型参数时,应进行归一化处理。
短时能量主要用途有:
(1)可以区分浊音段和清音段,因为浊音的En比清音时大得多。
(2)可以用来区分声母与韵母的分界,有声与无声的分界,连字的分界等。
(3)作为一种超音段信息,用于语音识别中。
(2)短时过零率
短时过零表示一帧语音信号波形穿过横轴(零电平)的次数。对于连续语音信号,过零意味着时域波形通过时间轴;而对于离散信号,如果相邻的取样值的改变符号则称为过零。过零率就是样本改变符号次数,定义语音信号寿(m)的短时过零率Zn为:
(2-7)
式中sgn[ ]是符号函数,即:
(2-8)
短时过零率的主要用途为区分浊音和清音,浊音具有较低的过零率,而清音则具有较高的过零率。
(3)双门限检测的方法
在开始进行端点检测之前,首先为短时能量和过零率分别确定两个门限。一个是比较低的门限,其数值比较小,对信号的变化比较敏感,很容易就会被超过。另一个是比较高的门限,数值比较大,信号必须达到一定的强度,该门限才可能被超过。低门限被超过未必就是语音的开始,有可能是时间很短的噪声引起的。高门限被超过则可以基本确信是由于语音信号引起的。
双门限端点检测程序见附录,双门限法仿真流程图如下:
N
Y
开始
Status=2语音状态
Status=0,1
静音,可能语音状态
Status=3
端点找到,得到结束那帧的序号,获得结束点
>amp2
or>zcr2
Silence+1
Count+1
Count+1
Count<
minlen
Silence<
minsilence
整个信号各种帧判断,比较
结束
判断帧所处阶段,即status的值
>amp2
or>zcr2
>amp1
Stasus=0
静音状态
Count=0
Status=1
可能语音状态
Count+1
认为是噪声,重新开始判断
Status=0
Silence=0
Count=0
Y
N
Y
N
N
N
Y
Y
图3-4 双门限法仿真程序流程图
整个语音信号的端点检测可以分成四段:静音、过渡段、语音段、结束。在静音段,如果能量或过零率超越了低门限,就应该开始标记起始点,进入过渡段。在过波段中,由于参数的数值比较小,不能确信是否处于真伪的语音段,因此只要两个参数的数值回落到低l、J限以下,就将当前状态恢复到静音状态。而如果在过渡段中两个参数中的任一个超过了高门限,就可以确信进入语音段了。当前状态处于语音段时,如果两个参数的数值降低到低门限以下,而且总的计时长度小于最短时间门限,则认为这是段噪音,继续扫描以后的语音数据。否则就标记好结束端点,并返回。从而达到抗干扰的目的、提高识别率。如下图所示。
2.5 特征参数提取
特征值的提取是对原始的语音信号运用一定的数字信号处理技术进行适当的处理,从而得到一个矢量序列,这个矢量序列可以代表原始的语音信号所携带的信息,初步实现数据压缩。特征参数主要有:能量、幅度、过零率、频谱、倒谱和功率谱等。
考虑到其他因素的影响,还有许多基于基本参数的参数,本文选用了MEL频率倒谱系数(MFCC)进行提取特征参数。
MFCC系数的计算是以“bark”为其频率基准的,它和线性频率的转换关系是:
(2-9)
MFCC系数也是按帧计算的,首先要通过FFT得到该帧信号的功率谱S(n),转换为Mel频率下的功率谱。这需要在计算之前先在语音的频谱范围内设置若干个带通滤波器:
NHm(n) m=0,1,…,M-1; n=0,1,…,N/2-1 (2-10)
M为滤波器的个数,通常取24,与临界带的个数一样;N为一帧语音信号的点数,为了计算FFT的方便,通常取256。滤波器在频域上为简单的三角形,其中心频率fm在Mel频率轴上是均匀分布的。
从图2.5就可以看到MFCC系数的计算过程如下:
(1) 预处理:确定每一帧语音采样序列的长度(如N=256),并对每帧序列s(n)进行预加重、分帧和加窗处理;
(2) 计算离散功率谱:对预处理的每帧进行离散FFT变换得到其频谱,再取模的平方作为离散功率谱S(n);
(3) 将功率谱通过滤波器组:计算S(n)通过M个Hm(n)后所得的功率值,即计算S(n)和Hm(n)在各离散频率点上的乘积之和,得到M个参数Pm,m=0,1,……M-1;
(4) 取对数:计算Pm的自然对数,得到Lm,m=0,1,……M-1;
(5) 离散余弦变换:对Lm计算其离散余弦变换,得到D m,m=0,1,……M-1,舍去代表直流成份的D0,取D1,D2,
……,Dk作为MFCC参数。
图2.4 语音信号MFCC系数的算法流程图
三. 基于BP神经网络语音识别算法实现
3.1 BP神经网络原理
BP神经网络又称误差反向传递神经网络。它是一种依靠反馈值来不断调整节点之间的连接权值而构建的一种网络模型。它的整个体系结构如图1所示,分为输入层、隐藏层和输出层,其中隐藏层根据具体情况的需要,可以是一层结构也可为多层结构。BP算法的基本思想是:学习过程由信号的正向传播与误差的反向传播两个过程组成。正向传播时,输入样本从输人层传人,经各隐藏层逐层处理后,传向输出层。若输出层的实际输出与期望的输出(教师信号)不符,则转入误差的反向传播阶段。误差反传是将输出误差以某种形式通过隐藏层向输入层反传,并将误差分摊给各层的所有单元,从而获得各层单元的误差信号,此误差信号即作为修正各单元权值的依据。这种信号正向传播与误差反向传播的各层权值调整过程,是周而复始的进行的。权值不断调整的过程,也就是网络的学习训练过程,此过程一直进行到网络输出的误差减少到可以接受的程度,或进行到预先设定的学习次数为止。
图3.1 BP神经网络体系结构
3.2 输入层神经元个数的确定
将数字图像的特征向量作为神经网络的输入,所以神经网络的输入层神经元个数等于特征向量的维数,数字语音识别提取的MFCC特征是一个行数row不确定,列数为24的二位向量,用此row×20=all个元素组成一个数字字符的列矩阵,即数字字符的特征向量,由于row都不一样,所以根据经验使all=600,不够600的直接用零补充。即600个输入神经元。输出层神经元个数的确定因为要识别5个数字,因此输出选择为5
×1的矩阵,即输出节点数为5。当数字图像1—5输入神经网络后在输出神经元对应的位置上为1,其他的位置为0。输人数字0,第1个输出神经元为1,其他为0;输入数字1,第2个输出神经元为1,其他为0;以此类推。
3.3网络隐含层数的确定
隐含层数越多,神经网络学习速度就越慢,根据Kosmogorov定理,在合理的结构和恰当的权值条件下,3层BP网络可以逼近任意的连续函数,因此,我们选取结构相对简单的3层BP网络。
3.4隐含层神经元个数的确定
一般情况下,隐含层神经元个数是根据网络收敛性能的好坏来确定的,在总结大量网络结构的基础上,得出经验公式:s=sqr(0.43nm+0.12m +2.54n+0.77m+0.35+0.51)其中n为输人层神经元个数,m为输出层神经元个数,根据以上公式,可以得出隐含层神经元个数为53。
3.5 BP神经网络构造
建立一个前向BP神经网络函数newff: net=newff(minmax(P),[600,53,5],{‘logsig’,‘logsig’,‘logsig’},‘traincgb’);其中minmax(P)为神经网络的对它的600个输入元素的最大值和最小值的限制。P为训练样本集合。[600,53,5]为该神经网络的层结构。{‘logsig’,‘logsig’,‘logsig’}为神经网络的各层的转移函数,均设置为对数S型激活函数。训练函数采用 traincgb ,即采用Powel1-Beale共轭梯度法训练。
3.6 BP神经网络的训练
3.6.1训练样本集合和目标值集合
数字语音识别提取的MFCC特征,由1~5这10个数字的特征列向量组成一个600×5的输入矢量,记为:sample_group=[1,2,⋯ ,5 ];式中的1,2,⋯ ,5代表数字的特征列向量。与输入矢量对应的目标矢量是希望每一个数字输入神经网络后在输出神经元对应的位置上为1,其他的位置为0。为此取目标矢量为对角线上为1的5×5的单位阵,用matlab命令实现为:targets=eye(5);
本文中1—5共5类数据,每类取4个做训练样本,即4组输入矢量构成训练样本集合训练神经网络,训练样本集合如下:P=[samples_groupl,samples_group2,⋯ ,samples_group5];P=double(P);与训练样本集合相对应的目标值集合由20组目标矢量构成,目标值集合如下:T=[targets,targets,⋯ ,targets,targets]
3.6.2 网络训练
本文神经网络训练误差性能目标值设置为0.0001,当神经网络训练次数达到最大值1 000或者神经网络的误差平方降到0.0001以下,终止训练。程序代码如下 :
net.trainParam.epochs=1000;%最大训练次数
net.trainParam.show=20;%显示的间隔次数
net.trainParam.min_grad=le-10;%最小执行梯度
net.trainParam.goal=0.0001;%性能目标值
net.1ayers{1}.initFcn=‘initwb’;% 网络层的初始化函数选为‘initwb’,使下面的输入层初始化语句randnr’有效
net.inputWeights{1,1}.initFcn=‘randnr’;%输入层权值向量初始化
net.1ayerWeights{2,1}.initFcn=‘randnr’;%第1网络层到第2网络层的权值向量初始化
net=init(net);% 初始化网络
[net,tr]=train(net,P,T);% 网络训练
其中[net,tr]中的net为更新了权值的神经网络,tr为训练记录(次数和每次训练的误差)。从相关的神经网络训练中可以看出,当神经网络的误差平方0.0000718时,小于性能目标值0.0001,神经网络训练结束,开始进行系统的性能测试。图3为学习误差曲线图。
图3.2 神经网络学习误差曲线
3.7网络训练
测试函数为神经网络仿真函数,testout=sim(net,test_sample)其中net为训练完成了的网络,test_sample为测试样本的特征向量,testout为神经网络的输出。部分程序代码如下:
testout=sim(net,test_sample);%神经网络的仿真
max_value=max(testout);%输出神经元最大值
if(max_value>0.7) %输出神经元的最大值大于0.7才进行数字识别,小于0.7时拒绝识别
testout=compet(testout);
number=find(testout= =1);%数字识别结果
end
3.8 语音的识别结果
本系统测试时,通过话筒直接输入测试语音1,2,3,4,5,系统会先提取的语音特征,然后根据事前存好的输入样本自动训练网络,最后测试样本,得到输出结果。
表3.1 BP神经网络算法识别率
语音内容
识别次数(个)
正确次数(个)
错误次数(个)
拒绝识别
(个)
识别率
1
5
5
0
0
100%
2
5
4
0
1
80%
3
5
5
0
0
100%
4
5
4
0
1
80%
5
5
5
0
0
100%
1-5
25
23
0
2
92%
其中可以看出1,3,5这三个语音的识别率都是为100%。完全识别正确。2,4这两个语音段的识别率都为80%,识别正确了4次,错误了1次。造成这种情况的原因可能是:
(1) 外界环境的干扰,噪声的干扰。
(2) 每次说话的语调,语音的不同。
本课题的主程序包括五个调用子程序,分别为分裂信号成重叠框架的enframe;实现特征提取的mfcc;判断矩阵的一个滤波器组melbankm;将多组mfcc系数取平均的MfccProcess.m。将取所有音频的mfcc系数处理成神经网络函数所需的输入格式的SampleCreate.m。
四.总结
通过对孤立词语音识别系统中各个模块的MATLAB仿真,可知每个模块都能满足系统的识别要求;从语音信号的端点检测看出,对不同人和不同的孤立词,该方法能准确的检测出起始点和终止点,为信号的特征参数提取做准备工作;而特征参数的提取通过MFCC算法也能很好的提取对信号识别的参数值;
应用BP神经网络算法对语音进行模式匹配,从仿真的结果和数据分析,可以清楚的看到各个语音的识别率。最后通过对一些孤立词语音进行识别的验证,得出整个系统在实际应用当中的可行性。
参考文献
[1]赵力. 语音信号处理[M] . 北京: 机械工业出版社, 2003
[2]蔡莲红, 黄德智, 蔡锐. 现代语音技术基础与应用[M] . 北京: 清华
[3]张雄伟,陈亮,杨吉斌. 现代语音处理技术及应用[M]. 北京:机械工业出版社, 2003.
[4]朱淑琴,裘雪红.一种精确检测语音端点的方法.计算机仿真,2004,22(3):214-216
[5]王让定,柴佩琪.语音倒谱特征的研究[J].计算机工程,2003,29(13):31 - 33.
[6]MATLAB中文论坛.MATLAB神经网络30个案例分析[M].北京:北京航空航天大学出版社,2010
[7]谭保华,熊健民,刘幺和.语音识别技术概述[J].郧阳师范高等专科学校学报,2004.
[8]詹新明,杨灿等.基于MATLAB和BP网络的语音识别系统[J].微计算机信息.2009,9(1):176-178
[9]万春.基于DTW的孤立词语音识别研究和算法改进.集美人学学报(自然科学版),2002(6):104—108.
[10]刘长明,任一峰.语音识别中DTW特征匹配的改进算法研究.中北大学学报(自然科学舨),2006,27(1):37-40
[11]We iH an, Cheong- Fat Chan, Ch iu- S ing Choy, et a.l A n effic ientMFCC extraction method inspeech recogn ition [C] . IEEE Internat iona l Symposium on C ircu its and Systems, 2006: 145.
[12]Yu Hongzhi A research on recognit ion of T ibetan speakers based on MFCC and Delta features. International Forum on Computer Sc ience- Techno logy and App lications, 2009: 234.
[13]H Hermansky, HMorgan. RASTA p rocessing of speech[J]. IEEETrans on Speech and Audio Processing, 1994, 2(4) : 578 - 589.
[14]马莉,党幼云.特定人孤立词语音识别系统的仿真与分析.西安工程科技学院学报.2007,21(03):10-12.
附录
仿真实验所用程序
1.语音预处理端点检测程序:
[x,fs,nbits]=wavread('tqwxs.wav');
x = x / max(abs(x));%幅度归一化到[-1,1]
x = double(x);
x = x / max(abs(x));
%常数设置
FrameLen = 240;%指定帧长
FrameInc = 80;%指定帧移
amp1 = 20;
amp2 = 10;
zcr1 = 10;
zcr2 = 5;
maxsilence = 8; % 6*10ms = 30ms
minlen = 15; % 15*10ms = 150ms
status = 0;
count = 0;
silence = 0;
%计算过零率
tmp1 = enframe(x(1:end-1), FrameLen, FrameInc);%分帧处理,tmp1和tmp2为分帧后形成的二维数组
tmp2 = enframe(x(2:end) , FrameLen, FrameInc);
signs = (tmp1.*tmp2)<0;
diffs = (tmp1 -tmp2)>0.02;
zcr = sum(signs.*diffs, 2);
%计算短时能量
amp = sum(abs(enframe(filter([1 -0.9375], 1, x), FrameLen, FrameInc)), 2);
%调整能量门限
amp1 = min(amp1, max(amp)/4);
amp2 = min(amp2, max(amp)/8);
%开始端点检测
x1 = [];
x2 = [];
for n=1:length(zcr)
goto = 0;
switch status
case {0,1} % 0 = 静音, 1 = 可能开始
if amp(n) > amp1 % 确信进入语音段
x1(end+1) = max(n-count-1,1);
status = 2;
silence = 0;
count = count + 1;
elseif amp(n) > amp2 | ... % 可能处于语音段
zcr(n) > zcr2
status = 1;
count = count + 1;
else % 静音状态
status = 0;
count = 0;
if length(x1)~=length(x2)
x2(end+1)=x1(end)+count-silence/2-1;
end
end
case 2, % 2 = 语音段
if amp(n) > amp2 | ... % 保持在语音段
zcr(n) > zcr2
count = count + 1;
else % 语音将结束
silence = silence+1;
if silence < maxsilence % 静音还不够长,尚未结束
count = count + 1;
elseif count < minlen % 语音长度太短,认为是噪声
status = 0;
silence = 0;
count = 0;
else % 语音结束
status = 3;
end
end
case 3,
status=0;
x2(end+1)=x1(end)+count-silence/2-1;
end
end
% count = count-silence/2;
% v_count(i)=v_count(i)+v_count(i-1);
% v_silence(i)=v_count(i)+v_silence(i);
if length(x2)<length(x1)
x2(end+1)=length(zcr);
end
subplot(311)
plot(x)
axis([1 length(x) -1 1])
ylabel('Speech');
for i=1:length(x2);
line([x1(i)*FrameInc x1(i)*FrameInc], [-1 1], 'Color', 'red');
line([x2(i)*FrameInc x2(i)*FrameInc], [-1 1], 'Color', 'green');
end
% line([x1*FrameInc x1*FrameInc], [-1 1], 'Color', 'red');
% line([x2*FrameInc x2*FrameInc], [-1 1], 'Color', 'red');
subplot(312)
plot(amp);
axis([1 length(amp) 0 max(amp)])
ylabel('Energy');
for i=1:length(x2);
line([x1(i) x1(i)], [min(amp),max(amp)], 'Color', 'red');
line([x2(i) x2(i)], [min(amp),max(amp)], 'Color', 'green');
end
subplot(313)
plot(zcr);
axis([1 length(zcr) 0 max(zcr)])
ylabel('ZCR');
for i=1:length(x2);
line([x1(i) x1(i)], [min(zcr),max(zcr)], 'Color', 'red');
line([x2(i) x2(i)], [min(zcr),max(zcr)], 'Color', 'green');
end
2.神经网络训练程序
N = 5;
M = 3;
TestMW = [ 1 2 3];
T1 = [1 0 0]'
T3 = [0 1 0]'
T5 = [0 0 1]'
Ttemp = [T1 T3 T5]
T = Ttemp;
for i=1:N-1
T = [T Ttemp];
end
PS = SampleCreate('S',N,UnitLength);
PR1 = min(PS');
PR1 = PR1';
PR2 = max(PS');
PR2 = PR2';
PR = [PR1 PR2];
if size(T,2)==size(PS,2)
netBP = newff(PR,[30,10,3],{'tansig','tansig','tansig'},'trainbfg');
netBP.trainParam
展开阅读全文