VC++和Matlab混合编程的语音识别研究

[09-12 18:26:33]   来源:http://www.88dzw.com  EDA/PLD   阅读:8383

文章摘要:在这一方案中,识别过程直接由 FPGA 芯片内的逻辑块从观察序列中计算概率得分, 其中,观察值序列通过VQ 得出。系统包括了两个用来存储转移矩阵A 和输出概率矩阵B 的存储器,一个处理单元(Processing Element,PE)阵列,控制器,地址生成和附加比较 逻辑。PE 包括有Viterbi 算法的核心模块加-比-选单元(Add-Compare-Select Unit,ACSU), 状态累加器,和用来比较( i ) T δ 和极值Pv的附加比较器。PE 从HMM 参数寄存器中取出参 考模型,沿最小路径计算其概率,然后与极值Pv 进行比较。当(i) T δ 大于Pv 时,控制器在 下一状

VC++和Matlab混合编程的语音识别研究,标签:eda技术,eda技术实用教程,http://www.88dzw.com


  在这一方案中,识别过程直接由 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 的实验成果基础上,逐步实现 语音识别各功能模块的嵌入式设计,减少工作量,并易于调试。


上一页  [1] [2] 


Tag:EDA/PLDeda技术,eda技术实用教程EDA/PLD
分类导航
最新更新
热门排行