叶成彬
(华南理工大学广州学院 电气工程学院,广州 510800)
对于人的感官,有视觉、触觉、听觉、嗅觉等感知,各个感官是人类获取信息的重要途径。伴随着人类科技的高速发展,将许多感官应用到仿生技术和机器人技术等智能化技术上的梦想已逐步成为现实。目前,谷歌公司已将语音识别及搜索功能集成到Android手机系统和Chrome浏览器当中,苹果公司发布的手机系统均集成siri语音控制功能,语音识别已从实用变成娱乐。在语音识别技术越来越成熟的大环境下,将语音识别技术应用于各类智能化系统中,可以充分利用人机交互技术带来的便利性,提高使用者的工作效率[1-3]。
针对电子元器件种类多而杂,如何在硕大的元器件柜中快速查找所需电子元件,这一问题常常困扰着众多电子爱好者。为此设计了一款语音识别电子元器件柜。它以STM32F1单片机作为主控芯片,当LD3320语音识别模块接收到使用者所说的电子元器件的名称之后立即进行识别,并把识别结果通过串行通信端口传送至STM32F1单片机,单片机根据识别结果控制相应的电子元器件位置的LED指示灯的亮灭及发出提示音,以节省了使用者查找所需电子元器件的时间。
本系统基于对LD3320芯片的研究,结合STM32F1单片机、OLED显示屏、LED显示模块等硬件设备,实现识别非特定人说出的电子元器件名称,并根据识别结果点亮该电子元器件相应位置的LED灯,或在搜索不到该元器件时需在OLED屏幕显示提示文字并发出相应的提示音。电子元器件柜共有24个小柜子,每个小柜子旁边都安装了红色LED灯,并贴有相应的元器件名称标签。系统方案如图1所示。
图1 系统方案Fig.1 Block diagram of system
系统硬件设计主要由语音识别模块负责接收并识别非特定人声,并把识别结果通过串行通信端口发送至STM32F1单片机,单片机接收语音识别结果后,判断所需元器件是否存在,OLED显示查询元器件结果,蜂鸣器作为结果提示音,LED显示模块作为元器件位置提示。
语音识别部分采用ICRoute公司研发生产的LD3320语音识别芯片。该芯片内部集成语音识别处理器、功放电路、D/A转换器等,能够准确识别非特定人声,最多可以识别由用户自主设置的50项汉语单字、词组或短句关键词语。例如:用户在语音识别模块主控芯片的编程中,简单地设置芯片的寄存器,把诸如“电阻”这样的识别关键词语的内容动态地传入芯片中,芯片就可以识别所设定的关键词语了。每个关键词语可以是单字、词组、短句或者任意的中文发音的组合。STC11L08XE单片机作为该部分的主控芯片,主要负责预设语音识别芯片LD3320关键语句列表、处理并通过串行通信端口对外发送语音识别结果[4-6]。该语音识别模块实物图如图2所示。
图2 语音识别模块实物Fig.2 Physical map of voice recognition module
本设计采用2.44 cm(0.96 in)OLED显示屏,128×64点阵分辨率,可采用多种接口进行屏幕显示控制,裸屏接口可以使用3线或4线串行SPI接口、IIC接口或使用6800和8080两种并行接口,根据编程需要选择I2C接口与OLED显示屏进行通信。OLED显示屏实物如图3所示。
图3 OLED显示屏实物Fig.3 Physical map of OLED display
由于使用的电子元器件柜共有24个小柜子,每个小柜子旁边都安装有红色LED灯,如果每个LED灯都用STM32F1单片机I/O口控制,显然没有必要。74HC595是串行输入、并行输出的8 b移位寄存器,具有8 b寄存器和1个储存器,三态输出功能。本设计使用3片74HC595芯片分别控制24个LED,只需要外接3个I/O口:DS(串行数据输入),SHCP(移位寄存器时钟输入),STCP(储存寄存器时钟输入)。选择74HC595作I/O口扩展,外接I/O口少,节省了I/O口[7]。3片74HC595芯片焊接实物如图4所示,电子元器件柜实物如图5所示。
图4 3片74HC595芯片焊接实物Fig.4 Physical map of 3 pieces of 74HC595 chip welding
图5 电子元器件柜实物Fig.5 Physical map of electronic components cabinets
本设计的软件思路是语音识别模块接收并识别用户口述名称的语音信息后,判断用户口述名称是否存在于语音识别模块名称库中,再根据判断的结果通过串口发送相对应的信息给主控芯片。主控芯片接收到信息之后,根据不同的信息(即一级指令、二级指令、元器件个数、元器件名称及不存在该元器件名称)做出相应的判断和提示,最后该元器件柜中存在用户所需元器件所在位置的LED灯亮,且OLED显示“已找到”。若搜索不到该元器件,则在OLED上显示“找不到此元器件”,且驱动蜂鸣器鸣响一声,以提示使用者。
本语音程序设计是通过串行SPI方式对LD3320芯片内的寄存器操作,从而达到语音识别的目的。实现语音识别的顺序为语音识别初始化——写入识别列表——打开中断允许位——开始识别。
语音识别初始化通过void LD_Init_ASR()函数设置寄存器:
写入识别列表 LD3320芯片最多支持50个识别关键字,分别为1个一级口令、24个电子元器件的名称、5个元器件个数名词、20个垃圾词语(为了识别更准确)[8-9]。每个识别关键字使用1个字节的特定编号。简单的关键字例子如表1所示。
表1 语音识别关键字例子Tab.1 Examples of speech recognition key words
语音识别功能该功能通过运行uint8 Run ASR()函数实现,其程序代码为
中断函数响应功能如果驻极体话筒拾音器采集到声音,都会产生一个中断信号,进入中断函数对寄存器的值进行分析,读取BA寄存器的值,可得到几个候选答案,选取C5寄存器中答案最接近、可能性最高的答案。
为了加强语音识别模块对外发送数据的稳定性,语音识别模块每次通过串行通信端口对外发送有效数据之前,先发0X42,0X4D作为起始符。
在STM32F1单片机上电之后,则对PA及PB端口进行相应的初始化,然后初始化OLED显示屏使其正常显示文字,接着初始化该单片机与语音识别模块所连接的第2个串行通信端口UART2,最后进入判断是否接收到新的语音识别结果循环函数。STM32F1单片机主函数程序运行流程如图6所示,STM32F1单片机串行通信UART2程序运行流程如图7所示。
图6 STM32F1单片机主函数程序运行流程Fig.6 Operation flow chart of STM32F1 MCU main function program
图7 串行通信UART2程序运行流程Fig.7 Operation flow chart of serial communication UART2 program
对于语音识别模块,周围环境的声音、识别列表各个词语之间的相互差别程度、说话人声音的大小、发音的清晰程度、外接麦克风的物理特征等都会对语音识别的判断产生影响。经过多次调试,语音识别模块逐渐趋于理想效果。
在实验室环境下采用多人与语音识别模块距离相同情况下,分别测试了24个关键词40遍,由于每个人的普通话标准程度不一,则导致语音识别准确度各不相同。部分非特定人语音识别测试的正确识别数据次数如表2所示。
由表2可知,在实验室环境下,所设计的系统语音识别准确率达到90%以上。经过多次调试,电子元器件语音识别系统已达到本次设计的要求[10-11]。
表2 部分非特定人语音识别测试的正确识别数据次数Tab.2 Number of correct recognition data for non specific speech recognition test
所设计的一种语音识别电子元器件柜,可以通过语音识别实现智能化搜索电子元器件柜电子元器件的位置,且使用者根据电子元器件的型号可自行编辑元器件的关键字。当一次需要查找一个或多个元器件,只要对着语音识别模块说出一级口令之后,继续说出需要查找元器件数量,接着连续说出元器件名称,所查找的元器件所在位置LED灯点亮。根据试验结果表明,该元器件柜识别正确率高、且可自行修改元器件关键字,为电子元器件使用者及管理者提供了方便,并具有一定的市场推广价值。
[1]蒋伟明.中国智能家居的现状及发展趋势[J].科技视界,2014,4(18):326.
[2]王敏妲.语音识别技术的研究与发展[J].微型机与应用,2009,28(23):1-2.
[3]徐子豪,张腾飞.基于语音识别和无线传感网络的智能家居系统设计[J].计算机测量与控制,2012,20(20):180-182.
[4]陈喜春.基于LD3320语音识别专用芯片实现的语音控制[J].电子技术,2011,49(11):20-21.
[5]金鑫,田犇,阙大顺.基于LD3320的语音控制系统设计实现[J].电脑与信息技术,2011,19(9):22-25,
[6]ICRoute.LD332X数据手册[EB/OL].http://www.i-croute.com/web_cn/DownLoad.html#LD332X-DataSheet,2010-09-11.
[7]黄建新.74HC595芯片驱动LED的电路[J].科技资讯,2010,8(31):116-117.
[8]余超,罗纯,黄伍成.基于LD3320的语音控制照明系统的设计[J].湖南理工学院学报:自然科学版,2015,28(3):48-51.
[9]洪家平.LD3320的嵌入式语音识别系统的应用[J].单片机与嵌入式系统的应用,2012,13(2):47-50.
[10]苏鹏,周风余,陈磊.基于STM32的嵌入式语音识别模块设计[J].单片机与嵌入式系统应用,2011,12(2):42-45.