1、基于单片机的智能语音识别系统设计毕业设计基于单片机的语音识别系统摘要近几年来智能化和自动化技术在玩具制造领域中越来越被关注本文介绍一种智能化小车控制系统的设计语音控制小车语音控制小车是基于 SPCE061A 的代表性兴趣产品它配合 61 板推出综合应用了 SPCE061A 的众多资源小车采用语音识别技术可通过语音命令对其行驶状态进行控制 首先介绍了 SPCE061A 的主要性能及其引脚的功能接着完成了电源电路复位电路键盘电路音频输入电路音频输出电路和无线控制电路等硬件功能模块的设计软件设计模块能实现智能小车的前进后退转向停止避障表演动作以及循线等功能测试表明在环境背景噪音不太大控制者的发音清晰
2、的前提下语音控制小车的语音识别系统能对特定的语音指令做出智能反应做出预想中的有限的动作关键词 spec061a 语音识别 驱动电路 声控小车 智能反应AbstractIn recent years Intelligent and automation technology in the toy manufacture have been paid more and more attentionIntroduce an intelligent vehicle control system design SPCE061A program the system to single-chip base
3、d on implementation of the cars voice control This paper introduces the hardware sub-system design and implementation The SPCE061As main characters and pin function are introduced firstly Completed the power circuit reset circuit keyboard circuitry audio input circuits audio output circuit and contr
4、ol circuit of wireless hardware such as the design of function modules Software design module can achieve smart car forward backward turn stop obstacle avoidance performing actions as well as on-line functions Test showed that the background noise in the environment is not too great control persons
5、under the premise of clear pronunciation voice control car speech recognition systems for specific voice commands to make intelligent reaction limited to the desired actionKeywords spec061a voice recognitonDriving circuitVoice control dollyintelirent response 目录摘要 IAbstract II目录 III前言 11 方案介绍及设计简介 2
6、11 小车的控制要求及设计方案 2com 小车的控制要求 2com 方案设计与论证 212 SPCE061A 简介 3com SPCE061A 单片机概述 5com SPCE061A 的介绍 7com SPCE061A 的结构 713 SPCE061A 单片机强大的语音功能 8com 语音识别的原理 8com 系统的结构框图 914 语音控制小车设计要求 10com 功能要求 10com 语音控制小车的主要功能 10com 参数说明 10com 注意事项 102 电路设计及程序设计 1121 电路设计基础知识 1122 电路方框图及说明 1323 各部分电路设计 13com 电机的选择 14c
7、om 继电器驱动电路的设计 14com 行驶状态控制电路设计 15com 麦克录音输入及 AGC 电路 16com 语音播报电路 183 软件设计 1931 软件流程图及设计思路说明 19com 程序设计 2032 模块设计 20com 中断流程图部分 20com 语音识别部分 224 连接和操作说明 2541 硬件模块连接图 25com 功能说明 25com 代码下载 26com 训练小车 27com 声控小车 28com 重新训练 28总结 30致谢 31参考文献 32附件 1 系统程序说明 33前言语音识别技术是近年来十分活跃的研究领域语音识别系统的实用化研究是语音识别研究的一个主要方向
8、以玩具市场为例具有高科技含量的电子玩具智能玩具发展迅猛电子互动式智能化玩具已经成为玩具行业发展的主流我国是玩具生产和出口大国但在高科技玩具的发展方面和国外的差距很大因此及时投入精力广泛开展这方面的研究无论对技术创新应用还是社会经济发展都有巨大的现实意义与机器进行语音交流让机器明白你说什么这是人们长期以来梦寐以求的事情语音识别技术就是让机器通过识别和理解过程把语音信号转变为相应的文本或命令的高技术近二十年来语音识别技术取得显著进步开始从实验室走向市场语音识别功能大大增加了玩具使用的乐趣并使玩具体现出一定的智能性因此成为大部分电子玩具智能玩具设计中使用的关键技术 本文利用凌阳单片机设计一个具有语音
9、识别功能的智能遥控小车该设计将遥控车由传统的手动遥控改成了语音识别遥控集成了先进的语音识别技术加上小车的机动灵活的特点使控制者可以通过语音控制小车实现预设动作从而释放控制者的双手而且小车和控制者之间还具有一定的交互功能所以此次研究具有较强的实用性和发展前景1 方案介绍及设计简介小车的控制要求及设计方案小车的控制要求论文设计的要求是要用语音来控制小车的行驶状态根据开始语音训练录制的语音命令来控制小车的前进倒退左转右转和停止在行驶的过程中小车通过光电传感器自动检测障碍物并且自动避开障碍物绕道行驶在整过行驶过程中小车自动记录行驶的路程和时间方案设计与论证本系统为典型的实时控制系统易用单片机控制来实现
10、这里以凌阳 SPCE061A单片机为主控元件提出两种设计方案方案一采用凌阳 SPCE061A 十六位单片机对小车的整个行驶过程进行实时监控完成所有功能需要 24 个 IO 口由于凌阳 SPCE061A 单片机提供 32 个 IO 口一片即可实现所有功能这为设计过程提供了极大方便其主要设计思想是小车上安装一个霍尔元件利用单片机的 IOB3 外部中断判别轮胎转数的结果用以计算路程安装三个检测障碍物的光电检测器和一个碰撞开关利用 IOB4IOB5IOB6 用扫描的方式来控制拐弯和返回利用单片机的 IOB8-IOB11 控制继电器选择小车的正反向行驶凌阳SPCE061A 十六位单片机提供了丰富的时基信
11、源和时基中断给设计者以大量的选择空间并给设计者提供精确的时基计数其加减速通过大功率电阻消耗功率来实现整体框架如图 1 这种方案可以使程序简单易于控制方案二此方案也采用凌阳 SPCE061A 十六位单片机与第一种方案不同之处在于利用单片机的 IOB8 IOB9 产生控制调速的脉宽和控制小车的正反行驶用凌阳SPCE061A 十六位单片机的 TimeA 和 TimeB 很容易实现脉宽调制这大大加强了用脉宽调制控制加减速的可选性但对继电器要求较高这里考虑到大众化设计采用第一个方案图 1 系统原理框图SPCE061A 简介在众多的单片机中如 C51ARMAVR 等我们选择了凌阳系列的单片机采用的是凌阳
12、61 单片机因为它本身具有音频处理功能我们板子上具有音频输出输入通道具有麦克风扬声器等硬件在凌阳公司提供的开发环境中本身就具有关于音频处理的库函数以及音频压缩软件在进行处理的时候比较容易所以我们选择凌阳 61的单片机基本结构如下图所示凌阳 61 单片机及硬件基本结构SPCE061A 是凌阳科技研发生产的性价比很高的一款十六位单片机使用它可以非常方便灵活的实现语音的录放系统该芯片拥有 8 路 10 位精度的 ADC 其中一路为音频转换通道并且内置有自动增益电路这为实现语音录入提供了方便的硬件条件两路 10 精度的 DAC 只需要外接功放 SPY0030A 即可完成语音的播放另外凌阳十六位单片机具
13、有易学易用的效率较高的一套指令系统和集成开发环境在此环境中支持标准 C 语言可以实现 C 语言与凌阳汇编语言的互相调用并且提供了语音录放的库函数只要了解库函数的使用就会很容易完成语音录放这些都为软件开发提供了方便的条件 SPCE061A 片内还集成了一个 ICE 在线仿真电路接口使得对该芯片的编程仿真都变得非常方便而 ICE 接口不占用芯片上的硬件资源结合凌阳科技提供的集成开发环境 unSP IDE 用户可以利用它对芯片进行真实的仿真而程序的下载烧写也是通过该接口进行下载SPCE061A 是继 nSP 系列产品 SPCE500A 等之后凌阳科技推出的又一款 16位结构的微控制器与 SPCE50
14、0A 不同的是在存储器资源方面考虑到用户的较少资源的需求以及便于程序调试等功能 SPCE061A 里内嵌 32K 字的闪存 FLASH 较高的处理速度使 nSP 能够非常容易地快速地处理复杂的数字信号因此与 SPCE500A相比以 nSP 为核心的 SPCE061A 微控制器是适用于数字语音识别应用领域产品的一种最经济的选择SPCE061A 单片机概述随着单片机功能集成化的发展其应用领域也逐渐地由传统的控制扩展为控制处理数据处理以及数字信号处理 DSPDigital Signal Processing 等领域凌阳的 16 位单片机就是为适应这种发展而设计的它的 CPU 内核采用凌阳最新推出的n
15、SPMicrocontroller and Signal Processor16 位微处理器芯片以下简称nSP 围绕 nSP 所形成的 16 位 nSP 系列单片机以下简称 nSP 家族采用的是模块式集成结构它以 nSP 内核为中心集成不同规模的 ROMRAM 和功能丰富的各种外设接口部件如图 2 所示nSP 内核是一个通用的核结构除此之外的其它功能模块均为可选结构亦即这种结构可大可小或可有可无借助这种通用结构附加可选结构的积木式的构成便可形成各种不同系列派生产品以适合不同的应用场合这样做无疑会使每一种派生产品具有更强的功能和更低的成本 nSP 家族有以下特点1 体积小集成度高可靠性好且易于扩
16、展 nSP 家族把各功能部件模块化地集成在一个芯片里内部采用总线结构因而减少了各功能部件之间的连线提高了其可靠性和抗干扰能力另外模块化的结构易于系统扩展以适应不同用户的需求其结构式模块图如下nSP 家族的模块式结构2 具有较强的中断处理能力 nSP 家族的中断系统支持 10 个中断向量及 10 余个中断源适合实时应用领域 3 高性能价格比 nSP 家族片内带有高寻址能力的 ROM 静态 RAM 和多功能的 IO 口另外nSP 的指令系统提供具有较高运算速度的 16 位16 位的乘法运算指令和内积运算指令为其应用增添了 DSP 功能使得 nSP 家族运用在复杂的数字信号处理方面既很便利又比专用的
17、 DSP 芯片廉价 4 功能强效率高的指令系统 nSP 指令系统的指令格式紧凑执行迅速并且其指令结构提供了对高级语言的支持这可以大大缩短产品的开发时间5 低功耗低电压 nSP 家族采用 CMOS 制造工艺同时增加了软件激发的弱振方式空闲方式和掉电方式极大地降低了其功耗另外 nSP 家族的工作电压范围大能在低电压供电时正常工作且能用电池供电这对于其在野外作业等领域中的应用具有特殊的意义SPCE061A 的介绍SPCE061A 是继 nSP 系列产品 SPCE500A 等之后凌阳科技推出的又一款 16位结构的微控制器与 SPCE500A 不同的是在存储器资源方面考虑到用户的较少资源的需求以及便于程
18、序调试等功能 SPCE061A 里内嵌 32K 字的闪存 FLASH 较高的处理速度使 nSP 能够非常容易地快速地处理复杂的数字信号因此与 SPCE500A相比以 nSP 为核心的 SPCE061A 微控制器是适用于数字语音识别应用领域产品的一种最经济的选择SPCE061A 的结构SPCE061A 的结构SPCE061A 单片机强大的语音功能凌阳音频处理过程自己录取一段不大于 4Kb 的 WAV 语音文件或者从原有WAV 语音文件中截取一段不大于 4KB 的语音然后用凌阳语音压缩工具压缩再将压缩后的文件添加到凌阳公司提供的开发环境中程序经过单片机处理后语音通过喇叭播放出来如图下图所示凌阳音频
19、识别过程语音识别的原理首先是语音训练然后是语音匹配接着进行语音处理如果匹配成功就执行相应的功能否则重新匹配如下图所示语音识别系统简图系统的结构框图如图下图所示智能车系统结构框图系统组成主要包括以下两部分 SPCE061A 精简开发板语音小车控制电路板图中的语音输入部分 MIC_ IN 按键输入 KEY 声音输出部分的功率放大环节等已经做到了精简开发板 61 板上为我们使用提供了很大的方便在电机的驱动方面采用全桥驱动技术利用四个 IO 端口分为两组分别实现两个电机的正传反转和停三态运行语音控制小车设计要求功能要求语音控制小车基于 SPCE061A 的代表性兴趣产品它配合 61 板推出综合应用了
20、SPCE061A 的众多资源小车采用语音识别技术可通过语音命令对其行驶状态进行控制语音控制小车的主要功能可以通过简单的 IO 操作实现小车的前进后退左转右转功能 配合 SPCE061A 的语音特色利用系统的语音播放和语音识别资源实现语音控制的功能 可以在行走过程中声控改变小车运动状态 在超出语音控制范围时能够自动停车参数说明车体双电机两轮驱动 供电电池四节 AA12V4 或 15V4 工作电压 DC 4V6V 工作电流运动时约 200mA注意事项 注意电池的正负极性切勿装反 长期不用请将电池取出电池盒以免造成腐蚀 由于小车行动比较灵活速度比较快在使用时一定要注意保持场地足够大且保证不会对周围的
21、物体造成伤害 不要让小车长时间运行在堵转状态堵转状态由于小车所受阻力过大造成小车电机加电但并不转动的现象这样会造成很大的堵转电流有可能会损坏小车的控制电路电路设计及程序设计电路设计基础知识1 二极管英文是 diode 二极管的正负二个端子 如图 8 正端 A 称为阳极负端 K 称为阴极电流只能从阳极向阴极方向移动一些初学者容易产生这样一种错误认识半导体的一半是一半的半面二极管也是只有一半电流流动 这是错误的 所有二极管就是半导体 其实二极管与半导体是完全不同的东西我们只能说二极管是由半导体组成的器件半导体无论那个方向都能流动电流二极管电子流动图2 三极管三极管在电子电路中组成震荡电路放大电路
22、已知型号和管脚排列的三极管可按下述方法来判断其性能好坏a 测量极间电阻将万用表置于 R100 或 R1k 挡按照红黑表笔的六种不同接法进行测试其中发射结和集电结的正向电阻值比较低其他四种接法测得的电阻值都很高约为几百千欧至无穷大但不管是低阻还是高阻硅材料三极管的极间电阻要比锗材料三极管的极间电阻大得多b 三极管的穿透电流 ICEO 的数值近似等于管子的倍数 和集电结的反向电流 ICBO 的乘积 ICBO 随着环境温度的升高而增长很快 ICBO 的增加必然造成ICEO 的增大而 ICEO 的增大将直接影响管子工作的稳定性所以在使用中应尽量选用 ICEO 小的管子通过用万用表电阻直接测量三极管 e
23、c 极之间的电阻方法可间接估计ICEO 的大小具体方法如下万用表电阻的量程一般选用 R100 或 R1k 挡对于 PNP 管黑表管接 e极红表笔接 c 极对于 NPN 型三极管黑表笔接 c 极红表笔接 e 极要求测得的电阻越大越好 ec 间的阻值越大说明管子的 ICEO 越小反之所测阻值越小说明被测管的 ICEO 越大一般说来中小功率硅管锗材料低频管其阻值应分别在几百千欧几十千欧及十几千欧以上如果阻值很小或测试时万用表指针来回晃动则表明 ICEO很大管子的性能不稳定c 测量放大能力 目前有些型号的万用表具有测量三极管 hFE 的刻度线及其测试插座可以很方便地测量三极管的放大倍数先将万用表功能开
24、关拨至 挡量程开关拨到 ADJ 位置把红黑表笔短接调整调零旋钮使万用表指针指示为零然后将量程开关拨到 hFE 位置并使两短接的表笔分开把被测三极管插入测试插座即可从 hFE 刻度线上读出管子的放大倍数另外有此型号的中小功率三极管生产厂家直接在其管壳顶部标示出不同色点来表明管子的放大倍数 值其颜色和 值的对应关系如表所示但要注意各厂家所用色标并不一定完全相同 检测判别电极a 判定基极用万用表 R100 或 R1k 挡测量三极管三个电极中每两个极之间的正反向电阻值当用第一根表笔接某一电极而第二表笔先后接触另外两个电极均测得低阻值时则第一根表笔所接的那个电极即为基极 b 这时要注意万用表表笔的极性如
25、果红表笔接的是基极 b 黑表笔分别接在其他两极时测得的阻值都较小则可判定被测三极管为 PNP 型管如果黑表笔接的是基极 b 红表笔分别接触其他两极时测得的阻值较小则被测三极管为 NPN 型管b 判定集电极 c 和发射极 e 以 PNP 为例 将万用表置于 R100 或 R1k挡红表笔基极 b 用黑表笔分别接触另外两个管脚时所测得的两个电阻值会是一个大一些一个小一些在阻值小的一次测量中黑表笔所接管脚为集电极在阻值较大的一次测量中黑表笔所接管脚为发射极 判别高频管与低频管高频管的截止频率大于 3MHz 而低频管的截止频率则小于 3MHz 一般情况下二者是不能互换的 在路电压检测判断法在实际应用中小
26、功率三极管多直接焊接在印刷电路板上由于元件的安装密度大拆卸比较麻烦所以在检测时常常通过用万用表直流电压挡去测量被测三极管各引脚的电压值来推断其工作是否正常进而判断其好坏电路方框图及说明系统原理框图如图 1 所示主控元件采用凌阳 SPCE061A 单片机属于凌阳unSP 系列产品的一个 16 位结构的微控制器在存储器资源方面考虑到用户的较少资源的需求以及便于程序调试等功能 SPCE061A 里只内嵌 32K 字的闪存 FLASH但用在此系统上已经绰绰有余较高的处理速度使 unSP 能够非常容易地快速地处理复杂的数字信号因此以 unSP 为核心的 SPCE061A 微控制器也适用在数字语音识别应用
27、领域 SPCE061A 在 26V36V 工作电压范围内的工作速度范围为032MHz49152MHz 较高的工作速度使其应用领域更加拓宽 2K 字 SRAM 和 32K 字FLASH 仅占一页存储空间 32 位可编程的多功能 IO 端口两个 16 位定时器计数器32768Hz 实时时钟低电压复位监测功能 8 通道 10 位模-数转换输入功能并具有内置自动增益控制功能的麦克风输入方式双通道 10 位 DAC 方式的音频输出功能这就为本系统的特定人辨识和语音播报打下了基础各部分电路设计电机的选择市场上的电机种类很多有各自的优缺点电机类别如表 2电动机 交直流两用电动机 步进电动机交流电机 交流伺服
28、电动机 同步电机 异步电机直流电机电磁式直流电动机 他励 并励 串励复励 永磁直流电动机 直流伺服电动机 直流力矩电动机 无刷直流电动机开关磁阻电动机 小车控制分为前进倒退左转右转和停止如果考虑用单向电机来控制将不能使电机进行反方向转动也就不能实现自动左转右转再考虑到经济实惠决定用直流伺服电动机继电器驱动电路的设计由于单片机 IO 口提供的电流太小不能直接驱动继电器工作在这里采用8050NPN 管来提供一个开关电压实现 IO 口对继电器的驱动用 IN4007 去掉继电器断开时线圈产生的反向电流保护 8050NPN 管不被损坏继电器驱动电路如下图所示继电器驱动电路行驶状态控制电路设计如图 13
29、所示为行使状态控制电路整个小车的行驶状态由两个电机 MOTOR A和 MOTOR B 来控制 MOTOR A 控制小车的左边两个轮子 MOTOR B 控制小车右边两个轮子具体控制如表 4 所示行驶状态控制电路表 4 行驶状态控制表行驶状态 IOB08 IOB09 IOB10 IOB11 地址 继电器状态 前进1 0 1 0 0x00A0 RE1RE3 闭合 倒退 0 1 0 1 0x0050RE2RE4 闭合 左转 0 1 1 0 0x0060 RE2RE3 闭合 右转 1 0 0 1 0x0090 RE1RE4 闭合 注图中的两个电机完全相同这样能更好地保持小车的稳定性在前进上两个电机能在加
30、减速度上完全达到同步不会走 S 路线如果考虑用一个电机控制转向而另外一个控制速度和返回的话由于控制转向的电机电路未接入分压电阻当速度不处于最快速度时小车前进不能走直线而是向一边偏导致路线不对麦克录音输入及 AGC 电路麦克风电路如图 16 所示凌阳的 SPCE061A 是 16 位单片机具有 DSP 功能有很强的信息处理能力最高时钟可达到 49M 具备运算速度高的优势等等这为语音的播放录放合成及辨识提供了条件本系统接入 MIC 电路如下图所示 MIC 为录制语音辨识命令服务麦克录音输入及 AGC 电路下图是 MIC 录放流程图MIC 录放流程图下图是简化的语音识别原理图其中实线部分成为训练模块
31、虚线部分为识别模块辨认特定的使用者即特定语者 Speaker DependentSD 模式使用者可针对特定语者辨认词汇 可由使用者自行定义如人名声控拨号 即在启动小车前系统将会提示输入语音命令作简单快速的训练纪录在这里输入启动停止返回和模式切换四个语音命令通过使用者的声音特性来加以辨认随着技术的成熟进入语音适应阶段 SA speaker adaptation 使用者只要对于语音辨识核心经过一段时间的口音训练后即可拥有不错的辨识率语音识别原理图语音播报电路音频部分的原理图如下所示在下图中可以看到两个跳线其作用在于可以测量 DAC 的输出波形另外拔掉跳线可以断开 DAC 到喇叭放大的通路使得 DA
32、C 通道处于开路状态这样便于用 DAC 做其他用途用户可以用过这个跳线来加入自己的外围电路音频原理及放大电路图凌阳音频压缩算法根据不同的压缩比分为以下几种SACM-A2000 压缩比为 SACM-S480 压缩比为 SACM-S240 压缩比为 8015 按音质排序 A2000 S480 S240用凌阳 Compress Tool 事先把所需要的语音信号录制好本系统共包括十多个语音资源整个语音信号经凌阳 SACM_S480 压缩算法压缩只占有 132K 存储空间SPCE061A 单片机具有 32k 闪存使用内部 flash 即可满足要求凌阳 SPCE061A 单片机自带双通道 DAC 音频输出
33、 DAC1DAC2 转换输出的模拟量电流信号分别通过AUD1 和 AUD2 管脚输出 DAC 输出为电流型输出所以 DAC 输出经过 SPY0030 音频放大以驱动喇叭放音放大电路如图 19 只列出了 DAC1DAC2 类似 这为单片机的音频设计提供了极大方便在它们后面接一个简单的音频放大电路和喇叭即可实现语音播报功能音频的具体功能主要通过程序来实现软件设计软件设计部分是小车控制的的核心通过软件编程来控制小车的行驶状态软件流程图及设计思路说明软件流程图程序设计主程序见附录 1模块设计中断流程图部分SPCE061 单片机有两个外部中断分别为 EXT1 和 EXT2 两个外部输入脚分别为 B 口的
34、 IOB2 和 IOB3 的复用脚 EXT1IOB2 和 EXT2IOB3 两条外部中断请求输入线用于输入两个外部中断源的中断请求信号并允许外部中断以负跳沿触发方式来输入中断请求信号 EXT1IOB2 为黑线检测确定小车位置 EXT2IOB3 为轮子转数检测用于计算路程 IRQ4 用做整个行程的时间计数中断服务流程图语音识别部分在这里我们用的是 SPCE061 的特定语者辨识 SDSpeaker DependentSD 即语音样板由单个人训练也只能识别训练某人的语音命令而他人的命令识别率较低或几乎不能识别1 语音的准备可利用计算机进行录音选择录音效果一般的 MIC 比较好因为小车跑动时要受环境
35、的影响效果一般的 MIC 录制的音更加接近凌阳单片机上的 MIC 所录制的录制语音可为 yeah 烦不烦前进倒退拐就拐分别保存名称为 yeah48kqj48kdt48k zg48kyg48k语音录制时注意录制属性设置最好选择为 8Khz 16 位单声道语音录制好后保存格式为 wav 利用凌阳单片机光盘内目录TOOLSs480下的工具进行语音压缩后放在程序目录voice 下边然后修改配置文件 Makefile 中的 OBJFILES 的值以及对应的语音文件的目录地址值和 clean 的值 并且配置值顺序必须对应于语音训练的过程该程序模块包括三部分训练样本识别语音提示具体程序见主程序见下图整体框图
36、语音辨识整体框图在程序中我们通过五条语句的训练演示特定人连续音识别其中第一条语句为触发名称另外四条为命令训练完毕开始辨识当识别出触发名称后开始发布命令则会听到自己设置的应答具体流程图如图 222 关于语音识别库函数的算法分析众所周知嵌入式语音识别最大难点在于如何在硬件资源相对有限相对与 PC机而言的情况下实现大量数据处理的语音识别算法特别的 SPCE061A 自带 2K 字的 RAM 这样小容量的 RAM 空间是如何存储数据量较大的语音命令是值得探讨的问题时域分析中语音信号作为缓慢时变的信号在一小段时间里例如 10ms20ms语音信号的特性基本不变这些短段具有固定特性短段间经常有一定的重叠组合
37、成一段语音我们把语音信号分成这样的小段 称为帧 作为提取语音信号特性的单元这样的方法称为短时处理法当以 8KS 的速率采集语音信号时假设以 20ms 为帧周期加上 12ms 的帧移帧长 32ms 即每帧包括 256 个语音采集点一个帧的特性参数占用 1 个字 RAM 则存储一条 2S 长的语音命令信号占用2s20ms1 100 字与直接存储采样的语音数据相比更能节省嵌入式系统有限的硬件资源 在外界噪音的干扰下对语音起止点的判别非常重要若声音指令信号提取的不恰当那么所得到的声音指令信号和我们发出的指令信号就会有很大的出入不但会延迟语音识别的时效性甚至会降低对这些语音信号的识别率对语音信号的提取主
38、要是确定音头和音尾的位置即端点识别常用的方法有短时能量和过零率等几种短时能量表示了语音信号的幅度其定义式为公式 3语音辨识具体流程图短时平均过零率为一帧语音信号穿越零电平的次数表示了短时信号的频率其定义如下公式 4两式中的 N 为一帧语音的采集点数语音采集过程中计算当前一帧或多帧数据的能量或过零率数值当大于预先设定的阈值时即认为找到了语音命令的起始点结束点的确定方法类似在截取音头音尾间的信号并分帧后我们就可以以帧为单位进行特征参数的提取如线性预测倒谱系数法选择合适的特征参数与语音样板参数通过动态时间弯折算法匹配即可得出相应的识别结果连接和操作说明硬件模块连接图连线图功能说明1 小车运动控制通过
39、 SPCE061A 的 IO 端口驱动控制板的 H 桥电路进而控制前轮电机和后轮电机2 声控功能利用特定人语音识别实现小车的名称和动作训练并根据相应的语音指令输入执行前进后退左转右转停车等动作3 定时控制功能利用时基定时器设定运行时间小车运行同时启动定时器时间到小车停止运行代码下载硬件连接完成之后检查无误接下来就可以下载程序了具体的步骤为 第一步打开集成开发环境打开 CarDemospj 文件编译链接注意如果看不到CarDemospj 请在弹出的对话框中选择打开类型为 spj 或者所有文件 第二步点击菜单 Project Select Body 或者直接点击 图标打开如图 3-2所示的对话框
40、图 7-3 Select Body 对话框 第三步在弹出的对话框中选择 Body Name 为 SPCE060A_061A 选择 Probe 为Auto 点击 OK 按钮确定 第四步点击 IDE 工具栏上的图标选择 Use ICE 模式 第五步按 F8 快捷下载按钮下载代码训练小车成功下载程序以后去掉下载线并复位系统如果使用 EZ-Probe 还应将 Probe选择跳线 S5 拔去小车就会提示对它进行训练训练采用应答式训练每条指令的训练次数为两次每一条命令的训练过程都是一样的以前进为例说明 步骤一小车提示前进 步骤二告诉小车前进 步骤三小车提示请再说一遍重复训练提示音 步骤四再次告诉小车前进重
41、复训练一次 这是一个完整的训练过程如果训练成功小车会自动进入下一条指令的训练并会提示下一条指令对应的动作如果没有训练成功小车会提示说什么暗语呀或者没有听到任何声音等信息这样的话就要重复刚才所说的四个步骤直到成功为止整个的训练过程共有 5 次这样的训练依次为名称前进后退左拐右拐整个的训练流程如下图所示小车训练流程图声控小车训练完小车之后怎样进行声控操作让小车运动或者停下来呢 可以直接对小车说前进或者倒车左拐右拐等小车如果识别出指令会有一个回应信号告知你它要执行的动作然后执行该动作如果想要小车执行其它动作直接告诉小车将要执行动作对应的指令即可比如在前进时告诉小车倒车小车识别出之后就会直接倒车如果在
42、小车训练过程中想要小车停下来可以直接呼叫小车的名字小车准确识别之后就会停下来重新训练在实际的使用过程当中可能会对训练的结果不满意或者其他人也想对它进行训练控制这样就要求小车可以被重新训练为此我们把 61 板的 KEY3 键定义为重新训练按钮系统运行之后就会不断的扫描 61 板的 KEY3 键如果检测到 KEY3 键按下那么程序首先会把训练标志位 0xe000 单元擦除并会进入一个死循环等待复位的到来复位到来之后程序检测到训练标志单元内容为 0xffff 认为小车没有经过训练就会要求对它进行训练总结本设计综合应用了 SPCE061A 丰富的软硬件资源成功的实现了语音控制功能下面简单的介绍一下实际
43、应用中的一些资源优势在硬件方面较高的执行速度内置的硬件乘法器 ADC 和 DAC 功能内置的 AGC 自动增益环节这些为语音处理提供了强大基础在软件方面标准的 C 语言编程丰富的语音资源函数为编程提供了很大的方便 该设计方案结构简单以单芯片实现了语音播放与识别以及电机控制功能相当于语音识别芯片普通单片机的功能但是比语音识别芯片普通单片机方案实现起来要简单很多而且成本也会降低很多 该语音控制小车操作比较简单训练和识别成功的几率也比较高是一个典型的语音识别应用方案最后敬请各位专家老师和同学对论文和今后的研究工作提出宝贵的指导意见和建议致谢参考文献1 罗亚飞 凌阳 16 位单片机应用基础M 北京航空
44、航天出版社2 张彦斌薛钧义 凌阳 16 位单片机原理及应用M 清华大学出版社3 赵亮 单片机应用系统设计与产品开发M 人民邮电出版社4 耿德根 詹卫前李青 单片机创新开发与机器人制作M 北京航天航天大学5 David Cook 毕树生机器人制作提高篇M北京航空航天大学出版社6 凌阳大学计划 comcn附件 1 系统程序说明主控制源程序The information contained herein is the exclusive property ofSunnnorth Technology Co And shall not be distributed reproducedor discl
45、osed in whole in part without prior written permissionC COPYRIGHT 2003 SUNNORTH TECHNOLOGY COALL RIGHTS RESERVEDThe entire notice above must be reproduced on all authorized copies工程名称 Car_Demo功能描述 实现小车的语音控制涉及的库 CMacro1016libbsrv222SDLlibsacmv26elib组成文件 maincFlashasm hardwareasmISRasm hardwarehs480h
46、hardwareinc硬件连接 IOA0-KEY1IOA1-KEY2IOA2-KEY3IOB8-前进IOB9-倒车IOB10-左拐IOB11-右拐维护记录 2005-12-12 v10include “s480h“include “bsrsdh“defineP_IOA_Data volatile unsigned int 0x7000 define P_IOA_Dir volatile unsigned int 0x7002define P_IOA_Attrib volatile unsigned int 0x7003define P_IOB_Data volatile unsigned in
47、t 0x7005 define P_IOB_Dir volatile unsigned int 0x7007 define P_IOB_Attrib volatile unsigned int 0x7008 define P_TimerA_Data volatile unsigned int 0x700A define P_TimerA_Ctrl volatile unsigned int 0x700B define P_TimerB_Data volatile unsigned int 0x700C define P_TimerB_Ctrl volatile unsigned int 0x7
48、00D define P_Watchdog_Clear volatile unsigned int 0x7012 define P_INT_Mask volatile unsigned int 0x702D define P_INT_Clear volatile unsigned int 0x7011 define NAME_ID 0x100define COMMAND_GO_ID 0x101define COMMAND_BACK_ID 0x102define COMMAND_LEFT_ID 0x103define COMMAND_RIGHT_ID 0x104define S_NAME 0 给
49、我取个名字吧define S_ACT1 1 前进define S_ACT2 2 倒车请注意define S_ACT3 3 左拐define S_ACT4 4 右拐define S_RDY 5 Yeahdefine S_AGAIN 6 请再说一遍define S_NOVOICE 7 没有听到任何声音define S_CMDDIFF 8 说什么暗语呀define S_NOISY 8 说什么暗语呀define S_START 9 准备就绪开始辨识define S_GJG 10 拐就拐define S_DCZY 11 倒车请注意extern unsigned int BSR_SDModel100 外部变量 BSR_SDModel100辨识器自带extern void F_FlashWrite1Word unsigned int addrunsigned int Value extern void F_FlashErase unsigned int sector unsigned int uiTimeset 3 运行时间定时调整该参