數(shù)字語音信號處理實驗_第1頁
數(shù)字語音信號處理實驗_第2頁
數(shù)字語音信號處理實驗_第3頁
數(shù)字語音信號處理實驗_第4頁
數(shù)字語音信號處理實驗_第5頁
已閱讀5頁,還剩24頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、語音信號處理實驗 2015年10月28日語音信號處理實驗實驗學時數(shù):8實驗學分:0.5實驗項目數(shù):41、目的與基本要求實驗為研究型(設計型)實驗,共安排4個,為了真正達到研究設計型實驗的目的,采用開放實驗的辦法,將自主學習和研究設計型實驗結合起來,統(tǒng)一安排。自主學習內容由學生自主學習參考教材的內容,并采用多種渠道,如查閱最新語音信號處理方面的科技文獻、資料,作出學習報告。目的是培養(yǎng)學生的自學能力和科技文獻的檢索和查閱能力,同時可以有助于學生了解和掌握語音信號處理領域的最新技術進展和應用情況,將理論知識和實際應用結合起來,促進學生學習的積極性和主動性。通過開放實驗,目的使學生進一步理解數(shù)字語音信

2、息處理的基本方法,提高學生自主分析、發(fā)現(xiàn)及解決問題的能力,鍛煉學生論文寫作能力,為實際的應用打下扎實的基礎。2、研究設計型實驗的內容1)研究設計型實驗1:基于MATLAB的語音信號時域特征分析要求:按所學相關語音處理的知識,通過網(wǎng)上學習、資料查閱,自己設計程序,給出某一語音信號的短時過零率、短時能量、短時自相關特征的分析結果,并借助時域分析方法檢測所分析語音信號的基音周期。2)研究設計型實驗2:基于MATLAB分析語音信號頻域特征要求:按所學相關語音處理的得知識,通過網(wǎng)上學習、資料查閱,自己設計程序,給出某一語音信號的短時譜、倒譜、語譜圖的分析結果,并借助頻域分析方法檢測所分析語音信號的基音周

3、期或共振峰。3)研究設計型實驗3:基于MATLAB進行語音信號的LPC分析要求:按所學相關語音處理的知識,通過網(wǎng)上學習、資料查閱,自己設計程序,給出某一語音信號的LPC分析結果,包括LPC譜、LPCC譜的分析結果,并借助LPC分析方法檢測所分析語音信號的基音周期和共振峰。4)研究設計型實驗4:基于VQ的特定人孤立詞語音識別研究要求:按所學相關語音處理的知識,通過網(wǎng)上學習、資料查閱,借助MATLAB工具,自己設計基于VQ的碼本訓練程序和識別程序(盡量選用所學HMM或DTW方法設計識別程序),能識別特定人的語音,分析所設計系統(tǒng)的特性。實驗一 基于MATLAB的語音信號時域特征分析(2學時)1、 實

4、驗目的語音信號是一種非平穩(wěn)的時變信號,它攜帶著各種信息。在語音編碼、語音合成、語音識別和語音增強等語音處理中無一例外需要提取語音中包含的各種信息。語音信號分析的目的就在與方便有效的提取并表示語音信號所攜帶的信息。語音信號分析可以分為時域和變換域等處理方法,其中時域分析是最簡單的方法,直接對語音信號的時域波形進行分析,提取的特征參數(shù)主要有語音的短時能量,短時平均過零率,短時自相關函數(shù)等。本實驗要求掌握時域特征分析原理,并利用已學知識,編寫程序求解語音信號的短時過零率、短時能量、短時自相關特征,分析實驗結果,并能掌握借助時域分析方法所求得的參數(shù)分析語音信號的基音周期及共振峰。2、 實驗原理及實驗結

5、果1) 短時能量 (1)加矩形窗a=wavread('C:UsersAdministratorDesktopshiyan.wav');subplot(6,1,1),plot(a);N=32;for i=2:6h=linspace(1,1,2.(i-2)*N);%形成一個矩形窗,長度為2.(i-2)*N En=conv(h,a.*a);% 求短時能量函數(shù)En subplot(6,1,i),plot(En);if(i=2) legend('N=32');elseif(i=3) legend('N=64');elseif(i=4) legend(

6、9;N=128');elseif(i=5) legend('N=256');elseif(i=6) legend('N=512');endEnd (2)加漢明窗 a=wavread('beifeng.wav');subplot(6,1,1),plot(a);N=32;for i=2:6h=hanning(2.(i-2)*N);%形成一個漢明窗,長度為2.(i-2)*N En=conv(h,a.*a);% 求短時能量函數(shù)En subplot(6,1,i),plot(En);if(i=2) legend('N=32');els

7、eif(i=3) legend('N=64');elseif(i=4) legend('N=128');elseif(i=5) legend('N=256');elseif(i=6) legend('N=512');endend 加矩形窗 加漢明窗2) 短時平均過零率a=wavread('C:UsersAdministratorDesktopshiyan.wav');n=length(a);N=320;subplot(3,1,1),plot(a),title('shiyan');h=linspace

8、(1,1,N);En=conv(h,a.*a); %求卷積得其短時能量函數(shù)Ensubplot(3,1,2),plot(En),title('卷積得其短時能量函數(shù)En'); for i=1:n-1 if a(i)>=0 b(i)= 1; else b(i) = -1; end if a(i+1)>=0 b(i+1)=1; else b(i+1)= -1; end w(i)=abs(b(i+1)-b(i); %求出每相鄰兩點符號的差值的絕對值 end k=1; j=0;while (k+N-1)<n Zm(k)=0; for i=0:N-1; Zm(k)=Zm(k

9、)+w(k+i); end j=j+1; k=k+N/2; %每次移動半個窗 end for w=1:j Q(w)=Zm(160*(w-1)+1)/(2*N); %短時平均過零率 end subplot(3,1,3),plot(Q),title('短時平均過零率');3) 自相關函數(shù) N=240Y=wavread('C:UsersAdministratorDesktopshiyan.wav');x=x.*rectwin(240);R=zeros(1,240);for k=1:240for n=1:240-kR(k)=R(k)+x(n)*x(n+k);endend

10、 j=1:240;plot(j,R);grid;實驗二 基于MATLAB分析語音信號頻域特征一、實驗目的信號的傅立葉表示在信號的分析與處理中起著重要的作用。因為對于線性系統(tǒng)來說,可以很方便地確定其對正弦或復指數(shù)和的響應,所以傅立葉分析方法能完善地解決許多信號分析和處理問題。另外,傅立葉表示使信號的某些特性變得更明顯,因此,它能更深入地說明信號的各項紅物理現(xiàn)象。 由于語音信號是隨著時間變化的,通常認為,語音是一個受準周期脈沖或隨機噪聲源激勵的線性系統(tǒng)的輸出。輸出頻譜是聲道系統(tǒng)頻率響應與激勵源頻譜的乘積。聲道系統(tǒng)的頻率響應及激勵源都是隨時間變化的,因此一般標準的傅立葉表示雖然適用于周期及平穩(wěn)隨機信

11、號的表示,但不能直接用于語音信號。由于語音信號可以認為在短時間內,近似不變,因而可以采用短時分析法。本實驗要求掌握傅里葉分析原理,會利用已學的知識,編寫程序估計短時譜、倒譜,畫出語譜圖,并分析實驗結果,在此基礎上,借助頻域分析方法所求得的參數(shù)分析語音信號的基音周期或共振峰。二、實驗原理(自己補充)1)濾波器頻率響應對特定頻率的頻點或該頻點以外的頻率進行有效濾除的電路,就是濾波器。其功能就是得到一個特定頻率或消除一個特定頻率,濾波器是一種對信號有處理作用的器件或電路。主要作用是:讓有用信號盡可能無衰減的通過,對無用信號盡可能大的。濾波器的類型:巴特沃斯響應(最平坦響應),貝賽爾響應,切貝雪夫響應

12、 。 濾波器沖激響應的傅里葉變換就是該濾波器的頻率響應。2)快速卷積卷積定理指出,函數(shù)卷積的傅里葉變換是函數(shù)傅里葉變換的乘積。即一個域中的卷積相當于另一個域中的乘積,例如時域中的卷積就對應于頻域中的乘積。其中表示f 的傅里葉變換。 這一定理對拉普拉斯變換、雙邊拉普拉斯變換等各種傅里葉變換的變體同樣成立。在調和分析中還可以推廣到在局部緊致的阿貝爾群上定義的傅里葉變換。 利用卷積定理可以簡化卷積的運算量。對于長度為n的序列,按照卷積的定義進行計算,需要做2n - 1組對位乘法,其計算復雜度為;而利用傅里葉變換將序列變換到頻域上后,只需要一組對位乘法,利用傅里葉變換的快速算法之后,總的計算復雜度為。

13、這一結果可以在快速乘法計算中得到應用。信號的離散傅里葉變換有限長序列的離散傅里葉變換公式為:MATLAB函數(shù):fft功能是實現(xiàn)快速傅里葉變換,fft函數(shù)的格式為:返回向量x的不連續(xù)fourier變換。若是一個N=12的有限序列,利用MATLAB計算它的離散傅里葉變換并畫出圖形,然后再對進行離散傅里葉反變換求出并畫出其波形。頻率分辨率與DFT參數(shù)的選擇在DFT問題中,頻率分辨率是指在頻率軸上所得到的最小頻率間隔,即最小頻率間隔反比于數(shù)據(jù)的長度N。若在中有兩個頻率分別為和的信號,對用矩形窗截斷時,要分辨出這兩個頻率,N必須滿足 通過下面實驗,驗證上面的結論: 設一序列中含有兩種頻率成分,采樣頻率取

14、為,表示為根據(jù)上面的結論,要區(qū)分這兩種頻率成分,必須滿足。取時,計算的DFT;取時,計算的DFT參考程序1)短時譜 cleara=wavread('shiyan.wav');subplot(2,1,1),plot(a);title('original signal');gridN=256;h=hamming(N);for m=1:N b(m)=a(m)*h(m)end y=20*log(abs(fft(b)subplot(2,1,2)plot(y);title('短時譜');grid2)語譜圖 x,fs,nbits=wavread('sh

15、iyan.wav')specgram(x,512,fs,100); xlabel('時間(s)');ylabel('頻率(Hz)');title('語譜圖');3)倒譜和復倒譜(1)加矩形窗時的倒譜和復倒譜cleara=wavread('shiayn.wav',4000,4350);N=300;h=linspace(1,1,N);for m=1:Nb(m)=a(m)*h(m);end c=cceps(b);c=fftshift(c);d=rceps(b);d=fftshift(d); subplot(2,1,1)plot(

16、d);title('加矩形窗時的倒譜')subplot(2,1,2)plot(c);title('加矩形窗時的復倒譜')(2)加漢明窗時的倒譜和復倒譜cleara=wavread('shiyan.wav',4000,4350);N=300;h=hamming(N);for m=1:Nb(m)=a(m)*h(m);end c=cceps(b);c=fftshift(c);d=rceps(b);d=fftshift(d); subplot(2,1,1)plot(d);title('加漢明窗時的倒譜')subplot(2,1,2)plo

17、t(c);title('加漢明窗時的復倒')實驗三 基于MATLAB的LPC分析一、實驗目的線性預測分析是最有效的語音分析技術之一,在語音編碼、語音合成、語音識別和說話人識別等語音處理領域中得到了廣泛的應用。語音線性預測的基本思想是:一個語音信號的抽樣值可以用過去若干個取樣值的線性組合來逼近。通過使實際語音抽樣值與線性預測抽樣值的均方誤差達到最小,可以確定唯一的一組線性預測系數(shù)。采用線性預測分析不僅能夠得到語音信號的預測波形,而且能夠提供一個非常好的聲道模型。如果將語音模型看作激勵源通過一個線性時不變系統(tǒng)產生的輸出,那么可以利用LP分析對聲道參數(shù)進行估值,以少量低信息率的時變參

18、數(shù)精確地描述語音波形及其頻譜的性質。此外,LP分析還能夠對共振峰、功率譜等語音參數(shù)進行精確估計,LP分析得到的參數(shù)可以作為語音識別的重要參數(shù)之一。由于語音是一種短時平穩(wěn)信號,因此只能利用一段語音來估計模型參數(shù)。此時有兩種方案:一種是將長的語音序列加窗,然后對加窗語音進行LP分析,只要限定窗的長度就可以保證分析的短時性,這種方案稱為自相關法;另一種方案不對語音加窗,而是在計算均方預測誤差時限制其取和區(qū)間,這樣可以導出LP分析的自協(xié)方差法。本實驗要求掌握LPC原理,會利用已學的知識,編寫程序估計線性預測系數(shù)以及LPC的推演參數(shù),并能利用所求的相關參數(shù)估計語音的端點、清濁音判斷、基因周期、共振峰等。

19、2、 實驗原理LPC分析為線性時不變因果穩(wěn)定系統(tǒng)V(z)建立一個全極點模型,并利用均方誤差準則,對已知的語音信號s(n)進行模型參數(shù)估計。如果利用P個取樣值來進行預測,則稱為P階線性預測。假設用過去P個取樣值的加權之和來預測信號當前取樣值,則預測信號為: (1)其中加權系數(shù)用表示,稱為預測系數(shù),則預測誤差為: (2)要使預測最佳,則要使短時平均預測誤差最小有: (3) (4)令 (5) 最小的可表示成: (6)顯然,誤差越接近于零,線性預測的準確度在均方誤差最小的意義上為最佳,由此可以計算出預測系數(shù)。通過LPC分析,由若干幀語音可以得到若干組LPC參數(shù),每組參數(shù)形成一個描繪該幀語音特征的矢量,

20、即LPC特征矢量。由LPC特征矢量可以進一步得到很多種派生特征矢量,例如線性預測倒譜系數(shù)、線譜對特征、部分相關系數(shù)、對數(shù)面積比等等。不同的特征矢量具有不同的特點,它們在語音編碼和識別領域有著不同的應用價值。三、實驗結果我們使用的原始語音為“shiyan”,采樣頻率為11000Hz,運行程序見附錄。在這里我們取第30幀進行觀察,線性預測階數(shù)為12,看到圖3.1所示的原始語音幀的波形,預測語音幀波形和它們之間預測誤差的波形。圖3.2為原始語音幀和預測語音幀的短時譜和LPC譜的波形圖3.1 原始語音幀和預測誤差的波形圖3.2 原始語音幀和預測語音幀的短時譜和LPC譜的波形 圖3.3 原始語音和預測誤

21、差的倒譜波形圖3.4預測誤差倒頻譜三、實驗程序MusicSource = wavread(shiyan');Music_source = MusicSource'N = 256; % window length,N = 100 - 1000;Hamm = hamming(N); % create Hamming windowframe = input('請鍵入想要處理的幀位置 = ');% origin is current frameorigin = Music_source(frame - 1) * (N / 2) + 1):(frame - 1) * (N

22、 / 2) + N);Frame = origin .* Hamm' %Short Time Fourier Transform%s1,f1,t1 = specgram(MusicSource,N,N/2,N); Xs1,Ys1 = size(s1);for i = 1:Xs1 FTframe1(i) = s1(i,frame);end N1 = input('請鍵入預測器階數(shù) = '); % N1 is predictor's ordercoef,gain = lpc(Frame,N1); % LPC analysis using Levinson-Durbi

23、n recursionest_Frame = filter(0 -coef(2:end),1,Frame); % estimate frame(LP)FFT_est = fft(est_Frame);err = Frame - est_Frame; % error% FFT_err = fft(err);subplot(2,1,1),plot(1:N,Frame,1:N,est_Frame,'-r');grid;title('原始語音幀vs.預測后語音幀')subplot(2,1,2),plot(err);grid;title('誤差');pau

24、se fLength(1 : 2 * N) = origin,zeros(1,N); Xm = fft(fLength,2 * N);X = Xm .* conj(Xm);Y = fft(X , 2 * N);Rk = Y(1 : N);PART = sum(coef(2 : N1 + 1) .* Rk(1 : N1);G = sqrt(sum(Frame.2) - PART); A = (FTframe1 - FFT_est(1 : length(f1') ./ FTframe1 ; % inverse filter A(Z)subplot(2,1,1),plot(f1',2

25、0*log(abs(FTframe1),f1',(20*log(abs(1 ./ A),'-r');grid;title('短時譜');subplot(2,1,2),plot(f1',(20*log(abs(G ./ A);grid;title('LPC譜');pause temp = FTframe1 - FFT_est(1 : length(f1'); % not move higher frequnce pitch1 = log(abs(temp);pLength = length(pitch1);result1 =

26、 ifft(pitch1,N); % move higher frequncepitch1(pLength - 32) : pLength) = 0;result2 = ifft(pitch1,N); % direct do real cepstrum with errpitch = fftshift(rceps(err);origin_pitch = fftshift(rceps(Frame);subplot(211),plot(origin_pitch);grid;title('原始語音幀倒譜(直接調用函數(shù))');subplot(212),plot(pitch);grid;

27、title('預測誤差倒譜(直接調用函數(shù))');pause subplot(211),plot(1:length(result1),fftshift(real(result1);grid;title('預測誤差倒譜(根據(jù)定義編寫,沒有去除高頻分量)');subplot(212),plot(1:length(result2),fftshift(real(result2);grid;title('預測誤差倒譜(根據(jù)定義編寫,去除高頻分量)');實驗四 基于VQ的特定人孤立詞語音識別研究一、實驗目的矢量量化(Vector Quantization)是一

28、種極其重要的信號壓縮方法,是自70年代末才發(fā)展起來的。它廣泛應用于語音編碼、語音識別與合成、圖象壓縮等領域。VQ在語音信號處理中占有十分重要的地位。許多重要的研究課題中,特別是低速語音編碼和語音識別的研究中,VQ都起著非常重要的作用。量化可以分為兩大類:一類是標量量化,另一類是矢量量化。標量量化是將取樣后的信號值逐個地進行量化,而矢量量化是將若干個取樣信號分成一組,即構成一個矢量,然后對此矢量一次進行量化。當然,矢量量化壓縮數(shù)據(jù)的同時也有信息的損失,但這僅取決于量化的精度。矢量量化是標量量化的發(fā)展,可以說,凡是要用量化的地方都可以應用矢量量化。 本實驗要求掌握矢量量化的原理,會利用已學的相關語

29、音特征,構建語音特征矢量,然后利用VQ技術,編寫訓練VQ碼表的程序,并在此基礎上利用所學的語音識別技術,編程實現(xiàn)基于矢量量化的特定人孤立詞語音識別,要注意的是識別過程中語音端點如何檢測,從識別的實時性角度出發(fā),建議能利用VC技術實現(xiàn)。2、 實驗原理1 矢量量化1)基本原理矢量量化的過程是:將語音信號波形的K個樣點的每一幀,或者有K個參數(shù)的每一參數(shù)幀,構成K維空間中的一個矢量,然后對這個矢量進行量化。通常所說的標量量化,也可以說是K=1的一維矢量量化。矢量量化的過程與標量量化相似。在標量量化時,在一維的零至無大值之間設置若干個量化階梯,當某輸入信號的幅度值落在某相鄰的兩個量化階梯之間時,就被量化

30、為兩階梯的中心值。而在矢量量化時,將K維無限空間劃為M個區(qū)域邊界,然后將輸入矢量與這些邊界進行比較,并被量化為“距離”最小的區(qū)域邊界的中心矢量值。2)、失真測度設計矢量量化器的關鍵是編碼器的設計,而譯碼器的工作僅是一個簡單的查表過程。在編碼的過程中,需要引入失真測度的概念。失真是將輸入信號矢量用碼書的重構矢量來表征時的誤差或所付出的代價。而這種代價的統(tǒng)計平均值(平均失真)描述了矢量量化器的工作特性。在矢量量化器的設計中,失真測度的選擇是很重要的。失真測度選用的合適與否,直接影響系統(tǒng)的性能。要使所選擇的失真測度有實際意義,必須具備以下幾個條件:在主觀評價上有意義,即最小的失真應該對應與好的主觀語

31、言質量;易于處理,即在數(shù)學上易于實現(xiàn),這樣可以用于實際的矢量量化器的設計;平均失真存在并且可以計算。2 LBG算法算法是由Linde,Buzo和Gray在1980年首次提出的,常稱為LBG算法。它是標量量化器中Lioyd算法的多維推廣。整個算法實際上就是反復迭代的過程,既用初始碼書尋找最佳碼書的迭代過程。它由對初始碼書進行迭代優(yōu)化開始,一直到系統(tǒng)性能滿足要求或者不再有明顯的改進為止。這種算法既可以用于已知信號源概率分布的場合,也可以用于未知信號源概率分布的場合,但此時要知道它的一系列輸出值(稱為訓練序列)。由于通常語音信號的概率分布隨著各種應用場合的不同,不可能事先統(tǒng)計過,因而無法知道它的概率

32、分布;3語音識別;語音識別是研究使機器能夠準確地聽出人的語音內容的;運用語音識別技術,人們設計了各種語音識別系統(tǒng);這種系統(tǒng)存在的問題最少,因為單詞之間有停頓,可以;不管用何種語音識別方法,主要過程由兩部分組成,一;要實現(xiàn)上面的隱馬爾可夫模型,模型的輸入信號必須??;三、實驗結果;就算法模型方面而言,需要有進一步的突破;就強健性方面而言.3 語音識別語音識別是研究使機器能夠準確地聽出人的語音內容的問題,即準確的識別所說的語音。語音識別是近二三十幾年發(fā)展起來的新興學科,在計算機、信息處理、通信與電子系統(tǒng)、自動控制等領域中有著廣泛的應用。運用語音識別技術,人們設計了各種語音識別系統(tǒng)。有的已經應用于實際

33、,有的還處在研究階段。其中對孤立詞的識別,研究的最早也最成熟,目前,對孤立詞的識別無論是小詞匯量還是大詞匯量,無論是與講話者有關還是與講話者無關,在實驗室中的正識率已經達到95%以上。這種系統(tǒng)存在的問題最少,因為單詞之間有停頓,可以使識別問題簡單化;且單詞之間的端點檢測比較容易;單詞之間的協(xié)同發(fā)音影響也可以減至最低;對孤立詞的發(fā)音都比較認真。由于此系統(tǒng)本身用途廣泛,且其許多技術對其他類型系統(tǒng)有通用性并易于推廣,所以稍加補充一些知識就可用于其他類型系統(tǒng)(如在識別部分加用適當語義信息等,則可用于連續(xù)語音識別中)。采用矢量量化技術主要用于減少計算量,應用于特征處理可減少特征的類型從而減少計算量,也可

34、以推廣應用到摸板的歸并壓縮。其主要工作就是聚類,即在特征空間中合理的擬定一組點(稱為一組聚類中心或碼本),每個中心稱為碼字。于是特征空間中任一點均可按最小距離準則用碼本之一來代表。不管用何種語音識別方法,主要過程由兩部分組成,一是訓練,一是識別。在進行訓練時,用觀察的序列訓練得到參考模型集,每一個模型對應于摸板中的一個單詞。在進行識別時,為每一個參考模型計算出產生測試觀察的概率,且測試信號(即輸入信號)按最大概率被識別為某個單詞。三、實驗結果 實驗程序:1、mfcc.mfunction ccc = mfcc(x)bank=melbankm(24,256,8000,0,0.5,'m

35、9;);bank=full(bank);bank=bank/max(bank(:); for k=1:12 n=0:23; dctcoef(k,:)=cos(2*n+1)*k*pi/(2*24);end w = 1 + 6 * sin(pi * 1:12 ./ 12);w = w/max(w);xx=double(x);xx=filter(1 -0.9375,1,xx); xx=enframe(xx,256,80);for i=1:size(xx,1) y = xx(i,:); s = y' .* hamming(256); t = abs(fft(s); t = t.2; c1=dc

36、tcoef * log(bank * t(1:129); c2 = c1.*w' m(i,:)=c2'end dtm = zeros(size(m);for i=3:size(m,1)-2 dtm(i,:) = -2*m(i-2,:) - m(i-1,:) + m(i+1,:) + 2*m(i+2,:);enddtm = dtm / 3; ccc = m dtm;ccc = ccc(3:size(m,1)-2,:);2、vad.mfunction x1,x2 = vad(x)x = double(x);x = x / max(abs(x); FrameLen = 240;Fra

37、meInc = 80; amp1 = 10;amp2 = 2;zcr1 = 10;zcr2 = 5; maxsilence = 8; % 6*10ms = 30msminlen = 15; % 15*10ms = 150msstatus = 0;count = 0;silence = 0;tmp1 = enframe(x(1:end-1), FrameLen, FrameInc);tmp2 = enframe(x(2:end) , FrameLen, FrameInc);signs = (tmp1.*tmp2)<0;diffs = (tmp1 -tmp2)>0.02;zcr = s

38、um(signs.*diffs, 2);amp = sum(abs(enframe(filter(1 -0.9375, 1, x), FrameLen, FrameInc), 2);amp1 = min(amp1, max(amp)/4);amp2 = min(amp2, max(amp)/8);x1 = 0; x2 = 0;for n=1:length(zcr) goto = 0; switch status case 0,1 if amp(n) > amp1 x1 = max(n-count-1,1); status = 2; silence = 0; count = count +

39、 1; elseif amp(n) > amp2 | . zcr(n) > zcr2 status = 1; count = count + 1; else status = 0; count = 0; end case 2, if amp(n) > amp2 | . zcr(n) > zcr2 count = count + 1; else silence = silence+1; if silence < maxsilence count = count + 1; elseif count < minlen status = 0; silence = 0

40、; count = 0; else status = 3; end end case 3, break; endend count = count-silence/2;x2 = x1 + count -1; 3、codebook.m%clear;function xchushi= codebook(m)a,b=size(m);m1,m2=szhixin(m);m3,m4=szhixin(m2);m1,m2=szhixin(m1);m7,m8=szhixin(m4);m5,m6=szhixin(m3);m3,m4=szhixin(m2);m1,m2=szhixin(m1);m15,m16=szh

41、ixin(m8);m13,m14=szhixin(m7);m11,m12=szhixin(m6);m9,m10=szhixin(m5);m7,m8=szhixin(m4);m5,m6=szhixin(m3);m3,m4=szhixin(m2);m1,m2=szhixin(m1);chushi(1,:)=zhixinf(m1);chushi(2,:)=zhixinf(m2);chushi(3,:)=zhixinf(m3);chushi(4,:)=zhixinf(m4);chushi(5,:)=zhixinf(m5);chushi(6,:)=zhixinf(m6);chushi(7,:)=zhix

42、inf(m7);chushi(8,:)=zhixinf(m8);chushi(9,:)=zhixinf(m9);chushi(10,:)=zhixinf(m10);chushi(11,:)=zhixinf(m11);chushi(12,:)=zhixinf(m12);chushi(13,:)=zhixinf(m13);chushi(14,:)=zhixinf(m14);chushi(15,:)=zhixinf(m15);chushi(16,:)=zhixinf(m16);sumd=zeros(1,1000); k=1;dela=1;xchushi=chushi;while(k<=1000

43、)sum=ones(1,16);for p=1:a for i=1:16d(i)=odistan(m(p,:),chushi(i,:); end dmin=min(d); sumd(k)=sumd(k)+dmin; for i=1:16if d(i)=dmin xchushi(i,:)=xchushi(i,:)+m(p,:); sum(i)=sum(i)+1;end endend for i=1:16 xchushi(i,:)=xchushi(i,:)/sum(i); endif k>1 dela=abs(sumd(k)-sumd(k-1)/sumd(k);end k=k+1; chus

44、hi=xchushi;end return 4、testvq.m clear;disp('這是一個簡易語音識別系統(tǒng),請保證已經將您的語音保存在相應文件夾中')disp('正在訓練您的語音模版指令,請稍后.')for i=1:10 fname = sprintf('D:matlabworkdtw1海兒的聲音%da.wav',i-1); x = wavread(fname); x1 x2 = vad(x); m = mfcc(x); m = m(x1:x2-5,:); ref(i).code=codebook(m);enddisp('語音指令

45、訓練成功,恭喜!¡') disp('正在測試您的測試語音指令,請稍后.')for i=1:10fname = sprintf('D:matlabworkdtw1海兒的聲音%db.wav',i-1); x = wavread(fname); x1 x2 = vad(x); mn = mfcc(x); mn = mn(x1:x2-5,:); %mn = mn(x1:x2,:) test(i).mfcc = mn;endsumsumdmax=0;sumsumdmin=0;disp('對訓練過的語音進行測試')for w=1:10 su

46、md=zeros(1,10); a,b=size(test(w).mfcc);for i=1:10 for p=1:a for j=1:16 d(j)=odistan(test(w).mfcc(p,:),ref(i).code(j,:); end dmin=min(d); sumd(i)=sumd(i)+dmin;%×ÜʧÕæendendsumdmin=min(sumd)/a;sumdmin1=min(sumd);sumdmax(w)=max(sumd)/a;sumsumdmin=sumdmin+sumsumdmax;sumsumd

47、max=sumdmax(w)+sumsumdmax; disp('正在匹配您的語音指令,請稍后.')for i=1:10 if (sumd(i)=sumdmin1) switch (i) case 1 fprintf('您輸入的語音指令為:%s; 識別結果為%sn','前', '前'); case 2 fprintf('您輸入的語音指令為:%s; 識別結果為%sn','后', '后'); case 3 fprintf('您輸入的語音指令為:%s; 識別結果為%sn',

48、'左', '左'); case 4 fprintf('您輸入的語音指令為ª:%s; 識別結果為%sn','右', '右'); case 5 fprintf('您輸入的語音指令為:%s; 識別結果為%sn','東', '東'); case 6 fprintf('您輸入的語音指令為:%s; 識別結果為%sn','南', '南'); case 7 fprintf('您輸入的語音指令為:%s; 識別結果為%sn

49、','西', '西'); case 8 fprintf('您輸入的語音指令為:%s; 識別結果為%sn','北', '北'); case 9 fprintf('您輸入的語音指令為ª:%s; 識別結果為%sn','上', '上'); case 10 fprintf('您輸入的語音指令為ª:%s; 識別結果為%sn','下', '下'); otherwise fprintf('error&

50、#39;); end endendenddelamin=sumsumdmin/10;delamax=sumsumdmax/10; disp('對沒有訓練過的語音進行測試') disp('正在測試你的語音,請稍后.')for i=1:10fname = sprintf('D:matlabworkdtw1º£¶ùµÄÉùÒô%db.wav',i-1); x = wavread(fname); x1 x2 = vad(x); mn = mfcc(x);

51、mn = mn(x1:x2-5,:); %mn = mn(x1:x2,:) test(i).mfcc = mn;end for w=1:10 sumd=zeros(1,10); a,b=size(test(w).mfcc);for i=1:10 for p=1:a for j=1:16 d(j)=odistan(test(w).mfcc(p,:),ref(i).code(j,:); end dmin=min(d); sumd(i)=sumd(i)+dmin;%×ÜʧÕæendendsumdmin=min(sumd); z=0;for

52、 i=1:10 if (sumd(i)/a)>delamax)| z=z+1; endend disp('正在匹配您的語音指令,請稍后.') if z<=3for i=1:10 if (sumd(i)=sumdmin) switch (i) case 1 fprintf('您輸入的語音指令為:%s; 識別結果為%sn','前', '前'); case 2 fprintf('您輸入的語音指令為:%s; 識別結果為%sn','后', '后'); case 3 fprintf(

53、'您輸入的語音指令為:%s; 識別結果為%sn','左', '左'); case 4 fprintf('您輸入的語音指令為ª:%s; 識別結果為%sn','右', '右'); case 5 fprintf('您輸入的語音指令為:%s; 識別結果為%sn','東', '東'); case 6 fprintf('您輸入的語音指令為:%s; 識別結果為%sn','南', '南'); case 7 fp

54、rintf('您輸入的語音指令為:%s; 識別結果為%sn','西', '西'); case 8 fprintf('您輸入的語音指令為:%s; 識別結果為%sn','北', '北'); case 9 fprintf('您輸入的語音指令為ª:%s; 識別結果為%sn','上', '上'); case 10 fprintf('您輸入的語音指令為ª:%s; 識別結果為%sn','下', '下'); otherwise fprintf('error'); end endendelse fprintf('您

溫馨提示

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

評論

0/150

提交評論