语音识别技术与嵌入式USB主机系统是目前电子设计领域的新兴技术,其应用十分广泛。本系统结合该两项技术,实现了一个嵌入式USB主机结构的电子语音记录系统。该系统充分利用了凌阳单片机强大的语音识别功能。并通过嵌入式USB主、从控制芯片SL811HS和相应的软件设计,实现了语音信号的智能识别,并以嵌入式主机方式保存到USB存储器。该系统在保证了嵌入式系统的小型化特点的同时又实现了文字的录入功能。它即可以作为一个可灵活更换存储媒体的电子语音记事本,也可以作为一个语音录入器,将记录在USB存储器中的文本文件方便的转移到PC机等其他文字处理设备进行再处理,具有极高的功能可扩展性。
1系统结构与原理
图1是系统的硬件结构框图。系统主要包括语音采集模块、凌阳单16位片机SPCE061A、液晶显示模块、USB主机接口控制器和USB存储器等几个部分。
该系统的功能是通过语音样品采集训练、语音识别和USB存储等三个环节来实现的。语音样品采集时,通过语音数据采集模块内的驻极话筒来采集语音。采集到的语音数据通过SPCE061A的MIC-IN端输入,再经过SPCE061A内部A/D转换器将其转换成数字信号,并调用训练API函数对其进行特征提取,并以样品模板库要求的格式保存到SPCE061A的FLASH中。音样品采集训练时的提示信息和训练结果会在LCD上显示。
语音识别时,采集到的语音数据通过A/D转换后,由语音识别API函数对其进行特征提取,再与样品模板库中的语音样品进行特征匹配。匹配后的结果在LCD上显示的同时,交给USB主机接口控制器,进入下一步的信息保存环节。
在USB主机接口控制器模块和与之配合的USB协议和FAT文件系统的支持下,系统完成对USB设备的枚举。并以文本文件的格式将上一环节所识别出来的信息保存到USB存储器中,最终实现系统的全部功能。
2语音识别
语音识别属于模式识别,它主要包括语音信号预处理、特征提取、语音模板库、测度估计和识别决策等几个模块。与人的认知过程很相似, 语音识别分为训练和识别两个阶段。在训练阶段, 语音识别系统对语音样本进行学习。学习结束后,把学习的内容存储到模板库中。在识别阶段,把当前输入的语音在模板库中查找最相近的结果,并进行相应的处理。语音识别的基本原理框图如图2所示[1]
凌阳SPCE061A单片机具有上述的语音识别技术要求的硬件和软件的全部功能。硬件方面,SPCE061A内部有一个A/D转换的输入通道和自动增益控制电路AGC,能随时跟踪、监视前置放大器输出的音频信号电平,使进入A/D的信号保持在最佳电平。
由于SPCE061A的MIC-IN通道内部做了AGC自动增益和滤波处理,语音的采集只需一个驻极话筒和少量的外围阻容电路即可。相关电路如图3所示。
软件方面,凌阳SPCE061A提供了一组专用的API函数来支持语音识别功能。这组API函数的功能、C语言调用格式、参数和返回值分别表述如下:
(1)训练函数:Train(int WordID,int TrainMode),用于特定人语音识别的模型训练。
C语言调用格式:int BSR_Train(int WordID,int TrainMode)
参数:WordID 命令序号,范围从0x100到0x105,并且对于每组训练语句都是唯一的。
TrainMode:训练次数,要求使用者在应用之前训练一遍或两遍。
返回值:训练成功返回0;没有声音返回-1;训练需要更多的语音数据返回-2;环境太吵返回-3;数据库满返回-4;两次输入命令不同返回-5;序号超出范围返回-6。
(2)语音识别器初始化函数:InitRecognizer(int AudioSource),用于语音识别器初始化。
C语言调用格式:void BSR_InitRecognizer(int AudioSource)
参数:定义语音输入来源。BSR_MIC通过MIC语音输入。
BSR_LINE_IN是LINE_IN电压模拟量输入。
返回值:无。
(3)获取识别结果函数:GetResult(void)用于完成语音识别,并返回语音识别结果。
C语言调用格式:int BSR_GetResult(void)
参数:无。
返回值:无命令识别出来返回0;识别器停止、未初始化或识别未激活返回-1;识别不合格返回-2;识别出命令返回命令的序号[2]。
3 USB主机接口
USB主机接口是整个系统的核心。它由USB主机接口芯片和USB协议以及FAT文件系统等构成。本文主要介绍USB主机接口芯片的功能和电路设计。
USB主机接口芯片采用的是Cypress公司的SL811HS,它是一款嵌入式的USB主、从控制器芯片,它可以实现USB主机结构中的总线接口层的功能。其功能模块框图如图4所示。SL811HS内部的串行接口引擎实现了主机与总线上数据的并串转换任务。USB主机的端点也是这个芯片上的部分寄存器,主机通过向这些端点写数据,就可以将这些数据直接转换为USB总线上的差模二进制数据,或者接收总线上的差模二进制数据,并存入端点寄存器,供主机取用[3]。
CPU对SL811HS的状态进行检测和控制的操作都是基于寄存器实现的,因此从硬件的角度来看,系统软件的编程就是对SL811HS的一系列寄存器和缓冲区的读/写访问。
由于系统只实现USB主机的功能,所以将控制SL811HS的主/从机工作方式的M/S管脚直接接地,使USB接口工作在主机方式。其中SL811HS的A0功能较为灵活,它为低电平时表示数据线上的数据是SL811HS的RAM空间的地址指针。而紧接着置位A0实现读写指定地址的RAM中数据,从而实现数据的传输。SL811HS支持地址自增模式,即可以将连续地址单元中的内容读出传送,而不用再次写入地址指针,从而大大的提升数据传输的有效率。图5为SL811HS的外围电路及引脚定义。
4系统软件设计
系统软件设计主要完成对语音的识别,并将识别的结果通过文件系统层提供的文件操作函数写入到U盘。而U盘在接入到系统时需要完成对USB设备的枚举,在确定为存储设备后,又要进行海量存储设备的枚举,以完成对U盘的各参数的提取。本文重点介绍系统的主设计流程。
语音的识别首先需要将待识别的命令特征存入语音识别模板库,然后才是对相应命令的辩识。这一部分的程序是在主程序中处理的,其流程如图6 所示。
程序在初始化工作环境后,判断FLASH中是否已经存在语音特征模型。如果没有,就需要擦除FLASH,然后通过训练得到命令的语音特征模型,并存入FLASH中,并修改标记说明FLASH中已经有命令的语音特征模型了。通过这样的处理后语音特征模型才会在每次系统重新上电后不需要重新训练采集。在识别阶段,如果有命令与语音模型库中的命令相匹配,则返回相应命令代号,通过switch-case语句就可以对相应命令进行处理。
5结束语
本系统设计充分利用了凌阳单片机SPCE061A的语识别功能,使所设计系统的集成度和性能有很大提高。由于采用了USB主机结构实现USB海量存储的嵌入式系统设计方案,本设计在系统功能扩展上具有极大的潜力,有很好的应用前景和科研价值。
评论
查看更多