引言
说话人识别又称声纹识别,是通过说话人的声音特征进行身份认证的一种生物特征识别技术。说话人识别经过60多年的研究,已经逐步应用到法律、银行等各个领域。说话人识别通过对语音信号进行处理,提取说话人语音当中的生物学个性特征,在特征空间建立不同个体的特征模型,从而实现说话人的识别。识别的关键算法包括特征提取和建立模型两个方面,参考文献[1]从基本概念到特征提取,再到模型建立,对说话人识别中涉及的主要算法进行了详细的综述,并比较了各种算法的优劣。
实现基于嵌入式的实时说话人识别系统是说话人识别走向应用的关键步骤。随着DSP技术的发展,DSP作为数字处理专用芯片在复杂数学算法的实现上起着越来越重要的作用。参考文献[2]在DSP上实现了说话人确认,并应用于汽车声纹锁。本文以TI公司的TDSDM642 EVM为平台,实现了实时的说话人身份识别系统。
1系统组成
说话人识别系统是一个模式识别的过程,总体上分为两个步骤:第一个步骤是训练说话人模型,第二个步骤是通过比对模型库对输入的信号进行说话人识别。其识别过程如图1所示。
图1模式识别过程
在训练注册阶段,系统主要完成说话人的特征提取以及模型特征库的建立。在识别阶段,系统根据输入的语言信号提取相应的特征,然后再与模型库中的模型进行匹配判决,最后给出识别结果。
说话人识别在嵌入式系统中实现时主要完成语音采集、模型训练、匹配识别3个任务。本文采用TDSDM642 EVM平台实现说话人识别系统,其结构框图如图2所示。该系统通过AIC23实现语音信号采集和播放的功能,输入的语音信号经过TDSDM642处理后,通过LED显示识别结果。ROM中包含说话人识别程序和训练出的模型数据,并可以实时更新。SDRAM则提供了系统运行时所需的内存。
图2说话人识别系统结构框图
2系统算法描述
说话人识别的算法主要包括特征提取和模式识别两个方面。MFCC特征参数是从频率域提取语音信号的特征参数,并根据人耳的听觉特性进行降维,既可减小计算复杂度,又能获得良好的识别效果[34]。MFCC特征提取过程如图3所示。
图3MFCC特征提取过程
说话人识别建模的方法主要有矢量量化(VQ)、高斯混合模型(GMM)、支持向量基(SVM)、人工神经网络(ANN),以及动态时间规整(DTW)等[5]。综合考虑嵌入式系统上算法的识别率和计算量,本文采用DTW方法实现文本相关的说话人识别。
3定点算法实现和优化
TDSDM642是TI公司推出的定点DSP芯片,具有性价比高、运算速度快的优点,但是定点DSP对于浮点运算比较困难,因此在系统实现时需要对算法进行浮点到定点的移植。同时,为了使DSP上的代码获得最好的性能,还应该根据TDSDM642芯片片内资源的特征进行优化。优化的方法有编译优化、软件流水、内联函数等。通过优化可以明显提高代码执行速度,并减小代码尺寸。
说话人识别当中,计算耗时最长的是MFCC参数的提取和参数模型的训练,本文采用以下优化方法。
3.1编译器优化
TI公司的CCS编译器可以对C代码进行不同级别的优化,通过打开不同的优化选项,可以针对具体的硬件平台进行不同程度的优化,包括代码的大小、运行的速度等。通常经过CCS优化的程序,运行速度已经相当快,结构设计良好的程序能实现90%的优化。如果还没有达到系统设计的要求,则需要对代码进行手工优化。
3.2软件流水优化
TDSDM642处理器采用C64x系列芯片,其内部共有8条软件流水线,可以8条指令并行执行,能够大大提高系统性能。恰当地设计软件结构,并配合合适的编译优化选项,可以充分利用芯片内的软件流水优化提高系统性能。CCS的编译优化一般只针对最内层的循环进行流水优化,并且在循环中代码应该尽量简单,如果循环中含有大量判断、跳转等指令,那么编译出来的软件流水会大打折扣,有时甚至无法进行流水执行指令,这样处理器的性能就不能充分地发挥出来。
3.3循环展开优化
循环展开是另一种优化程序的方法。为了充分利用芯片内的硬件资源,使尽可能多的指令同时并行执行,可以采用将小循环展开的方式,使片内资源的性能得到最大的发挥。CCS优化编译器通常情况下会根据程序的情况自动展开循环,编程人员也可以采用编译指令或手工方式展开循环优化程序。
3.4采用内联函数
TI公司的C6000编译器含有大量的内联函数,支持从C语言里直接调用汇编程序,从而大大提高程序的执行速度。系统提供的内联函数还可以支持C64x系列DSP特有指令的执行,例如数据打包相乘等操作,可以进一步提高系统数据处理能力。
4实验结果
本文在TDSDM642 EVM平台上实现了实时的说话人识别系统。经过对10个人的语音数据进行识别实验,正确率达到90%,可以达到实用水平。通过改进算法和调整参数,可以进一步提高系统识别率,以满足安全系统的更高要求。