Matlab基于VQ的語者識(shí)別系統(tǒng)(含所有代碼)3_第1頁
Matlab基于VQ的語者識(shí)別系統(tǒng)(含所有代碼)3_第2頁
Matlab基于VQ的語者識(shí)別系統(tǒng)(含所有代碼)3_第3頁
Matlab基于VQ的語者識(shí)別系統(tǒng)(含所有代碼)3_第4頁
Matlab基于VQ的語者識(shí)別系統(tǒng)(含所有代碼)3_第5頁
已閱讀5頁,還剩16頁未讀 繼續(xù)免費(fèi)閱讀

付費(fèi)下載

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

Matlab基于VQ的語者識(shí)別系統(tǒng)(含所有代碼)Matlab基于VQ的語者識(shí)別系統(tǒng)(含所有代碼)/Matlab基于VQ的語者識(shí)別系統(tǒng)(含所有代碼)Matlab基于VQ的語者識(shí)別系統(tǒng)(含所有代碼)SummaryAbstract:語者識(shí)別即為判斷說話的人是不是他的使用者。本組用基于VQ的語者識(shí)別系統(tǒng)系統(tǒng)模型,通過提取Mel倒譜系數(shù),制作模板碼本與測(cè)試者相應(yīng)參數(shù)進(jìn)行對(duì)比,根據(jù)閾值判斷,差別最小的則認(rèn)為匹配原訓(xùn)練模板,即測(cè)試者與訓(xùn)練者為同一人,否則認(rèn)為不是同一人。通過此過程實(shí)現(xiàn)語者識(shí)別功能。在功能上分為兩大部分,語者判定以與實(shí)施辨別。ContentsIntroduction……………………..31.1語者識(shí)別的概念…………….31.2特征參數(shù)的提取…………….41.3用矢量量化聚類法生成碼本……………….41.4VQ的說話人識(shí)別………52.TheProgram…………………….62.1函數(shù)關(guān)系…………………….6 2.2代碼說明…………………….62.2.1函數(shù)mfcc……………….62.2.2函數(shù)disteu……………...62.2.3函數(shù)vqlbg……………72.2.4函數(shù)test…………………82.2.5函數(shù)testDB……………...82.2.6函數(shù)train……………….92.2.7函數(shù)melfb……………….93.Results&Discussion…………….104.FurtherWork……………………..121.Introduction關(guān)于語者識(shí)別:在生物辨識(shí)技術(shù)中,語者辨識(shí)是利用人類最自然的口語表達(dá)作為辨識(shí)身分的依據(jù)。語者辨識(shí)一般分為語者識(shí)別與語者確認(rèn),前者是要辨識(shí)說話者是誰,后者則是判斷說話的人是不是他所宣稱的使用者,本項(xiàng)目的研究主題是后者。語者確認(rèn)常被視為一個(gè)假說測(cè)定問題,利用似然比例測(cè)試方法來解:空假說表示說話者為真正的使用者,替代假說表示其為冒充者。我們可以收集特定使用者的語音數(shù)據(jù)來訓(xùn)練空假說模型,但替代假說牽涉未知的冒充者,較難模型化。針對(duì)此點(diǎn),傳統(tǒng)的作法是收集很多人的語音,訓(xùn)練一個(gè)通用背景模型,或是幾位與目標(biāo)使用者聲音相似的人的語音,訓(xùn)練數(shù)個(gè)背景模型,再利用取極大值、取極小值、算數(shù)平均或幾何平均等方法來結(jié)合個(gè)別的模型分?jǐn)?shù)?;赩Q的語者識(shí)別系統(tǒng)系統(tǒng)模型基于VQ的說話人識(shí)別系統(tǒng),矢量量化起著雙重作用。在訓(xùn)練階段,把每一個(gè)說話者所提取的特征參數(shù)進(jìn)行分類,產(chǎn)生不同碼字所組成的碼本。在識(shí)別(匹配)階段,我們用VQ方法計(jì)算平均失真測(cè)度(本系統(tǒng)在計(jì)算距離d時(shí),采用歐氏距離測(cè)度),從而判斷說話人是誰。語音識(shí)別系統(tǒng)結(jié)構(gòu)框圖如圖1所示。圖1語音識(shí)別系統(tǒng)結(jié)構(gòu)框圖1.1語者識(shí)別的概念語者識(shí)別就是根據(jù)說話人的語音信號(hào)來判別說話人的身份。語音是人的自然屬性之一,由于說話人發(fā)音器官的生理差異以與后天形成的行為差異,每個(gè)人的語音都帶有強(qiáng)烈的個(gè)人色彩,這就使得通過分析語音信號(hào)來識(shí)別說話人成為可能。用語音來鑒別說話人的身份有著許多獨(dú)特的優(yōu)點(diǎn),如語音是人的固有的特征,不會(huì)丟失或遺忘;語音信號(hào)的采集方便,系統(tǒng)設(shè)備成本低;利用電話網(wǎng)絡(luò)還可實(shí)現(xiàn)遠(yuǎn)程客戶服務(wù)等。因此,近幾年來,說話人識(shí)別越來越多的受到人們的重視。與其他生物識(shí)別技術(shù)如指紋識(shí)別、手形識(shí)別等相比較,說話人識(shí)別不僅使用方便,而且屬于非接觸性,容易被用戶接受,并且在已有的各種生物特征識(shí)別技術(shù)中,是唯一可以用作遠(yuǎn)程驗(yàn)證的識(shí)別技術(shù)。因此,說話人識(shí)別的應(yīng)用前景非常廣泛:今天,說話人識(shí)別技術(shù)已經(jīng)關(guān)系到多學(xué)科的研究領(lǐng)域,不同領(lǐng)域中的進(jìn)步都對(duì)說話人識(shí)別的發(fā)展做出了貢獻(xiàn)。說話人識(shí)別技術(shù)是集聲學(xué)、語言學(xué)、計(jì)算機(jī)、信息處理和人工智能等諸多領(lǐng)域的一項(xiàng)綜合技術(shù),應(yīng)用需求將十分廣闊。在吃力語音信號(hào)的時(shí)候如何提取信號(hào)中關(guān)鍵的成分尤為重要。語音信號(hào)的特征參數(shù)的好壞直接導(dǎo)致了辨別的準(zhǔn)確性。1.2特征參數(shù)的提取對(duì)于特征參數(shù)的選取,我們使用mfcc的方法來提取。MFCC參數(shù)是基于人的聽覺特性利用人聽覺的屏蔽效應(yīng),在Mel標(biāo)度頻率域提取出來的倒譜特征參數(shù)。MFCC參數(shù)的提取過程如下:1.對(duì)輸入的語音信號(hào)進(jìn)行分幀、加窗,然后作離散傅立葉變換,獲得頻譜分布信息。設(shè)語音信號(hào)的DFT為:(1)其中式中x(n)為輸入的語音信號(hào),N表示傅立葉變換的點(diǎn)數(shù)。2.再求頻譜幅度的平方,得到能量譜。3.將能量譜通過一組Mel尺度的三角形濾波器組。我們定義一個(gè)有M個(gè)濾波器的濾波器組(濾波器的個(gè)數(shù)和臨界帶的個(gè)數(shù)相近),采用的濾波器為三角濾波器,中心頻率為f(m),m=1,2,3,···,M本系統(tǒng)取M=100。4.計(jì)算每個(gè)濾波器組輸出的對(duì)數(shù)能量。(2)其中為三角濾波器的頻率響應(yīng)。5.經(jīng)過離散弦變換(DCT)得到MFCC系數(shù)。MFCC系數(shù)個(gè)數(shù)通常取20—30,常常不用0階倒譜系數(shù),因?yàn)樗从车氖穷l譜能量,故在一般識(shí)別系統(tǒng)中,將稱為能量系數(shù),并不作為倒譜系數(shù),本系統(tǒng)選取20階倒譜系數(shù)。1.3用矢量量化聚類法生成碼本我們將每個(gè)待識(shí)的說話人看作是一個(gè)信源,用一個(gè)碼本來表征。碼本是從該說話人的訓(xùn)練序列中提取的MFCC特征矢量聚類而生成。只要訓(xùn)練的序列足夠長(zhǎng),可認(rèn)為這個(gè)碼本有效地包含了說話人的個(gè)人特征,而與講話的內(nèi)容無關(guān)。本系統(tǒng)采用基于分裂的LBG的算法設(shè)計(jì)VQ碼本,為訓(xùn)練序列,B為碼本。具體實(shí)現(xiàn)過程如下:1.取提取出來的所有幀的特征矢量的型心(均值)作為第一個(gè)碼字矢量B1。2.將當(dāng)前的碼本Bm根據(jù)以下規(guī)則分裂,形成2m個(gè)碼字。(4)其中m從1變化到當(dāng)前的碼本的碼字?jǐn)?shù),ε是分裂時(shí)的參數(shù),本文ε=0.01。3.根據(jù)得到的碼本把所有的訓(xùn)練序列(特征矢量)進(jìn)行分類,然后按照下面兩個(gè)公式計(jì)算訓(xùn)練矢量量化失真量的總和以與相對(duì)失真(n為迭代次數(shù),初始n=0,=∞,B為當(dāng)前的碼書),若相對(duì)失真小于某一閾值ε,迭代結(jié)束,當(dāng)前的碼書就是設(shè)計(jì)好的2m個(gè)碼字的碼書,轉(zhuǎn)5。否則,轉(zhuǎn)下一步。量化失真量和:(5)相對(duì)失真:(6)4.重新計(jì)算各個(gè)區(qū)域的新型心,得到新的碼書,轉(zhuǎn)3。5.重復(fù)2,3和4步,直到形成有M個(gè)碼字的碼書(M是所要求的碼字?jǐn)?shù)),其中D0=10000。1.4VQ的說話人識(shí)別設(shè)是未知的說話人的特征矢量,共有T幀是訓(xùn)練階段形成的碼書,表示碼書第m個(gè)碼字,每一個(gè)碼書有M個(gè)碼字。再計(jì)算測(cè)試者的平均量化失真D,并設(shè)置一個(gè)閾值,若D小于此閾值,則是原訓(xùn)練者,反之則認(rèn)為不是原訓(xùn)練者。(7)2.TheProgram在具體的實(shí)現(xiàn)過程當(dāng)中,采用了matlab軟件來幫助完成這個(gè)項(xiàng)目。在matlab中主要由采集,分析,特征提取,比對(duì)幾個(gè)重要部分。以下為在實(shí)際的操作中,具體用到得函數(shù)關(guān)系和作用一一列舉在下面。2.1函數(shù)關(guān)系主要有兩類函數(shù)文件Train.m和Test.m在Train.m調(diào)用Vqlbg.m獲取訓(xùn)練錄音的vq碼本,而Vqlbg.m調(diào)用mfcc.m獲取單個(gè)錄音的mel倒譜系數(shù),接著mfcc.m調(diào)用Melfb.m將能量譜通過一組Mel尺度的三角形濾波器組。在Test.m函數(shù)文件中調(diào)用Disteu.m計(jì)算訓(xùn)練錄音(提供vq碼本)與測(cè)試錄音(提供mfcc)mel倒譜系數(shù)的距離,即判斷兩聲音是否為同一錄音者提供。Disteu.m調(diào)用mfcc.m獲取單個(gè)錄音的mel倒譜系數(shù)。mfcc.m調(diào)用Melfb.m將能量譜通過一組Mel尺度的三角形濾波器組。2.2具體代碼說明2.2.1函數(shù)mffc:functionr=mfcc(s,fs)m=100;n=256;l=length(s);nbFrame=floor((l-n)/m)+1;%沿-∞方向取整fori=1:nforj=1:nbFrameM(i,j)=s(((j-1)*m)+i);%對(duì)矩陣M賦值endendh=hamming(n);%加hamming窗,以增加音框左端和右端的連續(xù)性M2=diag(h)*M;fori=1:nbFrameframe(:,i)=fft(M2(:,i));%對(duì)信號(hào)進(jìn)行快速傅里葉變換FFTendt=n/2;tmax=l/fs;m=melfb(20,n,fs);%將上述線性頻譜通過Mel頻率濾波器組得到Mel頻譜,下面在將其轉(zhuǎn)化成對(duì)數(shù)頻譜n2=1+floor(n/2);z=m*abs(frame(1:n2,:)).^2;r=dct(log(z));%將上述對(duì)數(shù)頻譜,經(jīng)過離散余弦變換(DCT)變換到倒譜域,即可得到Mel倒譜系數(shù)(MFCC參數(shù))2.2.2函數(shù)disteu計(jì)算測(cè)試者和模板碼本的距離functiond=disteu(x,y)[M,N]=size(x);%音頻x賦值給【M,N】[M2,P]=size(y);%音頻y賦值給【M2,P】if(M~=M2)error('不匹配!')%兩個(gè)音頻時(shí)間長(zhǎng)度不相等endd=zeros(N,P);if(N<P)%在兩個(gè)音頻時(shí)間長(zhǎng)度相等的前提下copies=zeros(1,P);forn=1:Nd(n,:)=sum((x(:,n+copies)-y).^2,1);endelsecopies=zeros(1,N);forp=1:Pd(:,p)=sum((x-y(:,p+copies)).^2,1)';end%%成對(duì)歐氏距離的兩個(gè)矩陣的列之間的距離endd=d.^0.5;2.2.3函數(shù)vqlbg該函數(shù)利用矢量量化提取了音頻的vq碼本functionr=vqlbg(d,k)e=.01;r=mean(d,2);dpr=10000;fori=1:log2(k)r=[r*(1+e),r*(1-e)];while(1==1)z=disteu(d,r);[m,ind]=min(z,[],2);t=0;forj=1:2^ir(:,j)=mean(d(:,find(ind==j)),2);x=disteu(d(:,find(ind==j)),r(:,j));forq=1:length(x)t=t+x(q);endendif(((dpr-t)/t)<e)break;elsedpr=t;endendend2.2.4函數(shù)testfunctionfinalmsg=test(testdir,n,code)fork=1:n%readtestsoundfileofeachspeakerfile=sprintf('%ss%d.wav',testdir,k);[s,fs]=wavread(file);v=mfcc(s,fs);%得到測(cè)試人語音的mel倒譜系數(shù)distmin=4;%閾值設(shè)置處%就判斷一次,因?yàn)槟0謇锩嬷挥幸粋€(gè)文件d=disteu(v,code{1});%計(jì)算得到模板和要判斷的聲音之間的“距離”dist=sum(min(d,[],2))/size(d,1);%變換得到一個(gè)距離的量%測(cè)試閾值數(shù)量級(jí)msgc=sprintf('與模板語音信號(hào)的差值為:%10f',dist);disp(msgc);%此人匹配ifdist<=distmin%一個(gè)閾值,小于閾值,則就是這個(gè)人。msg=sprintf('第%d位說話者與模板語音信號(hào)匹配,符合要求!\n',k);finalmsg='此位說話者符合要求!';%界面顯示語句,可隨意設(shè)定disp(msg);end%此人不匹配ifdist>distminmsg=sprintf('第%d位說話者與模板語音信號(hào)不匹配,不符合要求!\n',k);finalmsg='此位說話者不符合要求!';%界面顯示語句,可隨意設(shè)定disp(msg);endend2.2.5函數(shù)testDB這個(gè)函數(shù)實(shí)際上是對(duì)數(shù)據(jù)庫一個(gè)查詢,根據(jù)測(cè)試者的聲音,找相應(yīng)的文件,并且給出是誰的提示functiontestmsg=testDB(testdir,n,code)nameList={'童星程','張亦波','郭嘉','劉滿','嚴(yán)岔娟','趙超','孝大宇','郝力男'};%這個(gè)是我們組的成員和導(dǎo)師的名單.以便在識(shí)別時(shí)給出人民fork=1:n%數(shù)據(jù)庫中每一個(gè)說話人的特征file=sprintf('%ss%d.wav',testdir,k); %找出文件的路徑[s,fs]=wavread(file);v=mfcc(s,fs);%對(duì)找到的文件取mfcc變換distmin=inf;k1=0;forl=1:length(code)d=disteu(v,code{l});dist=sum(min(d,[],2))/size(d,1);ifdist<distmindistmin=dist;%%這里和test函數(shù)里面一樣但多了一個(gè)具體語者的識(shí)別k1=l;endendmsg=nameList{k1}msgbox(msg);end2.2.6函數(shù)train該函數(shù)就是對(duì)音頻進(jìn)行訓(xùn)練,也就是提取特征參數(shù)functioncode=train(traindir,n)k=16;%numberofcentroidsrequiredfori=1:n%對(duì)數(shù)據(jù)庫中的代碼形成碼本file=sprintf('%ss%d.wav',traindir,i);disp(file);[s,fs]=wavread(file);v=mfcc(s,fs);%計(jì)算MFCC's提取特征特征,返回值是Mel倒譜系數(shù),是一個(gè)log的dct得到的code{i}=vqlbg(v,k);%訓(xùn)練VQ碼本通過矢量量化,得到原說話人的VQ碼本end2.2.7函數(shù)melfb確定矩陣的濾波器functionm=melfb(p,n,fs)f0=700/fs;fn2=floor(n/2);lr=log(1+0.5/f0)/(p+1);%converttofftbinnumberswith0forDCtermbl=n*(f0*(exp([01pp+1]*lr)-1));直接轉(zhuǎn)換為FFT的數(shù)字模型b1=floor(bl(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:b41:b3]+1;v=2*[1-pm(b2:b4)pm(1:b3)];m=sparse(r,c,v,p,1+fn2);3.Results&Discussion3.1實(shí)驗(yàn)過程我們的功能分為兩部分:對(duì)已經(jīng)保存的語音進(jìn)行辨別和實(shí)時(shí)的判斷說話人是否為同一個(gè)人.在前者的實(shí)驗(yàn)過程中,先把我們小組成員和tutor的聲音保存成wav的格式,放在一個(gè)文件夾中,作為一個(gè)檢測(cè)的數(shù)據(jù)庫.然后對(duì)檢測(cè)者實(shí)行識(shí)別,系統(tǒng)給出提示是誰.這一部我們測(cè)得的準(zhǔn)確率是87.5%.在第二個(gè)功能中,實(shí)時(shí)的錄取一段說話人的聲音作為模板,提取mfcc特征參數(shù),隨后緊接著進(jìn)行遇著識(shí)別,也就是讓其他人再說相同的話,看是否是原說話者.本系統(tǒng)唯一的不足之處是沒有實(shí)現(xiàn)對(duì)數(shù)據(jù)庫的跟新,相信在以后不久的將來會(huì)實(shí)現(xiàn)的.實(shí)驗(yàn)過程與具體功能如下:先打開Matlab使CurrentDirectory為錄音與程序所所在的文件夾再打開文件“enter.m”,點(diǎn)run運(yùn)行,打開enter界面,點(diǎn)擊“打開”按鈕進(jìn)入系統(tǒng)。(注:文件包未封裝完畢,目前只能通過此方式打開運(yùn)行。)(如下圖figure1)在對(duì)數(shù)據(jù)庫中已有的語者進(jìn)行識(shí)別模塊:點(diǎn)擊按鈕“錄音-train”,在4秒內(nèi)錄音訓(xùn)練。4秒后,可以點(diǎn)擊按鈕“播放-train”,播放剛剛錄入的聲音。錄音被自動(dòng)保存在程序文件夾子文件夾“測(cè)試”中,命名為“s1.wav”。隨后點(diǎn)擊”語音庫錄制模板”,這一步就是對(duì)語音庫里的聲音提取特征值.然后再點(diǎn)擊”語者判定”,這一步是把”測(cè)試”文件夾中剛錄制的聲音提取特征值值與數(shù)據(jù)庫中聲音的特征值進(jìn)行對(duì)比,告知誰是語者.在實(shí)時(shí)語者識(shí)別模塊:點(diǎn)擊實(shí)時(shí)錄制模板

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論