《智能家居语音控制系统设计10000字【论文】》_第1页
《智能家居语音控制系统设计10000字【论文】》_第2页
《智能家居语音控制系统设计10000字【论文】》_第3页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

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

文档简介

智能家居语音控制系统的设计学生:指导教师:(三峡大学电气信息学院)摘要:本课题通过采集声音信息对关键字进行识别作为命令来触发开关,再通过网络传输将数据传输至物联网平台,将物联网平台作为中介实现数据的处理和传输。设计了一个智能家居语音控制系统,整个系统可以通过人的声音识别判断来执行相应的动作,比如电视机的打开与关闭,室内灯光的调控,通过一系列简单的关键字组合来进行判断执行。使用户在使用该系统的过程中与设备有更多的互动,从而增加体验度。该课题功能的实现主要采用由esp8266芯片连接WIFI并对数据进行计算处理和采集声音的语音识别芯片LD3320来实现。首先,在程序中预设每个家电的切换动作语音命令。当使用者有声音信息发出时,系统自动获取信息进行识别对比和命令的判断,语音识别模块识别指令成功之后,控制相应的家电可以做出相应的状态切换。如果采集到的声音不能被识别或者识别之后与预设命令不符合,它将不会触发任何动作。同时数据可以通过网络传输到客户端,以显示家庭的运行状态,用户只要通过网络即可访问云端,进行远距离设备的控制。关键词:单片机LD3320语音识别WIFI通信 前言智能家居系统功能的实现方式其实就是通过一些网络把家里面的设备给综合管控,实现资源的控制与调配,一般来说都比较日常的家电,空调,排风,空气循环系统,灯光设备,以及家庭安全保护系统。通过物联网平台只要在有可用网络的情况下实现智能控制。在现代生活中人们已经不仅仅满足于基础的衣食住行,更注重生活的完美体验与享受。目前社会科技的发展速度非常之快,让人们的生活与科技相结合已经成为日趋重要的倾向,更多的人都希望能有一个智能完美懂得自己的家。自己还没下班,家里的电饭煲已经为你煮上了饭,还没下班,冰箱会发来提示,家里所剩的蔬菜或者蛋类其他事物存货已经不多,需要紧急添加;当上了车回家的路上,通过手机远程操控打开空调,室内的灯光,让你已进入家门就感受到家庭的温馨,走进厨房,香喷喷的饭菜已经做好[1]。如此一来可以节约使用者更多的时间来做其他事情。而语音识别控制系统在整个家居系统中负责开关的第一系统。本次课题就从简单的如何远程控制相应的家电设备来做起。当前社会中,在科技发展的推动下,语音识别的功能已经越来越强大。语音识别和各种设备加在一起都可以成为一个全新的系统,语音对话机器人,语音导航,甚至AI助手,都是语音识别系统与其他设备结合的产物。这里提到的“先进”将反映在设备的技术水平以及用电量的概念上。智能家居的语音控制系统将对用户日常起居生活习惯做出重大影响,提高生活水平舒适度。在智能家居蓬勃发展的状况下,本课题在原有的基础上用语音识别作为开关,通过使用物联网技术为载体进行数据的传输,以及超远距离的监控。在室内的时候,用户发出声音指令,语音识别系统在感知并捕捉识别成功指令后,控制系统发出相应的指令,比如打开空调,这样空调就开始工作。本文只要研究了语音识别系统具体工作的实现,把一些预设命令关键字通过预先编写程序写入到处理器中。识别系统通过声音采集分析匹配预先设定的命令,首先过滤掉噪音,还有一些无用词汇,避免识别正确率太低,或者控制系统发出错误的指令,从而影响整个系统的运行。通过一系列措施使得智能家居语音控制系统更符合人们生活的使用习惯,给用户更完美的体验。国内语音识别的发展也是非常的迅速,从上个世纪末一直到现在也取得了非常好的成绩。语音识别技术的飞速发展同时也带动了很多其他行业,比如计算式行业,家电行业,尤其近些年社会所提倡的往智能方向发展,整个行业大的方向趋势都非常良好。从智能语音识别技术应用一开始,我们国家也在这一时间投入了大量的人力财力物力,当然也取得了非常令人骄傲的成绩。近些年在科技发展的推动下,语音识别技术也日渐成熟,有了更加大的应用环境,从物流行业物件分发,交通方面的无人驾驶汽车,以及移动端的人机交互系统,各个行业都取得了比较好的成绩。现在物联网技术的兴起也必将改变人们的生活方式,从单一功能的使用,到增加人机互动。将语音识别系统与物联网相结合作为连接手段把家庭里的家用设备连接在一起,通过声音来控制设备的运行。而目前来说这个系统功能市场上很少有成型实物应用。本课题结合两个系统与家具连接一起来实现,将智能语音控制系统的实际应用更加完善,为今后的智能家居系统研究做出一些最初的尝试[4]。1系统总体方案论述1.1主要模块选择方案(1)本设计选用的WIFI模块,该模块上面已经有处理器,可以直接把程序下载进去,高度的集成,最小的缩小了所占的面积。ESP8266WIFI模块,集成高性能处理器,可以连接到WIFI而且支持Wi-Fi协议栈,而且能够在大的温差下正常运行[5]。(2)根据课题功能的需求,只需要对声音信息采集之后做出识别和判断,因此选用LD3320模块,该模块在声音距离,唤醒率,误唤率,回声及噪声的消除能力方面都要优于其他语音识别芯片。LD3320芯片已经有集成的很多元器件,本身就可以完成空中声源的感知及识别,不用再添加其他芯片。而且,LD3320芯片可以自由加入程序中运行,可添加关键字等优势。在整个系统电路中,语音识别模块负责对声音信息的采集和识别,在STC11L08XE单片机中把预设命令关键字通过程序编写的方式下载到处理器中,该单片机负责完成所有的语音采集与识别工作,在语音识别模块识别正确的命令之后将识别的结果传输到控制器,另外语音识别模块的正常运行都需要通过配置寄存器数据来协助,同时LD3320读取到信息后,通过SPI通信方式将数据传输到处理器端口。整个语音识别过程分为以下几个部分,首先模块的初始化化,把预设的关键字命令写入,语音识别相应方式。程序用KEIL4软件编写下载,在设备供电启动后,对周围声音信息进行采集,预程序中预设的关键字做判断,并根据识别判断得到的结果进行相应的设备运行状态的改变。1.2通信技术方案的选择目前数据的传输方式有很多种,常见的有使用ZIGBEE组网节点与节点之间进行数据传输,红外数据信息传输,和WIFI无线传输等方式。WIFI无线传输具有传输速率快,传输信息量大的优点,同时基本上都装有WIFI,所以采取WIFI传输的话会比较便利,便于设备的广泛使用,也可以降低成本,同时又因为要连接到公网,远程操控设备。所以鉴于此需求,采用WIFI来把运行信息数据传输到云平台和客户端[7]。1.3系统框架根据设计要求得出系统架构图如图1.1所示。各模块功能如下:手机端:负责控制各功能模块,并接收开门的数据;物联网云平台:负责连接手机端和硬件电路,以及数据的传输;PC:在电脑网页端进行远程监控操作;MCU:负责数据的处理,当接收到语音识后做出相应的判断,并且对家居做出相应的控制;LD3320语音识别模块:该部分获取声源信息,根据预设的声音产生信号传输ESP8266中央处理模块。手机端手机端物联网云平台中央处理器WIFI语音识别模块声源家电设备图1.1系统架构图1.4系统工作原理本设计主要由esp8266芯片加语音识别芯片LD3320芯片来实现,esp8266模块负责对网的连接,通过网络将数据传输到云平台以及将数据从云平台下载传输到客户端,这一过程使用MQTT协议。同时esp8266模块通过物联网云平台进行对设备的检测,可以实时获取设备的运行状态,也可以对设备的状态做出改变,比如打开或者关闭相应的设备。LD3320语音模块对声源读取并判断的识别,通过对比存储在MCU中的预设声源来判断命令是否正确[8]。系统开始工作后,当语音模块获取并判别正确的声源之后,通过程序来控制相应的继电器从而实现电路开关的闭合或打开。网络数据传输中使用物联网云平台,设置事件触发,当夜晚长时间亮灯达到一定时间后,为节约用电考虑设计会通过网络MQTT协议发送数据给WIFI模块,关掉相应的家居。同时移动客户端也可登录到服务器通过网络来发送命令来控制家居的开关。1.5系统特点本设计以物联网技术为信息传输载体和语音识别模块相结合,语音识别模块控制对应家居也可通过网络来进行操控。(1)以esp8266芯片和LD3320作为核心,高度的集成化可以在任何场合使用,方便简单。因为整个系统的体积较小,可以嵌入到各种设备中,容易安装,而且对电力的供应需求也很低。同时如果在以后的使用中发生故障也容易维修。(2)本设计采用网络在云平台和客户端之间进行数据的传递,这样的话可以更有效的降低系统的延迟,保证设备能正常稳定共作。2系统硬件设计2.1WIFI模块硬件2.1.1esp8266模块功能ESP8266模块:ESP8266内置超低功耗TensilicaL10632位RISC处理器,CPU时钟速度最高可达160MHz,支持实时操作系统(RTOS)和Wi-Fi协议栈,可将高达80%的处理能力留给应用编程和开发,超低功耗ESP8266专为移动设备、可穿戴电子产品和物联网应用而设计,通过多项专有技术实现了超低功耗,ESP8266EX具有的省电模式适用于各种低功耗应用场景[9]。ESP8266EX集成了32位Tensilica处理器、标准数字外设接口、天线开关、射频balun、功率放大器、低噪放大器、过滤器和电源管理模块等,仅需很少的外围电路,可将所占PCB空间降低。ESP8266的工作温度范围大,且能够保持稳定的性能,能适应各种操作环境。2.1.2ESP8266模块引脚图ESP8266模块的引脚信息如图2.1所示图2.1ESP8266引脚图2.1.3电源电路LD3320语音识别模块使用的是3.3V电源,ESP8266需要转化5V电源为3.3V,使用SPX3819M5-L-3-3稳压电路将输入的5V。电源电路如图2.2所示:图2.2电源电路2.2语音识别模块2.2.1语音识别流程LD3320语音识别模块可以采集到两种数据结果:在程序预设的初始时间里,芯片会采集外部的声音存储到寄存器中,然后进行分析比较,最后给出判定的结果。一般这个时候,可以理解为只给芯片设置了5秒是时间去采集记录,而且,语音识别芯片在这5秒钟的时间结束后,会产生中断信息,再次请求获取时间来采集记录,这样循环多次最终将外部声音识别出来。LD3320语音识别模块通过使用VAD技术来检测识别语音[10]。当检测到外部有声音时,开始记录数据,直到说话声音停止,开始分析声音数据,同时判断识别的结果。VAD采集声音的方式是如果检测到有声音的产生,则认为此时是声源开始发出,在一段时间里,如果可以一直检测到声音,则一直检测,直到检测不到则认为这个声源结束。LD3320识别芯片采用了一种更加简单快捷的计算方式,第一次就可以识别声音,也不需要提前教芯片学会判定声音,只需要将预设命令的汉语拼音写入,程序既可以根据拼音来和声源作对比,判定正确的声源。同时识别精度也是非常的精准。每个预设关键字的长度不能太长,同时也不能有太多的控住语句,语句的个数要低于50个。控制命令可以设置相对不容易混淆的短语,词组,或者英文单词也可以。如果是汉字的话,则一句话不能多于10个汉子。同时,因为每个句子也是可以随便调换字的位置,就一位置,同一个系统可以在多种场合中应用。LD3320模块电路中已经配置了D/A转换器和放大电路。MIC音频信息采集、单声扬声器和咪头可以非常容易地连接到芯片的引脚[11]。立体声耳机能发出清晰响亮的声音,最罕见的是其输出端口的功率只有20mW。并且它的状态可以被设置为休眠模式并且可以很容易地进入工作模式。2.2.2工作原理语音识别技术其实就是采用ASR技术来实现的,同时LD3320芯片和STC单片机相结合,组成简单的非特定人声语音识别系统。本设计中语音识别模块和STC10L08XE单片机相结合进行声音的采集判断。LD3320语音识别模块是ICRoute公司的新一代产品,该芯片通过采用AutomaticSpeechRecognition技术,该模块预留16个I/O接口,还有按键,可以和各种系统相结合使用,具有非常好的可移植性能[11]。在使用的时候,芯片中已经有了之前传入的关键字,程序的编写时就可以通过设置字符串来预设,这样的话在以后的使用时即可识别生效。程序下载后把预设的关键字命令存储在处理器中,命令可以是一些简单词组,英文单词或者任何短句,只要把中文拼音写入程序中程序就可以自动识别。语音识别的过程一般分为以下两种:一是为声音信息触发来识别,触发识别就是在系统的处理器接收到一个声源信号时,比如使用者说“开始”,LD3320识别模块接收到该命令后才开始下一次的声音采集识别,开始启动整个语音识别模块开始工作。就是需要两次触发来实现系统的工作,这样可以是整个识别更加的准确。第二种方式是循环触发方式:就是只要有声音发出并被语音识别模块采集到,该模块就会识别,不停的反复识别的过程,如果正好和预设命令相匹配就做出相应的动作,比如,打开LED灯,在识别一个命令之后自动进入下一次循环。一直这样循环采集。整个语音识别系统的实现方式包括各个软件控制的编写,计算比对命令是否匹配是整个处理系统的最重要部分分工作,软件的编写用KEIL4编写,把所有的操作数据都需要记录下来,同时对应相应的操作过程需要进行回放。将需要的预设口令和相应的动作,以及实现方式事先写入代码中。语音识别的结果通过检测系统来传输并执行,传输到控制器后,中央处理器对识别的结果加以处理,如果能和预设命令相匹配,同时查找预设命令,执行相应的动作,通过串口来执行开关动作。在该系统中命令控制相应家具设备运行状态的改变,启动或者停止。LD3320语音识别系统在识别正确的命令会将结果传输到输出控制口,执行相应的命令,如果在预设的有限时间里没有收到识别结果或者错误的识别结果后,则说明有错误发生,这个时候控制系统就需要重新发送命令。该系统中采集数据的传递方式如图2.3所示。通过对输入的语音进行分析,提取出声源的信息,再和程序中预设的命令关键字做匹配,然后输出对应的结果。图2.3数据接收流程图2.3LD3320外围电路设计为了让LD3320芯片能够正常工作并且实现与上位单片机的通行,需要为LD3320芯片设计外围电路,电路设计如图2.4所示。其中红色LED用于指示LD3320芯片的工作状态,当LD3320正常工作时,红色LED将会闪亮。图2.4LD3320外围电路图3系统软件设计3.1WIFI模块软件设计3.1.1中央控制系统模块工作流程整个系统数据处理的过程如图3.1所示,系统初始化后,WIFI模块搜索并连接到可用WIFI,中央处理器获取LD3320数据包资料,判断是否与源程序中设定相对应,如果是预设的语音命令,则打开或者关闭相应的设备。如果系统没有采集到声源,或者采集判断的声源不是程序中预设的关键字命令,则系统不发出任何指令,继续检测获取用户声音信息。开始开始模块连接到WIFI判断指令是否匹配?获取数据系统初始化执行动作不执行动作YN图3.1中央控制系统模块工作流程图3.1.2模块间的通信方式由于采用SPI通信方式占用的接口线线只有4根,通信简单快捷而且效率还很高,市场上很多的处理器都可以采用SPI通信,所以说这是是一种比较好的选择方案。数据传输方式通过4根线进行数据的传递,SPI传输数据最明显的特征是设备时钟由所连接的设备时钟决定,等主设备产生时钟信号后,主从设备间开始通信。几个接口类型分别是:SDI:负责数据输入(2)MISO:负责数据传入和数据传出;SDO:数据输出(1)MOSI–两个设备间数据的传输SCLK:时钟(3)SCLK–时钟信号,由所连接的主设备传出CS(片选)。(4)CS–如果连接设备多取决于主设备的时钟,如果连接了多个从设备,每个设备上都必须有引脚要连接到主设备,这时候片选引脚电平必须是拉低主设备产生时钟信号给相连接的设备,相连接的设备之间的数据发送和接收速率由主设备的频率来决定。在设备连接的时候各个接口需要与对应的连接起来,采用相同的接口。在数据传输时,如果传输的数据小于16位,数据在传输的时候必须要左对齐[12]。而且接收的数据如果也是小于16位就要采用程序来屏蔽掉无用数据。3.1.3WiFi模块关键代码3.1.3.1搜寻连接到WIFI数据通信通过WIFI实现,设备供电之后,WiFi模块启用,用os-timer定时器循环设置每隔一秒搜寻可用WiFi,为了使设备更普遍使用,通过物联网平台来输入WIFI名称及密码,用os-printf打印连接WIFI的信息来验证程序的执行。模块需要用户预设要连接的WIFI名称和WIFI密码,这里需要把这两项存储到结构体里面,首先定义两个变量存储,然后声明一个结构体用来放置所有的变量信息。 structstation_configstation_cfg; uint8ssid="xxx";//wifi名 uint8password="xxx";//wifi密码 模块出厂时默认都是作为AP来使用的,必须把模块修改成Station[13]。只有这样,才能连接到指定的预设WIFI。WIFI的运行需要以下的程序设置 voidICACHE_FLASH_ATTR user_set_station_config(void) { //把模块设置为客户端模式 //写入要连接WIFI的SSID和PASSWORD }esp8266芯片内的空间有限,为节省空间,只用用到的时候才把信息存到其中,首先添加一个宏定义,在上电启动后,把所需要的数据载入,通过添加的宏定义实现,这样就可以把整个函数实现。 voiduser_init(void) { 设置程序下载时的波特率为115200 os_printf("SDKversion:%s\n",system_get_sdk_version());//打印sdk版本 user_set_station_config();//setSTATIONconfig 中调用wifi_station_set_config(&station_cfg) //3.1.3.2手机端远程操控通过物联网云平台设置,添加设备及上下通道,向上通道代表订阅,向下代表发布命令。创建一个触发任务,将设备UUID填入,并填写之前添加的应用场景和数据类型,相应的详细数值如图。在连接到公网的情况下即可通过云平台查阅家居的使用情况,和控制开关[14]。参数如图3.2.(a)(b)图3.2物联网云平台参数控制第一步:创建一个服务器并启动首先需要创造一个服务端,最直接快捷的方式就是使用MqttServer的方法直接建造,但是使用这个方法必须要有相应的参数设置。varoptions=newMqttServerOptions();varoptions=newMqttServerOptions();使用以上方法建造的对象之后,通过使用Start的方式就可以打开MQtt服务。第二步:验证客户端的正确性在使用客户端时必须要加以验证,通过连接到服务器的客户端的标识ID号码,用户的访问名字和用户密码。 ConnectionValidator=c=^ { if(c.ClientId.Length^10) returnMqttConnectReturnCode. if(c.Username!="xxx"||c.Password!="xxx") returnMqttConnectReturnCode.第三步:创建并连接到客户端 首先要创建一个MQTT,使用MQTTnet来新创建就可以,通过使用Clientact就可以新建一个Client对象。 在完成所用客户端的建造之后,通过调取异步处理方式来连接到云平台。 在使用这个方式是一般都需要一个载体进行数据传递,这个载体必须要有客户端的唯一标识ID号,以及服务器的网络地址,端口号码,和用户的姓名以及密码等重要信息。 varoptions=newMqttClientTcpOptions { Server="127.0.0.1", ClientId="c001", UserName="u001", Password="p001", CleanSession=true };第四步:订阅消息首先客户端和服务器需要连接在一起,在联通之后,通过使用异步传输的方式来订阅消息,这样的话就可以使用可一一列举的方式把和主题无关的给过滤排除掉。再把整个系统可用的有用信息加以传输发布。mqttClient.SubscribeAsync(newList^TopicFilter^{newTopicFilter("家/客厅/空调/#",MqttQualityOfServiceLevel.) };第五步:发布消息 在信息的发布时,首先要创造一个信息载体也就是对象,通过采用最快捷的方法,通过建造一个函数,把信息的主题,主要内容,以及各种参数发送到网络。 MQTT_Publish(client,pub_topic_id[0],"0",1,0,0); MQTT_Publish(client,pub_topic_id[0],"response:1",10,0,0); 在客户端的到传输的消息日志后,客户端再通过对象是publish消息进行数据的传输,再通过mqtt把消息发送到网络给用户。 mqttClient.PublishAsync(appMsg);第六步:跟踪消息 Mqttnet协议根据Mqttnet信息来实现数据传输这个Mqttnettrace可以在服务端传输数据给客户端。Trace的传输用来做服务器与客户端传输信息记录,包括该信息的发布源头,以及进程ID,日志的等级程度,有错误不识别的消息也会实时显示出来。 MqttNetTrace.TraceMessagePublished+=MqttNetTrace_TraceMessagePublished; privatestaticvoidMqttNetTrace_TraceMessagePublished(objectsender,MqttNetTraceMessagePublishedEventArgse) Console.WriteLine($"运行ID:{e.ThreadId}数据来源:{e.Source}程序查看:{e.Level}订阅消息:{e.Message}"); if(e.Exception!=null) Console.WriteLine(e.Exception);3.2语音识别模块软件设计3.2.1语音识别模块工作过程整个系统工作数据传输过程如图3.3所示。LD3320模块在初始化后随时收集声源信息,并在收集后将信息存储在寄存器中。MCU模块读取刚刚收集的声源信息,并将其与预设的声源进行比较。如果它符合预设的声源,它会产生一个中断信号,发送到ESP8266模块,从而控制相应家庭的开关。如果不是预设信息,则属于垃圾信息,并清空以继续监视和收集。MCUMCU读取LD3320的寄存器LD3320音频采样并识别根据单片机里编好的程序进行具体判断ESP8266模块结果存储在LD3320中的寄存器中图3.3语音识别模块工作过程3.2.2语音识别模块关键代码3.2.2.1初始化代码硬件初始化工作的时候很有可能会因为一些电路问题不能正常工作,解决办法是多启动几次,这里我用了5次启动流程。把一些识别的数值也要初始化设置。程序的具体识别计算方式来改写。初始化过程中一般都需要把一些详细的参数给设置了。参数包括,语音识别工作的时间,读取背景音的时间,同时灵敏度也要做修改,灵敏度越高识别的正确率就会相应的降低。灵敏度指的是采集语音的距离,所以要多次调整,才能合适。ASR初始化voidLD_Init_ASR(void){ nLD_Mode=LD_MODE_ASR_RUN; LD_Init_Common(); GUI_DispDecAt(LD_ReadReg(0xBD),300,20,3); //text LD_WriteReg(0x17,0x48); LD3320_delay(10); LD_WriteReg(0x3C,0x80); GUI_DispDecAt(LD_ReadReg(0x3C),300,40,3); //1text LD_WriteReg(0x3E,0x07); GUI_DispDecAt(LD_ReadReg(0x3e),300,60,3); //text LD_WriteReg(0x38,0xff); GUI_DispDecAt(LD_ReadReg(0x38),300,80,3); //text LD_WriteReg(0x3A,0x07); GUI_DispDecAt(LD_ReadReg(0x3a),300,100,3); //text LD_WriteReg(0x40,0); GUI_DispDecAt(LD_ReadReg(0x40),300,120,3); //text LD_WriteReg(0x42,8); GUI_DispDecAt(LD_ReadReg(0x42),300,140,3); //text LD_WriteReg(0x44,0); GUI_DispDecAt(LD_ReadReg(0x44),300,160,3); //text LD_WriteReg(0x46,8); GUI_DispDecAt(LD_ReadReg(0x46),300,180,3); //text LD3320_delay(1);}uint8RunASR(void){ uint8i=0; uint8asrflag=0; for(i=0;i<5;i++) // { LD_AsrStart(); //初始化ASR LD3320_delay(100); if(LD_AsrAddFixed()==0) //添加关键词语到LD3320芯片中 { LD_reset(); // 看门狗检测到硬件采集声源信息出现错误,硬件重新供电复位 LD3320_delay(50); // continue; } LD3320_delay(10); if(LD_AsrRun()==0) { LD_reset(); // 硬件出现致命错误,系统重新启动 LD3320_delay(50); // 并从初始化开始重新ASR识别流程 continue; } asrflag=1; break; // } returnasrflag;}3.2.2.2声音采集代码语音识别模块在对声源识别之后将数据结果传输到计算机的控制系统,把采集的数据结果加以计算处理,得到的命令将通过中断传输的方式进行命令的传输或者接收。把寄存器中存储的识别结果与预设关键字作对比。通过定义字符串存放在MCU中,然后一起把程序下载到单片机中。采集过程如图3.4所示:设定编号设定编号等待芯片空闲将字符串中的字符按顺序写入将字符串长度写入寄存器B9向寄存器B2写入FF循环结束?结束开始NY图3.4声音采集流程图 uint8nAsrResCount=0; ucRegVal=LD_ReadReg(0x2B); if(nLD_Mode==LD_MODE_ASR_RUN) { //GUI_DispDecAt(2,20,70,5); //text //通过语音识别结果发出的中断 //(当接收到声音输入,无论如何都会有中断信号产生) LD_WriteReg(0x29,0); LD_WriteReg(0x02,0) GUI_DispDecAt(ucRegVal,200,100,3); GUI_DispDecAt(LD_ReadReg(0xb2),200,120,3); GUI_DispDecAt(LD_ReadReg(0xbf),200,140,3); if((ucRegVal&0x10)&&LD_ReadReg(0xb2)==0x21&&LD_ReadReg(0xbf)==0x35) { GUI_DispDecAt(3,20,90,5); //text if(nAsrResCount>0&&nAsrResCount<=4) { } } else { GUI_DispDecAt(4,20,100,5); //不会执行识别 } LD_WriteReg(0x2b,0); //这里开关设置为空闲 } 3.2.2.3声音识别过程要控制整个语音采集识别系统,首先要通过设置数据的存储方式。通过定义的系统变量来实现对整个处理过程的控制。识别过程如图3.5所示:LD_RUNING状态,这些命令需要在编程的时候提前加入到LD3320启动识别之前。定义语句nAsrStatus=LD_ASR_RUNING;这个地方需要声明设置一个全局变量。把这一局程序放置在在LD3320正式启动开始工作之前:将寄存器29和02清零将寄存器29和02清零检查寄存B2,2B,是否正常寄存器BA的值在[1..4]之间?最佳识别结果在寄存器C5,如有必要可获取其他备选结果。结束运算结果是无法识别开始图3.5声源识别流程图nAsrStatus=LD_ASR_RUNING;LD_AsrRun();在写入关键字的时候需要注意一些事项,每个关键字都需要指定一个编号,如表3.6所示,但是不同的识别关键字是可以用同一个编号的,但是相同的编号一定会有相同的结果输出。LD3320语音识别芯片,关键字的条数最多只能写入50条,而且写入的关键字必须是普通话,否则不能识别。写的关键指令如果是多个拼音,拼音之间必须要有占位,另外关键字的总占位不能超过256个。在声音的采集过程中,只要咪头采集到声音,就算是不能正确识别或者识别成功,系统都会生成一个中断信号。然后把声音信息存储到寄存器中,处理器再根据生成的中断信号与寄存器中的预设关键字拼音作分析判断。通过提取寄存器中的值,就可以知道有哪些相似的预备答案,然后在进一步挑选出与声源最为相似的关键字,做出相应状态切换。表3.6编号表编号字符串1开灯1开白灯3打开红灯7关红灯8打开风扇4系统调试4.1语音识别准确度调试语音识别调试时用不同人的声音,非特定人声代表不同的人声,分别在安静环境和吵闹环境下对系统进行测试。调试结果如表4.1和图4.1所示表4.1语音识别精准度调试识别环境次数语句安静吵闹非特定人1非特定人2非特定人3非特定人1非特定人2非特定人3开灯19/2018/2016/2016/2015/2016/20关灯20/2017/2017/2015/2014/2014/20打开风扇20/2017/2019/2017/2016/2015/20关闭风扇18/2018/2019/2015/2015/2016/20打开红灯19/2018/2018/2015/2014/2015/20关红灯17/2016/2018/2016/2012/2014/20正确率94.16%86.67%85.0%78.33%72.5%75.0%图4.1语音识别精准度调试解决办法:(1)通过在程序中增加无用关键字来降低错误。在程序预设关键字的时候可以通过加入另外一些其他容易和关键字混淆的词语或者句子,当语音识别时,如果识别到无用垃圾词汇则不执行任何动作,这样就可以大幅度吸收错误的识别结果,增加正确率。比如在本课题设计中:需要识别的关键词语是4条,“打开”,“关闭”,“打开风扇”,“关闭风扇”,“打开红灯”,“关闭红灯”。在把这6个关键词语在程序中写入D3320后,可以再另外设置10~30个词语进LD3320,比如“开的”,“卡卡”,“阿阿阿”,“呜呜呜”等等。(2)使用口令触发识别方式。在实际应用中,肯定是希望识别正确率越高越好,但是肯定不可能通过一个按键来触发,太繁琐。在程序编写时,通过定义不同的短语来做为触发口令方式。因为一个家居语音控制系统肯定不是仅仅控制一个家电。这样的话,比如要控制LED灯,先把整个系统设置为循环识别模式,先喊一句“打开灯泡”,这样一个提示音接下里的任何声音识别结果都是对LED等来进行操作,就算有声源和和别的家电命令关键字相匹配也不会有任何操作。通过这样的方式系统在识别声源信息的时候就会降低很多错误。然后再喊一句退出LED,则系统再次进入循环模式,再次等待有其他命令的传出。通过采用这种口令方式会大大提高了正确识别率,但同时也增加了用户的体验,因为要加入别的词语,会影响系统的运行速度。4.2远程监控调试远程控制的延时主要取决于网络状况,设备几乎没有影响,设备在刚上电时WiFi正在连接,所以延时会高一点,另一方面也与物联网云平台有关系。调试结果如表4.4表4.2延时测试结果

语句执行次数延时开灯20/200.5s关灯19/200.1s打开风扇20/200.1s关闭风扇20/200.1s打开红灯19

温馨提示

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

评论

0/150

提交评论