轮椅机器人语音识别系统研究_第1页
轮椅机器人语音识别系统研究_第2页
轮椅机器人语音识别系统研究_第3页
轮椅机器人语音识别系统研究_第4页
轮椅机器人语音识别系统研究_第5页
已阅读5页,还剩41页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

济南大学毕业设计济南大学毕业设计2-2-毕业设计题目轮椅机器人语音识别系统研究学院机械工程学院专业济南大学毕业设计PAGE42-1前言1.1课题研究的背景及意义随着人口老龄化问题越来越严重以及人民生活水平的提高,无论是高龄老年人还是先天或后天肢残者对轮椅等辅助步行工具的需求将日益迫切。为了给老年人和残障人士提供性能优越的代步工具,帮助他们提高行动自由度及重新融入社会,目前美国、日本、法国、加拿大、西班牙及中国等许多国家对智能轮椅进行了研究,使智能轮椅具有记忆地图、智能避障、自动行走、爬楼梯、与用户交互等多种功能。但是市场上的轮椅要么太贵,为一般人所不能承担;要么功能不全面,安全性能太差。所以研究一种功能强大,人机界面人性化,安全性好,价格低廉的智能轮椅的任务已经迫在眉睫,而且智能轮椅的商机无限[1]。鉴于此,我们研究了一种基于凌阳单片机控制的智能轮椅机器人,并对控制系统进行模块化设计,有利于轮椅机器人的功能扩展和升级。1.2轮椅机器人的国内外研究现状自1986年英国开始研制第一辆智能轮椅来,许多国家投入较多资金研究智能轮椅。如美国麻省理工学院WHEELESLEY项目、法国VAHM项目、日本Orpheu项目、西班牙SIAMO项目、加拿大AAI公司TAO项目、欧盟TIDE项目、KISS学院TINMAN项目、台湾中正大学电机系LUOSON项目、我国863智能机器人智能轮椅项目及第三军医大学外科研究所项目等。由于各个实验室的目标及研究方法不尽相同,每种轮椅解决的问题及达到的能力不同[1]。初期的研究,赋予轮椅的功能一般都是低级控制,如简单的运动、速度控制及避障等。随着机器人控制技术的发展,移动机器人大量技术用于轮椅,智能轮椅在更现实的基础上,有更好的交互性、适应性、自主性。1.2.1国外研究现状1989年法国开始研究VAHM项目,第一阶段的智能轮椅由轮椅、PC486、超声波传感器、人机界面和一个可匹配用户身体能力转换的图形屏幕组成,设置为手动、自动、半自动三种模式,手动时轮椅执行用户具体指令和行动任务;自动状态用户只需选定目标,轮椅控制整个系统,此模式需要高度的可靠性;半自动模式下用户与轮椅分享控制。为了更好适应用户需求,研究者在康复中心进行了一系列调查,得出结论:系统必须是多功能的,不仅应适应残障人士的生理和认知能力,也应适应环境的结构和形态。在此基础上,经改进研制出第二代产品(如图1.1所示),其功能更丰富,面向用户范围更广,性价比更好,改良了大量控制[1]。图1.1VAHM麻省理工智能实验室的智能轮椅威尔斯利(见图1.2),为一半自主式机器人轮椅,配备有计算机控制和传感器的电动轮椅,还装有一个Macintosh笔记本电脑用于人机界面交互,其硬件是从KISS学院买来用于机器人实践。系统有两种级别的控制:高级方向指令和低级计算机控制路线,用户拥有最高控制级别。系统由两部分组成,智能轮椅系统提供低级控制,避障和保证正确的运动方向;用户和轮椅之间的人机界面提供高级控制。这个智能轮椅允许用户通过三种方式来进行控制:菜单、操纵杆和用户界面。菜单模式下,轮椅的操作类似一般的电动轮椅。在操纵杆模式下,用户通过操纵杆发出方向命令来避障。用户界面模式下,用户和机器之间仅需通过用户眼睛运动来控制轮椅,即用鹰眼系统来进行驱动。该轮椅在国际联合会的机器人轮椅展览中夺得第一,且是唯一不需要人来指导即穿过门口的机器人[1]。图1.2威尔斯利日本残疾人国家康复中心开发了针对物理残疾者使用的智能轮椅(如图1.3所示),该轮椅区别于其他同类产品的最大特征是在用户头部的上方安装有多个视觉传感器,可以探测360度范围内的物体。当传感器探测到障碍物时轮椅可随时停下,借助于集成WI—FI技术,轮椅甚至可以把混合图像传输到电话中。该轮椅也可通过使用者的手势来控制运动方向[1]。图1.3Orpheu1.2.2国内研究现状我国智能轮椅研究起步较晚,在机构的复杂性和灵活性上和国外相比有一定差距,但也根据自身特色研制出技术指标接近国外先进水平的智能轮椅。研究单位有中科院自动化所、上海交通大学、第三军医大学和香港中文大学等。中国科学院自动化研究所研制了一种具有视觉和口令导航功能并能与人进行语音交互的机器人轮椅(见图1.4),曾在863计划十五周年成就展展馆的人群中穿梭自如。此项研究成果于2000年11月通过863智能机器人主题专家组的鉴定,并研制出我国第一台多模态交互式智能轮椅样机。此项研究高度重视了智能轮椅人机控制界面的设计,在轮椅的设计中综合运用模式识别实验室有关图像处理、计算机视觉和语音识别等最新成果,使人能通过语音控制轮椅自由行走,轮椅可以实现简单的人机对话功能[1]。图1.4中科院智能轮椅上海交通大学开发成功一种声控轮椅,主要是为四肢全部丧失功能的残疾者设计,使用者只需发出“开”、“前”、“后”、“左”、“右”、“快”、“慢”、“停”等指令,轮椅可在1.2秒内按指令执行。香港中文大学高级机器人实验室开发的智能轮椅,如图1.5所示,这个项目的目标是开发一辆具有友好的人机界面的智能轮椅,它可以用来做很多高级控制。同时它采用了人的行为模型来提高传统轮椅的可用性和功能[1]。图1.5香港中文大学开发的轮椅1.3轮椅机器人的发展趋势经过近20年的研究发展,智能轮椅的研究有了很大的进展,功能不断丰富,安全可靠性不断提高,但是也存在一定的问题:(1)人机交互不够自然。虽然已经开发了多种智能轮椅人机交互接口,但是仍处于通过人机接口对轮椅进行简单控制的阶段,对自然交互中使用者的无意识行为与有意识行为的区分还很欠缺,无法达到自然交互的目的。(2)轮椅的安全保障系统不够完善。目前多数智能轮椅平台较重视功能性实现,对于各种环境下危险发生的可能性以及相应的保障措施研究不够。(3)智能轮椅控制系统实时性较差,功耗较大,续航能力不高,离真正的实用还有一定距离。鉴于此,我认为智能轮椅未来的发展趋势有以下几个方面:(1)人机交互自然化。通过多种人机交互接口结合,智能轮椅系统能够更加充分地与使用者进行交流和沟通,更加准确地理解使用者的操纵意图。(2)安全保障全面化。利用日益进步的传感器技术,构建完善的智能轮椅保障系统,通过对周围环境更加全面的了解,实时监测智能轮椅的运动状态,对危险状态进行报警和阻止,尽可能避免危险的发生。(3)产品化。产品化是任何高新技术服务于社会的必经之路,采用嵌入式控制系统将是智能轮椅未来的发展方向,利用嵌入式产品功耗低、运算能力强的特点,将能够实现真正的智能轮椅产品。(4)模块化。要实现智能轮椅的批量生产,智能轮椅的各项功能必须模块化,包括导航系统、人机接口、运动控制以及机械臂等等。以便于为不同的用户定制不同的功能模块组合,同时也便于对各个功能模块的升级和再开发[1]。1.4本文研究的内容及要解决的问题本设计的研究目标是为轮椅机器人建立孤立词、小词汇表、特定人的实用语音识别系统,实现对轮椅机器人运动的语音控制。这样不仅可以提供自然、和谐的人机交互方式,而且可为使用者带来极大的方便。针对上述研究目标,对轮椅机器人语音指令识别算法和轮椅机器人的语音识别控制系统这两方面的内容进行设计。1.5小结经过对智能轮椅应用背景和国内外现状的分析,我觉得智能轮椅应用前景和市场前景非常乐观,智能轮椅的许多技术难题已经得到解决,再加上智能轮椅出色的的多元化功能,它的应用一定会为残疾人解决很多生活中的困难,为残疾人带来实惠,这也是我们的研究目的所在。2语音识别基本原理2.1概述语音识别是一门交叉学科。近二十年来,语音识别技术取得显著进步,开始从实验室走向市场。人们预计,未来10年内,语音识别技术将进入工业、家电、通信、汽车电子、医疗、家庭服务、消费电子产品等各个领域。语音识别听写机在一些领域的应用被美国新闻界评为1997年计算机发展十件大事之一。很多专家都认为语音识别技术是2000年至2010年间信息技术领域十大重要的科技发展技术之一。语音识别技术所涉及的领域包括:信号处理、模式识别、概率论和信息论、发声机理和听觉机理、人工智能等等。根据识别的对象不同,语音识别任务大体可分为3类,即孤立词识别(isolatedwordrecognition),关键词识别(或称关键词检出,keywordspotting)和连续语音识别。其中,孤立词识别的任务是识别事先已知的孤立的词,如“开机”、“关机”等;连续语音识别的任务则是识别任意的连续语音,如一个句子或一段话;连续语音流中的关键词检测针对的是连续语音,但它并不识别全部文字,而只是检测已知的若干关键词在何处出现,如在一段话中检测“计算机”、“世界”这两个词。根据针对的发音人,可以把语音识别技术分为特定人语音识别和非特定人语音识别,前者只能识别一个或几个人的语音,而后者则可以被任何人使用。显然,非特定人语音识别系统更符合实际需要,但它要比针对特定人的识别困难得多。根据语音识别的方法分,可以把语音识别技术分为模板匹配法、随机模型法和概率语法分析法。这些方法都属于统计模式识别方法。其识别过程大致如下:首先提取语音信号的特征构建参考模板,然后用一个可以衡量未知模式和参考模板之间似然度的测度函数,选用一种最佳准则和专家知识作出识别决策,给出识别结果。随机模型法是一种使用隐马尔可夫模型(HMM)来对似然函数进行估计与判决,从而得到相应的识别结果的方法。语音识别系统本质上是一种模式识别系统。它的基本框图如下图所示,与常规的模式识别系统一样,包含有特征提取、模式匹配和参考模式库等三个基本单元。但是由于语音识别系统所处理的信息是结构非常复杂、内容极其丰富的人类语言信息,因此它的系统结构比通常的模式识别系统要复杂得多。图2.1语音识别的原理框图2.2隐马尔可夫模型技术隐马尔可夫模型(HiddenMarkovModelS,简称HMM)作为语音信号的一种统计模型,今天正在语音处理各个领域中获得广泛的应用。本章主要讨论隐马尔可夫模型的基本思想和基本算法。2.2.1隐马尔可夫模型经典的隐马尔可夫模型(HMM)是一种统计信号模型,它是目前最为成功的一种连续语音识别模型和算法。目前所能见到的各种性能优良的连续语音的识别系统几乎无一例外地采用了这种模型。这种数学模型出现的时间较早,人们对它的研究也比较深入,已建立起了完整的理论框架。从80年代初人们开始用这种模型来描述语音信号后,就不断有人对它进行各种改良和发展。HMM模型可分为离散隐马尔可夫模型(采用离散概率密度函数,简称DHMM)和连续隐马尔可夫模型(采用连续概率密度函数,简称CHMM)以及半连续隐马尔可夫模型(SCHMM,集DHMM和CHMM特点)。HMM是使用马尔可夫链来模拟信号的统计特性变化,例如对于这样一个系统,它在任何时间可以认为处在N个不同状态S1,S2,…,SN,中的某个状态下,在均匀划分的时间间隔上,系统的状态按一组概率发生改变(包括停留在原状态),一般由初始状态分布概.率矢量π,状态转移阵A和状态相关联的概率分布阵B所组成,则兀i是初态为i时的概率,aij是从状态i到状态j的转移概率,bi是在状态i时的概率分布。其中aij是一个与时间无关的常数。隐马尔可夫模型的核心问题即解决三个基本关键问题:l)已知观测序列O={O1,O2…OT}和模型λ=(A,B,π),如何有效地计算在给它模型λ条件下产生观测序列O的(条件)概率P(O|λ)最大?2)已知观测序列O={O1,O2…OT}和模型λ=(A,B,π),如何选择相应的在某种意义上最佳的(能最好地解释观测序列的)状态序列。3)如何调整模型参数(A,B,π)以使条件概率P(O|λ)最大?第一个问题是评估问题,即已知模型和一个观测序列,如何计算由该模型产生出该观测序列的概率,问题1的求解能够选择出与给定的观测序列最匹配的模型。第二个问题力图揭露出模型中隐藏着的部分,即找出“正确的”状态序列,这是一个典型的估计问题。第三个问题是使模型参数最优化,即调整模型参数,以使模型能最好地描述一个给定观测序列,最好地说明这个观测序列就是最优化模型产生出来的。用于调整模型参数,使之最优化的观测序列称为训练序列。通过训练自适应调整模型参数使之适应于训练序列并最优化,从而得到实际应用中最好的模型[2]。2.2.2隐马尔可夫模型应用于语音识别用HMM刻画语音信号需作出两个假设,一是内部状态的转移只与上一状态有关,另一是输出值只与当前状态(或当前的状态转移)有关,这两个假设大大降低了模型的复杂度,将语音看成是一连串的特定状态,这种状态是不能被直接观测到的(例如这种状态可以是语音的某个音素),而是以某种隐含的关系与语音的观测量(或特征)相关联,而这种隐含关系在隐含马尔可夫模型中通常以概率形式表现出来,模型的输出结果也以概率形式给出,这为系统最后给出一个稳健的判决创造了条件。语音识别中使用HMM;通常是用从左向右单向、带自环、带跨越的拓扑结构来对识别基元建模,实践证明,图2.2所示的三转移和二转移HMM都可以取得较好的识别效果。如今,各种形式的隐含马尔可夫模型和算法已日趋成熟,以它为基础己经形成了语音识别的整体框架模型,它统一了语音识别中声学层和语音学层的算法结构,制定了最佳的搜索和匹配算法,以概率的形式将声学层中得到的信息和语音学层中已有的信J自、完美地结合在一起。因此,隐含马尔可夫语音识别模型与算法是迄今为止最为完美的一个语音识别模型。从隐含马尔可夫模型的成功应用中我们也可看出完美的理论体系对研究工作所起的重要的指导作用。图2.2三转移和二转移HMM隐含马尔可夫模型应用于孤立词语音识别系统,第一个任务是建立每个单词的模型,这是用求解上述问题3来完成的,即通过训练序列调整模型参数,使之最佳,这样得到每个单词的最佳参数模型。为了增进对模型状态物理意义的了解,需要求解问题2,可以把单词的训练序列分成一些段,每段对应于一个状态。一旦V个单词的隐马尔可夫模型设计出来,并最优化和经过研究后,就可以利用这些模型来对任何未知的语音进行识别,这是由求解问题1来完成的。未知语音是试验观测序列,求解问题1时要每个单词的HMM模型打分(评估它们与试验序列匹配的情况),最后选择得分最高的模型所对应的单词作为识别结果。假定词库中有V个词,每个词用一个HMM来描述,同时假定每个词有K遍训练数据,每遍训练数据经过特征提取得到一个矢量序列,则孤立词语音识别必须解决以下问题:l)对词库中每个v建立一个隐马尔可夫模型λv,即用训练集数据估计λv=(AV,BV,πV)。2)对每一个要识别的词,首先经特征提取得到观察序列O=(o1,o2,…oT),然后对每个模型λv求P(O|λv),1≤v≤V,最后选择模型的似然度最高的词作为识别结果,即:HMM模型的训练和识别都已研究出有效的算法,并不断被完善,以增强HMM模型的鲁棒性。HMM的打分(问题1)、模型参数调整(问题2)和训练(问题3)相应的算法是前向算法、Viterbi算法和前向后向算法[2]。2.2.3Baum-Welch算法这个算法实际上是解决HMM训练的,即HMM参数估计问题的。或者说,给定一个观察值序列0=o1,o2,…,oT该算法能确定一个M={A,B,π},使P(O|M)最大。下面具体介绍Baum-Welch算法。给定一个(训练)观察值符号序列0=o1,o2,…,oT,以及一个需要通过训练进行重估参数的HMM模型M={A,B,π}。按前向—后向算法,设对于符号序列0=o1,o2,…,oT,在时刻t从状态Si转移到状态Sj的转移概率为γt(i,j),则γt(i,j)可表示如下:同时,对于符号序列0=o1,o2,…,oT,在时刻t时Markov链处于状态Si的概率为:这样,对于符号序列0=o1,o2,…,oT,从状态Si转移到状态Sj的转移次数的期望值为;而从状态Si转移出去的次数的期望值为。由此,可以导出Baum-Welch算法中著名的重估(Reestimation)公式:所以根据观察值序列0=o1,o2,…,oT和选取的初始模型M={A,B,π},由上面两个重估公式,求得一组新参数和,亦即得到了一个新的模型。下面给出利用Baum-Welch算法进行HMM训练具体步骤:1)适当地选择aij和bij(k)的初始值。一般情况下可以按如下方式设定:A:给予从状态i转移出去的每条弧相等的转移概率aij=B:给予每一个输出观察符号相等的输出概率初始值bij(k)=并且每条弧上给予相同的概率距阵;2)给定一个(训练)观察值符号序列0=o1,o2,…,oT,由初始模型计算等,并且,由上述重估公式,计算和;3)再给定一个(训练)观察值符号序列0=o1,o2,…,oT,把前一次的和作为初始模型计算等,由上述重估公式,重新计算和;4)如此反复,直到和收敛为止。应当指出,HMM训练,或称参数估计问题,是HMM在语音处理中应用的关键问题。另一方面,由于在实际的语音信号处理系统中,往往用一个高斯概率密度函数不足以表示语音参数X的输出概率分布,所以一种常用于语音信号处理的概率密度函数,称之为“高斯M元混合密度”,即用多个高斯概率分布的加权组合来表示输出概率密度函数。如下式所示:这里是混合系数,又叫分歧概率(BranchProbability);(X)叫分歧密度(BranchDensity);这种HMM称为连续混合密度HMMContinuousMixtureDensitiesHMM,简称为CMHMM)。本系统采用有跳转自左向右连续HMM,这有效地解决了语音中某些发音单位在实际说话中可能被吸收和删除的问题。LawrenceRabiner的研究表明每个音节设置3个状态能达到最高识别率,实验中针对语句中大部分关键词为三音节的特点,确定模型状态数为9,如图2.3。模型的状态输出矢量概率分布采用若干高斯概率密度函数的线性叠加[2]。图2.3状态自左向右隐马尔可夫模型2.3小结通过本章对语音识别原理的初步介绍,包括分类、算法等等,我对语音识别有了初步的了解,知道了语音识别的常用方法,例如DTW时间规整算法、隐马尔可夫模型算法等等。对隐马尔可夫模型算法有了大致的了解,知道了其基本思路,懂得了HMM是目前常用的语音识别模型,像目前常用的凌阳61单片机的语音识别功能就是基于该模型算法,相信经过进一步的学习我会掌握得更好。3硬件系统设计3.1系统总体方案介绍本系统涉及到的硬件主要有凌阳SPCE061A单片机及在线调试电路,74LS148译码芯片,Bantam驱动器和直流电机等。3.1.1系统硬件结构框图系统硬件结构框图如下:放音模块放音模块凌阳SPCE061A单片机凌阳SPCE061A单片机I/O语音输入语音输入直流电机直流电机电源转换模块电源转换模块Bantam驱动器74LS148译码芯片Bantam驱动器74LS148译码芯片图3.1系统原理框图3.1.2系统电路原理图系统电路原理图如下:图3.2系统电路原理图3.1.3系统电路分模块简介1)电源模块SPCE061A采用低电压供电方式,这可以大大降低芯片的功率损耗。其中,SPCE06lA的电源分两种,即内核电源(VDD)和I/O口电源(VDDH)。I/O口电源采用5V电压,而内核电源则为3.3V或者更低。降低芯片内核电压的目的主要还是降低芯片的功耗,同时也可以降低芯片的工作温度,延长芯片使用寿命。尽管这种语音芯片的工作电压范围很大,但是为了使芯片内核运行更加稳定,同时又保证I/O口及外部扩展部件的工作电压要求,系统采取:AC220V电源通过AC10V进行整流,利用以7805稳压集成块为核心的电路,产生+5V电源,作为语音识别与播放模块共同使用的电源。+5V电源经过LM1082-3.3得到DC3.3v为CPU核心供电。2)音频输出电路模块放音利用的是SPCE06lA内部集成的DAC,它是电流输出,为了能够驱动扬声器SPEAKER放音需要相应的驱动电路。图中的SPY0030单运放是凌阳公司的产品。与常用的单运放LM386比,SPY0030的优势在如LM386的工作电压需要在4v以上,而SPY0030只需要2.4v可工作,LM386的输出功率在100mw以下,而SPY0030约为700mw,可以提供足够的驱动能力。音频输出电路如图3.3所示。图3.3音频输出电路3)MIC输入模块SPCE061A的A/D转换器有8个通道,其中有1个通道是MIC-NI输入,它专门用于对语音信号进行采样。语音信号经过MCI转换成电信号,然后输入至SPCE061A内部前置放大器。由于人们说话时,麦克风距离嘴边的距离不同,语音信号的能量将会有很大的差异,此时,如果芯片的的输入信号太大或是太小都将影响识别的精度。而SPCE06lA内部就带有自动增益控制电路AGC能随时跟踪、监视前置放大器输出的音频信号电平,当输入信号增大时AGC电路自动减小放大器的增益;当输入信号减小时,AGC电路自动增大放大器的增益,从而以补偿太小或是太大的信号,以便使进入户A/D的信号保持在最佳电平,又可使削波减至最小。4)通信接口电路单片机中的数据通过串口经MAX232电平转换成RS-232电平向上位传输。由于SPCE06lA的串行口都为TTL电平,它与RS-232C电平互不相容,所以在二者接口处,必须进行电平转换。利用MAX232芯片外接5V电源,外接电容,可产生正负10V的电源形成232C的收发器。本系统中设有通信电路是为将大量语音数据处理都需要上传给PC,由PC完成。比如,噪声能量和过零率的计算,数字滤波器设计,模型库的训练等。3.2凌阳单片机简介3.2.1总述SPCE061A是继μ’nSP系列产品SPCE500A等之后凌阳科技推出的又一个16位结构的微控制器。与SPCE500A不同的是,在存储器资源方面考虑到用户的较少资源的需求以及便于程序调试等功能,SPCE061A里只内嵌32K字的闪存(FLASH)。较高的处理速度使μ’nSP能够非常容易地、快速地处理复杂的数字信号。因此,与SPCE500A相比,以μ’nSP为核心的SPCE061A微控制器是适用于数字语音识别应用领域产品的一种经济的选择。3.2.2性能16位μ’nSP微处理器;工作电压:VDD为2.6~3.6V(CPU),VDDH为VDD~5.5V(I/O);CPU时钟:0.32MHz~49.152MHz;内置2KWords的SRAM;内置32KWords的FLASH;可编程音频处理;系统处于备用状态下(时钟处于停止状态),耗电小于2μA@3.6V;2个16位可编程定时器/计数器(可自动预置初始计数值);2个10位DAC(数-模转换)输出通道;32位通用可编程输入/输出端口;14个中断源可来自定时器A/B,时基,2个外部时钟源输入,键唤醒;具备触键唤醒的功能;使用凌阳音频编码SACM_S240方式(2.4K位/秒),能容纳210秒的语音数据;锁相环PLL振荡器提供系统时钟信号;32768Hz实时时钟;7通道10位电压模-数转换器(ADC)和一个单通道的声音专用模-数转换器;声音模-数转换器输入通道内置麦克风放大器和自动增益控制(AGC)电路;具备串行设备接口;具有低电压复位(LVR)功能和低电压监测(LVD)功能;内置在线仿真电路ICE(In-CircuitEmulator)接口;具有保密能力;具有WatchDog功能(由具体型号决定)。3.2.3结构概览SPCE061A的结构如图3.4所示:图3.4SPCE061A结构图3.2.4最小应用系统SPCE061A单片机的最小系统就是能够维持其正常工作的最精简电路。应该包含以下几块功能:电源(包含数字电源、模拟电源、端口电源及其滤波电路)、时钟电路、复位电路、端口电路和在线调试器接口电路。最小系统电路原理图如下:图3.5最小系统原理图从最小应用系统的电路图中可以看出,SPCE061A的电源引脚设计也很有特点,就是采用3对引脚和3组电源,分别为片内的数字电路、模拟电路、I/O端口,单独供电和滤波。数字电路和模拟电路分开供电的目的是尽量避免内部数字电路和模拟电路之间的干扰;I/O端口既可应用与数字电路相同的电源VDD,也可以单独利用5V供电。这是为了与广泛的常规5V外围器件对接(例如74系列标准集成数字电路等),也是为了能够提供更强大的端口驱动电流。这应该是这种混合信号处理型单片机SPCE061A与其他常见的、传统的单片机的显著区别之一[3]。3.2.5SPCE061A开发方法SPCE061A的开发是通过在线调试器PROBE实现的。它既是一个编程器(即程序烧写器),又是一个实时在线调试器。用它可以替代在单片机应用项目的开发过程中常用的软件工具——硬件在线实时仿真器和程序烧写器。它利用了SPCE061A片内置的在线仿真电路ICE(In-CircuitEmulator)接口和凌阳公司的在线串行编程技术。PROBE工作于凌阳IDE集成开发环境软件包下,其5芯的仿真头直接连接到目标电路板上SPCE061A相应管脚,直接在目标电路板上的CPUSPCE061A调试、运行用户编制的程序。PROBE的另一头是标准25针打印机接口,直接连接到计算机打印口与上位机通讯,在计算机IDE集成开发环境软件包下,完成在线调试功能。3.2.6应用领域语音识别类产品仪器仪表家电产品自动售货机智能语音交互式玩具高级亦教亦乐类玩具儿童电子故事书类产品通用语音合成器类产品需较长语音持续时间类产品3.3Bantam驱动器简介Bantam驱动器是一种控制直流有刷或无刷电机的力矩调节的电流放大器,它的结构小巧紧凑、使用简单,是一种不错的驱动器。图3.6Bantom驱动器3.4小结通过原理图我们可以清楚地看到本系统的硬件组成,其大致功能也一目了然。通过对本系统不同模块的划分,我们可以清楚的看到每一部分的作用及实现方法。凌阳单片机应用非常广泛,其功能之强大令人瞠目,通过凌阳单片机的简介我们大致了解了其基本参数和具备功能,相信以后通过深入学习我们一定会熟练的运用它。4软件系统设计4.1引言凌阳SPCE061A单片机可以用汇编语言和C语言编写,既可以用前者调用后者,也可以用后者调用前者,凌阳单片机的编程方法比较灵活,此外,凌阳单片机的开发环境中集成了许多库函数,方便读者调用。读者可以利用这些库函数进行编程,只要编程前声明一下就可以,下面介绍一下本系统的主程序、语音识别子程序、中断服务子程序和一些其他的程序。4.2主程序初始化初始化调用提示辨识音播放训练第三条指令调用提示辨识音播放训练第三条指令定义存储器定义存储器成功否成功否 否获取语音数据调用第一条提示音播放获取语音数据调用第一条提示音播放训练第四条指令 是训练第四条指令辨识主循环辨识主循环成功否训练触发名称 成功否训练触发名称 否成功否 是成功否训练第五条指令训练第五条指令否 是成功否训练第一条命令成功否训练第一条命令 否开始识别成功否 否 是开始识别成功否训练第二条命令 是训练第二条命令辨识器初始化辨识器初始化成功否 成功否启动实时监控 否启动实时监控 是图4.1主程序框图4.3凌阳音频程序设计4.3.1SACM_S480算法的API简介凌阳音频压缩算法根据不同的压缩比分为以下几种:SACM-A2000:压缩比为8:1,8:1.25,8:1.5SACM-S480:压缩比为80:3,80:4.5SACM-S240:压缩比为80:1.5按音质排序:A2000>S480>S240本系统因考虑到凌阳61单片机的存储有限,选用SACM-S480的压缩算法。凌阳单片机的语音处理过程如下图所示:存储存储编解码处理D/A转换喇叭A/D编解码处理D/A转换喇叭A/D转换麦克风图4.2单片机对语音处理过程SACM-S480算法需要用到的函数如下:voidSACM_S480_Initial(intInit_Index)//初始化voidSACM_S480_ServiceLoop(void)//获取语音资料,填入译码队列voidSACM_S480_Play(intSpeech_Index,intChannel,intRamp_Set)//播放voidSACM_S480_Stop(void)//停止播放voidSACM_S480_Pause(void)//暂停播放voidSACM_S480_Resume(void)//暂停后恢复voidSACM_S480_Volume(Volume_Index)//音量的控制unsignedintSACM_S480_Status(void)//获取模块的状态CallF_FIQ_Service_SACM_S480//中断服务函数函数具体用法本处不在写出,详情请参考凌阳单片机的学习用书。4.3.2语音辨识凌阳单片机的辨识也可以直接调用凌阳单片机的辨识函数即可,其原理框图如下:图4.3语音辨识原理框图用到的主要函数如下:BSR_DeleteSDGroup(0)//SRAM初始化BSR_Train(intCommandID,intTraindMode)//训练函数voidBSR_InitRecognizer(intAudioSource)//辨识器初始化BSR_GetResult()//辨识中获取数据voidBSR_StopRecognizer(void)//停止辨识具体用法读者可以阅读凌阳单片机参考用书。4.4语音识别中断服务子程序SPCE061A单片机中断系统,可以提供14个中断源,具有两个中断优先级,可实现两级中断嵌套功能。用户可以用关中断指令(或复位)屏蔽所有的中断请求,也可以用开中断指令使CPU接受中断申请。每一个中断源可以用软件独立控制为开或关中断状态,但中断级别不可用软件设置。图4.4中断服务流程图SPCE061.lib中提供了相应的API函数如下所示:voidSet_INT_Ctrl(unsignedint)//SetINTEnableunsignedintGet_INT_Mask(void)//GetINTEnablingInformationunsignedintGet_INT_Ctrl(void)//GetINTFlagvoidINT_Clear(unsignedint)//voidINT_Clear(unsignedint)voidFIQ_ON(void)//INTOn/OffFunctionvoidFIQ_OFF(void)//INTOn/OffFunctionvoidIRQ_ON(void)//INTOn/OffFunctionvoidIRQ_OFF(void)//INTOn/OffFunctionvoidINT_FIQ(void)//INTOn/OffFunctionvoidINT_IRQ(void)//INTOn/OffFunctionvoidINT_FIQ_IRQ(void)//INTOn/OffFunctionvoidINT_OFF(void)//INTOn/OffFunction图4.4特定人连续语音识别中断程序流程4.5其他程序本程序还涉及到的其他子程序如下:voidDelay()//延时voidPlaySnd(unsignedSndIndex,unsignedDAC_Channel)//语音播放函数intTrainWord(intWordID,intSndID)//训练一条指令voidTrainSD()//训练函数voidStoreSD()//存储语音模型函数voidLoadSD()//装载语音模型函数voidGoAhead()//前进子函数voidBackUp()//后退子函数voidTurnLeft()//左转子函数voidTurnRight()//右转子函数voidStop()//停车子函数voidIRQ5(void)//中断服务子函数intmain(void)//主函数flash.asm//SPCE06132Kflash的读写ISR.asm//语音播放/识别中断服务这些程序中有些是自己编写的,有些是凌阳库函数自带的,具体用法详见附录。4.6小结通过本节对凌阳单片机编程语言习惯以及常用库函数的介绍,我们已经知道了凌阳强大以及方便的编程功能。通过对主程序以及其他子程序框图的了解,我们知道了该程序编写的大致思路及其是否能实现语音识别和控制小车动作的功能。5结论2010年的全国人口普查显示,我国正步入老龄化社会,是名副其实的未富先老国家,而且以后每年老年人口的增速也相当惊人,许多老年人步入晚年后由于腿脚不灵活而不能出门欣赏外面的由于高科技变革而带来的日新月异的变化,而这一切恐怕要靠轮椅帮忙了。现在的普通轮椅虽然实用但功能实在是太少,何谈享受之说。为了让老年人享受生活,安度晚年,智能轮椅无非是很好的选择。鉴于此,我们研究了一种基于语音识别的轮椅机器人,语音控制可以让老年人不用花费一点力气自由自在控制轮椅的运动,它给老年人带来的享受是无法形容的,我相信其肯定有非常大的应用前景。我们主要从以下方面对该课题进行了研究:硬件方面主要使用了SPCE061A单片机进行语音识别,选用了Bantom驱动器最为电机电路的放大器,选用了直流永磁电机作为轮椅的动力源,用凌阳单片机自带的下载线作为其与PC机的连接。软件方面将程序分为主程序、语音识别程序、中断程序和一些其他的程序,例如训练命令程序、动作程序和存储程序等等。这样可以将繁杂的程序分成许多块,方便编程更方便读者阅读和理解。程序中的函数主要是调用凌阳单片机的库函数,自己编写了一部分函数,这些程序通过主程序调用最终实现语音控制小车的功能。总之,我们认为该轮椅机器人结构简单,性价比高,是一款不错的产品,有很大的发展潜力。通过这次设计,我初步了解了有关语音识别方面的很多知识,可以说是开阔了眼界,学到了很多东西,也有很多看不懂得章节,深深感受到了学无止境这句话的深层含义。参考文献[1]何清华,黄素平,黄志雄.智能轮椅的研究现状和发展趋势[J].机器人技术与应用,2003,02:12-16[2]韩纪庆等.语音信号处理[M].北京:清华大学出版社,2004.9:191-284.[3]李学海.16位语音型单片机SPCE061A实用教程--基础篇[M].北京:人民邮电出版社,2007-3:30-45.[4]吴黎明.语音信号及单片机处理[M].北京:科学出版社,2007.3:14-56.[5]王炳锡等.实用语音识别基础[M].北京:国防工业出版社,2005.1:55-101[6]周明德.微型计算机原理及应用[M].北京:清华大学出版社,2007.1:238-261.[7]侯媛彬等.凌阳单片机原理及其毕业设计精选[M].北京:科学出版社,2006.1:77-134.[8]谭浩强.C程序设计(第三版)[M].北京:清华大学出版社,2005.7:155-202.[9]蒋立平.模拟电路与数字电路(第2版)[M].北京:电子工业出版社,2008.7:91-121.[10]雷静.语音识别技术的研究及基本实现:[硕士学位论文][D].湖北:武汉理工大学,2002:29-32[11]金晶.轮椅机器人语音识别、控制系统的研究:[硕士学位论文][D].江苏:苏州大学,2006:23-25[12]诸刚.用于机器人控制的汉语语音识别系统:[硕士学位论文][D].天津:天津大学,2003:15-24[13]英锋,冯玉芬.基于SPCE061A的语音识别系统的设计[J].单片机开发与应用,2008,24(6-2):121-122[14]周伟,谢存禧.基于单片机的多功能智能轮椅的模块化设计[J].机械设计与制造,广东:华南理工大学,2010,3:18-19[15]A.Rathinavelu,G.Anupriya,A.S.MuthananthamurugavelSpeechRecognitionModelforTamilStops.ProceedingsoftheWorldCongressonEngineering2007VolIWCE2007,July2-4,2007,London,U.K:21-23[16]Q.P.Ha*,T.H.TranandG.Dissanayake.Awavelet-andneuralnetwork-basedvoiceinterfacesystemforwheelchaircontrol.Int.J.IntelligentSystemsTechnologiesandApplications,Vol.1,Nos.1/2,2005:12-14[17]JalalKaram.VariousSpeechProcessingTechniquesForSpeechCompressionAndRecognition[C].PROCEEDINGSOFWORLDACADEMYOFSCIENCE,ENGINEERINGANDTECHNOLOGYVOLUME26DECEMBER2007ISSN1307-6884pp.30-32[18]M.FezariandM.Bousbia-Salah.SpeechandSensorinGuidinganElectricWheelchair[J].AutomaticControlandComputerSciences,2007,41(1):39-43附录//=========================================================//工程名称:Car_Demo//功能描述:实现轮椅的语音控制//涉及的库:CMacro1016.lib//bsrv222SDL.lib//sacmv26e.lib//组成文件:main.c//Flash.asm,hardware.asm,ISR.asm//hardware.h,s480.h,hardware.inc//硬件连接:IOA0KEY1//IOA1KEY2//IOA2KEY3//IOB8前进//IOB9倒车//IOB10左拐//IOB11右拐//========================================================#include"s480.h"#include"bsrsd.h"#defineP_IOA_Data(volatileunsignedint*)0x7000#defineP_IOA_Dir(volatileunsignedint*)0x7002#defineP_IOA_Attrib(volatileunsignedint*)0x7003#defineP_IOB_Data(volatileunsignedint*)0x7005#defineP_IOB_Dir(volatileunsignedint*)0x7007#defineP_IOB_Attrib(volatileunsignedint*)0x7008#defineP_TimerA_Data(volatileunsignedint*)0x700A#defineP_TimerA_Ctrl(volatileunsignedint*)0x700B#defineP_TimerB_Data(volatileunsignedint*)0x700C#defineP_TimerB_Ctrl(volatileunsignedint*)0x700D#defineP_Watchdog_Clear(volatileunsignedint*)0x7012#defineP_INT_Mask(volatileunsignedint*)0x702D#defineP_INT_Clear(volatileunsignedint*)0x7011#defineNAME_ID0x100#defineCOMMAND_GO_ID0x101#defineCOMMAND_BACK_ID0x102#defineCOMMAND_LEFT_ID0x103#defineCOMMAND_RIGHT_ID0x104#defineS_NAME0//给我取个名字#defineS_ACT11//前进#defineS_ACT22//倒车,请注意#defineS_ACT33//左拐#defineS_ACT44//右拐#defineS_RDY5//Yeah#defineS_AGAIN6//请再说一遍#defineS_NOVOICE7//没有听到任何声音#defineS_CMDDIFF8//说什么暗语呀#defineS_NOISY8//说什么暗语呀#defineS_START9//准备就绪,开始辨识#defineS_GJG10//拐就拐#defineS_DCZY11//倒车,请注意externunsignedintBSR_SDModel[100];//外部变量BSR_SDModel[100],辨识器自带externvoidF_FlashWrite1Word(unsignedintaddr,unsignedintValue);externvoidF_FlashErase(unsignedintsector);unsignedintuiTimeset=3;//运行时间定时,调整该参数控制运行时间unsignedintuiTimecont;//运行时间计时//=============================================================//语法格式:voidDelay();//实现功能:延时//参数:无//返回值:无//=============================================================voidDelay(){unsignedinti;for(i=0;i<0x3Fff;i++){*P_Watchdog_Clear=0x0001;}}//=============================================================//语法格式:voidPlaySnd(unsignedSndIndex,unsignedDAC_Channel);//实现功能:语音播放函数//参数:SndIndex-播放语音资源索引号//DAC_Channel-播放声道选择//返回值:无//=============================================================voidPlaySnd(unsignedSndIndex,unsignedDAC_Channel){BSR_StopRecognizer();//停止识别器SACM_S480_Initial(1);//初始化为自动播放SACM_S480_Play(SndIndex,DAC_Channel,3);//开始播放一段语音while((SACM_S480_Status()&0x0001)!=0)//是否播放完毕?{SACM_S480_ServiceLoop();//解码并填充队列*P_Watchdog_Clear=0x0001;//清看门狗}SACM_S480_Stop();//停止播放BSR_InitRecognizer(BSR_MIC);//初始化识别器}//=============================================================//语法格式:intTrainWord(intWordID,intSndID);//实现功能:训练一条指令//参数:WordID-指令编码//SndID-指令提示音索引号//返回值:无//=============================================================intTrainWord(unsignedintWordID,unsignedintSndID){intResult;PlaySnd(SndID,3);//引导训练,播放指令对应动作while(1){Result=BSR_Train(WordID,BSR_TRAIN_TWICE);//训练两次,获得训练结果if(Result==0)break;switch(Result){case-1://没有检测出声音PlaySnd(S_NOVOICE,3);return-1;case-2://需要训练第二次PlaySnd(S_AGAIN,3);break;case-3://环境太吵PlaySnd(S_NOISY,3);return-3;case-4://数据库满return-4;case-5://检测出声音不同PlaySnd(S_CMDDIFF,3);return-5;case-6://序号错误return-6;default:break;}}return0;}//=============================================================//语法格式:voidTrainSD();//实现功能:训练函数//参数:无//返回值:无//=============================================================voidTrainSD(){while(TrainWord(NAME_ID,S_NAME)!=0);//训练名称while(TrainWord(COMMAND_GO_ID,S_ACT1)!=0);//训练第1个动作while(TrainWord(COMMAND_BACK_ID,S_ACT2)!=0);//训练第2个动作while(TrainWord(COMMAND_LEFT_ID,S_ACT3)!=0);//训练第3个动作while(TrainWord(COMMAND_RIGHT_ID,S_ACT4)!=0);//训练第4个动作}//=============================================================//语法格式:voidStoreSD();//实现功能:存储语音模型函数//参数:无//返回值:无//=============================================================voidStoreSD(){unsignedintulAddr,i,commandID,g_Ret;F_FlashWrite1Word(0xef00,0xaaaa);F_FlashErase(0xe000);F_FlashErase(0xe100);F_FlashErase(0xe200);ulAddr=0xe000;//********for(commandID=0x100;commandID<0x105;commandID++){g_Ret=BSR_ExportSDWord(commandID);while(g_Ret!=0)//模型导出成功?g_Ret=BSR_ExportSDWord(commandID);for(i=0;i<100;i++)//保存语音模型SD1(0xe0000xe063){F_FlashWrite1Word(ulAddr,BSR_SDModel[i]);ulAddr+=1;}}}//=============================================================//语法格式:voidLoadSD();//实现功能:装载语音模型函数//参数:无//返回值:无//=============================================================voidLoadSD(){unsignedint*p,k,jk,Ret,g_Ret;p=(int*)0xe000;for(jk=0;jk<5;jk++){for(k=0;k<100;k++){Ret=*p;BSR_SDModel[k]=Ret;//装载语音模型p+=1;}g_Ret=BSR_ImportSDWord();while(g_Ret!=0)//模型装载成功?g_Ret=BSR_ImportSDWord();}}//=============================================================//语法格式:voidGoAhead();//实现功能:前进子函数//参数:无//返回值:无//=============================================================voidGoAhead()//前进{PlaySnd(S_ACT1,3);//提示*P_IOB_Data=0x0100;//前进*P_INT_Mask|=0x0004;//以下为中断定时操作__asm("intfiq,irq");uiTimecont=0;}//=============================================================//语法格式:voidBackUp();//实现功能:后退子函数//参数:无//返回值:无//=============================================================voidBackUp()//倒退{PlaySnd(S_DCZY,3);//提示*P_IOB_Data=0x0200;//倒退*P_INT_Mask|=0x0004;//以下为中断定时操作__asm("intfiq,irq");uiTimecont=0;}//=============================================================//语法格式:voidTurnLeft();//实现功能:左转子函数//参数:无//返回值:无//=============================================================voidTurnLeft()//左转{PlaySnd(S_GJG,3);*P_IOB_Data=0x0900;//右转Delay();//延时*P_IOB_Data=0x0500;//左转*P_INT_Mask|=0x0004;//以下为中断定时操作__asm("intfiq,irq");uiTimecont=0;}//=============================================================//语法格式:voidTurnRight();//实现功能:右转子函数//参数:无//返回值:无//=============================================================voidTurnRight()//右转{PlaySnd(S_GJG,3);//语音提示*P_IOB_Data=0x0500;//左转Delay();//延时*P_IOB_Data=0x0900;//右转*P_INT_Mask|=0x0004;//以下为中断定时操作__asm("intfiq,irq");uiTimecont=0;}//=============================================================//语法格式:voidStop();//实现功能:停车子函数//参数:无//返回值:无//=============================================================voidStop()//停车{*P_IOB_Data=0x0000;//停车PlaySnd(S_RDY,3);//语音提示}//=============================================================//语法格式:voidBSR(void);//实现功能:辨识子函数//参数:无//返回值:无//=============================================================voidBSR(void){intResult;//辨识结果寄存Result=BSR_GetResult();//获得识别结果if(Result>0)//有语音触发?{*P_IOB_Data=0x0000;//临时停车switch(Result){caseNAME_ID://识别出名称命令Stop();//停车待命break;caseCOMMAND_GO_ID://识别出第一条命令GoAhead();//执行动作一:直走break;caseCOMMAND_BACK_ID://识别出第二条命令BackUp();//执行动作二:倒车break;caseCOMMAND_LEFT_ID://识别出第三条命令TurnLeft();//执行动作三:左转break;caseCOMMAND_RIGHT_ID://识别出第四条命令TurnRight();//执行动作四:右转break;default:break;}}}//=============================================================//语法格式:voidIRQ5(void);//实现功能:中断服务子函数//参数:无//返回值:无//=============================================================voidIRQ5(void)__attribute__((ISR));//运动定时控制voidIRQ5(void){if(uiTimecont++==uiTimeset){*P_IOB_Data=0x0000;}*P_INT_Clear=0x0004;}//=============================================================//语法格式:intmain(void);//实现功能:主函数//参数:无//返回值:无//=============================================================intmain(void){unsignedintBS_Flag;//Train标志位*P_IOA_Dir=0xff00;//初始化IOA,IOA0~7下拉输入*P_IOA_Attrib=0xff00;*P_IOA_Data=0x0000;*P_IOB_Dir=0x0f00;//初始化IOB,IOB8~11同向输出*P_IOB_Attrib=0x0f00;*P_IOB_Data=0x0000;BSR_DeleteSDGroup(0);//初始化存储器RAMBS_Flag=*(unsignedint*)0xe000;//读存储单元0xe000if(BS_Flag==0xffff)//没有经过训练(0xe000内容为0xffff){TrainSD();//训练StoreSD();//存储训练结果(语音模型)}else//经过训练(0xe000内容为0x0055){LoadSD();//语音模型载入识别器}PlaySnd(S_START,3);//开始识别提示BSR_InitRecognizer(BSR_MIC);//初始化识别器while(1){BSR();if((*P_IOA_Data)&0x0004)//是否重新训练{F_FlashErase(0xe000);while(1);}}}//============================================================//文件名称:flash.asm//实现功能:SPCE06132Kflash的读写//============================================================.INCLUDEhardware.inc.DEFINEC_FLASH_SIZE0x8000.DEFINEC_FLASH_BLOCK_SIZE0x100.DEFINEC_FLASH_MATCH0xAAAA.DEFINEC_FLASH_PAGE_ERASE0x5511//擦除一页.DEFINEC_FLASH_MASS_ERASE0x5522//.DEFINEC_FLASH_1WORD_PGM0x5533//写一个字.DEFINEC_FLASH_SEQUENT_PGM0x5544//写多个字.DEFINEC_FLASH_MAIN_BLOCK0x5555.DEFINEC_FLASH_INFORM_BLOCK0x

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论