基于STM32的智能语音控制系统设计
2022-08-12刘迷
刘 迷
(郑州商学院 信工学院, 河南 郑州 451200)
0 引言
人类之间信息流通最基本和最有效的方式便是语言的传递,随着生产力的不断发展,语言的价值主要体现在信息的传递、思维的沟通以及交互式的使用。语言信号无疑是当前最为直接,且便捷有效的沟通方式。要想进行高效的信息交互,主要取决于对语音信号的识别和对语言意义的理解[2]。随着当前科学水平的高速发展和产品自动化控制程度的不断提高,语音交互技术对语音信号的识别和处理逐步趋向数字化和模块化,使得当前语音识别硬件与程序控制相结合的应用越来越广泛。在语音控制系统中,它使得人们无需与设备直接接触,通过远程语音命令的方式来作出正确的响应,这样极大地简化了人们操作硬件设备的过程,使人机交流变得更加简便[3]。在日常口语交际中,语音识别技术还可以充当自动翻译官,它可以通过将语言识别技术、语言采样编码技术、自动调制技术等相互融合,可以实时的将一个人发出的语言信号翻译成其它不同类别的语言信号作为输出,从而实现不同语种人们之间的实时相互交流。自动语音识别技术ASR,它的英文全称为Automated Speech Recognition,它是一种多学科交叉的科学技术,涉及但不仅限于计算机技术、声波科学、自然语言科学、信息分析理论科学、信号系统分析学等数门技术科学理论,它通过对声音信号进行分析处理可以将语音信息自动翻译为文本信息输出的高新技术。但由于语音信号的变化性以及繁杂性,当前的语音识别技术能够应用的场合还有很大的限制,而且只有在特定条件下才能发挥出可靠的性能[8]。目前对语音识别技术的识别精准性产生影响的因素大概可以分为四类:外部环境是否嘈杂;语音信号的清晰度;所识别的语音信号的长度及复杂度;硬件因素。ASR语音识别模型如图1所示。
图1 ASR模型图
1 主控制器模块设计
1.1 主控模块需求分析
主控制器模块选用的是以STM32F103C8T6微处理器为控制核心的最小系统开发板,它资源丰富足以满足本设计的需求,同时在成本上也具有很大的优势。主控制器模块供电采用3.3 V直流电源,主要负者对其他模块所采集的外部信息进行接收和处理,并且在满足本设计需求的情况下,还留有足够多的可扩展接口,以便于日后对系统的进一步扩展和完善。
1.2 主控模块电路分析
STM32F103C8T6芯片管脚定义原理图如图2所示。P3和P4是2个排针,将芯片所有的管脚引出。芯片的4个电源引脚分别接3.3 V直流电源,并分别通过1个去耦电容引向地端。
图2 STM32F103C8T6芯片管脚定义原理图
3.3 V电源通过RESET端口连接主控芯片的7号引脚,相当于接高电平,开关SW1通过并联一个105 μF的电容接地,R2是一个10 kΩ电阻,起到限流保护的作用。C2可以起到去耦作用,在开关未按下时为充电过程,开关松开时为放电过程,通过这样一个充放电的循环便可以去除掉按键抖动时所产生的信号毛刺,从而起到按键硬件消抖的作用。当按下SW1时相当于将3.3 V电源信号直接引向地,相当于给了主控芯片7号引脚一个低电平,系统复位。复位电路原理图如图3所示。
图3 复位电路原理图
主控制器模块实物图如图4所示。
图4 主控制器模块实物图
1.3 LD3320语音识别模块
LD3320芯片是一款语音识别专用芯片,通过MIC(麦克风)采样外部模拟信号,并将所采集到的波形进行频谱分析并提取信号特征,最后通过相应的语音识别算法与事先在程序中设定好的语音词组进行比对,从而筛选出相似度最高的语音词组。只需要通过驱动程序驱动LD3320芯片便可以对非特定人声进行高效而准确的识别,准确度可达到95%。LD3320芯片管脚图如图5所示。
图5 STC11L08XE管脚图
语音识别模块原理图如图6所示。LD3320为外部3.3 V电源供电,MIC1为外置麦克风,用来采集外部语音信号,31号引脚与STC11L08XE接同一个外部晶振,以支持与控制器进行同步通信。
图6 语音识别模块原理图
2 语音识别程序设计
系统初始化,配置P1寄存器默认为低电平,P0,P2,P3,P4寄存器默认为高电平,定时/计数器时钟配置为12T模式,设置定时/计数器初值并启动定时/计数器打开定时/计数器中断。
LD3320语音识别芯片驱动程序配置,通过复位函数复位语音识别芯片,之后通过初始化函数重新配置并启动语音识别芯片,当语音识别模块接收到外部语音信号时,系统将会置位标志位并进入中断处理函数,否则将返回到上一个状态准备下一次语音识别,语音识别流程被启动函数启动后,空闲检测函数检测语音识别芯片是否在空闲状态,通过ASR运行函数来整合以上函数,从而实现语音识别的一整个过程。
LD3320语音识别芯片应用层程序设计,添加语音识别关键词,通过驱动程序将识别到的语音信号与之进行对比,通过添加大量与关键词相似和无关的垃圾词汇来提高语音识别的精准度,设置一级指令词汇,只有识别到一级指令,且在15 s内识再次别到正确指令才能做出应答,最后通过串口将识别结果发送给主控制器;语音识别部分运行流程如图7所示。
图7 语音识别运行流程图
3 系统测试
3.1 语音识别功能测试
由于语音识别现象不易直接观察,本测试采用串口通信工具进行测试,将串口通信工具的波特率、停止位、数据位等配置为和在软件程序中对串口通信的配置相同,就可以在串口通信工具的窗口中实时观测异步串口通信数据的收发状态,从而判断本设计语音交互功能的运行是否存在异常。
目前的PC机的通信接口使用的大都是USB通信方式,一般是没有UART串行接口的,无法直接接收TTL电平信号。而本设计中单片机所使用的串口通信方式为UART,所发出的数据信号为TTL 电平信号,很明显无法直接与PC机的USB端口进行直接数据传输,这就需要借助USB转串口的通信模块进行数据转换,USB转串口通信模块的核心是一个CH340转换芯片,它可以将USB和UART串口所发出的数据进行互相的转换,从而实现单片机和PC机之间的数据传输。
得到的测试结果如图8所示。分析测试结果可知,系统的语音识别功能可以正常的运行。
图8 语音识别功能测试结果图
3.2 语音识别精准度测试
由于系统硬件、软件以及外部环境等因素,系统在不同的距离、场景识别的精准度也有所不同,本测试通过在安静、较嘈杂两种环境下进行分别测试,测试距离分别为1米、3米、5米,测试次数均为25次。测试结果如表1所示。从表中可以看出,在安静环境下3米以内系统识别精准度较高,可以达到92%以上,在嘈杂环境下1米内精准度较高,可达到88%以上,基本满足应用需求。
表1 语音识别精准度测试表
3.3 时间显示精准度测试
系统时间通过定时器来计时,每隔1秒刷新一次,定时器设置为每隔10毫秒中断一次,可知应设置定时器中断为每计100个数进入一次时间刷新函数。但由于系统定时器并非专用时钟,在执行定时周期时会受到其它指令的干扰,从而影响计时的准确性,系统显示时间也会有小量偏差,因此本测试旨在于通过多次逐步逼近的试验来找到一个使显示时间误差最小的计数值。通过多次测试得出的结果如表2所示,可知当计数周期为95时系统时间误差率最低,为0.03%,此时相应的精准度最高,故在程序中计数周期设置为95。
表2 时间显示精准度测试表
3 结语
在本测试中,当有人说出“打开冰箱”、“打开空调”等在软件程序中所事先设定好的关键词指令时,系统若正确的接收到该关键词指令,将会通过串口做出相应的数据回复,并将所回复的数据发送给PC机,PC机接收到数据并处理后通过串口通信工具的窗口实时显示相应的数据。
虽然本设计在产品的功能、可靠度和识别精准度等方面都达到了预期的效果,实现了无需联接互联网也能进行人机交互与控制的目的,既有效地避免了网络上的安全隐患,又能够应用于网络信号达不到的区域,且具有体积小、稳定性强、成本低、应用广泛等优点,能够良好地应用于人们的日常生活以及安全需求较高的领域。
但该设计依然有不足之处,即只能对一些家庭电气进行一些简单的控制,而无法实现对家用电器的一些具体功能控制。在后续的系统升级中,预计加入蓝牙或WIFI模块,搭建手机终端、系统中心、相关外设的三相互联控制平台,既可以实现家庭语音控制,也可以进行远距离手机终端控制。