采用VC++和Matlab混合编程搭建基于HMM的语音识别的实验平台

1 引言
matlab 是一款高性能的数值计算和可视化软件,集成数值分析、矩阵计算、信号运算、 信号处理和图形显示于一体,构成了一个方便的、界面友好的用户环境。目前,基于matlab 的语音识别开发平台虽然在可读性、可移植性和可扩充性上优于其它编程语言,且调试功能 强大、数据库函数丰富,可使研究人员“站在巨人的肩上”更加直观、方便地进行分析、计 算与设计工作,从而大大地节省了时间[1]。但考虑到其执行代码速度低下,不能直接与硬件 底层直接接触等缺点,因此提出了采用matlab 和vc++混合编程来搭建语音识别实验平台, 并对传统viterbi 算法进行变形,直接使用fpga 的加法器、比较器和逻辑操作来计算观察 值序列,以实现一种简单的嵌入式语音模板匹配。
2 基于hmm 的语音识别
2.1 语音识别系统
语音识别系统(speech recognition system,srs)基本上是一个模式分类的任务,即通 过训练,系统能够把输入的语音按一定模式进行分类[2]。实验在matlab 7.0 系统上建立了一 个简单的基于隐马尔可夫模型(hidden markov model,hmm)的语音识别过程,如图1。
(1)语音输入:在一般实验室环境下进行语音信号采样,采样格式为pcm,采样频率 16 khz,a/d 的量化精度8 bit。然后经过去噪、预加重、分帧、加窗等处理过程,去掉语音信号中包含的大量冗余信息,加强语音信号的高频共振峰,便于进行频谱分析。
(2)端点检测:考虑到语音信号的录制是在较为安静的实验室环境下进行,利用过零 率z 来检测清音,用短时能量e 来检测浊音,两者配合实现可靠的端点检测[3]。
(3)特征提取和量化:对有效语音段进行特征提取,即提取基于mel 刻度的倒频谱矢 量(mel frequency cepstrum coefficients,mfcc),它是识别过程中的输入特征值。特征值 经矢量量化vector quantization,vq),输出vq 码本类别号,即hmm 训练与识别阶段使 用的观察值序列o。
(4)模型训练与语音识别:训练阶段,系统采用一系列训练观察值估计hmm 参数,
2.2 viterbi 算法
由于计算复杂度的限制,对于基于hmm 的实时语音识别来说,需要设计一个高效的硬 件结构来执行viterbi 译码过程,以加速hmm 的识别过程。考虑了fpga 的特点,分别采 用对数概率和状态概率的最小路径对传统的viterbi 算法进行变形,其计算p( o |λ ) v 的过程 如下[5]:
通过上面的变形,不仅可以使传统 viterbi 算法中的乘法转成加法,降低时间消化,有 效地避免数据下溢的问题。而且随着viterbi 计算过程的进行,已计算的状态概率值随之增 加,改原来找结束概率的最大值为最小值[6]。因此,只需要计算t 时刻的概率t δ( i) ,它是 大于前参考单词模型的最小值pv 的。
实验将直接使用 fpga 的加法器、比较器和逻辑操作来实现上述公式(2)和公式(3), 可以显著提高系统效率,系统结构如下图2。
在这一方案中,识别过程直接由 fpga 芯片内的逻辑块从观察序列中计算概率得分, 其中,观察值序列通过vq 得出。系统包括了两个用来存储转移矩阵a 和输出概率矩阵b 的存储器,一个处理单元(processing element,pe)阵列,控制器,地址生成和附加比较 逻辑。pe 包括有viterbi 算法的核心模块加-比-选单元(add-compare-select unit,acsu), 状态累加器,和用来比较( i ) t δ 和极值pv的附加比较器。pe 从hmm 参数寄存器中取出参 考模型,沿最小路径计算其概率,然后与极值pv 进行比较。当(i) t δ 大于pv 时,控制器在 下一状态时使pe 操作无效;同时,控制器控制存储器缓冲操作,并生成整个计算过程中的 控制信号。
3 vc++和matlab 混合编程
对于在 fpga 上实现语音识别的核心模块——viterbi 算法时,有许多工作需要在实验 前完成,如定制硬件源代码、转换浮点数据为定点数据和电路仿真等。为减少这部分工作, 采用软硬件协同设计的思想,由软件来执行hmm 模型训练和其它识别过程(如mfcc、 vq 等)。在实验时,用软件来执行hmm 模型训练和语音单词识别。然后,把实验数据(语 音数据和hmm 模型参数)转换成定点数据格式,由pci 设备驱动程序将实验数据、源代 码等下载到硬件,用于fpga 验证平台。
根据上述思想,采用matlab 和vc + +混合编制pci 设备驱动程序,利用matlab 系统提 供的外部程序调用接口mex 文件来实现其于vc++的混合编程。mex 文件是一种约定格式 编写的文件,使用c 语言或fotran 语言编写,是由matlab 解释器自动调用并执行的动态 链接函数(dynamic link library function),它在mac 下以.mex 为后缀名,在windows 下 即.dll 文件。基于c 语言的mex 文件主要由两部分组成,第一部分称为入口子程序,其作 用是在matlab 系统与被调用的外部子程序间建立通信联系。第二部分称为计算功能子程序,它包含所有实际需要完成的功能的源代码,由入口子程序调用[7]。
该方法可以在软硬件之间达到一致的识别结果,其方案描述如图3 所示。实验中,计算 由fpga 硬件完成,该子程序的主要负责fpga 与pci 的数据传递,即pci 设备驱动。通 过mex 文件,不仅可在matlab 系统中像调用内建函数一样调用存在的算法,使资源得到 充分利用,避免重复程序设计。同时,还可以对硬件直接进行编程,弥补matlab 的不足。
4 实验
该语音识别实验采用的硬件平台是包括有altera cyclone 系列ep1c12 的fpga 和 pci9054 芯片的pci 开发板。ep1c 的fpga 负责硬件viterbi 计算,pci9054 在驱动程序的 帮助下负责pc 和fpga 间实验数据和结果的传输。
由于 fpga 的空间限制,实验选择了4 状态的hmm 模型和容量64 的vq 码本,占用 fpga 的le(逻辑单元)1,125 个,存储单元占用约132k 位。然后将.sof 目标文件下载到 pci 卡上的fpga 芯片中运行,在matlab 中调用vc++编写的pci 设备驱动程序,将vq 后 的语音数据和hmm 模型参数传送给fpga 内的viterbi 译码电路,实验中,通过驱动程序 输出模板标号与实际语音的标号及仿真实验导出的标号一致。
在 p4 3.0ghz 的pc 机和200mhz fpga 验证平台上,对于约100 帧的单个语音文件识 别而言,软/硬件viterbi 算法的耗时如下表1 所示。
由上述实验结果证明了该viterbi 算法的vlsi 结构能够准确且快速地实现语音识别的解 码过程,满足嵌入式计算精度要求,表明该实现方案是切实可行的。
5 结束语
采用 matlab、vc + +和fpga 搭建了一个软硬件协同的语音识别实验 研究平台,以vc++来弥补matlab 不能与硬件底层进行直接接触的不足。并在传统viterbi 算法基础上,对其采取一定变形,直接使用fpga 的加法器、比较器和逻辑操作建立viterbi 算法的vlsi 结构,来计算观察值序列,以实现一种简单的基于hmm 语音识别的模板匹配。 采用这种软硬件协同的实验研究平台,可在利用前面matlab 的实验成果基础上,逐步实现 语音识别各功能模块的嵌入式设计,减少工作量,并易于调试。

小米Note3、小米Max2最新消息:雷爸爸耍猴不要紧,小米Note3、小米Max2升级来袭
中国电信以及华为在新的5G千兆网络建设方向上提出了一致的方向
未来传感技术带来优质的数据将更好地保证人工智能进行机器学习
NE555+TC4022数字转速表,ne555+TC4022 Speed counter
金立GN9007拆机图解
采用VC++和Matlab混合编程搭建基于HMM的语音识别的实验平台
两个NPN三极管搭建的直流降压稳压电源输出电压是多少?怎么算的
三星推出T55系列显示器 曲率达到前所未有的1000R
互联网公司已经站在了数字经济的风口,阿里巴巴这样“起飞”
苹果IPAD下架潮蔓延 福州多数商家忙撤柜
锤子坚果YQ601拆解图赏
苹果计划将产线撤出大陆地区,向台湾或东南亚转移
如何为旧版iPhone添加无线充电功能?
自行车尾灯余辉电路图解说明
华尊:“AI辅助执法+大数据研判”智能交通平台介绍
美国司法部拟对苹果垄断行为提出诉讼
示波器的作用和工作原理解析
一场半导体产业人才“挖墙脚”疯狂开演
氮化镓功率晶体管价格降至1美元以下
液体电阻起动柜广泛应用受到用户的亲赖