移动机器人的语音控制
摘 要: 基于传统的语音识别算法,以广茂达公司提供的能力风暴智能机器人为实验工具,
实现机器人的语音控制。结合机器人的硬件基础,本项目特征提取采用了计算量比较少的LPCC算法,在
匹配上采用了DTW算法。其中在数据采集上,为了减少空间,采用了语音数据的压缩存储。
关键词: 语音控制,数据压缩存储,移动机器人
1. 引言
1.1 课题所属研究领域
语音识别技术就是让机器人通过识别和理解把语音信号转变为相应的文本或控制命令的技术。语音识别是一门交叉学科,正逐步成为信息技术中人机交互的关键技术,语音识别技术与语音合成技术的结合,使人们能够更方便的通过语音命令操作机器人。 1.2 课题研究的价值
随着现代科学和计算机技术的发展,人们在与机器的信息交流中,需要一种更加方便、自然的方式。语言是人类最重要、最有效和最方便的信息交流方式,人类通过语言相互沟通,据统计,在日常生活中人类的信息交流约有75%是通过语言来完成的。这就很容易让人想到能否用自然语言代替传统的人机交互方式,如键盘、鼠标、手写或按键输入等。人机语言交流需要机器具有听觉,能“听懂”人类的语言,这就是机器的语音识别功能,语音识别是语音信号处理的重要研究方向之一。
语音识别技术正逐步成为信息技术中人机交互的关键技术,随着计算机技术、模式识别和信号处理技术以及声学技术等的发展,使得满足各种需要的语音识别系统的实现成为可能。近三十年来,语音识别在工业、军事、交通、医学、民用等方面,特别是在计算机、信息处理、通讯与电子系统、自动控制等领域中有着广泛的应用。当今,语音识别产品在人机交互应用中已经占到越来越大的比例。 1.3 相关领域的研究现状
嵌入式语音识别是近年来语音识别技术在嵌入式领域的热门应用,而语音识别技术又是嵌入式语音识别研究和发展的理论基础。
语音识别的研究工作开始于20 世纪50 年代,这一时期主要探索和研究声音和语音学的基本概念和原理。1952 年,贝尔实验室的Dvasi、Biddulph 和Balashek 开发了一个针对特定人的离散数字识别系统——Audry 系统,该系统主要依赖于测量数字元音区域的共振波谱。
60 年代,出现了语音识别方面的几种基本思想,这时期的重要成果是提出了线性预测
技术(Linear Prediction,LP)和动态规划(Dynamic Programming,DP) ,前者较好地解决了语音信号产生模型的问题,后者则有效解决了不等长语音的匹配问题,对语音识别的发展产生了深远的影响。
70 年代,伴随自然语言理解的研究以及微电子技术的发展,语音识别领域取得了突破性成果。在理论上,线性预测分析技术得到进一步应用,动态时间弯折(Dynamic timewarping,DTW)基本成熟,特别是提出了矢量量化(Vector Quantization,VQ)和隐马尔科夫模型(Hidden Markov Model,HMM)理论。在实践上,实现了基于线性预测倒谱和DTW技术的特定人孤立词语音识别系统。
80 年代,语音识别研究的重点之一是连接词语音识别,出现了各种连接词语音识别和关键词识别算法。另一个重要发展是语音识别算法从模板匹配技术转向基于统计模型的技术,尤其是HMM 模型和人工神经网络(ANN)在语音识别中的成功应用。人们的研究从微观转向宏观,不再刻意追求细化语音特征,而是更多地从整体平均的角度来建立最佳的语音识别系统。统计语言模型也开始取代基于规则语言的模型。具有里程碑意义的事件是1988 年美国卡耐基梅隆大学(CMU) 开发的基于VQ/HMM 997 词非特定人连续语音识别系统SPHINX。
90 年代,相应的研究工作在模型设计的细化、参数的提取和优化以及系统的自适应技术
等方面取得了一些关键性的进展,这使语音识别技术进一步成熟,并且出现一些很好的产品。一些国家和公司都为语音识别系统的实用化开发研究投以巨资,如美国、日本、韩国,以及IBM、Microsoft、Apple、AT&T、NTT 等著名公司。
2. 基本介绍
2.1能力风暴机器人
项目中使用到的机器人是广茂达公司提供的能力风暴智能机器人大学版AS-UIII。AS-UIII 是面向教育的新一代智能移动机器人。它有一个功能强大的微处理系统和传感器系统,而且它还能扩展听觉、视觉、和触觉,成为真正意义上的智能机器人。
能力风暴AS-UIII 采用NXP 公司的ARM7 中LPC2132 微处理器为控制核心。 LPC2132 是基于一个支持实时仿真和嵌入式跟踪的32/16 位ARM7TDMI-STM CPU的微控制器,并带有64kB 的嵌入的高速Flash 存储器。128 位宽度的存储器接口和独特的加速结构使32 位代码能够在最大时钟速率下运行。对代码规模有严格控制的应用可使用16位Thumb 模式将代码规模降低超过30%,而性能的损失却很小。
LQFP64 封装和极低的功耗使LPC2132 可理想地用于小型系统中。宽范围的串行通信接口和片内16kB 的SRAM 使LPC2132 非常适用于通信网关、
转换器、软modem、声音辨别和低端成像,为它们提供巨大的缓冲区空间和强大的处理功能。多个32 位定时器、8 路10 位ADC、1 路10 位DAC、PWM 通道和47 个GPIO 以及多达9 个边沿或电平触发的外部中断使它们特别适用于工业控制和医疗系统。 2.2识别算法理论
语音识别流程:2.2.1语音信号预处理
预处理是提高语音识别性能,增强稳健性的重要环节,并为特征参数的提取做准备。预处理主要包括:语音信号电压放大采样、反混叠失真滤波、预加重、自动增益控制、分帧、加窗等环节。同时还可能包含语音增强、端点检测、以及A/D 转换等。 2.2.1.1预加重
由于语音信号的平均功率谱受声门激励和口鼻辐射的影响,高频端大约在800Hz以上按6dB/倍频程跌落,为此要在预处理中进行预加重。预加重主要是为了提升高频部分,以弥补声音在唇部辐射时产生的高频部分损失,可以使信号的频谱变得平坦,保持在低频到高频的整个频带中,能用同样的信噪比求频谱,以便于进行频谱分析或声道参数分析。预加重可以在A/D 变换前,在预滤波之后进行,也可以在A/D 变换之后进行。语音信号数字化时在反混叠滤波器之前进行,这样不仅可以进行预加重,而且可以压缩信号的动态范围,有效地提高信噪比。但是预加重一般是在语音信号数字化之后,用具有6dB/倍频程的提升高频特性的预加重数字滤波器实现,它一般是一阶的。
H(z)=1-a*(z-1)
式中,μ 值一般取0.9~1 之间,本文选取μ 值为0.97。 2.2.1.2加窗分帧
由于语音信号是非平稳的时变过程,但是人的发音器官的肌肉运动速度较慢,所以可以认为语音信号是局部平稳的或短时平稳的。因此语音信号分析常采用分段或分帧的方法来处理,一般每秒的帧数为33~100,视情况而定,分帧可用连续的或交叠分段的方法。本文采用交叠分段的方法,可以保证帧与帧之间平滑过渡,保持其连续性。每帧的长度称为帧长,相邻两段交叠的部分称为帧移,帧长和帧移对应的点数由于采样频率的差异而不同,文中采取的帧长为160,帧移为80。 2.2.2语音信号噪声抑制
实际环境中,语音总会受到外界环境噪声的干扰,这些噪声包括从周围环境传输媒质中引入的噪声、电气设备的噪声以及其他说话人的干扰等。环境噪声使识别系统的性能大大下降,已经成为语音识别技术走向实用化的一个主要障碍,因此寻求一种合理有效的方法,滤除信号噪声是语音识别系统获得良好识别效果的重要前提2.2.3语音信号端点检测
语音的端点检测(Endpoint Detect)是语音识别中最基本的模块,尤其在嵌入式语音识别
系统中更是占有非常重要的地位:一方面端点检测的结果不准确,系统的识别性能就得
不到保证;另一方面如果端点检测的结果过于放松,虽然语音部分被很好的包含在处理信号中,但是增加过多的静音会增加系统的运算量,同时对识别性能也有负面影响。因此,选择一种准确、有效的端点检测方法无疑是整个系统中非常重要的部分。 2.2.4 语音信号特征提取
语音信号中含有丰富的信息,特征提取就是对语音信号进行分析处理,去除对语音识别无关紧要的冗余信息,提取对语音识别有用的重要信息。对于非特定人语音识别来说,希望特征参数尽可能多的反映语音信息,而尽量减少说话人的个人信息特征;对于说话人语音识别来说,则希望尽量多的保留说话人的个性特征,因此需要根据不同的应用目的选用相应的特征参数。本项目采用线性预测倒谱系数(Linear Prediction Cepstrum Coefficients, LPCC)。
LPCC 系数是LPC 系数经过倒谱分析推导而来的一种重要的倒谱系数。该特征是基于语音信号为自回归(Auto-Regressive, AR)信号的假设,利用线性预测分析获得倒谱系数。因此只要计算出LPC 系数,就可以通过倒谱分析求得LPCC 系数。LPCC 系数的求解过程如下:
(1) LPC 系数的求解。LPC 系数是模拟人的发音器官的,是一种基于语音合成的系数。对
于一个LPC 系统,采样点n 的输出s(n)可看成一个p 阶的AR 过程序列,可以表示为:
s(n)??aks(n?k)?Gu(n)
k?1
p
a
其中,a1, a2„„p 为常数。该式的Z 域表达式为:
S(z)??akz?kS(z)?GU(z)
k?1p
由此可以得到系统的传递函数为:
H(z)?
S(z)
U(z)
11??akz?k
k?1p
1A(z)
定义系统输出的估计为:
s(n)??aks(n?k)
k?1
p
进一步可得系统的估计误差为:e(n)?s(n)?s?(n)?s(n)??aks(n?k)
k?1
p
而相应的误差传递函数为:
p
E(z)A(z)??1??akz?k
S(z)k?1
由此可知,线性预测误差就等于激励与增益的乘积,即:
e(n)?G?u(n)
为了计算LPC 系数,首先定义起点为n 的短时语音信号和误差信号为:
sn(m)?s(n?m)en(m)?e(n?m)
误差平方和为:
p
2
En??en(m)???sn(m)??aksn(m?k)?
mm?k?1?
2
上式对各阶LPC 系数求导数,令其分别为零:
En
0,k?1,2,„„p ?ak
可得下式:
p
m
k?sn(m?i)sn(m?k)sn(m?i)sn(m)??a
k?1
m
根据相关函数的定义:
n(i,k)??sn(m?i)sn(m?k)
m
可以得到:
k?n(i,k),k?1,2„„p ?(i,0)??a
k?1
p
上式表示P 个方程的方程组,未知数为P 个。求解该方程组,就可以得到系统的线性预
测系数
(2) LPCC 系数的求解。利用倒谱分析递推关系,即可得到LPC 到LPCC 的直接递推关系如下:??logG2,m?0?m?1
k?
cm??am??ckam?k,1?m?p
k?1m?m?1
k?ckam?k,m?p??mk?1?
式中,m,p 分别是LPCC 与LPC 的阶数,根据两者的大小关系不同递推关系也有所不同。
m=0 时实际上是直流分量,在识别过程中通常是不需要的,无须计算。LPC 模型是基于发音模型建立的,LPCC 系数是一种基于合成的参数,其主要优点是有效地去除了语音产生过程中的激励信息,但是没有充分利用人耳的听觉特性。
2.2.5 DTW匹配算法
DTW 算法的基本思想是运用动态规划的思想,利用局部最佳化的处理来自动寻找一条路径,使得参考模板与测试模板的两个特征矢量之间的积累失真量最小,从而得出识别结果,同时避免了由于时间长度不同而可能引入的误差。DTW算法具有计算简洁、容易实现和识别率高等优点,在小词汇量孤立词语音识别中获得了良好的性能。 2.2.5.1 算法原理
假设测试和参考模板分别用T和R表示,为了比较它们之间的相似度,可以计算它们之间的距离 D[T,R],距离越小则相似度越高。为了计算这一失真距离,应从T和R中各个对应帧之间的距离算起。设n和m分别是T和R中任意选择的帧号,d[T(n),R(m)]表示这两帧特征矢量之间的距离。距离函数取决于实际采用的距离度量,在DTW算法中通常采用欧氏距离.
若N=M则可以直接计算,否则要考虑将T(n)和R(m)对齐。对齐可以采用线性扩张的方法,如果N
> 1; }
由A/D采样值得出一个16位数值,然后通过按位处理,将a的前10插入到位数组上。后面计算时通过每10位表示一个数据得出原来的采样值。
3.2.2 预处理信号数据存储
为了消除发声过程中声带和嘴唇的效应,来补偿语音信号受到发音系统所压抑的高频部分,需要对语音数据进行预加重处理,
预加重公式:H(z)=1-a*(z-1)
系数其中 a 介于 0.9 和 1.0 之间。若以时域的表达式来表示,预强调后的讯号 s2(n)
为 :s2(n) = s(n) - a*s(n-1)
由这个公式可以知道如果信号预加重后,将得出一个和原始信号数据一样大小的数组,但是这时候每个数据将变成浮点数,每个浮点数用4个字节表示,4000个数据将占用16K的RAM大小,超出了可用的空间,为了解决这个问题,我们采取了定义一个1帧大小数据的预加重数组空间,由于后面的处理都是按一帧帧的处理,所以每处理完一帧的数据后,都更新这个预加重数组。一帧大小为160个数据,可以知道这个预加重数组大小为160*4=640B。
具体做法如下:
#define HAMMING_LEN 160 #define FRAME_NUM 49
fp32 preData[HAMMING_LEN];
for(i=0;i„„
updatePreData(i*10*HAMMING_LEN/2);//更新preData数组 „„ }
3.2.3自相关系数存储
自相关函数是描述随机信号X(t)在任意两个不同时刻t1,t2,的取值之间的相关程度,根据LPCC算法可知,需要计算自相关系数,定义一个一帧大小的数组,如果以8K的采样率即自相关系数阶数为10,这个自相关系zxg[10+1]数数组大小为 (10+1)*4 =44B。 3.2.4 LPC系数存储
线性预测编码(LPC)是主要用于音频信号处理与语音处理中根据线性预测模型的信息用压缩形式表示数字语音信号谱包络的工具。它是最有效的语音分析技术之一,也是低位速下编码方法高质量语音最有用的方法之一,它能够提供非常精确的语音参数预测。
由LPC的计算公式需要定义一个10阶大小的数组LPC[10],则这个数组的大小为10*4 = 40B个字节 3.2.5 LPCC系数存储
LPCC 系数是LPC 系数经过倒谱分析推导而来的一种重要的倒谱系数。该特征是基于语音信号为自回归(Auto-Regressive, AR)信号的假设,利用线性预测分析获得倒谱系数。
LPCC的系数一般去12阶,这个数组LPCC[12*FRAME_NUM],其中FRAME_NUM为语音数据的帧总数,在我们的项目中FRAME_NUM =49,则这个数组总大小为:12*49*4=2352B。
3.2.6 DTW系数存储
在计算DTW中,需要定义一个大小为50*50大小的distance[][][二维浮点数组,用于动态时间规划计算,这个数组大小为 50*50*4 = 10000B?10KB,由上面的计算占用的RAM空间可以知道,将无法提供这个10KB空间,由于DTW算法只需要LPCC系数,前面的原始数据、自相关系数和LPC系数已经不需要,所以我们的做法是回收前面的数组占用的空间,只保留LPCC数组空间,然后再动态生成这个数组。由上面可以知道LPCC大小:2352B,两个数组总大小:10000B + 2352B = 12352B。具体实现: //先回收内存
#define DTWMAXNUM 50 free((uint8 *)sample); free((fp32 *)preData); free((fp32
*)zxg); free((fp32 *)LPC); //动态生成数组
distance = (fp32 **)malloc(sizeof(fp32*)*DTWMAXNUM); for(i=0; i
3.2.7 模板数据存储
每个模板数组大小为12*49 *4=2352B, 需要的5个模板值占用的总空间为:5*2352 = 11760B个字节,由于这些模板是不改变的,所以我们定义为常量数组,数据将存储在flash中,由于flash的大小为64KB,所以满足需要。
3.2.8 内存分配
distance[i] = (fp32 *)malloc(sizeof(fp32)*DTWMAXNUM);
3.2.8.1 在计算LPCC系数之前需要RAM空间:
(1)Sample:原始数据数组,大小: 5000B (2)preData:一帧的预加重数组,大小:640B (3)Zxg:自相关系数数组,大小:44B (4)LPC:LPC系数数组,大小:40B
(5)LPCC:LPCC系数数组,大小:2352B
需要的RAM总空间为:5000B+640B+44B+40B+2352B = 8076B,满足要求。 3.2.8.1.2在运算DTW算法需要的RAM空间
(1)LPCC:LPCC系数数组,大小:2352B (2)Distance:Distance数组,大小:10000B
需要的RAM总空间为:2352B+10000B=12352B,满足要求。5. 成果和不足
5.1成果
1.能够实现一定的语音识别功能;
5.2不足
1.没有达到预期的识别精度 2.只能实现特定人的语音识别
3.对噪音的抗干扰能力很弱,为了节省运算时间,我们省去了端点检测步骤,只通过一个阈值来判断是否语音开始,只要大于这个阈值,系统就认为语音开始,所以如果噪音大于这个阈值,同样会对噪音进行识别。
参考文献:
[1]基于DTW算法的语音识别系统实现 吴晓平 电子工程师,2004 [2]语音识别技术的进展 张青松 科技信息,2011
[3]机器人嵌入式语音识别系统研究 刘桂斌 硕士学位论文,中国石油大学 [4]基于低信噪比条件下的VAD算法研究 汪 涛 电子工程师,2005 [5]一种基于DTW的孤立词语音识别算法 张军 计算机仿真,2009 [6]语音识别中DTW算法改进研究 文翰 微计算机信息,2010
[7]基于语音识别系统中DTW算法改进技术研究 陈立万 微计算机信息,2006 [8]改进的DTW算法在实时语音辨识系统中的应用 曹茂俊 科学技术与工程,2010 [9]嵌入式语音识别算法的研究与实现 熊飞 硕士学位论文,太原理工大学 [10]嵌入式语音识别系统设计 何燕玲 微计算机信息,2007