<?xml version="1.0" encoding="gbk"?> <rss version="2.0"><channel> <title>定阅帖子更新</title> <link>http://www.broadkey.com.cn/XML.ASP</link><description>TEAM Board - 科伟奇电子</description> <copyright>TEAM 2.0.5 Release</copyright><generator>TEAM Board by TEAM5.Cn Studio</generator> <ttl>30</ttl><item><link>http://www.broadkey.com.cn/Thread.asp?tid=527 </link><title>DSP嵌入式说话人识别系统的设计与实现</title><author>海盗</author><pubDate>2010/1/11 11:26:49</pubDate><description><![CDATA[<strong>　0 引 言</strong>
<p>　　说话人身份识别属于生物认证技术的一种，是一项根据语音中反映说话人生理和行为特征的语音参数来自动识别说话人身份的技术。近年来，说话人身份识别以其独特的方便性、经济性和准确性等优势受到瞩目，在信息安全等领域的应用逐渐增大，并成为人们日常生活和工作中重要且普及的安全验证方式。目前，说话人身份识别在理论上和实验室条件下已经达到了比较高的识别精度，并开始走向实际应用阶段。AT&amp;T、欧洲电信联盟、ITT、Keyware、T-NETIX，Motorola和Vi-sa等公司相继开展了相关实用化研究，国内这方面研究主要在中科声学所，中科院自动化所，清华大学等研究所和大学中进行。</p>
<p>　　基于<a style="color: blue; text-decoration: underline" title="嵌入式" href="http://article.ednchina.com/word/266280.aspx">嵌入式</a>的说话人身份识别系统具有高精度，适时性好，低功耗，低费用，体积小等优势，逐渐成为说话人身份识别面向实际应用的新热点。而随着<a style="color: blue; text-decoration: underline" title="DSP" href="http://article.ednchina.com/word/266279.aspx"><nobr style="border-bottom: rgb(102,0,255) 1px dotted; background-color: transparent; color: #cb4bfc; cursor: pointer; text-decoration: underline" id="nobr218" jquery1263180330455="49">DSP</nobr></a>新技术的发展，DSP芯片无论在处理速度、精度、功耗或者体积等方面都取得了突破性的进展。DSP也越来越多的应用于说话人身份识别。但目前这方面研究主要局限于小数据量、与PC机配套使用上，没有太大的实用价值。在此介绍一种基于TMS320C6713 DSP芯片设计的嵌入式，10个人范围的说话人身份识别系统。该系统可以自举运行，并可灵活的选择训练、识别或者更换训练者、识别者，识别率达98％以上。</p>
<p>　<strong>　1 系统的架构及硬件构成</strong></p>
<p>　　系统总体实现流程如图1所示。系统主要分为训练和识别两部分，系统初始化后由操作者控制训练或识别。训练目的是提取说话人模型参数并将其存储在FLASH ROM中。识别目的是读取待识别者语音信息并将获得的模型参数与训练的模型参数比较，从而获得识别结果。</p>
<p align="center"><img border="0" hspace="0" alt="系统总体实现流程" src="http://pagesadmin.ednchina.com/images/article/9f822f87-a0e8-49ae-8499-2a93332e86ca/1.jpg" width="440" height="490" /></p>
<p>　<strong>　1．1 系统的主要硬件构成</strong></p>
<p>　　系统硬件构成如图2所示，主要包含语音采集模块、数据处理模块(DSP)、程序数据存储及自举FLASH模块、数据存储器RAM模块、系统时序逻辑控制CPLD模块、JTAG接口模块。</p>
<p align="center"><img border="0" hspace="0" alt="系统硬件构成" src="http://pagesadmin.ednchina.com/images/article/9f822f87-a0e8-49ae-8499-2a93332e86ca/2.jpg" width="440" height="193" /></p>
<p>　　语音采集模块主要由TLV320AIC23音频编解码器来完成，该芯片是TI公司的一款高性能的立体声音频Codec芯片，内置<nobr style="border-bottom: rgb(102,0,255) 1px dotted; background-color: transparent; color: #cb4bfc; cursor: pointer; text-decoration: underline" id="nobr74" jquery1263180330455="50">放大器</nobr>，输入／输出增益可编程设置。模数，数／模转换集成在一块芯片中。采样率8～96 kHz可编程实现。另外还具有低功耗，连接电路简单，性价比高的特点。</p>
<p>　　语音处理DSP采用TI公司的TMS320C6713芯片，该芯片实现浮点运算，最高时钟频率225 MHz，使用该芯片外部存储器接口可实现对外部存储器(SDRAM)数据传输和程序存储器(FLASH ROM)进行程序读写；依靠JTAG接口电路通过仿真器进行仿真调试，实现与主机数据交换；通过片内外设McBSP完成串行数据的接收和发送，实现对音频处理模块的控制等工作。</p>
<p>　　FLASH ROM最大可提供512 KB空间，通常为前256 KB可用。SDRAM最大容量为16 MB，为该系统提供较大的数据存储空间。CPLD为存储器的扩展实现逻辑编码。电源为TPS54310芯片，可为系统提供3．3 V和1．26 V两种电压。</p>
<p>　　<strong>1．2 选择说话人</strong></p>
<p>　　该系统要训练10个人的语音，每个人的语音存放在FLASH ROM的不同位置。在训练的开始阶段，系统需确定当前训练者的身份，以便对训练完成后说话者模型参数存储位置有准确的判断。对当前训练者身份的选择由系统中的4个Switch实现。若把每个Switch的开关两种状态看成是二进制数的0，1，则最终可形成16种组合，代表16个人。该系统选取前10个组合。</p>
<p>　　<strong>1．3 AIC23语音采集</strong></p>
<p>　　考虑到系统的实用性，语音的输入由mic in接口输入。语音采集若设为双声道，则采集的左右声道数据差别不大，对识别没有太大的帮助，而且采集到的语音会占用太大存储器空间，故采用单声道采样；对于采样精度要求，TLV320AIC23可实现8～96 kHz，16 b，20 b，24 b，32 b，的不同采样，随着采样频率的提高，采样间隔将相应的缩短，要求更大的内存空间和更长的处理时间，实验表明，采样率由16 kHz下降到8 kHz，所造成的识别率的微乎其微，但是可以节省50％的动态存储空间，并可减少大量的运算。对于采样位数，16 b精度已能满足该系统要求，故采样精度设为8 kHz，16 b采样。</p>
<p>　　<strong>1．4 数据的存储</strong></p>
<p>　　由TLV320AIC23获得的语音信号的数据，只有赋值给相应的数组，才能在接下来的算法中有所应用。为此在SDRAM中定义一片数组存储区域。对于数组大小及类型的选择基于以下两点：</p>
<p>　　(1)数组大小选择。该系统算法中包含训练和识别两个内容。语音信号的训练需要大量的数据才能准确的提取语音的特征参量。该系统采用8 kHz采样率的10 s的语音信号，所需的数组空间大小为80 000个数据单位；语音信号的识别要求快速性，该系统采用时间较短的8 kHz 3 s语音信号，所需数组空间大小为30 000个数据单位，为了减少数据空间，系统设定为与训练数组共用前30 000个数据单位的空间。</p>
<p>&nbsp;</p>
<p>　　(2)数组类型为浮点型，由于设定的采样格式是16 b采样，而采样后数据类型是Uint32，语音数据位于低16位，所以赋值过程中取低16位数据赋值给数组。</p>
<p>　　<strong>1．5 模型参数存入与参数调出</strong></p>
<p>　　将模型参数存入FLASH ROM的目的是保存训练所得的参数，以供识别时调用。训练可能用于多次识别，或者训练和识别可能处于不同的时间地点，所以，保存参数的存储器选定为具有掉电时数据不丢失特点的FLASH ROM。每个说话者语音参数代表一个说话者身份，所以每个说话者模型参数应存储在FLASHROM中一个确定的位置。为此，该系统在FLASHROM中分配了10块的区域，每个说话者模型参数占有一块特定的区域。</p>
<p>　　在FLASH ROM中存人数据格式为32 b无符号整数。而训练得到的是浮点型的数据。这就要求在数据存入之前将浮点数转换为32 b无符号类型的整数，假设要转换的数据为float x[M][N]则转换方法如下：</p>
<p>　　(1)x[M][N]归一化；</p>
<p>　　(2)对x[M][N]乘以一常数K得到有符号整型的数组y[M][N]，即：</p>
<p align="center">y[M][N]=x[M][N]&times;K (1)</p>
<p>　　(3)屏蔽第32位符号位，得到32 b无符号类型的整数数组。方法如下：</p>
<p align="center">z[i][j]=y[i][j]&amp;0x7FFFFFFF (2)</p>
<p>　　(4)将z[i][j]存入FLASH ROM。</p>
<p>　　通过统计实验数据发现归一化后数据的范围为10-5～1，故K选择为108，既可以实现较大精度的转化，又不会影响第31位的数值。转换得到的有符号整型数组y[M][N]范围为-108～108，在存储器中正数为原码表示，负数为补码表示，通过计算发现，该范围的正数第31位为0，负数第31位为1，所以，上述第(3)步，将有符号数转换为无符号数后，数值的正负改为使用第31位标识。在识别阶段，要将说话者的GMM参数依次从FLASH ROM中读出，逐个与待识别者语音的MFCC参数比较，求最大似然值。参数调出过程与以上存入过程相反。</p>
<p>　　<strong>1．6 说话人身份识别的结果显示</strong></p>
<p>　　说话人的身份显示通过LED的组合显示确定。在DSK上有4只LED灯，将每个LED灯看成是一位二进制数。则4个LED灯最大可表示16个人的身份。该系统取前10个组合来表示所识别的说话人的身份。</p>
<p>　　<strong>1．7 自举的实现</strong></p>
<p>　　以上程序都是通过PC机与<a style="color: blue; text-decoration: underline" title="DSP" href="http://article.ednchina.com/word/266279.aspx"><nobr style="border-bottom: rgb(102,0,255) 1px dotted; background-color: transparent; color: #cb4bfc; cursor: pointer; text-decoration: underline" id="nobr218" jquery1263180376701="49">DSP</nobr></a>组合实现，要想使系统在DSP上单独完成，还必须实现自举。该系统采用ROM方式自举。在自举实现过程中，程序的烧写可以通过CCS自带的FLASHBorn工具实现。在烧写过程中应正确的分配FLAH ROM的空间。FLASHROM空间总体分为程序存储区和数据存储区，经计算，程序代码段大小为0x162C0，故在FLASH ROM中划分127 KB的空间供程序代码使用，空间中未使用的部分供程序扩展使用。数据存储区划分的大小为64 KB的空间，每个说话者模型参数占用空间为4．2 KB左右，最多可存放15个说话人GMM模型参数。该系统训练者数目为10个，占用空间为42 KB左右。剩余的空间可用来扩展训练人数，也可用于后期系统的改进。如可以利用语音提示来显示说话人身份，而提示语音的数据可以存放于此区域。具体的存储的安排如表1所示。</p>
<p align="center"><img border="0" hspace="0" alt="具体的存储的安排" src="http://pagesadmin.ednchina.com/images/article/9f822f87-a0e8-49ae-8499-2a93332e86ca/01.jpg" width="361" height="151" /></p>
<p>　　<strong>2 系统的算法与软件设计</strong></p>
<p>　　<a style="color: blue; text-decoration: underline" title="说话人识别" href="http://article.ednchina.com/word/266281.aspx">说话人识别</a>系统的实现方案如图3所示。</p>
<p align="center"><img border="0" hspace="0" alt="说话人识别系统的实现方案" src="http://pagesadmin.ednchina.com/images/article/9f822f87-a0e8-49ae-8499-2a93332e86ca/3.jpg" width="434" height="136" /></p>
<p>　　输入的<nobr style="border-bottom: rgb(102,0,255) 1px dotted; background-color: transparent; color: #cb4bfc; cursor: pointer; text-decoration: underline" id="nobr93" jquery1263180376701="50">模拟</nobr>语音先通过预处理，包括预滤波、采样、量化、加窗、端点检测、预加重等。语音经过预处理后进行特征提取。在训练阶段，对提取的特征进行相应的处理后就可以获得参考模型。识别阶段，语音通过同样的通道获得特征参数，生成测试摸型，之后将测试摸型与参考摸型进行匹配，从而根据判决逻辑获得判决结果。</p>
<p>　　<strong>2．1 语音信号的端点检测</strong></p>
<p>　　语音信号的端点检测目的是去除语音信号中的噪声段。端点检测从很大程度上影响到识别率。常用方法有短时能量法，短时过零率法和双门限法等。本系统选用双门限法，实验表明，效果优于前两种方法。在双门限方法端点检测中，阈值的选择尤为关键，该系统的语音采样频率设为8 kHz，语音分帧为每帧80个点。经过多次实验，这里短时能量低阈值通过式(3)的动态方式得到，高阈值设为低阈值的5倍。而过零率的阈值选取应充分考虑到噪声的影响，通过大量实验发现系统中噪声的过零率一般不超过5，所以对过零率的阈值选取为25，取得了很好的效果，准确率达到95％以上。</p>
<p align="center">ITU=0．03(amp_max-amp_min)+amp_min&nbsp; (3)</p>
<p>　　在端点检测过程中有时会遇到突发性的干扰噪声，这种噪声持续时间很短，一般小于5 ms。为了消除这种干扰，这里用检测后的起止长度判断它是不是语音。如果所检测到的语音长度足够的短，则可以把它当成是噪声。 　<strong>2．2 特征参数的提取</strong></p>
<p>　　语音信号的特征提取是说话人身份识别的难点。能否用相对简单的方法提取出一种最能体现说话人个性信息的特征将成为以后研究的方向。该系统中用的是能体现人耳听觉特性的Mel倒谱系数(MFCC)。</p>
<p>　　MFCC着眼于人耳的听觉机理，依据听觉的结果来分析语音的频谱，获得了很好的识别率和很好的噪声鲁棒性，它利用了听觉系统的临界效应，描述人耳对感知的非线性特性。在<a style="color: blue; text-decoration: underline" title="DSP" href="http://article.ednchina.com/word/266279.aspx"><nobr style="border-bottom: rgb(102,0,255) 1px dotted; background-color: transparent; color: #cb4bfc; cursor: pointer; text-decoration: underline" id="nobr218" jquery1263180391336="53">DSP</nobr></a>硬件资源配置中，MFCC在识别性能和DSP内部空间占用方面也取得了很好的平衡。在该系统中使用16个滤波器(M=16)构成的滤波器组。图4所示是MFCC的提取过程。</p>
<p align="center"><img border="0" hspace="0" alt="MFCC的提取过程" src="http://pagesadmin.ednchina.com/images/article/9f822f87-a0e8-49ae-8499-2a93332e86ca/4.jpg" width="389" height="105" /></p>
<p>　　<strong>2．3 识别方法选择与实现</strong></p>
<p>　　基于该系统对速度、识别效率、存储空间的要求，这里的识别方法选为高斯混合模型。高斯混合模型(GMM)可以看成是状态数为1的连续分布隐马可夫模型CDHMM。一个M阶混合高斯模型的概率密度函数是由M个高斯概率密度函数加权求和得到，所示如下：</p>
<p align="center"><img border="0" hspace="0" alt="公式" src="http://pagesadmin.ednchina.com/images/article/9f822f87-a0e8-49ae-8499-2a93332e86ca/04.jpg" width="371" height="62" /></p>
<p>　　式中：X是一个D维随机向量；bi(Xi)是子分布，i=1，2，&hellip;，M是子分布；&omega;i是混合权重，i=1，2，&hellip;，M。对GMM模型参数的估计方法该系统采用最大似然估计。对于一组长度为T的训练矢量序列X={X1，X2，&hellip;，XT}，GMM的似然度可表示为：</p>
<p align="center"><img border="0" hspace="0" alt="公式" src="http://pagesadmin.ednchina.com/images/article/9f822f87-a0e8-49ae-8499-2a93332e86ca/05.jpg" width="369" height="59" /></p>
<p>　　由于式(5)是参数&lambda;的非线性函数，很难直接求出其最大值。因此，该系统采用EM算法估计参数&lambda;。</p>
<p>　<strong>　2．4 算法实现过程中的具体考虑．</strong></p>
<p>　　(1)FFT变换点数的选择。FFT变换点数选择很重要，如果选择太大，则运算复杂度变大，使系统响应时间变长，如果选择太小则可能造成频率分辨率过低，提取参数误差过大。该系统中选取的点数为240点。</p>
<p>　　(2)模型参数的选择。首先模型阶数M必须适中，必须足够大，可以充分表示出空间的分布。然而，阶数也不能太大，否则数据数量不足，也无法准确描述特征空间分布。考虑该系统对参数的存储空间要求，并综合以上考虑，该系统选用的阶数为32阶。</p>
<p>　　(3)协方差矩阵类型。考虑到减少计算量，这里采用对角阵。在高维特征空间中，对角阵比全矩阵优势更为明显。</p>
<p>　　(4)方差限定。当训练数据不足或者是存在噪声干扰时，方差幅度会很小，这样会导致模型概率函数的奇异性，所以每次EM迭代时，都需要对方差进行限定。即：</p>
<p align="center"><img border="0" hspace="0" alt="公式" src="http://pagesadmin.ednchina.com/images/article/9f822f87-a0e8-49ae-8499-2a93332e86ca/06.jpg" width="383" height="68" /></p>
<p>　　根据实验结果，该系统选取S2 min为0．025</p>
<p>　　(4)模型初值的设定：EM算法是寻找局部最大概率的模型。不同的初值会导致不同的局部极值。该系统中采用的是K均值法。</p>
<p>　　<strong>2．5 K均值法应注意的几个问题</strong></p>
<p>　　(1)聚类中心的初始化。对于聚类中心数目由GMM模型决定，假设是N。对于聚类中心的初始化，一般取前N个矢量作为聚类中心，但在实验过程中发现，这种方法不具有针对性，往往设立的初始的聚类中心不具有很好的聚类效果。所以这里采用取质心法。具体方法为：</p>
<p>　　第一步先求出训练集S中全体矢量X的质心，然后在S中找出一个与此质心的畸变量最大的矢量Xj，再在S中找到一个与Xj的畸变量最大的矢量Xk。以Xj和Xk为基准进行胞腔划分，得到Sk和Sj两个子集。对这两个子集分别按照同样的方法划分得到4个子集。依次类推，得到N个子集。这N个子集的质心即为初始的聚类中心。</p>
<p>　　(2)聚类中心改进量&delta;的选择。对于聚类中心改进量&delta;的选择，若选择太大，则聚类不充分，影响训练效果；若太小，则会导致训练无法完成，该系统通过试验，取比较适中的数0．01。</p>
<p>　　(3)最大迭代次数的选择。对于最大迭代次数的选择，太小会导致误判，太大导致训练不成功时过多的占用系统时间。该系统迭代次数设为100，比较适中。</p>
<p>　　<strong>3 实验结果及改进点</strong></p>
<p>　　通过系统调试及改进，该系统最终实现10个说话人的身份识别，并自举运行。运行时通过Switch组合可方便的选择训练或识别的功能，并可更新说话人。训练，识别的进度及结果通过LED组合显示。利用该系统对5男5女10个人进行训练，每人500次测试，结果正确识别率为98％，识别时间为3 s左右。说明该系统可以有效的识别说话人的身份。对于该系统，识别时间及识别率上还有改进空间，以后工作可围绕识别时间上改进。</p>
<!-- 2009/12/31 20:36:14-->]]></description></item></channel></rss>