標(biāo)題: MATLAB實(shí)現(xiàn)語音識(shí)別功能課設(shè)含代碼 [打印本頁]

作者: WAKENNNN    時(shí)間: 2018-11-20 17:23
標(biāo)題: MATLAB實(shí)現(xiàn)語音識(shí)別功能課設(shè)含代碼
《智能儀器》課程設(shè)計(jì)
題    目: MATLAB實(shí)現(xiàn)語音識(shí)別功能      
目錄

設(shè)計(jì)任務(wù)及要求1
語音識(shí)別的簡(jiǎn)單介紹
2.1語者識(shí)別的概念2
  2.2特征參數(shù)的提取3
  2.3用矢量量化聚類法生成碼本3
  2.4VQ的說話人識(shí)別 4
算法程序分析
3.1函數(shù)關(guān)系.4            
    3.2代碼說明5
    3.2.1函數(shù)mfcc5
   3.2.2函數(shù)disteu5
    3.2.3函數(shù)vqlbg.6
3.2.4函數(shù)test6
3.2.5函數(shù)testDB7
    3.2.6 函數(shù)train8
3.2.7函數(shù)melfb8
演示分析.9
   心得體會(huì).11

附:GUI程序代碼12

用MATLAB實(shí)現(xiàn)簡(jiǎn)單的語音識(shí)別功能;
具體設(shè)計(jì)要求如下:
  用MATLAB實(shí)現(xiàn)簡(jiǎn)單的數(shù)字1~9的語音識(shí)別功能。
基于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)框圖
2.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)確性。
2.2特征參數(shù)的提取
對(duì)于特征參數(shù)的選取,我們使用mfcc的方法來提取。MFCC參數(shù)是基于人的聽覺特性利用人聽覺的屏蔽效應(yīng),在Mel標(biāo)度頻率域提取出來的倒譜特征參數(shù)。
MFCC參數(shù)的提取過程如下:
設(shè)語音信號(hào)的DFT為:
(1)
其中式中x(n)為輸入的語音信號(hào),N表示傅立葉變換的點(diǎn)數(shù)。
我們定義一個(gè)有M個(gè)濾波器的濾波器組(濾波器的個(gè)數(shù)和臨界帶的個(gè)數(shù)相近),采用的濾波器為三角濾波器,中心頻率為f(m),m=1,2,3,···,M
本系統(tǒng)取M=100。
(2)
其中為三角濾波器的頻率響應(yīng)。
MFCC系數(shù)個(gè)數(shù)通常取20—30,常常不用0階倒譜系數(shù),因?yàn)樗从车氖穷l譜能量,故在一般識(shí)別系統(tǒng)中,將稱為能量系數(shù),并不作為倒譜系數(shù),本系統(tǒng)選取20階倒譜系數(shù)。

2.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)過程如下:
其中m從1變化到當(dāng)前的碼本的碼字?jǐn)?shù),ε是分裂時(shí)的參數(shù),本文ε=0.01。
量化失真量和:
     (5)
相對(duì)失真:
              (6)
    4. 重新計(jì)算各個(gè)區(qū)域的新型心,得到新的碼書,轉(zhuǎn)3。
5. 重復(fù)2 ,3 和4步,直到形成有M個(gè)碼字的碼書(M是所要求的碼字?jǐn)?shù)),其中D0=10000。

2.4 VQ的說話人識(shí)別
設(shè)是未知的說話人的特征矢量,共有T幀是訓(xùn)練階段形成的碼書,表示碼書第m個(gè)碼字,每一個(gè)碼書有M個(gè)碼字。再計(jì)算測(cè)試者的平均量化失真D,并設(shè)置一個(gè)閾值,若D小于此閾值,則是原訓(xùn)練者,反之則認(rèn)為不是原訓(xùn)練者。
(7)
在具體的實(shí)現(xiàn)過程當(dāng)中,采用了matlab軟件來幫助完成這個(gè)項(xiàng)目。在matlab中主要由采集,分析,特征提取,比對(duì)幾個(gè)重要部分。以下為在實(shí)際的操作中,具體用到得函數(shù)關(guān)系和作用一一列舉在下面。
3.1函數(shù)關(guān)系
主要有兩類函數(shù)文件Train.m和Test.m
在Train.m調(diào)用Vqlbg.m獲取訓(xùn)練錄音的vq碼本,而[url=]Vqlbg.m調(diào)用mfcc.m獲取單個(gè)錄音的mel倒譜系數(shù)[/url],接著mfcc.m調(diào)用Melfb.m---將能量譜通過一組Mel尺度的三角形濾波器組。
在Test.m函數(shù)文件中調(diào)用Disteu.m計(jì)算訓(xùn)練錄音(提供vq碼本)與測(cè)試錄音(提供mfcc)mel倒譜系數(shù)的距離,即判斷兩聲音是否為同一錄音者提供。[url=]Disteu.m調(diào)用mfcc.m獲取單個(gè)錄音的mel倒譜系數(shù)[/url]。mfcc.m調(diào)用Melfb.m---將能量譜通過一組Mel尺度的三角形濾波器組。
3.2具體代碼說明
3.2.1函數(shù)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);  %對(duì)矩陣M賦值
end
end
h = hamming(n);    %加 hamming 窗,以增加音框左端和右端的連續(xù)性
M2 = diag(h) * M;
for i = 1:nbFrame
frame(:,i) = fft(M2(:, i));  %對(duì)信號(hào)進(jìn)行快速傅里葉變換FFT
end
t = 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ù))
3.2.2函數(shù)disteu
---計(jì)算測(cè)試者和模板碼本的距離
function d = 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)度不相等
end
d = zeros(N, P);
if (N < P)%在兩個(gè)音頻時(shí)間長(zhǎng)度相等的前提下
    copies = zeros(1,P);
   for n = 1:N
        d(n,:) = sum((x(:, n+copies) - y) .^2, 1);
    end
else
    copies = zeros(1,N);
    for p = 1:P
        d(:,p) = sum((x - y(:, p+copies)) .^2, 1)';
    end%%成對(duì)歐氏距離的兩個(gè)矩陣的列之間的距離
end
d = d.^0.5;
3.2.3函數(shù)vqlbg
---該函數(shù)利用矢量量化提取了音頻的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:2^i
            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;
        else
            dpr = t;
        end
    end
end
3.2.4函數(shù)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);            % 得到測(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);
        %此人匹配

        if dist <= distmin  %一個(gè)閾值,小于閾值,則就是這個(gè)人。
            msg = sprintf('第%d位說話者與模板語音信號(hào)匹配,符合要求!\n', k);         
            finalmsg = '此位說話者符合要求!'; %界面顯示語句,可隨意設(shè)定      
            disp(msg);      
        end               
        %此人不匹配

        if dist > distmin                        
            msg = sprintf('第%d位說話者與模板語音信號(hào)不匹配,不符合要求!\n', k);
             finalmsg = '此位說話者不符合要求!'; %界面顯示語句,可隨意設(shè)定
             disp(msg);     
        end      
end

3.2.5函數(shù)testDB
這個(gè)函數(shù)實(shí)際上是對(duì)數(shù)據(jù)庫一個(gè)查詢,根據(jù)測(cè)試者的聲音,找相應(yīng)的文件,并且給出是誰的提示
function testmsg = testDB(testdir, n, code)
nameList={'1','2','3','4','5','6','7','8','9' };                        %這個(gè)是我們要識(shí)別的9個(gè)數(shù)
for k = 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;

    for l = 1:length(code)  
       d = disteu(v, code{l});
        dist = sum(min(d,[],2)) / size(d,1);

        if dist < distmin
            distmin = dist;%%這里和test函數(shù)里面一樣  但多了一個(gè)具體語者的識(shí)別
            k1 = l;
        end     
    end
    msg=nameList{k1}
    msgbox(msg);
end

3.2.6 函數(shù)train
---該函數(shù)就是對(duì)音頻進(jìn)行訓(xùn)練,也就是提取特征參數(shù)
function code = train(traindir, n)

k = 16;                        % number of centroids required
for i = 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碼本
end
3.2.7 函數(shù)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));
直接轉(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:b4 1:b3] + 1;
v = 2 * [1-pm(b2:b4) pm(1:b3)];
m = sparse(r, c, v, p, 1+fn2);

我們的功能分為兩部分:對(duì)已經(jīng)保存的9個(gè)數(shù)字的語音進(jìn)行辨別和實(shí)時(shí)的判斷說話人說的是否為一個(gè)數(shù).在前者的實(shí)驗(yàn)過程中,先把9個(gè)數(shù)字的聲音保存成wav的格式,放在一個(gè)文件夾中,作為一個(gè)檢測(cè)的數(shù)據(jù)庫.然后對(duì)檢測(cè)者實(shí)行識(shí)別,系統(tǒng)給出提示是哪個(gè)數(shù)字.
在第二個(gè)功能中,實(shí)時(shí)的錄取一段說話人的聲音作為模板,提取mfcc特征參數(shù),隨后緊接著進(jìn)行遇著識(shí)別,也就是讓其他人再說相同的話,看是否是原說話者.

實(shí)驗(yàn)過程及具體功能如下
先打開Matlab 使Current Directory為錄音及程序所所在的文件夾
再打開文件“enter.m”,點(diǎn)run運(yùn)行,打開enter界面,點(diǎn)擊“進(jìn)入”按鈕進(jìn)入系統(tǒng)。(注:文件包未封裝完畢,目前只能通過此方式打開運(yùn)行。)(如下圖figure1)
           figure1
在對(duì)數(shù)據(jù)庫中已有的語者進(jìn)行識(shí)別模塊:
選擇載入語音庫語音個(gè)數(shù);
點(diǎn)擊語音庫錄制模版進(jìn)行已存語音信息的提;
點(diǎn)擊錄音-test進(jìn)行現(xiàn)場(chǎng)錄音;
點(diǎn)擊語者判斷進(jìn)行判斷數(shù)字,并顯示出來。
在實(shí)時(shí)語者識(shí)別模塊:
點(diǎn)擊實(shí)時(shí)錄制模板上的“錄音-train”按鈕,是把新語者的聲音以wav格式存放在”實(shí)時(shí)模板”文件夾中, 接著點(diǎn)擊“實(shí)時(shí)錄制模板”,把新的模板提取特征值。隨后點(diǎn)擊實(shí)時(shí)語者識(shí)別模板上的“錄音-train”按鈕,是把語者的聲音以wav格式存放在”測(cè)試”文件夾中,再點(diǎn)擊“實(shí)時(shí)語者識(shí)別”,在對(duì)測(cè)得的聲音提取特征值的同時(shí),和實(shí)時(shí)模板進(jìn)行比對(duì),然后得出是否是實(shí)時(shí)模板中的語者。另外面板上的播放按鈕都是播放相對(duì)應(yīng)左邊錄取的聲音。
想要測(cè)量多次,只要接著錄音,自動(dòng)保存,然后程序比對(duì)音頻就可以。
退出只要點(diǎn)擊菜單File/Exit,退出程序。
程序運(yùn)行截圖:
(fig.2)運(yùn)行系統(tǒng)界面
實(shí)驗(yàn)表明,該系統(tǒng)能較好地進(jìn)行語音的識(shí)別,同時(shí),基于矢量量化技術(shù)  (VQ)的語音識(shí)別系統(tǒng)具有分類準(zhǔn)確,存儲(chǔ)數(shù)據(jù)少,實(shí)時(shí)響應(yīng)速度快等綜合性能好的特點(diǎn).
矢量量化技術(shù)在語音識(shí)別的應(yīng)用方面,尤其是在孤立詞語音識(shí)別系統(tǒng)中得到很好的應(yīng)用,特別是有限狀態(tài)矢量量化技術(shù),對(duì)于語音識(shí)別更為有效。
通過這次課程設(shè)計(jì),我對(duì)語音識(shí)別有了更加形象化的認(rèn)識(shí),也強(qiáng)化了MATLAB的應(yīng)用,對(duì)將來的學(xué)習(xí)奠定了基礎(chǔ)。
附:GUI程序代碼


  1. function varargout = untitled2(varargin)
  2. % UNTITLED2 M-file for untitled2.fig
  3. %      UNTITLED2, by itself, creates a new UNTITLED2 or raises the existing
  4. %      singleton*.
  5. %
  6. %      H = UNTITLED2 returns the handle to a new UNTITLED2 or the handle to
  7. %      the existing singleton*.
  8. %
  9. %      UNTITLED2('CALLBACK',hObject,eventData,handles,...) calls the local
  10. %      function named CALLBACK in UNTITLED2.M with the given input arguments.
  11. %
  12. %      UNTITLED2('Property','Value',...) creates a new UNTITLED2 or raises the
  13. %      existing singleton*.  Starting from the left, property value pairs are
  14. %      applied to the GUI before untitled2_OpeningFunction gets called.  An
  15. %      unrecognized property name or invalid value makes property application
  16. %      stop.  All inputs are passed to untitled2_OpeningFcn via varargin.
  17. %
  18. %      *See GUI Options on GUIDE's Tools menu.  Choose "GUI allows only one
  19. %      instance to run (singleton)".
  20. %
  21. % See also: GUIDE, GUIDATA, GUIHANDLES

  22. % Copyright 2002-2003 The MathWorks, Inc.

  23. % Edit the above text to modify the response to help untitled2

  24. % Last Modified by GUIDE v2.5 08-Jun-2010 23:58:57
  25. % Begin initialization code - DO NOT EDIT
  26. gui_Singleton = 1;
  27. gui_State = struct('gui_Name',       mfilename, ...
  28.                    'gui_Singleton',  gui_Singleton, ...
  29.                    'gui_OpeningFcn', @untitled2_OpeningFcn, ...
  30.                    'gui_OutputFcn',  @untitled2_OutputFcn, ...
  31.                    'gui_LayoutFcn',  [] , ...
  32.                    'gui_Callback',   []);
  33. if nargin && ischar(varargin{1})
  34.     gui_State.gui_Callback = str2func(varargin{1});
  35. end
  36. if nargout
  37.     [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
  38. else
  39.     gui_mainfcn(gui_State, varargin{:});
  40. end
  41. % End initialization code - DO NOT EDIT
  42. % --- Executes just before untitled2 is made visible.
  43. function untitled2_OpeningFcn(hObject, eventdata, handles, varargin)
  44. % This function has no output args, see OutputFcn.
  45. % hObject    handle to figure
  46. % eventdata  reserved - to be defined in a future version of MATLAB
  47. % handles    structure with handles and user data (see GUIDATA)
  48. % varargin   command line arguments to untitled2 (see VARARGIN)
  49. % Choose default command line output for untitled2
  50. handles.output = hObject;
  51. % Update handles structure
  52. guidata(hObject, handles);
  53. axes(findobj('tag','axes13'));
  54. imshow('3.jpg');
  55. axes(findobj('tag','axes12'));
  56. imshow('1.jpg');
  57. % UIWAIT makes untitled2 wait for user response (see UIRESUME)
  58. % uiwait(handles.figure1);
  59. % --- Outputs from this function are returned to the command line.
  60. function varargout = untitled2_OutputFcn(hObject, eventdata, handles)
  61. % varargout  cell array for returning output args (see VARARGOUT);
  62. % hObject    handle to figure
  63. % eventdata  reserved - to be defined in a future version of MATLAB
  64. % handles    structure with handles and user data (see GUIDATA)
  65. % Get default command line output from handles structure
  66. varargout{1} = handles.output;
  67. % --- Executes on button press in pushbutton1.
  68. function pushbutton1_Callback(hObject, eventdata, handles)
  69. % hObject    handle to pushbutton1 (see GCBO)
  70. % eventdata  reserved - to be defined in a future version of MATLAB
  71. % handles    structure with handles and user data (see GUIDATA)
  72. Channel_Str=get(handles.popupmenu3,'String');     
  73. Channel_Number=str2double(Channel_Str{get(handles.popupmenu3,'Value')});
  74. global moodle;
  75. moodle = train('模版\',Channel_Number) %??′y?óó?ò???DDìáè???±?
  76. % --- Executes on button press in pushbutton2.
  77. function pushbutton2_Callback(hObject, eventdata, handles)
  78. % hObject    handle to pushbutton2 (see GCBO)
  79. % eventdata  reserved - to be defined in a future version of MATLAB
  80. % handglobal data1;
  81. global moodle ;
  82. test('測(cè)試\',1,moodle)%êμê±ó?ò??ì2a
  83. % --------------------------------------------------------------------
  84. function Open_Callback(hObject, eventdata, handles)
  85. % hObject    handle to Open (see GCBO)
  86. % eventdata  reserved - to be defined in a future version of MATLAB
  87. % handles    structure with handles and user data (see GUIDATA)
  88. [filename,pathname]=uigetfile('')
  89. file=get(handles.edits,[filename,pathname])
  90. [y,f,b]=wavread(file);
  91. % --------------------------------------------------------------------
  92. function Exit_Callback(hObject, eventdata, handles)
  93. % hObject    handle to Exit (see GCBO)
  94. % eventdata  reserved - to be defined in a future version of MATLAB
  95. % handles    structure with handles and user data (see GUIDATA)
  96. exit
  97. % --------------------------------------------------------------------
  98. function About_Callback(hObject, eventdata, handles)
  99. % hObject    handle to About (see GCBO)
  100. % eventdata  reserved - to be defined in a future version of MATLAB
  101. % handles    structure with handles and user data (see GUIDATA)
  102. H=['語者識(shí)別']
  103. helpdlg(H,'help text')
  104. % --------------------------------------------------------------------
  105. function File_Callback(hObject, eventdata, handles)
  106. % hObject    handle to File (see GCBO)
  107. % eventdata  reserved - to be defined in a future version of MATLAB
  108. % handles    structure with handles and user data (see GUIDATA)
  109. % --------------------------------------------------------------------
  110. function Edit_Callback(hObject, eventdata, handles)
  111. % hObject    handle to Edit (see GCBO)
  112. % eventdata  reserved - to be defined in a future version of MATLAB
  113. % handles    structure with handles and user data (see GUIDATA)
  114. % --------------------------------------------------------------------
  115. function Help_Callback(hObject, eventdata, handles)
  116. % hObject    handle to Help (see GCBO)
  117. % eventdata  reserved - to be defined in a future version of MATLAB
  118. % handles    structure with handles and user data (see GUIDATA)
  119. % --- Executes on button press in pushbutton7.
  120. function pushbutton7_Callback(hObject, eventdata, handles)
  121. % hObject    handle to pushbutton7 (see GCBO)
  122. % eventdata  reserved - to be defined in a future version of MATLAB
  123. % handles    structure with handles and user data (see GUIDATA)
  124. msg='請(qǐng)速度錄音?'
  125. msgbox(msg)
  126. clear
  127. global data1;
  128. %global dataDN1;
  129. AI = analoginput('winsound');
  130. chan = addchannel(AI,1:2);
  131. duration = 3; %1 second acquisition
  132. set(AI,'SampleRate',8000)
  133. ActualRate = get(AI,'SampleRate');
  134. set(AI,'SamplesPerTrigger',duration*ActualRate)
  135. set(AI,'TriggerType','Manual')
  136. blocksize = get(AI,'SamplesPerTrigger');
  137. Fs = ActualRate;
  138. start(AI)
  139. trigger(AI)
  140. [data1,time,abstime,events] = getdata(AI);
  141. fname=sprintf('E:\\Matlab語音識(shí)別系統(tǒng)\\實(shí)時(shí)模版\\s1.wav')
  142. %dataDN1=wden(data1,'heursure','s','one',5,'sym8');denoise
  143. wavwrite(data1,fname)
  144. msgbox(fname)
  145. % --- Executes on button press in pushbutton8.
  146. function pushbutton8_Callback(hObject, eventdata, handles)
  147. % hObject    handle to pushbutton8 (see GCBO)
  148. % eventdata  reserved - to be defined in a future version of MATLAB
  149. % handles    structure with handles and user data (see GUIDATA)
  150. global data1;
  151. %global dataDN1;
  152. sound(data1)
  153. %sound(dataDN1)
  154. axes(handles.axes1)%set to plot at axes1
  155. plot(data1);
  156. %plot(dataDN1);
  157. xlabel('訓(xùn)練采樣序列'),ylabel('信號(hào)幅');
  158. %xlabel('?μá·2é?ùDòáD'),ylabel('sym8D?2¨?μ??oóμ?D?o?·ù');
  159. grid on;
  160. clear
  161. % --- Executes on button press in pushbutton9.
  162. function pushbutton9_Callback(hObject, eventdata, handles)
  163. % hObject    handle to pushbutton9 (see GCBO)
  164. % eventdata  reserved - to be defined in a future version of MATLAB
  165. % handles    structure with handles and user data (see GUIDATA)
  166. msg='請(qǐng)速度錄音?'
  167. msgbox(msg)
  168. clear
  169. global data2;
  170. %global dataDN2;
  171. AI = analoginput('winsound');
  172. chan = addchannel(AI,1:2);
  173. duration = 3; %1 second acquisition
  174. set(AI,'SampleRate',8000)
  175. ActualRate = get(AI,'SampleRate');
  176. set(AI,'SamplesPerTrigger',duration*ActualRate)
  177. set(AI,'TriggerType','Manual')
  178. blocksize = get(AI,'SamplesPerTrigger');
  179. Fs = ActualRate;
  180. start(AI)
  181. trigger(AI)
  182. [data2,time,abstime,events] = getdata(AI);
  183. fname=sprintf('E:\\Matlab語音識(shí)別系統(tǒng)\\測(cè)試\\s1.wav')
  184. %dataDN1=wden(data1,'heursure','s','one',5,'sym8');denoise
  185. wavwrite(data2,fname)
  186. msgbox(fname)
  187. % --- Executes on button press in pushbutton10.
  188. function pushbutton10_Callback(hObject, eventdata, handles)
  189. % hObject    handle to pushbutton10 (see GCBO)
  190. % eventdata  reserved - to be defined in a future version of MATLAB
  191. % handles    structure with handles and user data (see GUIDATA)
  192. global data2;
  193. %global dataDN2;
  194. sound(data2)
  195. %sound(dataDN2)
  196. axes(handles.axes2)%set to plot at axes1
  197. plot(data2);
  198. %plot(dataDN2);
  199. xlabel('測(cè)試采樣序列'),ylabel('信號(hào)幅');
  200. %xlabel('2aê?2é?ùDòáD'),ylabel('sym8D?2¨?μ??oóμ?D?o?·ù');%%
  201. grid on;
  202. clear
  203. % --- Executes on button press in pushbutton11.
  204. function pushbutton11_Callback(hObject, eventdata, handles)
  205. % hObject    handle to pushbutton11 (see GCBO)
  206. % eventdata  reserved - to be defined in a future version of MATLAB
  207. % handles    structure with handles and user data (see GUIDATA)
  208. global moodle ;
  209. testDB('測(cè)試\',1,moodle)
  210. % --- Executes on button press in pushbutton12.
  211. function pushbutton12_Callback(hObject, eventdata, handles)
  212. % hObject    handle to pushbutton12 (see GCBO)
  213. % eventdata  reserved - to be defined in a future version of MATLAB
  214. % handles    structure with handles and user data (see GUIDATA)
  215. global moodle;
  216. moodle = train('實(shí)時(shí)模板\',1)
  217. % --- Executes on selection change in popupmenu3.
  218. function popupmenu3_Callback(hObject, eventdata, handles)
  219. % hObject    handle to popupmenu3 (see GCBO)
  220. % eventdata  reserved - to be defined in a future version of MATLAB
  221. % handles    structure with handles and user data (see GUIDATA)
  222. % Hints: contents = get(hObject,'String') returns popupmenu3 contents as cell array
  223. %        contents{get(hObject,'Value')} returns selected item from popupmenu3
  224. str=get(handles.popupmenu3,'String');
  225.     val=str2num(str{get(handles.popupmenu3,'Value')});
  226. switch val
  227.     case 1
  228.     case 2
  229.     case 3
  230.     case 4
  231.     case 5
  232.     case 6
  233.     case 7
  234.     case 8
  235.     case 9
  236. end
  237. % --- Executes during object creation, after setting all properties.
  238. function popupmenu3_CreateFcn(hObject, eventdata, handles)
  239. % hObject    handle to popupmenu3 (see GCBO)
  240. % eventdata  reserved - to be defined in a future version of MATLAB
  241. % handles    empty - handles not created until after all CreateFcns called
  242. % Hint: popupmenu controls usually have a white background on Windows.
  243. %       See ISPC and COMPUTER.
  244. if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
  245.     set(hObject,'BackgroundColor','white');
  246. end
  247. % --- Executes on button press in pushbutton9.
  248. function pushbutton13_Callback(hObject, eventdata, handles)
  249. % hObject    handle to pushbutton9 (see GCBO)
  250. % eventdata  reserved - to be defined in a future version of MATLAB
  251. % handles    structure with handles and user data (see GUIDATA)
  252. % --- Executes on button press in pushbutton10.
  253. function pushbutton14_Callback(hObject, eventdata, handles)
  254. % hObject    handle to pushbutton10 (see GCBO)
  255. % eventdata  reserved - to be defined in a future version of MATLAB
  256. % handles    structure with handles and user data (see GUIDATA)
  257. % --- Executes during object creation, after setting all properties.
  258. %function axes8_CreateFcn(hObject, eventdata, handles)
  259. % hObject    handle to axes8 (see GCBO)
  260. % eventdata  reserved - to be defined in a future version of MATLAB
  261. % handles    empty - handles not created until after all CreateFcns called

  262. % Hint: place code in OpeningFcn to populate axes8
復(fù)制代碼

完整的Word格式文檔51黑下載地址:
matlab語音識(shí)別系統(tǒng)(源代碼).doc (580.5 KB, 下載次數(shù): 164)




作者: kayhzk    時(shí)間: 2019-1-8 21:22
兄弟,你的源代碼打不開

作者: 123...@...    時(shí)間: 2020-6-3 11:28
enter m文件在哪里
作者: BUSHIJUN    時(shí)間: 2020-6-7 18:51
123...@... 發(fā)表于 2020-6-3 11:28
enter m文件在哪里

同求enter m 文件
作者: youyouxhz    時(shí)間: 2020-9-17 09:14
做的工作比較多呀
作者: youyouxhz    時(shí)間: 2020-9-17 09:14
樓主下了一番功夫呢




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1