《2022年语音识别系统实验报告 .pdf》由会员分享,可在线阅读,更多相关《2022年语音识别系统实验报告 .pdf(17页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、语音识别系统实验报告专业班级:信息安全学号:姓名:名师资料总结-精品资料欢迎下载-名师精心整理-第 1 页,共 17 页 -目录一、设计任务及要求,1二、语音识别的简单介绍2.1 语者识别的概念,2 2.2 特征参数的提取,3 2.3用矢量量化聚类法生成码本,3 2.4VQ 的说话人识别,4 三、算法程序分析3.1 函数关系,.4 3.2代码说明,5 3.2.1 函数 mfcc,5 3.2.2函数 disteu,5 3.2.3函数 vqlbg,.6 3.2.4 函数 test,6 3.2.5 函数 testDB,7 3.2.6 函数 train,8 3.2.7函数 melfb,8四、演示分析,
2、.9五、心得体会,.11 附:GUI程序代码,12名师资料总结-精品资料欢迎下载-名师精心整理-第 2 页,共 17 页 -一、设计任务及要求实现语音识别功能。二、语音识别的简单介绍基于 VQ的说话人识别系统,矢量量化起着双重作用。在训练阶段,把每一个说话者所提取的特征参数进行分类,产生不同码字所组成的码本。在识别(匹配)阶段,我们用 VQ方法计算平均失真测度(本系统在计算距离d 时,采用欧氏距离测度),从而判断说话人是谁。语音识别系统结构框图如图1 所示。图 1 语音识别系统结构框图2.1 语者识别的概念语者识别就是根据说话人的语音信号来判别说话人的身份。语音是人的自然属性之一,由于说话人发
3、音器官的生理差异以及后天形成的行为差异,每个人的语音都带有强烈的个人色彩,这就使得通过分析语音信号来识别说话人成为可能。用语音来鉴别说话人的身份有着许多独特的优点,如语音是人的固有的特征,不会丢失或遗忘;语音信号的采集方便,系统设备成本低;利用电话网络还可实现远程客户服务等。因此,近几年来,说话人识别越来越多的受到人们的重视。与其他生物识别技术如指纹识别、手形识别等相比较,说话人识别不仅使用方便,而且属于非接触性,容易被用户接受,并且在已有的各种生物特征识别技术中,是唯一可以用作远程验证的识别技术。因此,说话人识别的应用前景非常广泛:今天,说话人识别技术已经关系到多学科的研究领域,不同领域中的
4、进步都对说话人识别的发展做出了贡献。说话人识别技术是集声学、语言学、计算机、信息处理和人工智能等诸多领域的一项综合技术,应用需求将十分广阔。在吃力语音名师资料总结-精品资料欢迎下载-名师精心整理-第 3 页,共 17 页 -信号的时候如何提取信号中关键的成分尤为重要。语音信号的特征参数的好坏直接导致了辨别的准确性。2.2 特征参数的提取对于特征参数的选取,我们使用mfcc 的方法来提取。MFCC 参数是基于人的听觉特性利用人听觉的屏蔽效应,在Mel 标度频率域提取出来的倒谱特征参数。MFCC 参数的提取过程如下:1.对输入的语音信号进行分帧、加窗,然后作离散傅立叶变换,获得频谱分布信息。设语音
5、信号的 DFT为:10,)()(112NkenxkXNnNnkja(1)其中式中 x(n)为输入的语音信号,N表示傅立叶变换的点数。2.再求频谱幅度的平方,得到能量谱。3.将能量谱通过一组Mel尺度的三角形滤波器组。我们定义一个有M个滤波器的滤波器组(滤波器的个数和临界带的个数相近),采用的滤波器为三角滤波器,中心频率为f(m),m=1,2,3,,M本系统取 M=100。4.计算每个滤波器组输出的对数能量。N 12amk 1S(m)ln(|(k)|H(k),0mM1X(2)其中mH(k)为三角滤波器的频率响应。5.经过离散弦变换(DCT)得到 MFCC 系数。10C(n)()cos(0.5/)
6、,(3)01MmSmn mmnN MFCC 系数个数通常取 2030,常常不用 0 阶倒谱系数,因为它反映的是频谱能量,故在一般识别系统中,将称为能量系数,并不作为倒谱系数,本系统选取20 阶倒谱系数。2.3 用矢量量化聚类法生成码本我们将每个待识的说话人看作是一个信源,用一个码本来表征。码本是从该说话人的训练序列中提取的MFCC 特征矢量聚类而生成。只要训练的序列足够长,可认为这个码本有效地包含了说话人的个人特征,而与讲话的内容无关。本系统采用基于分裂的LBG的算法设计 VQ码本,(1,2,)kXkK 为训练序列,B为码本。具体实现过程如下:名师资料总结-精品资料欢迎下载-名师精心整理-第
7、4 页,共 17 页 -1.取提取出来的所有帧的特征矢量的型心(均值)作为第一个码字矢量 B1。2.将当前的码本 Bm 根据以下规则分裂,形成 2m 个码字。)1()1(mmmmBBBB(4)其中 m从 1 变化到当前的码本的码字数,是分裂时的参数,本文=0.01。3.根据得到的码本把所有的训练序列(特征矢量)进行分类,然后按照下面两个公式计算训练矢量量化失真量的总和nD以及相对失真(n为迭代次数,初始n=0,1D=,B为当前的码书),若相对失真小于某一阈值,迭代结束,当前的码书就是设计好的 2m 个码字的码书,转。否则,转下一步。量化失真量和:()1min(,)KnkkDd XB(5)相对失
8、真:(1)|nnnDDD(6)4.重新计算各个区域的新型心,得到新的码书,转3。5.重复,和步,直到形成有M个码字的码书(M 是所要求的码字数),其中 D0=10000。2.4 VQ 的说话人识别设是未知的说话人的特征矢量1,TXX,共有 T帧是训练阶段形成的码书,表示码书第 m个码字,每一个码书有 M个码字。再计算测试者的平均量化失真D,并设置一个阈值,若D小于此阈值,则是原训练者,反之则认为不是原训练者。11min/1),(jMmmjTDBxd(7)三、算法程序分析在具体的实现过程当中,采用了 matlab 软件来帮助完成这个项目。在 matlab中主要由采集,分析,特征提取,比对几个重要
9、部分。以下为在实际的操作中,具体用到得函数关系和作用一一列举在下面。3.1 函数关系主要有两类函数文件Train.m 和 Test.m 在 Train.m 调用 Vqlbg.m 获取训练录音的 vq 码本,而 Vqlbg.m 调用 mfcc.m获取单个录音的 mel 倒谱系数,接着 mfcc.m 调用 Melfb.m-将能量谱通过一组Mel 尺度的三角形滤波器组。在 Test.m 函数文件中调用 Disteu.m 计算训练录音(提供vq 码本)与测试录音(提供 mfcc)mel 倒谱系数的距离,即判断两声音是否为同一录音者提供。名师资料总结-精品资料欢迎下载-名师精心整理-第 5 页,共 17
10、 页 -Disteu.m 调用 mfcc.m 获取单个录音的mel 倒谱系数。mfcc.m 调用 Melfb.m-将能量谱通过一组Mel 尺度的三角形滤波器组。3.2 具体代码说明3.2.1 函数 mffc:function r=mfcc(s,fs)-m=100;n=256;l=length(s);nbFrame=floor(l-n)/m)+1;%沿-方向取整for i=1:n for j=1:nbFrame M(i,j)=s(j-1)*m)+i);%对矩阵 M赋值end end h=hamming(n);%加 hamming 窗,以增加音框左端和右端的连续性M2=diag(h)*M;for
11、i=1:nbFrame frame(:,i)=fft(M2(:,i);%对信号进行快速傅里叶变换FFT end t=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 倒谱系数(MFCC 参数)3.2.2 函数 disteu-计算测试者和模板码本的距离function d=disteu(x,y)M,N=size(x);%音频
12、 x 赋值给【M,N】M2,P=size(y);%音频 y 赋值给【M2,P】if(M=M2)error(不匹配!)%两个音频时间长度不相等end d=zeros(N,P);if(N P)%在两个音频时间长度相等的前提下 copies=zeros(1,P);for n=1:N d(n,:)=sum(x(:,n+copies)-y).2,1);end else 名师资料总结-精品资料欢迎下载-名师精心整理-第 6 页,共 17 页 -copies=zeros(1,N);for p=1:P d(:,p)=sum(x-y(:,p+copies).2,1);end%成对欧氏距离的两个矩阵的列之间的距离
13、end d=d.0.5;3.2.3 函数 vqlbg-该函数利用矢量量化提取了音频的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),r(:,j);for q=1:length(x)t=t+x(q);end end if(dpr-t)/t)e)break;
14、else dpr=t;end end end 3.2.4 函数 test function 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;%阈值设置处%就判断一次,因为模板里面只有一个文件 d=disteu(v,code1);%计算得到模板和要判断的声音之间的“距离”名师资料总结-精品资料欢迎下载-名师精
15、心整理-第 7 页,共 17 页 -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);end end 3.2.5 函数 testDB 这个函数实际上是对数据库一个查询,根据测试者的声音,找相应的文件,并且给出是谁的提示function test
16、msg=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)/size(d,1);if dist distmin 名师资料总结-精品资料欢迎下载-名师精
17、心整理-第 8 页,共 17 页 -distmin=dist;%这里和 test 函数里面一样但多了一个具体语者的识别 k1=l;end end msg=nameListk1 msgbox(msg);end 3.2.6 函数 train-该函数就是对音频进行训练,也就是提取特征参数function code=train(traindir,n)k=16;%number of centroids required for i=1:n%对数据库中的代码形成码本 file=sprintf(%ss%d.wav,traindir,i);disp(file);s,fs=wavread(file);v=mfc
18、c(s,fs);%计算 MFCCs 提取特征特征,返回值是Mel 倒谱系数,是一个log 的 dct 得到的 codei=vqlbg(v,k);%训练 VQ码本通过矢量量化,得到原说话人的 VQ码本end 3.2.7 函数 melfb-确定矩阵的滤波器function m=melfb(p,n,fs)f0=700/fs;fn2=floor(n/2);lr=log(1+0.5/f0)/(p+1);%convert to fft bin numbers with 0 for DC term bl=n*(f0*(exp(0 1 p p+1*lr)-1);直接转换为 FFT的数字模型b1=floor(b
19、l(1)+1;b2=ceil(bl(2);b3=floor(bl(3);b4=min(fn2,ceil(bl(4)-1;pf=log(1+(b1:b4)/n/f0)/lr;fp=floor(pf);pm=pf-fp;r=fp(b2:b4)1+fp(1:b3);c=b2:b4 1:b3+1;v=2*1-pm(b2:b4)pm(1:b3);名师资料总结-精品资料欢迎下载-名师精心整理-第 9 页,共 17 页 -m=sparse(r,c,v,p,1+fn2);四、演示分析我们的功能分为两部分:对已经保存的9 个数字的语音进行辨别和实时的判断说话人说的是否为一个数.在前者的实验过程中,先把 9 个数
20、字的声音保存成 wav的格式,放在一个文件夹中,作为一个检测的数据库.然后对检测者实行识别,系统给出提示是哪个数字.在第二个功能中,实时的录取一段说话人的声音作为模板,提取 mfcc 特征参数,随后紧接着进行遇着识别,也就是让其他人再说相同的话,看是否是原说话者.实验过程及具体功能如下:先打开 Matlab 使 Current Directory为录音及程序所所在的文件夹再打开文件“enter.m”,点 run 运行,打开 enter 界面,点击“进入”按钮进入系统。(注:文件包未封装完毕,目前只能通过此方式打开运行。)(如下图 figure1)figure1 名师资料总结-精品资料欢迎下载-
21、名师精心整理-第 10 页,共 17 页 -在对数据库中已有的语者进行识别模块:选择载入语音库语音个数;点击语音库录制模版进行已存语音信息的提取;点击录音-test进行现场录音;点击语者判断进行判断数字,并显示出来。在实时语者识别模块:点击实时录制模板上的“录音-train”按钮,是把新语者的声音以wav格式存放在”实时模板”文件夹中,接着点击“实时录制模板”,把新的模板提取特征值。随后点击实时语者识别模板上的“录音-train”按钮,是把语者的声音以 wav格式存放在”测试”文件夹中,再点击“实时语者识别”,在对测得的声音提取特征值的同时,和实时模板进行比对,然后得出是否是实时模板中的语者。
22、另外面板上的播放按钮都是播放相对应左边录取的声音。想要测量多次,只要接着录音,自动保存,然后程序比对音频就可以。退出只要点击菜单File/Exit,退出程序。名师资料总结-精品资料欢迎下载-名师精心整理-第 11 页,共 17 页 -程序运行截图:(fig.2)运行后系统界面五、心得体会实验表明,该系统能较好地进行语音的识别,同时,基于矢量量化技术()的语音识别系统具有分类准确,存储数据少,实时响应速度快等综合性能好的特点矢量量化技术在语音识别的应用方面,尤其是在孤立词语音识别系统中得到很好的应用,特别是有限状态矢量量化技术,对于语音识别更为有效。通过这次课程设计,我对语音识别有了更加形象化的
23、认识,也强化了MATLAB的应用,对将来的学习奠定了基础。名师资料总结-精品资料欢迎下载-名师精心整理-第 12 页,共 17 页 -附:GUI程序代码function pushbutton1_Callback(hObject,eventdata,handles)%hObject handle to pushbutton1(see GCBO)%eventdata reserved-to be defined in a future version of MATLAB%handles structure with handles and user data(see GUIDATA)Channel
24、_Str=get(handles.popupmenu3,String);Channel_Number=str2double(Channel_Strget(handles.popupmenu3,Value);global moodle;moodle=train(模版,Channel_Number)%?y?DD?%-Executes on button press in pushbutton2.function pushbutton2_Callback(hObject,eventdata,handles)%hObject handle to pushbutton2(see GCBO)%eventd
25、ata reserved-to be defined in a future version of MATLAB%handglobal data1;global moodle;test(测试,1,moodle)%?2a%-function Open_Callback(hObject,eventdata,handles)%hObject handle to Open(see GCBO)%eventdata reserved-to be defined in a future version of MATLAB%handles structure with handles and user dat
26、a(see GUIDATA)filename,pathname=uigetfile()file=get(handles.edits,filename,pathname)y,f,b=wavread(file);%-function Exit_Callback(hObject,eventdata,handles)%hObject handle to Exit(see GCBO)%eventdata reserved-to be defined in a future version of MATLAB%handles structure with handles and user data(see
27、 GUIDATA)exit%-function About_Callback(hObject,eventdata,handles)%hObject handle to About(see GCBO)%eventdata reserved-to be defined in a future version of MATLAB%handles structure with handles and user data(see GUIDATA)H=语者识别 名师资料总结-精品资料欢迎下载-名师精心整理-第 13 页,共 17 页 -helpdlg(H,help text)%-function File
28、_Callback(hObject,eventdata,handles)%hObject handle to File(see GCBO)%eventdata reserved-to be defined in a future version of MATLAB%handles structure with handles and user data(see GUIDATA)%-function Edit_Callback(hObject,eventdata,handles)%hObject handle to Edit(see GCBO)%eventdata reserved-to be
29、defined in a future version of MATLAB%handles structure with handles and user data(see GUIDATA)%-function Help_Callback(hObject,eventdata,handles)%hObject handle to Help(see GCBO)%eventdata reserved-to be defined in a future version of MATLAB%handles structure with handles and user data(see GUIDATA)
30、%-Executes on button press in pushbutton7.function pushbutton7_Callback(hObject,eventdata,handles)%hObject handle to pushbutton7(see GCBO)%eventdata reserved-to be defined in a future version of MATLAB%handles structure with handles and user data(see GUIDATA)msg=请速度录音?msgbox(msg)clearglobal data1;%g
31、lobal dataDN1;AI=analoginput(winsound);chan=addchannel(AI,1:2);duration=3;%1 second acquisitionset(AI,SampleRate,8000)ActualRate=get(AI,SampleRate);set(AI,SamplesPerTrigger,duration*ActualRate)set(AI,TriggerType,Manual)blocksize=get(AI,SamplesPerTrigger);Fs=ActualRate;start(AI)trigger(AI)data1,time,
32、abstime,events=getdata(AI);fname=sprintf(E:Matlab语音识别系统实时模版 s1.wav)%dataDN1=wden(data1,heursure,s,one,5,sym8);denoisewavwrite(data1,fname)名师资料总结-精品资料欢迎下载-名师精心整理-第 14 页,共 17 页 -msgbox(fname)%-Executes on button press in pushbutton8.function pushbutton8_Callback(hObject,eventdata,handles)%hObject hand
33、le to pushbutton8(see GCBO)%eventdata reserved-to be defined in a future version of MATLAB%handles structure with handles and user data(see GUIDATA)global data1;%global dataDN1;sound(data1)%sound(dataDN1)axes(handles.axes1)%set to plot at axes1 plot(data1);%plot(dataDN1);xlabel(训练采样序列 ),ylabel(信号幅 )
34、;%xlabel(?2?D D),ylabel(sym8D?2?o?D?o?);grid on;clear%-Executes on button press in pushbutton9.function pushbutton9_Callback(hObject,eventdata,handles)%hObject handle to pushbutton9(see GCBO)%eventdata reserved-to be defined in a future version of MATLAB%handles structure with handles and user data(
35、see GUIDATA)msg=请速度录音?msgbox(msg)clearglobal data2;%global dataDN2;AI=analoginput(winsound);chan=addchannel(AI,1:2);duration=3;%1 second acquisitionset(AI,SampleRate,8000)ActualRate=get(AI,SampleRate);set(AI,SamplesPerTrigger,duration*ActualRate)set(AI,TriggerType,Manual)blocksize=get(AI,SamplesPerT
36、rigger);Fs=ActualRate;start(AI)trigger(AI)data2,time,abstime,events=getdata(AI);fname=sprintf(E:Matlab语音识别系统测试 s1.wav)%dataDN1=wden(data1,heursure,s,one,5,sym8);denoisewavwrite(data2,fname)msgbox(fname)%-Executes on button press in pushbutton10.名师资料总结-精品资料欢迎下载-名师精心整理-第 15 页,共 17 页 -function pushbutt
37、on10_Callback(hObject,eventdata,handles)%hObject handle to pushbutton10(see GCBO)%eventdata reserved-to be defined in a future version of MATLAB%handles structure with handles and user data(see GUIDATA)global data2;%global dataDN2;sound(data2)%sound(dataDN2)axes(handles.axes2)%set to plot at axes1 p
38、lot(data2);%plot(dataDN2);xlabel(测试采样序列 ),ylabel(信号幅 );%xlabel(2a?2?D D),ylabel(sym8D?2?o?D?o?);%grid on;clear%-Executes on button press in pushbutton11.function pushbutton11_Callback(hObject,eventdata,handles)%hObject handle to pushbutton11(see GCBO)%eventdata reserved-to be defined in a future ver
39、sion of MATLAB%handles structure with handles and user data(see GUIDATA)global moodle;testDB(测试,1,moodle)%-Executes on button press in pushbutton12.function pushbutton12_Callback(hObject,eventdata,handles)%hObject handle to pushbutton12(see GCBO)%eventdata reserved-to be defined in a future version
40、of MATLAB%handles structure with handles and user data(see GUIDATA)global moodle;moodle=train(实时模板,1)%-Executes on selection change in popupmenu3.function popupmenu3_Callback(hObject,eventdata,handles)%hObject handle to popupmenu3(see GCBO)%eventdata reserved-to be defined in a future version of MAT
41、LAB%handles structure with handles and user data(see GUIDATA)%Hints:contents=get(hObject,String)returns popupmenu3 contents as cell array%contentsget(hObject,Value)returns selected item from popupmenu3str=get(handles.popupmenu3,String);val=str2num(strget(handles.popupmenu3,Value);switch valcase 1cas
42、e 2case 3名师资料总结-精品资料欢迎下载-名师精心整理-第 16 页,共 17 页 -case 4case 5case 6case 7case 8case 9 end%-Executes during object creation,after setting all properties.function popupmenu3_CreateFcn(hObject,eventdata,handles)%hObject handle to popupmenu3(see GCBO)%eventdata reserved-to be defined in a future version o
43、f MATLAB%handles empty-handles not created until after all CreateFcns called%Hint:popupmenu controls usually have a white background on Windows.%See ISPC and COMPUTER.if ispc&isequal(get(hObject,BackgroundColor),get(0,defaultUicontrolBackgroundColor)set(hObject,BackgroundColor,white);end%-Executes o
44、n button press in pushbutton9.function pushbutton13_Callback(hObject,eventdata,handles)%hObject handle to pushbutton9(see GCBO)%eventdata reserved-to be defined in a future version of MATLAB%handles structure with handles and user data(see GUIDATA)%-Executes on button press in pushbutton10.function
45、pushbutton14_Callback(hObject,eventdata,handles)%hObject handle to pushbutton10(see GCBO)%eventdata reserved-to be defined in a future version of MATLAB%handles structure with handles and user data(see GUIDATA)%-Executes during object creation,after setting all properties.%function axes8_CreateFcn(hObject,eventdata,handles)%hObject handle to axes8(see GCBO)%eventdata reserved-to be defined in a future version of MATLAB%handles empty-handles not created until after all CreateFcns called%Hint:place code in OpeningFcn to populate axes8名师资料总结-精品资料欢迎下载-名师精心整理-第 17 页,共 17 页 -