基于SPCE061A单片机的语音数字识别系统设计—毕业论文.doc_第1页
基于SPCE061A单片机的语音数字识别系统设计—毕业论文.doc_第2页
基于SPCE061A单片机的语音数字识别系统设计—毕业论文.doc_第3页
基于SPCE061A单片机的语音数字识别系统设计—毕业论文.doc_第4页
基于SPCE061A单片机的语音数字识别系统设计—毕业论文.doc_第5页
已阅读5页,还剩48页未读 继续免费阅读

下载本文档

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

文档简介

毕业论文(设计)题 目 _基于单片机的语音数字识别系统设计_专 业 _ 电子信息工程 _学生姓名 _ XXXXXX_班 级 _ XXXXXXXXXXXX班_学 号 _ XXXXXXXXXXXXX_指导教师 _ XXXXXX _基于SPCE061A单片机的语音数字识别系统设计【摘 要】 语音识别可划分为训练和识别两个过程。在第一阶段,语音识别系统对人类的语言进行学习,把学习内容组成语音库存储起来,在第二阶段就可以把当前输入的语音在语音库中查找相应的词义或语义。凌阳16位SPCE061A单片机内嵌32K字闪存,2K字SRAM,内置10位ADC、DAC,有多达14个的中断源。它的CPU内核采用16位具有DSP功能的微处理器芯片, 而且CPU可最高工作在49MHz的主频下,能够非常容易地、快速地处理复杂的数字信号,因此与其他类型的单片机相比,在数字语音处理方面SPCE061A更具有优势。基于SPCE061A设计了一个具有语音识别功能的LED显示屏。经过训练,训练人可使用数字命令让LED键盘模组显示相应数字,使得人机交互更具智能化。【关键词】SPCE061A单片机 语音识别 LED键盘模组目 录绪论11 SPCE061A单片机11.1 SPCE061A简介11.2 芯片特性11.3 SPCE061A精简开发板22 所用语音算法22.1语音识别算法22.1.1 语音识别概述22.1.2 语音识别原理22.1.3 SPCE061A实现语音识别的步骤32.2 凌阳音频概述42.2.1音频压缩编码52.2.2 凌阳语音的播放、录制、合成和辨识52.2.3 常用的应用程序接口API的功能及应用63 系统总体设计方案83.1 常见的几种音频压缩编码:83.2 语音合成、辨识技术的介绍:93.3 特定人辨识的范例:123.4 LED键盘模组174 系统的硬件设计304.1 SPCE061A最小系统304.2 SPCE061A的时钟314.2.1 时钟电路314.2.2 锁相环324.2.3 系统时钟324.3 电源模块344.4 显示器及其接口344.5 语音录放354.5.1 录音354.5.2 放音365 系统主程序设计375.1 位操作模块375.2 语音播放函数376.主程序39参考文献46致 谢47绪论 目前LED显示屏具有相当大的市场潜力,要使其真正应用于生产线上的各个方面,满足人们日益增长的需求,就离不开高性能的语音识别控制系统。随着计算机软硬件技术、半导体技术、电子技术、通讯技术等的飞速发展人类已经进入后PC时代。 语音识别技术得到了迅猛发展, 支持语音识别的各种产品纷纷面世。人类实现了语音命令控制空调、电视、灯光、自动窗帘等的使用,让人们的生活“随音所欲”,更加舒适,更加便捷。基于凌阳16位SPCE061A单片机设计了一个具有语音识别功能的LED显示模组。在经过训练后使机器人对训练人的命令做出应答,完成LED键盘模组的同步显示。1 SPCE061A单片机本系统采用凌阳16位SPCE061A单片机作为控制中心,对输入的语音指令进行识别和处理,从而驱动LED显示模组做出相应正确显示。1.1 SPCE061A简介SPCE061A是凌阳科技研发生产的性价比很高的一款16位单片机,使用它可以非常方便灵活的实现语音的录放系统,该芯片拥有八路10位精度的ADC,其中一路为音频转换通道,并且内置有自动增益电路,用于录音。两路10精度DAC,只需外接功放(SPY0030A)即可完成放音。凌阳16位单片机所拥的一套指令系统和集成开发环境具有易学易用、效率高等特点。在集成开发环境中,支持标准C语言编程,并可以实现C语言与凌阳汇编语言的相互调用,语音的录放只需调用相应的库函数就可实现。 SPCE061A片内还集成了一个ICE(在线仿真电路)接口,使得对芯片的编程和仿真变得非常方便,而且ICE接口不占用芯片上的硬件资源,结合凌阳科技提供的集成开发环境(unSP IDE)可以对芯片进行仿真;而程序的下载(烧写)也是通过该接口进行下载。1.2 芯片特性SPCE061A 性能简介1:(1) 16位微处理器(2) 工作电压(CPU)VDD 为3.03.6V,(I/O)VDDH 为3.05.5V(3) CPU 时钟:0.3249.152MHz(4) 内置2K字SRAM(5) 内置32K字FLASH(6) 可编程音频处理(7) 晶体振荡器(8) 系统处于备用状态下(时钟处于停止状态),耗电仅为2uA/3.6V(9) 2个16 位可编程定时器/计数器(可自动预置初始计数值)(10) 2个10 位 DAC(数/模转换)输出通道(11) 32位通用可编程输入/输出通道(12) 14个中断源可来自定时器 A/B、时基、2个外部时钟源输入和键唤醒(13) 具备键唤醒的功能(14) 使用凌阳音频编码SACM_S480可以播放压缩的语音资源(15) 锁相环PLL振荡器提供系统时钟信号(16) 32768Hz实时时钟(17) 7通道10位电压模/数转换器(ADC)和单通道声音模/数转换器(18) 声音模/数转换器输入通道内置麦克风放大器,并具有自动增益控制(AGC)功能(19) 具备串行设备接口(SIO)(20) 具备低电压复位(LVR)功能和低电压检测(LVD)功能(21) 内置ICE(在线仿真电路)接口(22) 具有 WatchDog 功能1.3 SPCE061A精简开发板SPCE061A精简开发板(简称61板),是以凌阳16位SPCE061A单片机为核心的精简开发、仿真实验板。61板除了具备单片机最小系统电路外,还包括电源电路、音频电路(含MIC输入部分和DAC音频输出部分)、复位电路等。61板上有调试器接口(Probe接口)以及下载线接口(EZ_Probe接口),分别可接凌阳科技的在线调试器、简易下载器。实现程序的下载、在线仿真调试只需配合unSP IDE使用。2 所用语音算法2.1语音识别算法2.1.1 语音识别概述根据对说话人的依赖程度,分为:(1) 特定人语音识别(SD):只能辨认特定使用者的语音,训练使用。(2) 非特定人语音识别(SI):可辨认任何人的语音,无须训练。根据对说话方式的要求,分为:(1) 孤立词识别:每次只能识别单个词汇。(2) 连续语音识别:用者以正常语速说话,即可识别其中的语句。 2.1.2 语音识别原理特征提取,抽取反应语音本质的特征参数,形成特征矢量序列。语音模型库,从一个或多个讲话者多次重复讲话中提取的语音参数模板。匹配检测,把输入语音的特征参数与语音模型库进行比较分析,得到识别结果。语音识别原理参看图 2-1,如下:图 2-1 语音识别原理2.1.3 SPCE061A实现语音识别的步骤SPCE061A实现语音识别的步骤,分为训练部分与识别部分,以及在训练、识别过程中中断的情况,参看图 2-2,如下:图 2-2 SPCE061A实现语音识别2.2 凌阳音频概述我们所说的音频是指频率在20Hz20KHz的声音信号,分为:波形声音、语音和音乐三种,其中波形声音就是自然界中所有的声音,是声音数字化的基础。语音也可以表示为波形声音,但波形声音表示不出语言、语音学的内涵。语音是对讲话声音的一次抽象,是语言的载体,是人类社会特有的一种信息系统,是社会交际工具的符号。音乐与语音相对更规范一些,是符号化了的声音。但音乐不能对所有的声音进行符号化。为了让数字计算机更加便利处理音频信号,需要将模拟的(连续的)声音波形数字化(离散化),该过程主要包括采样和量化两个方面。数字音频的质量取决于:采样频率和量化位数这两个重要参数。此外,声道的数目、相应的音频设备也是影响音频质量的原因。语音处理技术是建立在语言学和数字信号处理基础之上的综合学科,其过程大致可以分为A/D采样输入、编码处理、存储、解码处理和D/A等。如今,要实现语音处理有多种渠道,可以选用专用语音芯片也可以选用单片机,二者区别参看表 21,如下:表 21 语音处理器件性能对照表2所选器件音质语音播放长度和段落价格专用语音芯片好受限制较高单片机由AD、DA精度、压缩算法等决定由存储空间决定有优势SPCE061A单片机具有八路10位ADC和两路10位DAC,两个16位可编程定时器/计数器,内置MIC放大器和自动增益控制(AGC)电路,CPU时钟主频最高达49MHz且具有DSP功能,有能力执行复杂压缩算法。所以在选择具有语音处理功能单片机时,SPCE061A单片机可谓是上上之选。SPCE061A将A/D、编码算法、解码算法、存储及D/A做成相应的模块,每个模块都有其应用程序接口API,要实现语音处理,只用了解每个模块所要实现的功能及参数的内容,然后调用该API函数即可。不同音频质量等级的编码技术标准(频响)参看表 22,如下:表 22 音频质量等级编码技术标准2信号类型频率范围(Hz)采样率(KHz)量化精度(位)电话话音200340088宽带音频(AM质量)5070001616调频广播(FM质量)2015K37.816高质量音频(CD 质量)2020K44.116凌阳音频压缩算法处理的语音信号的范围是200Hz3.4KHz的电话话音。2.2.1音频压缩编码 音频压缩编码基础音频压缩编码中的数据量:(采样频率量化位数)/(字节数)声道数目压缩编码的目的,通过对资料的压缩,达到高效率存储和转换资料的结果,即在保证一定声音质量的条件下,以最小的资料率来表达和传送声音信息。压缩编码的必要性,未经压缩编码的音频资料量很大,用来传输或存储是不容易实现的。所以要通过对信号趋势的预测和冗余信息处理,进行资料的压缩,这样就可以使我们用较少的资源建立更多的信息。常见的几种音频压缩编码:(1) 波形编码2,将时间域信号直接变换为数字代码,尽量真实地还原波形。波形编码的基本原理是在时间轴上对模拟语音按一定的速率抽样,然后将幅度样本分层量化,并用代码表示。译码是其反过程,将收到的数字序列经过译码和滤波恢复成模拟信号。(2) 参数编码2,参数编码又称为声源编码,是将信源信号在频率域或其它正交变换域提取特征参数,并将其变换成数字代码进行传输。译码为其反过程,将收到的数字序列经变换恢复特征参量,再根据特征参量重建语音信号。具体说,参数编码是通过对语音信号特征参数的提取和编码,尽量保持语音信号的可懂性,而还原后的波形可能与原波形差别很大。(3) 混合编码2,将波形编码和参数编码组合起来,克服了原有波形编码和参数编码的弱点,结合各自的长处,尽量保持波形编码的高质量和参数编码的低速率。 压缩分类压缩分为无损压缩和有损压缩。无损压缩一般指磁盘文件,压缩比低,一般为:2:14:1;有损压缩是指音/视频文件,压缩比可高达100:1。凌阳音频压缩算法根据不同的压缩比分为以下几种:SACM-A2000、SACM-S480、SACM-S240。三者区别参看表 23,如下:表 23 凌阳语音压缩算法区别2凌阳音频压缩算法编码方式编码率(bps)压缩比音质SACM_A2000波形编码16K, 20K, 24K8:1, 8:1.25, 8:1.5好SACM_S480混合编码4.8K, 7.2K80:3, 80:1.5中SACM_S240参数编码2.4K80:1.5差2.2.2 凌阳语音的播放、录制、合成和辨识要完成语音的播放、录制、合成及辨识等工作,单片机需要强大的信息处理能力而凌阳16位SPCE061A单片机则是为此而开发的,其具有DSP功能,可处理大量信息,CPU最高时钟频率可达到49MHz,具备运算速度高的优点。凌阳压缩算法中SACM_A2000、SACM_S480、SACM_S240主要是用来放音,可用于语音提示,而DVR则用来录音。2.2.3 常用的应用程序接口API的功能及应用语音和音乐与我们的生活有着相当密切的关系,而单片机对语音的控制如录放音、合成机辨识也广泛应用在现实生活中。语音处理大致可以分为A/D、编码处理、存储、解码处理以及D/A等。然而,通过麦克风输入所生成的WAVE文件,其占用的存储空间很大,对于单片机来说想要存储大量的信息显然很不可能实现的,而凌阳的SPCE061A所采用的解决办法即SACM_LIB,该库将A/D、编码、解码、存储及D/A做成相应的模块,对于每个模块都有其应用程序接口API,要实现某功能,用户只需了解每个模块所要实现的功能及其参数的内容,然后调用该API函数即可。语音识别API2介绍:BSR _Init Recognizer(int Audio Source);初始化识别器BSR _Train(int Word ID, int Train Mode);语音训练BSR _Delete SD Group(int SD Group No);清除内存BSR _Pause Recognizer();暂停识别,但不释放中断等资源BSR _Resume Recognizer();恢复被暂停的识别BSR _Get Recognizer Score();获得识别结果的可信度,返回值从-4096到4096,数值越大表示输入语音与特征模型的匹配度越高BSR _Enable CPU Indicator();开启CPU状态监测功能。开启该功能后,IOA0和IOA1将发出每16ms电平变化一次的方波BSR _Disable CPU Indicator();关闭CPU状态监测功能BSR _Export SD Word(int Command ID);使用函数库时,会自动创建一个100 Word的数组BSR _SD Model100,可以把某条训练命令的特征模型数据导出到这个数组中BSR _Import SD Word(int Command ID);可以把BSR _SD Model数组中的数据导入为某条语音命令的特征模型unsigned int BSR _SD Model;配合BSR _Export SD Word(int Command ID)与BSR _Import SD Word(int Command ID)函数使用,此数组的作用相当于一个暂时的存储区SACM_480采用混合编码方式,压缩比比较大,存储容量大,音质介于A2000和S240之间,适用于语音播放,如电子词典词库等,所以本文采用了该算法,以下就SACM_480算法具体介绍其API函数的格式、功能、参数、返回值、备注。其相关API函数如下所示:1) API格式2: C:int SACM_S480_Initial(int Init _Index)ASM:R1= Init _ IndexCall F_ SACM_ S480_Initial功能说明:SACM_480语音播放之前的初始化。参数: Init _ Index=0:手动方式 Init _ Index=1:自动方式。返回值: 0:语音模块初始化失败。 1:语音模块初始化成功。备注: 该函数用于对定时器、中断和DAC等的初始化。2) API格式2: C:void SACM_S480_ServiceLoop(void) ASM:Call F_ SACM_S480_ServiceLoop功能说明:从资源中获取SACM_S480语音资料,并将其填入解码队列中。参数: 无返回值: 无备注: 播放语音文件中数据,当出现FF FF FFH数据时便停止播放。3) API格式2: C: int SACM_S480_Play(int Speech _Index, int Channel, int Ramp _Set)ASM:R1= Speech _IndexR2= ChannelR3= Ramp _SetCall SACM_S480_Play功能说明: 播放资源中SACM_480语音。参数: Speech _Index:语音索引号。Channel:1. 通过DAC1通道播放。2. 通过DAC2通道播放。3. 通过DAC1和DAC2双通道播放。Ramp _Set:0. 禁止音量增/减调节。1. 仅允许音量增调节。2. 仅允许音量减调节。3. 允许音量增/减调节。返回值: 无备注: SACM_S480的数据率有4.8Kbps7.2Kbps两种,可在同一模块的几种算法中自动选择一种。 Speech _Index是定义在resource.inc文件中资源表的偏移地址。 中断服务子程序中F_FIQ_Service_SACM_S480必须放在TMA_FIQ中断向量上。4) API格式2: ASM:Call F_FIQ_Service_SACM_S480功能说明:用作SACM_S480语音背景程序的中断服务子程序。通过前台子程序(自动方式的SACM_S480_ServiceLoop及手动方式SACM_S480_Decode)进行语音信息编码,然后将其送入DAC通道播放。参数: 无返回值:无备注:SACM_S480语音背景子程序只有汇编指令形式,且应该将此子程序安置在TMA_FIQ中断源上。3 系统总体设计方案凌阳单片机本身具备语音识别功能,不需要外扩语音识别模块,虽然具有一点点DSP功能,就能做到语音识别功能。如常见的语音控制机器人,语音控制小车等。我们所说的音频是指频率在20Hz20kHz的声音信号,分为:波形声音、语音和音乐三种,其中波形声音就是自然界中所有的声音,是声音数字化的基础。语音也可以表示为波形声音,但波形声音表示不出语言、语音学的内涵。语音是对讲话声音的一次抽象。是语言的载体,是人类社会特有的一种信息系统,是社会交际工具的符号。音乐与语音相比更规范一些,是符号化了的声音。但音乐不能对所有的声音进行符号化。乐谱是符号化声音的符号组,表示比单个符号更复杂的声音信息内容。将模拟的(连续的)声音波形数字元化(离散化),以便利数字计算机进行处理的过程,主要包括采样和量化两个方面。数字音频的质量取决于:采样频率和量化位数这两个重要参数。此外,声道的数目、相应的音频设备也是影响音频质量的原因语音压缩编码中的数据量是指:数据量=(采样频率量化位数)/8(字节数)声道数目。压缩编码的目的:通过对资料的压缩,达到高效率存储和转换资料的结果,即在保证一定声音质量的条件下,以最小的资料率来表达和传送声音信息。压缩编码的必要性:实际应用中,未经压缩编码的音频资料量很大,进行传输或存储是不现实的。所以要通过对信号趋势的预测和冗余信息处理,进行资料的压缩,这样就可以使我们用较少的资源建立更多的信息。举个例子,没有压缩过的CD品质的资料,一分钟的内容需要11MB的内存容量来存储。如果将原始资料进行压缩处理,在确保声音品质不失真的前提下,将数据压缩一半,5.5MB就可以完全还原效果。而在实际操作中,可以依需要来选择合适的算法。3.1 常见的几种音频压缩编码:1)波形编码:将时间域信号直接变换为数字代码,力图使重建语音波形保持原语音信号的波形形状。波形编码的基本原理是在时间轴上对模拟语音按一定的速率抽样,然后将幅度样本分层量化,并用代码表示。译码是其反过程,将收到的数字序列经过译码和滤波恢复成模拟信号。如:脉冲编码调制(PulseCodeModulation,PCM)、差分脉冲编码调制(DPCM)、增量调制(DM)以及它们的各种改进型,如自适应差分脉冲编码调制(ADPCM)、自适应增量调制(ADM)、自适应传输编码(AdaptiveTransferCoding,ATC)和子带编码(SBC)等都属于波形编码技术。波形编码特点:高话音质量、高码率,适于高保真音乐及语音。2)参数编码:参数编码又称为声源编码,是将信源信号在频率域或其它正交变换域提取特征参数,并将其变换成数字代码进行传输。译码为其反过程,将收到的数字序列经变换恢复特征参量,再根据特征参量重建语音信号。具体说,参数编码是通过对语音信号特征参数的提取和编码,力图使重建语音信号具有尽可能高的准确性,但重建信号的波形同原语音信号的波形可能会有相当大的差别。如:线性预测编码(LPC)及其它各种改进型都属于参数编码。该编码比特率可压缩到2Kbit/s-4.8Kbit/s,甚至更低,但语音质量只能达到中等,特别是自然度较低。参数编码特点:压缩比大,计算量大,音质不高,廉价!3)混合编码:混合编码使用参数编码技术和波形编码技术,计算机的发展为语音编码技术的研究提供了强有力的工具,大规模、超大规模集成电路的出现,则为语音编码的实现提供了基础。80年代以来,语音编码技术有了实质性的进展,产生了新一代的编码算法,这就是混合编码。它将波形编码和参数编码组合起来,克服了原有波形编码和参数编码的弱点,结合各自的长处,力图保持波形编码的高质量和参数编码的低速率。如:多脉冲激励线性预测编码(MPLPC),规划脉冲激励线性预测编码(KPELPC),码本激励线性预测编码(CELP)等都是属于混合编码技术。其数据率和音质介于参数和波形编码之间。总之,音频压缩技术之趋势有两个:1)降低资料率,提高压缩比,用于廉价、低保真场合(如:电话)。2)追求高保真度,复杂的压缩技术(如:CD)。3.2 语音合成、辨识技术的介绍:按照实现的功能来分,语音合成可分两个档次:(1)有限词汇的计算机语音输出(2)基于语音合成技术的文字语音转换(TTS:Text-to-Speech)按照人类语言功能的不同层次,语音合成可分为三个层次:(1)从文字到语音的合成(Text-to-Speech)(2)从概念到语音的合成(Concept-to-Speech)(3)从意向到语音的合成(Intention-to-Speech)早期只能辨认特定的使用者即特定语者(SpeakerDependent,SD)模式,使用者可针对特定语者辨认词汇(可由使用者自行定义,如人名声控拨号),作简单快速的训练纪录使用者的声音特性来加以辨认。随着技术的成熟,进入语音适应阶段SA(speakeradaptation),使用者只要对于语音辨识核心,经过一段时间的口音训练后,即可拥有不错的辨识率。2)非特定语者模式(SpeakerIndependent,SI),使用者无需训练即可使用,并进行辨认。任何人皆可随时使用此技术,不限定语者即男性、女性、小孩、老人皆可。连续语音:1)单字音辨认:为了确保每个字音可以正确地切割出来,必须一个字一个字分开来念,非常不自然,与我们平常说话的连续方式,还是有点不同。2)整个句子辨识:只要按照你正常说话的速度,直接将要表达的说出来,中间并不需要停顿,这种方式是最直接最自然的,难度也最高,现阶段连续语音的辨识率及正确率,虽然效果还不错但仍需再提高。然而,中文字有太多的同音字,因此目前所有的中文语音辨识系统,几乎都是以词为依据,来判断正确的同音字。可辨认词汇数量:内建的词汇数据库的多寡,也直接影响其辨识能力。因此就语音辨识的词汇数量来说亦可分为三种:1)小词汇量(10-100)2)中词汇量(100-1000)3)无限词汇量(即听写机)压缩分无损压缩和有损压缩。无损压缩一般指:磁盘文件,压缩比低:2:14:1。而有损压缩则是指:音视频文件,压缩比可高达100:1。凌阳音频压缩算法根据不同的压缩比分为以下几种:SACM-A2000:压缩比为8:1,8:1.25,8:1.5SACM-S480:压缩比为80:3,80:4.5SACM-S240:压缩比为80:1.5按音质排序:A2000S480S240凌阳的SPCE061A是16位单片机,具有DSP功能,有很强的信息处理能力,最高时钟频率可达到49MHz,具备运算速度高的优势等等,这些都无疑为语音的播放、录放、合成及辨识提供了条件。凌阳压缩算法中SACM_A2000、SACM_S480、SACM_S240主要是用来放音,可用于语音提示,而DVR则用来录放音。对于音乐合成MS01,该算法较繁琐,而且需要具备音乐理论、配器法及和声学知识,所以对于特别爱好者可以到我们的网站去了解相关内容,这里只给出它的API函数介绍及程序代码的范例,仅供参考。在前面我们已经介绍过语音辨识的一些相关的内容,在这里给出SPCE061的特定语者辨识SD(SpeakerDependent)的一个例子以供有兴趣者参考。SD即语音样板由单个人训练,也只能识别训练某人的语音命令,而他人的命令识别率较低或几乎不能识别。同样语音辨识也将其一些功能作成模块,并通过API调用来实现这些功能,在这里我们为大家介绍一些常用的API函数,如果有兴趣者可以登陆我们的网站去获得更多的相关内容初始化:【API格式】C:intBSR_DeleteSDGroup(0);ASM:F_BSR_DeleteSDGroup(0)【功能说明】SRAM初始化。【参数】该参数是辨识的一个标识符,0代表选择SRAM,并初始化。【返回值】当SRAM擦除成功返回0,否则,返回1。训练部分:1)【API格式】C:intBSR_Train(intCommandID,intTraindMode);ASM:F_BSR_Train【功能说明】训练函数。【参数】CommandID:命令序号,范围从0x100到0x105,并且对于每组训练语句都是唯一的。TraindMode:训练次数,要求使用者在应用之前训练一或两遍:BSR_TRAIN_ONCE:要求训练一次。BSR_TRAIN_TWICE要求训练两次。【返回值】训练成功,返回0;没有声音返回1;训练需要更多的语音数据来训练,返回2;当环境太吵时,返回3;当数据库满,返回4;当两次输入命令不通,返回5;当序号超出范围,返回6。【备注】在调用训练程序之前,确保识别器正确的初始化。训练次数是2时,则两次一定会有差异,所以一定要保证两次训练结果接近为了增强可靠性,最好训练两次,否则辨识的命令就会倾向于噪音调用函数后,等待2秒开始训练,每条命令只有1.3秒,也就是说,当训练命令超出1.3秒时,只有前1.3秒命令有效。辨识部分:1)【API格式】C:voidBSR_InitRecognizer(intAudioSource)ASM:F_BSR_InitRecognizer【功能说明】辨识器初始化。【参数】定义语音输入来源。通过MIC语音输入还是LINE_IN电压模拟量输入。【返回值】无。2)【API格式】C:intBSR_GetResult();ASM:F_BSR_GetResult【返回值】=R1【功能说明】辨识中获取数据。【参数】无。【返回值】当无命令识别出来时,返回0;识别器停止未初始化或识别未激活返回1;当识别不合格时返回2;当识别出来时返回命令的序号。【备注】该函数用于启动辨识,BSR_GetResult();3)【API格式】C:voidBSR_StopRecognizer(void);ASM:F_BSR_StopRecognizer【功能说明】停止辨识。【参数】无。【返回值】无。【备注】该函数是用于停止识别,当调用此函数时,FIQ_TMA中断将关闭。中断部分:【API格式】ASM:_BSR_InitRecognizer【功能说明】在中断中调用,并通过中断将语音信号送DAC通道播放。【参数】无。【返回值】无。【备注】该函数在中断FIQ_TMA中调用当主程序调用BSR_InitRecognizer时,辨识器便打开8K采样率的FIQ_TMA中断并开始将采样的语音数据填入辨识器的数据队列中。应用程序需要设置一下程序段在FIQ_TMA中:.PUBLIC_FIQ.EXTERNAL_BSR_FIQ_Routine/定义全局变量.TEXT_FIQ:PUSHR1,R4toSP/寄存器入栈保护R1=P_INT_CtrlCALL_BSR_FIQ_Routine/调用子程序R1=0x2000/清中断标志位P_INT_Clear=R1POPR1,R4fromSP;/寄存器组出栈RETIEND3.3 特定人辨识的范例:在程序中我们通过三条语句的训练演示特定人连续音识别,其中第一条语句为触发名称。另外两条为命令,训练完毕开始辨识当识别出触发名称后,开始发布命令,则会听到自己设置的应答,具体命令如下:*训练*提示音输入语音-请输入触发名称警卫请输入第一条命令开枪请输入第二条命令你在干什么?请再说一遍(以上提示音每说完一遍出现此命令)没有听到任何声音(当没有检测到声音时出现此命令)两次输入名称不相同(当两次输入的名称不同时出现此命令)两次输入命令不相同(当两次输入的命令有差异时出现此命令)准备就绪,请开始辨识(以上三条语句全部训练成功时,进入识别)*识别*发布命令应答-警卫在/长官开枪枪声你在干什么?我在巡逻/我在休息/我在等人注意:在每次提示音结束后2-3秒再输入命令或当上次应答结束2-3秒后再发布命令#INCLUDEbsrsd.h#DEFINENAME_ID0x100#DEFINECOMMAND_ONE_ID0x101#DEFINECOMMAND_TWO_ID0x102#DEFINERSP_INTR0#DEFINERSP_NAME1#DEFINERSP_FIRE2#DEFINERSP_GUARD3#DEFINERSP_AGAIN4#DEFINERSP_NOVOICE5#DEFINERSP_NAMEDIFF6#DEFINERSP_CMDDIFF7#DEFINERSP_STAR8#DEFINERSP_MASTER9#DEFINERSP_HERE10#DEFINERSP_GUNSHOT0#DEFINERSP_PATROL11#DEFINERSP_READY12#DEFINERSP_COPY13#DEFINERSP_NOISY14/.全程变量.intgActivated=0;/该变量用于检测是否有触发命令,当有识别出语句为触发名称则该位置1intgTriggerRespond=RSP_MASTER,RSP_HERE,RSP_MASTER;/第一条命令应答intgComm2Respond=RSP_PATROL,RSP_READY,RSP_COPY;/第二条命令应答externvoidClearWatchDog();intPlayFlag=0;voidPlayRespond2(intResult)/枪声放音子程序BSR_StopRecognizer();SACM_A2000_Initial(1);SACM_A2000_Play(Result,3,3);while(SACM_A2000_Status()&0x0001)!=0)SACM_A2000_ServiceLoop();ClearWatchDog();SACM_A2000_Stop();BSR_InitRecognizer(BSR_MIC);BSR_EnableCPUIndicator();voidPlayRespond(intResult)/放音子程序BSR_StopRecognizer();SACM_S480_Initial(1);SACM_S480_Play(Result,3,3);while(SACM_S480_Status()&0x0001)!=0)SACM_S480_ServiceLoop();ClearWatchDog();SACM_S480_Stop();BSR_InitRecognizer(BSR_MIC);BSR_EnableCPUIndicator();/启动实时监控intTrainWord(intWordID,intRespondID)/命令训练intres;PlayRespond(RespondID);while(1)res=BSR_Train(WordID,BSR_TRAIN_TWICE);if(res=0)break;switch(res)case-1:/没有检测出声音PlayRespond(RSP_NOVOICE);return-1;case-2:/需要重新训练一遍PlayRespond(RSP_AGAIN);break;case-3:/环境太吵PlayRespond(RSP_NOISY);return-1;case-4:/数据库满return-1;case-5:/检测出声音不同if(WordID=NAME_ID)PlayRespond(RSP_NAMEDIFF);/两次输入名称不同elsePlayRespond(RSP_CMDDIFF);/两次输入命令不同return-1;case-6:/序号错误return-1;return0;intmain()intres,timeCnt=0,random_no=0;BSR_DeleteSDGroup(0);/初始化存储器为RAMPlayRespond(RSP_INTR);/播放开始训练的提示音/.训练名称.while(TrainWord(NAME_ID,1)!=0);/.训练第一条命令.while(TrainWord(COMMAND_ONE_ID,2)!=0);/.训练第二条命令.while(TrainWord(COMMAND_TWO_ID,3)!=0);/.开始识别命令.BSR_InitRecognizer(BSR_MIC);/辨识器初始化BSR_EnableCPUIndicator();PlayRespond(RSP_STAR);/播放开始辨识的提示音while(1)random_no+;if(random_no=3)random_no=0;res=BSR_GetResult();if(res0)/识别出命令if(gActivated)timeCnt=0;switch(res)caseNAME_ID:PlayRespond(gTriggerRespondrandom_no);break;caseCOMMAND_ONE_ID:PlayFlag=1;PlayRespond2(RSP_GUNSHOT);PlayFlag=0;gActivated=0;break;caseCOMMAND_TWO_ID:PlayRespond(gComm2Respondrandom_no);gActivated=0;elseif(res=NAME_ID)PlayRespond(gTriggerRespondrandom_no);gActivated=1;timeCnt=0;elseif(gActivated)if(+timeCnt450)/超出定时PlayRespond(RSP_NOVOICE);/在设定时间内没有检测出声音gActivated=0;timeCnt=0;中断程序:.PUBLIC_FIQ.EXTERNAL_BSR_FIQ_Routine.EXTERNAL_gIsStopRecog/变量值=0辨识器忙/=1辨识器停止.PUBLIC_BREAK,_IRQ0,_IRQ1,_IRQ2,_IRQ3,_IRQ4,_IRQ5,_IRQ6,_IRQ7.EXTERNAL_PlayFlag.INCLUDEs480.inc;.INCLUDEA2000.inc;.INCLUDEresource.inc.INCLUDEhardware.inc.TEXT_FIQ:pushR1,R4toSPR1=P_INT_CtrlR1&=0x2000jz?notTimerA/当不为TIQ_TMA,则转R1=_gIsStopRecogjnz?BSR_NotBusy/_gIsStopRecog为1则转至放音处理call_BSR_FIQ_Routine/为0,调用辨识子程序jmp?BSR_Busy/返回中断?BSR_NotBusy:/放音处理R2=_PlayFlagjnz?Play2000/_PlayFlag为1则是播放2000callF_FIQ_Service_SACM_S480;/为0,播放480jmp?BSR_Busy/返回中断?Play2000:/2000播放子程序callF_FIQ_Service_SACM_A2000;?BSR_Busy:/返回中断R1=0x2000P_INT_Clear=R1popR1,R4fromSP;reti;?notTimerA:R1=0x8800;P_INT_Clear=R1;popR1,R4fromSP;reti;.END3.4 LED键盘模组电路原理图如下:实物图如下:3.4.1配件清单LED键盘模组配件包括:LED键盘模组板,10针排线2个。3.4.2 系统简介 1、基本特性与参数指标 LED键盘模组集成LED、KEY、数码管功能,可作为单片机常用外围器件的扩展模块。 LED键盘模组采用DC5V供电。 3.4.3 主要功能 1. 扩展了6位8段数码管,最大显示数据为999999; 2. 8个发光二极管,可作为显示状态信息使用; 3. 8个按键,可以组成1*8KEY也可组成2*4KEY; 4. 一个电位器,可以提供05V的模拟电压信号或者03.3V的模拟电压,与模组输入的VDD有关。 5. 键盘LED模组接口简单,可方便与任何一款单片机进行软硬件接口设计。3.4.4 主要元器件 1. ULN2003A 其内部为三极管阵列,其IN脚相当于三极管的B极,OUT较相当于三极管的C极。若IN脚输入高电平,对应的OUT脚接地;IN脚输入低电平,对应的OUT脚截止输出。2. LG5621AH 共阴极2位数码管。3. LG5641AH 共阴极4位数码管。3.4.5 接口说明 LED模组使用十分简单,直接用排线与61板 I/O接口相连即可。 1. KEYTYPE选择接口 此接口是选择2*4KEY还是1*8KEY,具体选择方式如下: 从左至右看,将第1至4短接块连接,选择了2*4KEY;只将第5个短接块短接,选择1*8KEY。1)2*4KEY接口 2*4KEY的第1组行定义为ROW1,第2组行定义为ROW2,4列定义为COL1COL4。 使用时COL1是K1和K5的输入,COL2是K2和K6的输入,COL3是K3和K7的输入,COL4是K4和K8的输入。用户可自行选择ROW1与ROW2接至VDD还是GND,但同一时间只能使用一组。AV是模拟电压输出端,通过调整R20可以改变AV的值,AV的最大输出值与VDD相同。D_DP是第4位数码管后时钟冒号的位信号控制端2) 1*8KEY接口 1*8KEY的8列

温馨提示

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

评论

0/150

提交评论