微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > MCU和DSP > 基于STM32的嵌入式语音识别模块设计

基于STM32的嵌入式语音识别模块设计

时间:03-29 来源:单片机与嵌入式系统 点击:

表1中除OSTaskStat和OSTaskIdle任务为系统自带,其他7个任务均为用户创建。App_TaskStart是系统的第一个任务,对系统时钟和底层设备进行初始化,创建所有事件和其他各项用户任务,并对系统状态进行监测;App_TaskSR完成语音识别;App_TaskCmd完成对话集中命令的解析和执行,并通过USART1向外发送;App_TaskCom作为外围扩展任务,通过USART2向外发送指令或数据,负责控制外围扩展设备,如语音合成设备等;

App_TaskUpdate通过解析USART1接收的命令和数据进行对话集的更新;App_TaskPB是按键扫描任务,负责检测3个独立按键,分为短按和长按检测;App_TaskLed驱动4个LED指示灯,指示当前工作状态。

3.2 语音识别程序设计

语音识别程序的设计,参考了LD332X开发手册,本文中采用中断方式工作,其工作流程分为通用初始化一语音识别用初始化-写入识别列表-开始识别-响应中断。

①通用初始化和语音识别用初始化。在初始化程序里,主要完成软复位、模式设定、时钟频率设定、FIFO设定。

②写入识别列表。列表的规则是,每个识别条目对应一个特定的编号(1个字节),编号可以相同,可以不连续,但是数值要小于256(00H~FFH)。本芯片最多支持50个识别条目,每个识别条目是标准普通话的汉语拼音(小写),每2个字(汉语拼音)之间用一个空格间隔。本文中采取了连续不同编号的识别条目,表2是简单的示例。

③开始识别。设置几个相关的寄存器,即可开始语音的识别。图4是相关的流程。ADC通道即为麦克风输入通道,ADC增益也就是麦克风音量,可设定值00H~7FH,建议设置值为40H~6FH,值越大代表MIC音量越大,识别启动越敏感,但可能带来更多误识别;值越小代表MIC音量越小,需要近距离说话才能启动识别功能,好处是对远处的干扰语音没有反应。本文中设定值为43H。

④响应中断。如果麦克风采集到声音,不管是否识别出正常结果,都会产生一个中断信号。而中断程序要根据寄存器的值分析结果。读取BA寄存器的值,可以知道有几个候选答案,而C5寄存器里的答案是得分最高、最可能正确的答案。

3.3 对话管理单元设计

为了方便进行对话的管理,本文中设计了一个对话管理单元,用于对等待识别的语句和等待执行的命令进行存储,在主控制器中通过定义二维数组来实现。LD3320每次识别最多可以设置50项候选识别句,每个识别句可以是单字、词组或短句,长度为不超过10个汉字或者79个字节的拼音串。基于上述原因,本文设计的对话管理数组如表3所列。

行为数组中存储要执行的行为编号,对应于50条语音识别语句,共有50组指令,每组指令中可以最多包含6个行为,并行的行为可以归为一步,通过多个行为的组合,就可以完成更复杂的任务。

4 性能测试与应用

为了保证设计的语音识别模块的语音识别率、稳定性和响应时间,本文对所描述的语音识别模块做了相应的测试,测试环境分别为安静的家庭环境和嘈杂的医院环境,共8条语音指令,对每条语音指令分别进行10次测试,每个环境下对每个特定人的总实验次数为80次,记录成功识别的次数。测试结果如表4所列。

测试中的3个非特定人中,非特定人1为女性,非特定人2和非特定人3为男性。由表中数据可以看出,家庭环境下对非特定人的语音识别率可达到90%以上,嘈杂的医院环境下的语音识别率也可达82.5%以上。识别率方面,在嘈杂环境下比在安静环境下的语音识别率有所降低;稳定性方面,在安静环境下系统的稳定性较好,语音说1遍,最多说2遍模块就可以做出正确的响应;在噪声环境下,系统的稳定性有所下降,个别语音命令需要说3遍甚至3遍以上才能被模块准确识别;实时性方面,在安静环境下的语音能保证系统响应的实时性,响应时间一般不超过1 s,在噪声环境下的响应时间相对长一些。

结语

本文讨论了基于STM32的嵌入式语音识别模块的设计和实现,对模块各个组成单元的硬件电路及软件实现进行了详细的介绍。大量实验及实际应用表明,本文设计的语音识别模块具有稳定性好、语音识别率高、抗噪声干扰能力强、结构简单和使用方便等特点。该模块实用性强,可广泛应用于服务机器人智能空间、智能家居和消费电子产品等多个领域。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top