matlab语音识别系统.pdf

上传人:l**** 文档编号:72136603 上传时间:2023-02-08 格式:PDF 页数:11 大小:496.13KB
返回 下载 相关 举报
matlab语音识别系统.pdf_第1页
第1页 / 共11页
matlab语音识别系统.pdf_第2页
第2页 / 共11页
点击查看更多>>
资源描述

《matlab语音识别系统.pdf》由会员分享,可在线阅读,更多相关《matlab语音识别系统.pdf(11页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、智能仪器课程设计智能仪器课程设计(威海)(威海)题题目目:MATLABMATLAB实现语音识别功能实现语音识别功能班班级:级:学学号:号:姓姓名:名:同组人员:同组人员:任课教师:任课教师:完成时间:完成时间:2012/11/32012/11/3目录目录一、设计任务及要求1二、语音识别的简单介绍2.1 语者识别的概念2 2.2 特征参数的提取3 2.3 用矢量量化聚类法生成码本3 2.4VQ 的说话人识别 4三、算法程序分析3.1 函数关系.4 3.2 代码说明5 3.2.1 函数 mfcc5 3.2.2 函数 disteu5 3.2.3 函数 vqlbg.63.2.4 函数 test63.2

2、.5 函数 testDB7 3.2.6 函数 train8 3.2.7 函数 melfb8四、演示分析.9五、心得体会.11附:GUI 程序代码12一、一、设计任务及要求设计任务及要求用 MATLAB实现简单的语音识别功能;具体设计要求如下:用 MATLAB实现简单的数字 19 的语音识别功能。二、二、语音识别的简单介绍语音识别的简单介绍基于 VQ 的说话人识别系统,矢量量化起着双重作用。在训练阶段,把每一个说话者所提取的特征参数进行分类,产生不同码字所组成的码本。在识别(匹配)阶段,我们用 VQ 方法计算平均失真测度(本系统在计算距离 d 时,采用欧氏距离测度),从而判断说话人是谁。语音识别

3、系统结构框图如图 1 所示。图 1 语音识别系统结构框图2.12.1 语者识别的概念语者识别的概念语者识别就是根据说话人的语音信号来判别说话人的身份。语音是人的自然属性之一,由于说话人发音器官的生理差异以及后天形成的行为差异,每个人的语音都带有强烈的个人色彩,这就使得通过分析语音信号来识别说话人成为可能。用语音来鉴别说话人的身份有着许多独特的优点,如语音是人的固有的特征,不会丢失或遗忘;语音信号的采集方便,系统设备成本低;利用网络还可实现远程客户服务等。因此,近几年来,说话人识别越来越多的受到人们的重视。与其他生物识别技术如指纹识别、手形识别等相比较,说话人识别不仅使用方便,而且属于非接触性,

4、容易被用户接受,并且在已有的各种生物特征识别技术中,是唯一可以用作远程验证的识别技术。因此,说话人识别的应用前景非常广泛:今天,说话人识别技术已经关系到多学科的研究领域,不同领域中的进步都对说话人识别的发展做出了贡献。说话人识别技术是集声学、语言学、计算机、信息处理和人工智能等诸多领域的一项综合技术,应用需求将十分广阔。在吃力语音信号的时候如何提取信号中关键的成分尤为重要。语音信号的特征参数的好坏直接导致了辨别的准确性。2.22.2 特征参数的提取特征参数的提取对于特征参数的选取,我们使用 mfcc 的方法来提取。MFCC 参数是基于人的听觉特性利用人听觉的屏蔽效应,在 Mel 标度频率域提取

5、出来的倒谱特征参数。MFCC 参数的提取过程如下:1.对输入的语音信号进行分帧、加窗,然后作离散傅立叶变换,获得频谱分布信息。设语音信号的 DFT 为:Xa(k)x(n)en1N1j2nkN,0 k N 1(1)其中式中 x(n)为输入的语音信号,N 表示傅立叶变换的点数。2.再求频谱幅度的平方,得到能量谱。3.将能量谱通过一组Mel尺度的三角形滤波器组。我们定义一个有 M 个滤波器的滤波器组(滤波器的个数和临界带的个数相近),采用的滤波器为三角滤波器,中心频率为 f(m),m=1,2,3,,M本系统取 M=100。4.计算每个滤波器组输出的对数能量。S(m)ln(|Xa(k)|2Hm(k),

6、k1N1(2)0 m M1其中Hm(k)为三角滤波器的频率响应。5.经过离散弦变换(DCT)得到MFCC系数。M 1m0C(n)S(m)cos(n(m0.5/m),(3)0 n N 1 MFCC 系数个数通常取 2030,常常不用 0 阶倒谱系数,因为它反映的是频谱能量,故在一般识别系统中,将称为能量系数,并不作为倒谱系数,本系统选取20 阶倒谱系数。2.32.3 用矢量量化聚类法生成码本用矢量量化聚类法生成码本我们将每个待识的说话人看作是一个信源,用一个码本来表征。码本是从该说话人的训练序列中提取的 MFCC 特征矢量聚类而生成。只要训练的序列足够长,可认为这个码本有效地包含了说话人的个人特

7、征,而与讲话的容无关。本系统采用基于分裂的 LBG 的算法设计 VQ 码本,Xk(k 1,2,K)为训练序列,B 为码本。具体实现过程如下:1.取提取出来的所有帧的特征矢量的型心(均值)作为第一个码字矢量B1。2.将当前的码本Bm根据以下规则分裂,形成2m个码字。Bm Bm(1)(4)Bm Bm(1)其中 m 从 1 变化到当前的码本的码字数,是分裂时的参数,本文=0.01。3.根据得到的码本把所有的训练序列(特征矢量)进行分类,然后按照下面两个公式计算训练矢量量化失真量的总和Dn以及相对失真(n为迭代次数,初始n=0,D1=,B为当前的码书),若相对失真小于某一阈值,迭代结束,当前的码书就是

8、设计好的2m个码字的码书,转。否则,转下一步。量化失真量和:D(n)mind(Xk,B)(5)k1K相对失真:D(n1)Dn|(6)nD 4.重新计算各个区域的新型心,得到新的码书,转 3。5.重复,和步,直到形成有 M 个码字的码书(M 是所要求的码字数),其中 D0=10000。2.4 VQ 2.4 VQ 的说话人识别的说话人识别设是未知的说话人的特征矢量X1,K,XT,共有T帧是训练阶段形成的码书,表示码书第 m 个码字,每一个码书有 M 个码字。再计算测试者的平均量化失真 D,并设置一个阈值,若 D 小于此阈值,则是原训练者,反之则认为不是原训练者。D 1/Tmind(xj1(7)j,

9、Bm)1mM三、三、算法程序分析算法程序分析在具体的实现过程当中,采用了 matlab 软件来帮助完成这个项目。在 matlab中主要由采集,分析,特征提取,比对几个重要部分。以下为在实际的操作中,具体用到得函数关系和作用一一列举在下面。3.13.1 函数关系函数关系主要有两类函数文件 Train.m 和 Test.m在 Train.m 调用 Vqlbg.m 获取训练录音的 vq 码本,而 Vqlbg.m 调用 mfcc.m获取单个录音的 mel 倒谱系数,接着 mfcc.m 调用 Melfb.m-将能量谱通过一组Mel 尺度的三角形滤波器组。在 Test.m 函数文件中调用 Disteu.m

10、 计算训练录音(提供 vq 码本)与测试录音(提供 mfcc)mel 倒谱系数的距离,即判断两声音是否为同一录音者提供。Disteu.m 调用 mfcc.m 获取单个录音的 mel 倒谱系数。mfcc.m 调用 Melfb.m-将能量谱通过一组 Mel 尺度的三角形滤波器组。3.23.2 具体代码说明具体代码说明3.2.13.2.1 函数函数 mffc:mffc:function r=mfcc(s,fs)-m=100;n=256;l=length(s);nbFrame=floor(l-n)/m)+1;%沿-方向取整for i=1:nfor j=1:nbFrameM(i,j)=s(j-1)*m)

11、+i);%对矩阵 M 赋值endendh=hamming(n);%加 hamming 窗,以增加音框左端和右端的连续性M2=diag(h)*M;for i=1:nbFrameframe(:,i)=fft(M2(:,i);%对信号进行快速傅里叶变换 FFTendt=n/2;tmax=l/fs;m=melfb(20,n,fs);%将上述线性频谱通过 Mel 频率滤波器组得到 Mel 频谱,下面在将其转化成对数频谱n2=1+floor(n/2);z=m*abs(frame(1:n2,:).2;r=dct(log(z);%将上述对数频谱,经过离散余弦变换(DCT)变换到倒谱域,即可得到 Mel 倒谱系

12、数(MFCC 参数)3.2.23.2.2 函数函数 disteudisteu-计算测试者和模板码本的距离function d=disteu(x,y)M,N=size(x);%音频 x 赋值给【M,N】M2,P=size(y);%音频 y 赋值给【M2,P】if(M=M2)error(不匹配!)%两个音频时间长度不相等endd=zeros(N,P);if(N P)%在两个音频时间长度相等的前提下 copies=zeros(1,P);for n=1:N d(n,:)=sum(x(:,n+copies)-y).2,1);endelse copies=zeros(1,N);for p=1:P d(:,

13、p)=sum(x-y(:,p+copies).2,1);end%成对欧氏距离的两个矩阵的列之间的距离endd=d.0.5;3.2.33.2.3 函数函数 vqlbgvqlbg-该函数利用矢量量化提取了音频的 vq 码本function r=vqlbg(d,k)e=.01;r=mean(d,2);dpr=10000;for i=1:log2(k)r=r*(1+e),r*(1-e);while(1=1)z=disteu(d,r);m,ind=min(z,2);t=0;for j=1:2i r(:,j)=mean(d(:,find(ind=j),2);x=disteu(d(:,find(ind=j)

14、,r(:,j);for q=1:length(x)t=t+x(q);end end if(dpr-t)/t)e)break;else dpr=t;end endend3.2.43.2.4 函数函数 testtestfunction finalmsg=test(testdir,n,code)for k=1:n%read test sound file of each speaker file=sprintf(%ss%d.wav,testdir,k);s,fs=wavread(file);v=mfcc(s,fs);%得到测试人语音的 mel 倒谱系数distmin=4;%阈值设置处%就判断一次,因

15、为模板里面只有一个文件 d=disteu(v,code1);%计算得到模板和要判断的声音之间的“距离”dist=sum(min(d,2)/size(d,1);%变换得到一个距离的量%测试阈值数量级 msgc=sprintf(与模板语音信号的差值为:%10f,dist);disp(msgc);%此人匹配 if dist distmin msg=sprintf(第%d 位说话者与模板语音信号不匹配,不符合要求!n,k);finalmsg=此位说话者不符合要求!;%界面显示语句,可随意设定 disp(msg);endend3.2.53.2.5 函数函数 testDBtestDB这个函数实际上是对数据

16、库一个查询,根据测试者的声音,找相应的文件,并且给出是谁的提示function testmsg=testDB(testdir,n,code)nameList=1,2,3,4,5,6,7,8,9;%这个是我们要识别的9个数for k=1:n%数据库中每一个说话人的特征 file=sprintf(%ss%d.wav,testdir,k);%找出文件的路径 s,fs=wavread(file);v=mfcc(s,fs);%对找到的文件取mfcc变换 distmin=inf;k1=0;for l=1:length(code)d=disteu(v,codel);dist=sum(min(d,2)/siz

17、e(d,1);if dist distmin distmin=dist;%这里和test函数里面一样但多了一个具体语者的识别 k1=l;end end msg=nameListk1 msgbox(msg);end3.2.63.2.6 函数函数 traintrain-该函数就是对音频进行训练,也就是提取特征参数function code=train(traindir,n)k=16;%number of centroids requiredfor i=1:n%对数据库中的代码形成码本 file=sprintf(%ss%d.wav,traindir,i);disp(file);s,fs=wavrea

18、d(file);v=mfcc(s,fs);%计算 MFCCs 提取特征特征,返回值是Mel 倒谱系数,是一个 log 的 dct 得到的 codei=vqlbg(v,k);%训练 VQ 码本通过矢量量化,得到原说话人的 VQ 码本end四、四、演示分析演示分析我们的功能分为两部分:对已经保存的 9 个数字的语音进行辨别和实时的判断说话人说的是否为一个数.在前者的实验过程中,先把 9 个数字的声音保存成 wav 的格式,放在一个文件夹中,作为一个检测的数据库.然后对检测者实行识别,系统给出提示是哪个数字.在第二个功能中,实时的录取一段说话人的声音作为模板,提取 mfcc 特征参数,随后紧接着进行

19、遇着识别,也就是让其他人再说相同的话,看是否是原说话者.实验过程及具体功能如下实验过程及具体功能如下:先打开 Matlab 使 Current Directory 为录音及程序所所在的文件夹再打开文件“enter.m”,点run 运行,打开enter 界面,点击“进入”按钮进入系统。(注:文件包未封装完毕,目前只能通过此方式打开运行。)(如下图 figure1)figure1 figure1在对数据库中已有的语者进行识别模块在对数据库中已有的语者进行识别模块:选择载入语音库语音个数;点击语音库录制模版进行已存语音信息的提取;点击录音-test 进行现场录音;点击语者判断进行判断数字,并显示出来。在实时语者识别模块在实时语者识别模块:点击实时录制模板上的“录音-train”按钮,是把新语者的声音以 wav 格式存放在”实时模板”文件夹中,接着点击“实时录制模板”,把新的模板提取特征值。随后点击实时语者识别模板上的“录音-train”按钮,是把语者的声音以 wav 格式存放在”测试”文件夹中,再点击“实时语者识别”,在对测得的声音提取特征值的同时,和实时模板进行比对,然后得出是否是实时模板中的语者。另外面板上的播放按钮都是播放相对应左边录取的声音。想要测量多次,只要接着录音,自动保存,然后程序比对音频就可以。退出只要点击菜单 File/Exit,退出程序。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 应用文书 > 工作报告

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁