《基于凌阳SPCE061A单片机的语音识别计算器研究 中国矿业大学大学生创新实践项目结题报告.doc》由会员分享,可在线阅读,更多相关《基于凌阳SPCE061A单片机的语音识别计算器研究 中国矿业大学大学生创新实践项目结题报告.doc(35页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、中国矿业大学大学生实践创新训练计划基于嵌入式应用的数字语音识别技术的研究项目级别:校级指导教师:殷春浩项目主持人:张浩、吴松、印魏、江磊、汪亚琦目录1.引言. 22.设计要求.43.方案概述.54. 模组特性简介. 64.1 SPCE061A 特性简介. 74.2 芯片特性简介. 84.3 SPCE061A 精简开发板. 94.4 51单片机驱动彩屏模组简介.94.4.1 彩屏驱动电路图. 104.4.2 主要功能. 104.4.3 计算器实物图. 114.4.4 注意事项. 115 系统的硬件设计. 125.1 SPCE061A 周边模块. 125.1.1 SPCE061A 最小系统. 13
2、5.1.2 电源模块. 135.1.3 放音模块. 145.1.4 彩屏驱动电路. 146 所用语音算法介绍. 156.1 语音识别算法简介. 156.1.1 语音识别概述: . 156.1.2 语音识别原理. 156.1.3 SPCE061A 实现语音识别的步骤:. 156.1.4 语音识别API 介绍. 156.2 凌阳音频概述. 166.2.1 凌阳音频压缩算法的编码标准. 166.2.2 压缩分类. 166.2.3 凌阳常用的音频形式和压缩算法. 166.2.4 凌阳语音的播放、录制、合成和辨识. 176.2.5 常用的应用程序接口API 的功能介绍及应用. 177 系统软件设计. 2
3、47.1 擦除FLASH 模块: . 247.2 位操作模块:. 257.3 语音播放函数. 277.4 带权位数值结果播报函数模块.288 51单片机驱动彩屏显示模块 . 289 应用方案的验证步骤. . . 2910 结语. 3011经费使用情况. 3212参考文献. 3213附录源代码. 33【摘 要】在现代社会语音识别这个词语已经不再新鲜,基于语音识别的计算器可让我们的计算省去手工输入麻烦。以SPCE061A 单片机控制的语音识别模块,由于SPCE061A同时可分辨出最多命令为5条,作为语音识别计算器需要识别09加减乘除等命令远远超过5条,故采用分组命令形式,将0、1、2、3作为第一组
4、,4、5、6、7作为第二组,8、9、清除、等于作为第三组,加、减、乘、除作为第四组,同时每组加上“下一组”命令用于切换语音识别当前所在的组。初始化时训练特定人的语音,将其语音特征值存储至SPCE061A的ROM,训练完毕后进入识别模式根据当前组的不同将,检测到语音输入通过对比特征值获取识别结果,并将识别结果用串口传送至51单片机彩屏显示模块,如果识别到“下一组”时,重新将下一组ROM的5个语音特征值装载到当前内存继续识别。识别到“等于”命令时计算出结果,并依照数值权位准确播报当前结果。【关键词】SPCE061A;凌阳单片机;特定人语音识别;语音识别计算器The Design of the Sp
5、eech Recognition Calculator【Abstract】 The speech recognition is divided into two stages, namely, training and recognition. At the first stage, the speech recognition system learns about the human language and stores what it has learned in a speech database. Then at the next stage, the meaning of eac
6、h inputted speech can immediately be found in the speech database. Sunplus 16-bit SPCE061ASCM is embedded with 32K word Flash and 2K word SRAM, with built-in 10-bit ADC and DAC as well as more than 14 interrupt sources. The core of its CPU is a 16-bit microprocessor chip which has the function of DS
7、P. Besides, the CPU can work with a frequency up to 49 MHz, and process complex digital signals easily and quickly. Therefore, compared with other types of SCM, SPCE061A has more advantages in speech processing. Based on SPCE061A, a speech recognition Calculator has been designed. After training, th
8、e Calculator can complete many Calculations, which makes the human-computer interaction more intelligent.【Key words】SPCE061A SCM Speech Recognition Calculator1引言在农业、金融业、商业和工业自动化生产领域中,嵌入式技术得到了广泛应用和发展, 电子技术极大地改变了人们的生活工作方式。但是,人类的探索不会就此止步,对数据的获取普遍都是人工操作输入,特别是数值的输入繁琐易错,而如今语音识别技术被广泛应用到各个领域,语音识别成为人机接口的关键技术
9、,而利用嵌入式设备来实现语音识别成为一种经济快捷的应用方案。例如,电视的节目切换需要手工使用遥控器,如果设计出电视语音识别接收系统,用户说出数字便可切换到该节目,这样将使得电视更显得人性化。再如计算器的按键输入完全可以通过语音控制,语音控制机器人,语音输入数字账号号码等。同时对数值结果的显示输出是必不可少的,虽然电子显示系统得到了广泛的应用, 但是数值显示需要人眼观测,不能让人以最快的反应速度感知数值结果, 难以满足日益复杂的生产需要,例如刷卡消费时消费金额易输错,且输错后进行账单核对时比较麻烦,甚至检查不出错误,会造成比较严重的后果,而利用人耳对声音的敏感性,通过语音输出则可完全消除这种弊端
10、。语音识别本质上是一种多维模式识别系统,通过语音输入、预处理、特征提取、训练语音模型库、识别模式匹配、后处理流程,我们将设计出分别以凌阳SPCE061A单片机的智能语音识别计算器。为了提高广大单片机爱好者学习单片机的兴趣,凌阳科技大学计划教育推广中心推出了应用SPCE061A 作为主控制器,外加电机驱动电路显示制作的语音识别计算器。该计算器采用特定人语音识别对计算器进行控制,可以完成向数值输入、加减乘除、清除归0等功能。该语音识别计算器可以大大提高在校学生学习单片机的兴趣。2设计要求利用SPCE061A 单片机、51单片机、TFT彩屏,要求语音识别计算器具有下述功能:1. 通过语音命令对其进行
11、数值输入。2. 完成语音所给数值进行计算。3. 简单的加减乘除功能。4. 彩屏显示功能。技术要求1. 要求语音识别计算器可以识别20 条命令。2. 要求语音识别计算器具有彩屏显示功能。3 方案概述语音识别计算器可以充分发挥学生的创新能力,增加学生的动手实践能力,增加学生学习单片机的兴趣爱好。本方案以SPCE061A 单片机为核心,以51单片机驱动彩屏模块作为显示模块,组成具有语音识别能力,根据识别的语音完成数值计算,这也是智能计算器的一个方面。3.1 硬件框图系统以SPCE061A 为核心,结合51单片机驱动彩屏显示模块,如下图所示。串口通信发送语音识别结果喇叭播放TFT彩屏显示凌阳SPCE0
12、61A单片机语音识别51单片机驱动彩屏3.2 凌阳语音识别功能框图 名称第二组第三组第四组第一组1 2 0 3 下一组 4 5 6 7 8 9 下一组 下一组 等于 清除 + - * / 下一组 4 模组特性简介4.1 SPCE061A 特性简介SPCE061A 是凌阳科技研发生产的性价比很高的一款十六位单片机,使用它可以非常方便灵活的实现语音的录放系统,该芯片拥有8 路10 位精度的ADC,其中一路为音频转换通道,并且内置有自动增益电路。这为实现语音录入提供了方便的硬件条件。两路10 精度的DAC,只需要外接功放(SPY0030A)即可完成语音的播放。另外凌阳十六位单片机具有易学易用的效率较
13、高的一套指令系统和集成开发环境。在此环境中,支持标准C 语言,可以实现C 语言与凌阳汇编语言的互相调用,并且,提供了语音录放的库函数,只要了解库函数的使用,就会很容易完成语音录放,这些都为软件开发提供了方便的条件:SPCE061A 片内还集成了一个ICE(在线仿真电路)接口,使得对该芯片的编程、仿真都变得非常方便,而ICE 接口不占用芯片上的硬件资源,结合凌阳科技提供的集成开发环境(unSP IDE)用户可以利用它对芯片进行真实的仿真;而程序的下载(烧写)也是通过该接口进行下载。下图为SPCE061A 单片机的内部结构框图:4.2 芯片特性简介SPCE061A 性能简介1: 16 位unSP
14、微处理器 工作电压(CPU)VDD 为3.03.6V,(I/O)VDDH 为3.05.5V CPU 时钟:0.3249.152MHz 内置2K 字SRAM 内置32K 字FLASH 可编程音频处理 晶体振荡器 系统处于备用状态下(时钟处于停止状态),耗电仅为2uA/3.6V 2 个16 位可编程定时器/计数器(可自动预置初始计数值) 2 个10 位DAC(数/模转换)输出通道 32 位通用可编程输入/输出通道 14 个中断源可来自定时器A/B、时基、2 个外部时钟源输入和键唤醒 具备触键唤醒的功能 使用凌阳音频编码SACM_S480 可以播放压缩的语音资源 锁相环PLL 振荡器提供系统时钟信号
15、3 32768Hz 实时时钟 7 通道10 位电压模/数转换器(ADC)和单通道声音模/数转换器 声音模/数转换器输入通道内置麦克风放大器,并具有自动增益控制(AGC)功能 具备串行设备接口 具备低电压复位功能和低电压检测功能 内置在线仿真电路接口 具有WatchDog 功能44.3 SPCE061A 精简开发板SPCE061A 精简开发板(简称61 板),是以凌阳16 位单片机SPCE061A 为核心的精简开发仿真实验板,大小相当于一张扑克牌,是“凌阳科技大学计划”专为大学生、电子爱好者等进行电子实习、课程设计、毕业设计、电子制作及电子竞赛所设计的,也可作为单片机项目初期研发使用。61 板除
16、了具备单片机最小系统电路外,还包括有电源电路、音频电路(含MIC 输入部分和DAC 音频输出部分)、复位电路等,采用电池供电,方便学生随身携带!使学生在掌握软件的同时,熟悉单片机硬件的设计制作,锻炼学生的动手能力,也为单片机学习者和开发者创造了一个良好的学习条件和开发新产品的机会! 61 板上有调试器接口(Probe 接口)以及下载线(EZ_Probe)接口,分别可接凌阳科技的在线调试器、简易下载线,配合unSP IDE,可方便地在板上实现程序的下载、在线仿真调试。61 板上的主要功能模块如下:SPCE061A 单片机最小系统外围电路模块;电源输入模块;音频电路(包含MIC 输入、DAC 音频
17、功放输出)模块;按键模块;I/O 端口接口模块;调试、下载接口模块;下图为61 板的实物图:4.4 51单片机驱动彩屏模组简介4.4.1 主要功能通过语音命令对其进行数字输入和控制;可以实现加减乘除运算;可以和51单片机串口通信;51单片机接收数字并TFT彩屏显示;4.4.2 计算器实物图 4.4.3 注意事项在安装电池时注意正负极,由于2个模块耗电量大,电池不足够驱动功率是可外加USB电源。5 系统总体方案介绍用61 板来作为语音识别模块,使用了IOB10 资源作为串口通信,另外使用了扬声器。如图 4-1 所示:系统主要由61 板与51单片机驱动彩屏电路构成。61 板作为整个系统的主控板。在
18、主控板61 板的控制下完成各个功能。实现了特定人语音识别的功能,通过命令来控制计算器,使计算器智能化.5 系统的硬件设计5.1 SPCE061A 周边模块5.1.1 SPCE061A 最小系统SPCE061A 最小系统当中,包括SPCE061A 芯片外围的基本模块,有:晶振输入模块(OSC)、锁相环外围电路(PLL)、复位电路(RESET)、指示灯(LED)等,如下图所示。本系统,有关SPCE061A 单片机的最小系统的各个模块都做在61 板当中,读者可以查阅61 板的电路原理图。5.1.2 电源模块SPCE061A 的内核供电为3.3V,而I/O 端口可接3.3V 也可以接5V,所以在电源模
19、块(61 板上)中有一个端口电平选择跳线,如图中的J5,下图为61 板上的电源模块图。由于本系统需要的端口高电平为5V,所以图图 5-2 当中的J5 跳线需要跳到1 和2 上。5.1.3 放音模块交通灯换向时有语音提示。放音利用的是SPCE061A 内部的DAC,电路如图 5-3 所示。图中的SPY0030是凌阳公司的产品。和LM386 相比,SPY0030 还是比较有优势的,比如LM386 工作电压需在4V 以上,而SPY0030 仅需2.4V (两颗电池)即可工作;LM386 输出功率100mW 以下,SPY0030 约700mW。其他特性请参考SPY0030 的数据手册。5.1.4 计算
20、器硬件驱动电路计算器硬件原理图如图 5-4 所示:计算器显示模板驱动电路,以P0口和P3口驱动控制TFT彩屏,彩屏电源需要3.3V,采用3.3V稳压管实现5V转3.3V电源。6 所用语音算法介绍6.1 语音识别算法简介6.1.1 语音识别概述:根据对说话人的依赖程度,分为: 特定人语音识别(SD):只能辨认特定使用者的语音,训练-使用 非特定人语音识别(SI):可辨认任何人的语音,无须训练根据对说话方式的要求,分为: 孤立词识别:每次只能识别单个词汇 连续语音识别:用者以正常语速说话,即可识别其中的语句6.1.2 语音识别原理语音识别原理参看下图:6.1.3 SPCE061A 实现语音识别的步
21、骤:SPCE061A 实现语音识别的步骤,分为训练部分与识别部分,以及在训练、识别过程中中断的情况,参考下图:6.1.4 语音识别API 介绍BSR_InitRecognizer(int AudioSource);初始化识别器BSR_Train(int WordID,int TrainMode);语音训练BSR_DeleteSDGroup(int SDGroupNo);清除内存BSR_PauseRecognizer()暂停识别,但不释放中断等资源BSR_ResumeRecognizer()恢复被暂停的识别BSR_GetRecognizerScore()获得识别结果的可信度,返回值从-4096
22、到4096,数值越大表示输入语音与特征模型的匹配度越高。BSR_EnableCPUIndicator()开启CPU 状态监测功能。开启该功能后,IOA0 和IOA1 将发出每16ms 电平变化一次的方波。BSR_DisableCPUIndicator()关闭CPU 状态监测功能。BSR_ExportSDWord(int CommandID)使用函数库时,会自动创建一个100 Word 的数组BSR_SDModel100,可以把某条训练命令的特征模型数据导出到这个数组中。BSR_ImportSDWord(int CommandID)可以把BSR_SDModel 数组中的数据导入为某条语音命的特征
23、模型。unsigned int BSR_SDModel;配合BSR_ExportSDWord(int CommandID)与BSR_ImportSDWord(int CommandID)函数使用,此数组的作用相当于一个暂时的存储区。6.2 凌阳音频概述我们所说的音频是指频率在20Hz20KHz的声音信号,分为:波形声音、语音和音乐三种,其中波形声音就是自然界中所有的声音,是声音数字化的基础。语音也可以表示为波形声音,但波形声音表示不出语言、语音学的内涵。语音是对讲话声音的一次抽象,是语言的载体,是人类社会特有的一种信息系统,是社会交际工具的符号。音乐与语音相对更规范一些,是符号化了的声音。但音
24、乐不能对所有的声音进行符号化。为了让数字计算机更加便利处理音频信号,需要将模拟的(连续的)声音波形数字化(离散化),该过程主要包括采样和量化两个方面。数字音频的质量取决于:采样频率和量化位数这两个重要参数。此外,声道的数目、相应的音频设备也是影响音频质量的原因。语音处理技术是建立在语言学和数字信号处理基础之上的综合学科,其过程大致可以分为A/D采样输入、编码处理、存储、解码处理和D/A等。如今,要实现语音处理有多种渠道,可以选用专用语音芯片也可以选用单片机,二者区别参看表 21,如下:表 21 语音处理器件性能对照表2所选器件音质语音播放长度和段落价格专用语音芯片好受限制较高单片机由AD、DA
25、精度、压缩算法等决定由存储空间决定有优势SPCE061A单片机具有八路10位ADC和两路10位DAC,两个16位可编程定时器/计数器,内置MIC放大器和自动增益控制(AGC)电路,CPU时钟主频最高达49MHz且具有DSP功能,有能力执行复杂压缩算法。所以在选择具有语音处理功能单片机时,SPCE061A单片机可谓是上上之选。SPCE061A将A/D、编码算法、解码算法、存储及D/A做成相应的模块,每个模块都有其应用程序接口API,要实现语音处理,只用了解每个模块所要实现的功能及参数的内容,然后调用该API函数即可。不同音频质量等级的编码技术标准(频响)参看表 22,如下:表 22 音频质量等级
26、编码技术标准2信号类型频率范围(Hz)采样率(KHz)量化精度(位)电话话音200340088宽带音频(AM质量)5070001616调频广播(FM质量)2015K37.816高质量音频(CD 质量)2020K44.116凌阳音频压缩算法处理的语音信号的范围是200Hz3.4KHz的电话话音。SPCE061 解决方案:将A/D、编码算法、解码算法、存储及D/A 作成相应的模块,对于每个模块都有其应用程序接口API,用户只需了解每个模块所要实现的功能及其参数的内容,然后调用该API 函数即可实现语音处理功能。6.2.1 凌阳音频压缩算法的编码标准表 6-1 是不同音频质量等级的编码技术标准(频响
27、):凌阳音频压缩算法处理的语音信号的范围是200Hz3.4KHz 的电话话音。6.2.2 压缩分类压缩分无损压缩和有损压缩。无损压缩一般指:磁盘文件,压缩比低:2:14:1。而有损压缩则是指:音视频文件,压缩比可高达100:1。凌阳音频压缩算法根据不同的压缩比分为以下几种(具体可参见语音压缩工具一节内容):SACM-A2000:压缩比为8:,8:1.25,8:1.5SACM-S480: 压缩比为80:3,80:4.5SACM-S240: 压缩比为80:1.5按音质排序:A2000S480S2406.2.3 凌阳常用的音频形式和压缩算法1) 波形编码:sub-band 即SACM-A2000特点
28、:高质量、高码率,适于高保真语音音乐。2) 参数编码:声码器(vocoder)模型表达,抽取参数与激励信号进行编码。如:SACM-S240。特点:压缩比大,计算量大,音质不高,廉价!3) 混合编码:CELP 即SACM-S480特点:综合参数和波形编码之优点。 本方案采用该编码方式。除此之外,还具有FM 音乐合成方式即SACM-MS01。6.2.4 凌阳语音的播放、录制、合成和辨识凌阳的SPCE061A 是16 位单片机,具有DSP 功能,有很强的信息处理能力,最高时钟频率可达到49MHz,具备运算速度高的优势等等,这些都无疑为语音的播放、录放、合成及辨识提供了条件。凌阳压缩算法中SACM_A
29、2000、SACM_S480、SACM_S240 主要是用来放音,可用于语音提示,而DVR 则用来录放音。对于音乐合成MS01,该算法较繁琐,而且需要具备音乐理论、配器法及和声学知识,所以对于特别爱好者可以到我们的网站去了解相关内容,这里只给出它的API 函数介绍及程序代码的范例,仅供参考。6.2.5 常用的应用程序接口API 的功能介绍及应用表 6-2 所列出的是凌阳音频的几种算法。语音和音乐与我们的生活有着非常密切的关系,而单片机对语音的控制如录放音、合成及辨识也广泛应用在现实生活中。我们知道对于语音处理大致可以分为A/D、编码处理、存储、解码处理以及D/A 等。然而,通过麦克风输入所生成
30、的WAVE 文件,其占用的存储空间很大,对于单片机来说想要存储大量的信息显然是不可能的,而凌阳的SPCE061A 提出了解决的方法,即SACM-LIB,该库将A/D、编码、解码、存储及D/A 作成相应的模块,对于每个模块都有其应用程序接口API,所以您只需了解每个模块所要实现的功能及其参数的内容,然后调用该API 函数即可实现该功能,例如在程序中插入语音提示,或连续播放一段语音或音乐,也可以根据自己需要的空间或使用范围选择适合自己的算法。以下就SACM-S480 算法具体介绍其API 函数的格式、功能、参数、返回值、备注。(其它算法可以见附录)该压缩算法压缩比较大80:3, 存储容量大,音质介
31、于A2000 和S240 之间,适用于语音播放, 如“文曲星”词库等,所以我们这个方案就采用了该算法。(只介绍程序中用到的函数,其他API 函数参考凌阳科技大学计划网站)其相关API 函数如下所示:1)【API 格式】C:int SACM_S480_Initial(int Init_Index)ASM:R1= Init_IndexCall F_ SACM_ S480_Initial【功能说明】 SACM_S480 语音播放之前的初始化。【参数】 Init_Index=0 表示手动方式;Init_Index=1 则表示自动方式。【返回值】 0:代表语音模块初始化失败1:代表初始化成功。【备注】
32、该函数用于对定时器、中断和DAC 等的初始化。2) 【API 格式】 C:void SACM_S480_ServiceLoop(void)ASM:Call F_ SACM_S480_ServiceLoop【功能说明】 从资源中获取SACM_S480 语音资料,并将其填入解码队列中。【参数】 无。【返回值】 无。【备注】 播放语音文件中数据,当出现FF FF FFH 数据时便停止播放。3) 【API 格式】C:int SACM_S480_Play(int Speech_Index, int Channel, int Ramp_Set);ASM:R1= Speech _IndexR2= Chann
33、elR3= Ramp_SetCall SACM_S480_Play【功能说明】 播放资源中SACM_S480 语音。【参数】 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 文件中资源表(T
34、_SACM_S480_SpeechTable)的偏移地址。中断服务子程序中F_FIQ_Service_ SACM_S480 必须放在TMA_FIQ 中断向量上(参见SPCE 的中断系统)。函数允许TimerA 以所选的的数据采样率(计数溢出)中断。4)【API 格式】ASM:Call F_FIQ_Service_ SACM_S480【功能说明】用作SACM_S480 语音背景程序的中断服务子程序。通过前台子程序(自动方式的SACM_S480_ServiceLoop 及手动方式的SACM_S480_Decode)对语音资料进行解码,然后将其送入DAC通道播放。【参数】 无。【返回值】 无。【备注
35、】SACM_S480 语音背景子程序只有汇编指令形式,且应将此子程序安置在TMA_FIQ 中断源上。7 系统软件设计5在主函数中调用相关函数完成特定人语音的训练,然后再训练成功后进行语音识别,根据识别的命令执行相关的操作。程序流程图如图 7-1 所示:开始初始化串口判断是否为第一次下载擦出指定的Flash语音训练与存储置相关标志位语音识别初始化判断是第几组串口发送至51单片机数值处理或标记运算符判断是否等于命令执行运算结果语音播放训练键是否按下擦除Flash标志否是否是是判断是否为第一次下载根据FLASH 中的标志位来进行判断。将训练好的语音模型导出存储到FLASH中使用库函数BSR_Expo
36、rtSDWord(uiCommandID);进行操作,然后再调用读写FLASH 中的函数进行。在进行语音识别时,首先读取FLASH 将语音模型取得,然后调用BSR_ImportSDWord(uiCommandID);函数将语音资源载入内存。在识别出命令后,执行相关动作,相关动作操作就是操作电机的正向或反向旋转同时配合延时与播放声音组合起来形成不同的动作。7.1 擦除Flash 模块6:在程序中按照操作SPCE061A 的flash 的步骤擦写flash,在程序中写成3 个函数用于操作flash,如下:F_FlashWrite1Word()语法:void F_FlashWrite1Word(int addr,int Value)描述:写一个字到FLASH 中参数:1、被写数据的存储地址2、被写数据返回:无F_FlashWrite()语法:F_FlashWrite(int sector,int &num,int size)描述:顺序写多个字参数:1、被写数据的起始地址2、被写数据3、写数据的数量返回:无F_FlashErase()语法:void F_FlashErase(sector)描述:擦除256 字节参数: 擦除页的起始地址返回:无7.2 位操作模块7:由于SPCE061A 没有位操作指令,而在程序控制电机的时候需要经常操作某一位,为了方便程序的编