基于STM32的嵌入式语音识别设备
王
(南京航空航天大学
【摘
冲,施玉霞
南京210016)
自动化学院,江苏
·系统介绍·
要】使用STM32F103ZET6处理器及LCD构建了一个嵌入式语音识别设备,使用片内12bitADC实现16kHz
音频中断采样,使用分段处理语音数据的方式,减少了SRAM的使用量,在采样间隙进行预处理及MFCC参数提取,充分利用了CPU时间,使总识别时间减少。最后使用DTW匹配算法进行模式识别,经实验使用24维MFCC参数进行识别匹配时识别率为93%。
【关键词】STM32F103;语音识别;梅尔倒谱系数;动态时间弯折算法【中图分类号】TN912.34
【文献标志码】A
EmbeddedSpeechRecognitionSystemBasedonSTM32
WANGChong,SHIYuxia
(CollegeofAutomationEngineering,NanjingUniversityofAeronauticsandAstronautics,Nanjing210016,China)【Abstract】STM32F103ZET6processorandassociatedcircuitryareusedtobuildanembeddedspeechrecognitionequip-andon-chip12-bitADCisusedtoachieve16kHzaudiosampling.PretreatmentofthesamplespaceandMFCCex-ment,
tractionareused,whichmakesfulluseoftheCPUtime.Thetotalrecognitiontimeandtheuseofcachearereduced.Final-ly,theDTWmatchingalgorithmisusedforpatternrecognition,theexperimentsusingthe24-dimensionalMFCCparame-terstoidentifyshowthatrecognitionrateofmatchis93%.【Keywords】STM32F103;speechrecognition;MFCC;DTW
1引言
语音识别技术是人机交互技术中的一种,是让
度、可以位操作、可嵌套中断、低成本和低功耗等众多
[2]
优势。外设丰富,内部SRAM达到64kByte,内部
FLASH有512kByte,可以搭建一种单芯片嵌入式语音识别方案,简化了硬件系统设计复杂度,提高系统稳定度。
使用芯片自带12bitADC进行16kHz采样音频频率,使用STM32的静态存储器控制器(FSMC)驱动240×320LCD显示芯片ili9320,使用SPI接口控制模数转换器ADS7843采样电阻触摸屏触点。使用12.6V,3600mA锂电池供电,构建了一个嵌入式语音识别系统。系统框图如图1所示。
计算机识别并感知人类语言、与计算机直接交流的一人们先后使用打孔种技术。在计算机发展历史中,
纸、键盘、鼠标以及触摸屏与计算机设备进行信息交互,人机交互技术发展的趋势是:从让计算机容易理解到让操作人员容易理解,人机交互技术发展的未来就是让最多数人使用最简单的方式与计算机进行信息交互。语言作为人与人信息沟通的主要方式,在人机交互上拥有其他方式不可替代的直接性和便利性
[1]
。将语音识别系统在嵌入式平台上实现是语音
识别技术小型化、实用化的一个重要方向。
3系统软件设计
本系统使用特定人孤立词识别算法。首先为了
2系统硬件设计
本系统使用意法半导体(ST)公司的
保证后续数据的准确性和可靠性,前端采用16kHz12bit量化,采样,提供充足的数据量;其次采用双门限端点检测算法检测语音起止位置,使用中结合按键达到更好的效果;然后使用稳健性较好的MFCC特征提取算法,保证识别率,最后使用DTW模式匹配算法进行语音识别的流程图。
[3]
STM32F103ZET6作为主控芯片,主频72MHz,理论运算速度达96DMI/s(针对定点与整型数据的运算指标),基于ARMCortex-M3内核,属于ARMV7架构,支持全新的16位Thumb-2指令集,较之ARM7TDMI,Cortex-M3拥有更强劲的性能、更高的代码密
。图2是本文采用的语音识别算法
58
图1
语音识别系统整体框图
图2语音识别算法流程图
嵌入式平台上实现语音识别算法主要有两大难一般没有浮点点:一是嵌入式处理器运算速度较慢,
运算单元,浮点处理速度缓慢;二是嵌入式系统中可用存储资源较少,无法实现大片缓存区,不易对语音数据进行连续处理。实现的主要措施是尽量减小算
[4-5]
。实现MFCC+法运算量、减少存储空间使用量
DTW的典型处理步骤是先进行语音采样,等待采样
如图3所示,将采样过程分段处理,每采集完一段语音数据就对其进行预处理与MFCC参数提取,处并清空缓冲区为下一理后保存当前段的MFCC参数,次分段处理做准备。
但是在实际使用中发现一些问题。首先,在预处理的分帧过程中需要一个连续的语音段进行要保证分段对信号进行压缩不帧移与加窗;其次,
影响下一段语音信号的采样。也就是AD采样、预处理与MFCC特征参数提取在执行时间上不冲突。
在分帧处理上,为了增强每两帧信号之间的相关性,使语音频谱更加平滑,对语音信号进行帧移处理,对于30ms的语音来说,在16kHz采样频率下,每帧会得到480个采样点,本识别系统采用1/3的帧移,即帧移160点。如果选择一个语音帧作为一次分段处理的最小单位,分帧的第一帧使用前一语音帧的后160点与当前语音帧的前320点,分帧的第二帧使用当前语音帧的后320点,使用后移语音帧的前160点。这样的结构不是能自洽地完成分帧的最小操作会使分段分帧模型非常复杂。本文在解决实际单位,
问题时发现一种分段结构,将两帧语音帧作为分段的帧移后分帧为3帧,只需要保留最后160最小单位,
点为下一分段使用,就可以构成一个自洽的分段结构并完成分段加窗处理。分段操作示意图如图4所示。
在CPU使用时间上,要保证分段操作不影响下一段语音信号的采样,也就是AD采样、预处理与
结束后对数据统一进行处理,按照串行顺序分别进行
MFCC特征参数提取、DTW模式匹配。在语预处理、
CPU只进行AD数据转换,音采样阶段,大部分时间都
这是对CPU时间的一种浪费。是等待采样定时到来,
MFCC是语音识别处理中时间复杂度较高的环12从广义上讲它是一种语音压缩数据,以16kHz、节,
bit语音数据为例进行12维MFCC特征提取,输入语音信号码流为240kbit/s,输出MFCC信号码流不高
压缩率约为26。只是这种压缩过程于9.152kbit/s,
是不可逆的,是一种严重的有损压缩。在实际操作时最后整体输出。这样对缓冲针对每段数据分别压缩,
区的使用将会大大减小,因为这样只需要开辟一帧或一段的缓冲区,然后重复使用,提高缓冲区的利用率。
MFCC特征提取的分段对语音信号的采样、预处理、操作示意图如图3所示
。
图3采样、预处理与MFCC的分段处理
MFCC特征参数提取在执行时间上不冲突,具体数据处理流程图如图5所示。
59
图4
两帧语音信号作为一段的分帧处理
图6
语音识别程序流程图
图5采样间隔处理数据示意图
从上图可以看出,两帧语音信号长度为60ms,预MFCC特征处理过程处理上一段语音数据需要3ms,
提取需要46ms,每次ADC中断采样占用时间很少,60ms内共进行480×2=960次仿真分析约为7μs,
采样,耗时960×7μs=6.72ms。因此,在60ms时间内CPU使用时间为3ms+46ms+6.72ms=55.72ms,刚好满足不大于60ms的条件,而且有一定的余量。本文所使用的存储空间占用及模块运行时间均在RMDK4.12使用JLINKV8硬件仿真得到。图6~7为本系统语音识别程序流程图和AD采样中断程序流程图。
图7
AD采样中断程序流程图
4实验结果与分析
本系统为特定人孤立词识别系统,针对不同
表1
不同维数MFCC在同一DTW算法下的识别率
人进行语音识别时要重新进行训练,使用数字0~9共10个模板进行实验,在实验室环境下共进行3人(2男1女)共90次实验,将MFCC特征参数3人平均识别率如表1从12维逐步提高至36维,所示
。
60
在实际使用系统时,一次模板训练过程需要耗时3092ms+570ms=3662ms,模板训练之后,一次识别过程需要耗时:3092ms+1312ms=4404ms。采样时间3s,因此本系统的实时系数为:(4404ms-3000ms)/3000ms=0.468,远小于1,实时性较好。经优化后各主要模块处理时间及存储空间占用量如
表3
表2和表3所示。
表2
优化后各处理模块时间占用
ms
优化后各环节SRAM与FLASH占用量
[6]
在使用芯片STM32F103ZET6时,从FLASH
司在程序存储器与内核之间加入了128bit程序预读缓冲器,但也只是程序顺序执行没有较多跳转情况下才会提高程序执行速度,本语音指令控制系统中使用较多中断程序与跳转子程序,因此实际执行速度在50MHz左右,并没有达到预想的96DMI/s。
中运行代码,主频开至72MHz,除运算核心外,只开EXIT、3,SPI1,定时器2、启使用到的部分:FSMC、
ADC1等,实测电流为42mA(3.3V电压),功耗较低。
语音识别系统实物图如图8所示。
5结语
本文通过使用ARMCortex-M3内核的
STM32F103ZET6处理器及附属电路构建了一个嵌入式语音识别设备,使用片内12bitADC实现16kHz语音采集,在语音预处理及MFCC特征提取阶段使用类似流水线的分段处理方法,减少SRAM的使用量,使语音识别算法只使用片内存储资源即可工作,利用采样间隙时间进行MFCC特征提取工作,节省了识别时间,最后使用DTW算法进行语音模经实验24维MFCC在DTW模式匹配时,平板匹配,
图8
语音识别系统实物图
均识别率达93%。
参考文献
STM32F103ZET6核心板以实验板为底板,实现了FSMC接口控制LCD以及音频采样电路等。在MFCC特征提取时实际软件的仿真与调试中发现,
大量32位乘法运算并不是单周期完成的,而是需要6~12时钟周期,使预想的MFCC特征提取时间当处理器运行在72MHz时,执行程序延长。而且,
的速度并不是72MHz,因为STM32F103使用的程序存储器,即片内FLASH速度不超过24MHz,由于ARMCortex-M3体系使用16位Thumb-2指令32位指令总线每次可以读取两条16位指令,集,因此随机程序执行速度不会超过48MHz,尽管ST公
[1]王炳锡,M].北京:国防屈丹,彭煊.实用语音识别基础[
2005.工业出版社,
[2]刘军.例说STM32[M].北京:北京航空航天大学出版
2011.社,
[3]徐霄鹏,吴及,刘庆升,等.孤立词语音识别算法性能研
J].计算机工程与应用,2001(11):144-146.究与改进[
[4]罗俊光,汤荣江.基于DSP的非特定人语音识别系统
[J].微计算机信息,2007(4):195-196.
[5]万春,黄杰圣,曹煦晖.基于DTW的孤立词语音识别研
J].计算机与现代化,2003(21):4-6.究和算法改进[
[6]夭淼,梁维谦,陈卓.传声器阵列语音采集处理系统设计
[J].电声技术,2010,34(7):56-58.[责任编辑]丁雪
[2011-12-15收稿日期]
61
基于STM32的嵌入式语音识别设备
王
(南京航空航天大学
【摘
冲,施玉霞
南京210016)
自动化学院,江苏
·系统介绍·
要】使用STM32F103ZET6处理器及LCD构建了一个嵌入式语音识别设备,使用片内12bitADC实现16kHz
音频中断采样,使用分段处理语音数据的方式,减少了SRAM的使用量,在采样间隙进行预处理及MFCC参数提取,充分利用了CPU时间,使总识别时间减少。最后使用DTW匹配算法进行模式识别,经实验使用24维MFCC参数进行识别匹配时识别率为93%。
【关键词】STM32F103;语音识别;梅尔倒谱系数;动态时间弯折算法【中图分类号】TN912.34
【文献标志码】A
EmbeddedSpeechRecognitionSystemBasedonSTM32
WANGChong,SHIYuxia
(CollegeofAutomationEngineering,NanjingUniversityofAeronauticsandAstronautics,Nanjing210016,China)【Abstract】STM32F103ZET6processorandassociatedcircuitryareusedtobuildanembeddedspeechrecognitionequip-andon-chip12-bitADCisusedtoachieve16kHzaudiosampling.PretreatmentofthesamplespaceandMFCCex-ment,
tractionareused,whichmakesfulluseoftheCPUtime.Thetotalrecognitiontimeandtheuseofcachearereduced.Final-ly,theDTWmatchingalgorithmisusedforpatternrecognition,theexperimentsusingthe24-dimensionalMFCCparame-terstoidentifyshowthatrecognitionrateofmatchis93%.【Keywords】STM32F103;speechrecognition;MFCC;DTW
1引言
语音识别技术是人机交互技术中的一种,是让
度、可以位操作、可嵌套中断、低成本和低功耗等众多
[2]
优势。外设丰富,内部SRAM达到64kByte,内部
FLASH有512kByte,可以搭建一种单芯片嵌入式语音识别方案,简化了硬件系统设计复杂度,提高系统稳定度。
使用芯片自带12bitADC进行16kHz采样音频频率,使用STM32的静态存储器控制器(FSMC)驱动240×320LCD显示芯片ili9320,使用SPI接口控制模数转换器ADS7843采样电阻触摸屏触点。使用12.6V,3600mA锂电池供电,构建了一个嵌入式语音识别系统。系统框图如图1所示。
计算机识别并感知人类语言、与计算机直接交流的一人们先后使用打孔种技术。在计算机发展历史中,
纸、键盘、鼠标以及触摸屏与计算机设备进行信息交互,人机交互技术发展的趋势是:从让计算机容易理解到让操作人员容易理解,人机交互技术发展的未来就是让最多数人使用最简单的方式与计算机进行信息交互。语言作为人与人信息沟通的主要方式,在人机交互上拥有其他方式不可替代的直接性和便利性
[1]
。将语音识别系统在嵌入式平台上实现是语音
识别技术小型化、实用化的一个重要方向。
3系统软件设计
本系统使用特定人孤立词识别算法。首先为了
2系统硬件设计
本系统使用意法半导体(ST)公司的
保证后续数据的准确性和可靠性,前端采用16kHz12bit量化,采样,提供充足的数据量;其次采用双门限端点检测算法检测语音起止位置,使用中结合按键达到更好的效果;然后使用稳健性较好的MFCC特征提取算法,保证识别率,最后使用DTW模式匹配算法进行语音识别的流程图。
[3]
STM32F103ZET6作为主控芯片,主频72MHz,理论运算速度达96DMI/s(针对定点与整型数据的运算指标),基于ARMCortex-M3内核,属于ARMV7架构,支持全新的16位Thumb-2指令集,较之ARM7TDMI,Cortex-M3拥有更强劲的性能、更高的代码密
。图2是本文采用的语音识别算法
58
图1
语音识别系统整体框图
图2语音识别算法流程图
嵌入式平台上实现语音识别算法主要有两大难一般没有浮点点:一是嵌入式处理器运算速度较慢,
运算单元,浮点处理速度缓慢;二是嵌入式系统中可用存储资源较少,无法实现大片缓存区,不易对语音数据进行连续处理。实现的主要措施是尽量减小算
[4-5]
。实现MFCC+法运算量、减少存储空间使用量
DTW的典型处理步骤是先进行语音采样,等待采样
如图3所示,将采样过程分段处理,每采集完一段语音数据就对其进行预处理与MFCC参数提取,处并清空缓冲区为下一理后保存当前段的MFCC参数,次分段处理做准备。
但是在实际使用中发现一些问题。首先,在预处理的分帧过程中需要一个连续的语音段进行要保证分段对信号进行压缩不帧移与加窗;其次,
影响下一段语音信号的采样。也就是AD采样、预处理与MFCC特征参数提取在执行时间上不冲突。
在分帧处理上,为了增强每两帧信号之间的相关性,使语音频谱更加平滑,对语音信号进行帧移处理,对于30ms的语音来说,在16kHz采样频率下,每帧会得到480个采样点,本识别系统采用1/3的帧移,即帧移160点。如果选择一个语音帧作为一次分段处理的最小单位,分帧的第一帧使用前一语音帧的后160点与当前语音帧的前320点,分帧的第二帧使用当前语音帧的后320点,使用后移语音帧的前160点。这样的结构不是能自洽地完成分帧的最小操作会使分段分帧模型非常复杂。本文在解决实际单位,
问题时发现一种分段结构,将两帧语音帧作为分段的帧移后分帧为3帧,只需要保留最后160最小单位,
点为下一分段使用,就可以构成一个自洽的分段结构并完成分段加窗处理。分段操作示意图如图4所示。
在CPU使用时间上,要保证分段操作不影响下一段语音信号的采样,也就是AD采样、预处理与
结束后对数据统一进行处理,按照串行顺序分别进行
MFCC特征参数提取、DTW模式匹配。在语预处理、
CPU只进行AD数据转换,音采样阶段,大部分时间都
这是对CPU时间的一种浪费。是等待采样定时到来,
MFCC是语音识别处理中时间复杂度较高的环12从广义上讲它是一种语音压缩数据,以16kHz、节,
bit语音数据为例进行12维MFCC特征提取,输入语音信号码流为240kbit/s,输出MFCC信号码流不高
压缩率约为26。只是这种压缩过程于9.152kbit/s,
是不可逆的,是一种严重的有损压缩。在实际操作时最后整体输出。这样对缓冲针对每段数据分别压缩,
区的使用将会大大减小,因为这样只需要开辟一帧或一段的缓冲区,然后重复使用,提高缓冲区的利用率。
MFCC特征提取的分段对语音信号的采样、预处理、操作示意图如图3所示
。
图3采样、预处理与MFCC的分段处理
MFCC特征参数提取在执行时间上不冲突,具体数据处理流程图如图5所示。
59
图4
两帧语音信号作为一段的分帧处理
图6
语音识别程序流程图
图5采样间隔处理数据示意图
从上图可以看出,两帧语音信号长度为60ms,预MFCC特征处理过程处理上一段语音数据需要3ms,
提取需要46ms,每次ADC中断采样占用时间很少,60ms内共进行480×2=960次仿真分析约为7μs,
采样,耗时960×7μs=6.72ms。因此,在60ms时间内CPU使用时间为3ms+46ms+6.72ms=55.72ms,刚好满足不大于60ms的条件,而且有一定的余量。本文所使用的存储空间占用及模块运行时间均在RMDK4.12使用JLINKV8硬件仿真得到。图6~7为本系统语音识别程序流程图和AD采样中断程序流程图。
图7
AD采样中断程序流程图
4实验结果与分析
本系统为特定人孤立词识别系统,针对不同
表1
不同维数MFCC在同一DTW算法下的识别率
人进行语音识别时要重新进行训练,使用数字0~9共10个模板进行实验,在实验室环境下共进行3人(2男1女)共90次实验,将MFCC特征参数3人平均识别率如表1从12维逐步提高至36维,所示
。
60
在实际使用系统时,一次模板训练过程需要耗时3092ms+570ms=3662ms,模板训练之后,一次识别过程需要耗时:3092ms+1312ms=4404ms。采样时间3s,因此本系统的实时系数为:(4404ms-3000ms)/3000ms=0.468,远小于1,实时性较好。经优化后各主要模块处理时间及存储空间占用量如
表3
表2和表3所示。
表2
优化后各处理模块时间占用
ms
优化后各环节SRAM与FLASH占用量
[6]
在使用芯片STM32F103ZET6时,从FLASH
司在程序存储器与内核之间加入了128bit程序预读缓冲器,但也只是程序顺序执行没有较多跳转情况下才会提高程序执行速度,本语音指令控制系统中使用较多中断程序与跳转子程序,因此实际执行速度在50MHz左右,并没有达到预想的96DMI/s。
中运行代码,主频开至72MHz,除运算核心外,只开EXIT、3,SPI1,定时器2、启使用到的部分:FSMC、
ADC1等,实测电流为42mA(3.3V电压),功耗较低。
语音识别系统实物图如图8所示。
5结语
本文通过使用ARMCortex-M3内核的
STM32F103ZET6处理器及附属电路构建了一个嵌入式语音识别设备,使用片内12bitADC实现16kHz语音采集,在语音预处理及MFCC特征提取阶段使用类似流水线的分段处理方法,减少SRAM的使用量,使语音识别算法只使用片内存储资源即可工作,利用采样间隙时间进行MFCC特征提取工作,节省了识别时间,最后使用DTW算法进行语音模经实验24维MFCC在DTW模式匹配时,平板匹配,
图8
语音识别系统实物图
均识别率达93%。
参考文献
STM32F103ZET6核心板以实验板为底板,实现了FSMC接口控制LCD以及音频采样电路等。在MFCC特征提取时实际软件的仿真与调试中发现,
大量32位乘法运算并不是单周期完成的,而是需要6~12时钟周期,使预想的MFCC特征提取时间当处理器运行在72MHz时,执行程序延长。而且,
的速度并不是72MHz,因为STM32F103使用的程序存储器,即片内FLASH速度不超过24MHz,由于ARMCortex-M3体系使用16位Thumb-2指令32位指令总线每次可以读取两条16位指令,集,因此随机程序执行速度不会超过48MHz,尽管ST公
[1]王炳锡,M].北京:国防屈丹,彭煊.实用语音识别基础[
2005.工业出版社,
[2]刘军.例说STM32[M].北京:北京航空航天大学出版
2011.社,
[3]徐霄鹏,吴及,刘庆升,等.孤立词语音识别算法性能研
J].计算机工程与应用,2001(11):144-146.究与改进[
[4]罗俊光,汤荣江.基于DSP的非特定人语音识别系统
[J].微计算机信息,2007(4):195-196.
[5]万春,黄杰圣,曹煦晖.基于DTW的孤立词语音识别研
J].计算机与现代化,2003(21):4-6.究和算法改进[
[6]夭淼,梁维谦,陈卓.传声器阵列语音采集处理系统设计
[J].电声技术,2010,34(7):56-58.[责任编辑]丁雪
[2011-12-15收稿日期]
61