日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > windows >内容正文

windows

MATLAB语音识别系统[声纹识别]

發(fā)布時(shí)間:2023/12/20 windows 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MATLAB语音识别系统[声纹识别] 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一、 語音識別的簡單介紹

基于VQ的說話人識別系統(tǒng),矢量量化起著雙重作用。在訓(xùn)練階段,把每一個(gè)說話者所提取的特征參數(shù)進(jìn)行分類,產(chǎn)生不同碼字所組成的碼本。在識別(匹配)階段,我們用VQ方法計(jì)算平均失真測度(本系統(tǒng)在計(jì)算距離d時(shí),采用歐氏距離測度),從而判斷說話人是誰。

語音識別系統(tǒng)結(jié)構(gòu)框圖如圖1所示。

圖1 語音識別系統(tǒng)結(jié)構(gòu)框圖

語者識別的概念

語者識別就是根據(jù)說話人的語音信號來判別說話人的身份。語音是人的自然屬性之一,由于說話人發(fā)音器官的生理差異以及后天形成的行為差異,每個(gè)人的語音都帶有強(qiáng)烈的個(gè)人色彩,這就使得通過分析語音信號來識別說話人成為可能。用語音來鑒別說話人的身份有著許多獨(dú)特的優(yōu)點(diǎn),如語音是人的固有的特征,不會(huì)丟失或遺忘;語音信號的采集方便,系統(tǒng)設(shè)備成本低;利用電話網(wǎng)絡(luò)還可實(shí)現(xiàn)遠(yuǎn)程客戶服務(wù)等。因此,近幾年來,說話人識別越來越多的受到人們的重視。與其他生物識別技術(shù)如指紋識別、手形識別等相比較,說話人識別不僅使用方便,而且屬于非接觸性,容易被用戶接受,并且在已有的各種生物特征識別技術(shù)中,是唯一可以用作遠(yuǎn)程驗(yàn)證的識別技術(shù)。因此,說話人識別的應(yīng)用前景非常廣泛:今天,說話人識別技術(shù)已經(jīng)關(guān)系到多學(xué)科的研究領(lǐng)域,不同領(lǐng)域中的進(jìn)步都對說話人識別的發(fā)展做出了貢獻(xiàn)。說話人識別技術(shù)是集聲學(xué)、語言學(xué)、計(jì)算機(jī)、信息處理和人工智能等諸多領(lǐng)域的一項(xiàng)綜合技術(shù),應(yīng)用需求將十分廣闊。在吃力語音信號的時(shí)候如何提取信號中關(guān)鍵的成分尤為重要。語音信號的特征參數(shù)的好壞直接導(dǎo)致了辨別的準(zhǔn)確性。

特征參數(shù)的提取

對于特征參數(shù)的選取,我們使用mfcc的方法來提取。MFCC參數(shù)是基于人的聽覺特性利用人聽覺的屏蔽效應(yīng),在Mel標(biāo)度頻率域提取出來的倒譜特征參數(shù)。

MFCC參數(shù)的提取過程如下:

1. 對輸入的語音信號進(jìn)行分幀、加窗,然后作離散傅立葉變換,獲得頻譜分布信息。

設(shè)語音信號的DFT為:

(1)

其中式中x(n)為輸入的語音信號,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è)濾波器組輸出的對數(shù)能量。

(2)

其中

為三角濾波器的頻率響應(yīng)。

5. 經(jīng)過離散弦變換(DCT)得到MFCC系數(shù)。


MFCC系數(shù)個(gè)數(shù)通常取20—30,常常不用0階倒譜系數(shù),因?yàn)樗从车氖穷l譜能量,故在一般識別系統(tǒng)中,將稱為能量系數(shù),并不作為倒譜系數(shù),本系統(tǒng)選取20階倒譜系數(shù)。

用矢量量化聚類法生成碼本

我們將每個(gè)待識的說話人看作是一個(gè)信源,用一個(gè)碼本來表征。碼本是從該說話人的訓(xùn)練序列中提取的MFCC特征矢量聚類而生成。只要訓(xùn)練的序列足夠長,可認(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ù),本文ε=。

3. 根據(jù)得到的碼本把所有的訓(xùn)練序列(特征矢量)進(jìn)行分類,然后按照下面兩個(gè)公式計(jì)算訓(xùn)練矢量量化失真量的總和

以及相對失真(n為迭代次數(shù),初始n=0,

=∞,B為當(dāng)前的碼書),若相對失真小于某一閾值ε,迭代結(jié)束,當(dāng)前的碼書就是設(shè)計(jì)好的2m個(gè)碼字的碼書,轉(zhuǎn)5。否則,轉(zhuǎn)下一步。

量化失真量和:

(5)

相對失真:

(6)

4. 重新計(jì)算各個(gè)區(qū)域的新型心,得到新的碼書,轉(zhuǎn)3。

5. 重復(fù)2 ,3 和4步,直到形成有M個(gè)碼字的碼書(M是所要求的碼字?jǐn)?shù)),其中D0=10000。

VQ的說話人識別

設(shè)是未知的說話人的特征矢量

,共有T幀是訓(xùn)練階段形成的碼書,表示碼書第m個(gè)碼字,每一個(gè)碼書有M個(gè)碼字。再計(jì)算測試者的平均量化失真D,并設(shè)置一個(gè)閾值,若D小于此閾值,則是原訓(xùn)練者,反之則認(rèn)為不是原訓(xùn)練者。

二 算法程序分析

在具體的實(shí)現(xiàn)過程當(dāng)中,采用了matlab軟件來幫助完成這個(gè)項(xiàng)目。在matlab中主要由采集,分析,特征提取,比對幾個(gè)重要部分。以下為在實(shí)際的操作中,具體用到得函數(shù)關(guān)系和作用一一列舉在下面。 函數(shù)關(guān)系 主要有兩類函數(shù)文件和 在調(diào)用獲取訓(xùn)練錄音的vq碼本,而調(diào)用獲取單個(gè)錄音的mel倒譜系數(shù),接著調(diào)用將能量譜通過一組Mel尺度的三角形濾波器組。 在函數(shù)文件中調(diào)用計(jì)算訓(xùn)練錄音(提供vq碼本)與測試錄音(提供mfcc)mel倒譜系數(shù)的距離,即判斷兩聲音是否為同一錄音者提供。調(diào)用獲取單個(gè)錄音的mel倒譜系數(shù)。調(diào)用將能量譜通過一組Mel尺度的三角形濾波器組。 具體代碼說明 函數(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); %對矩陣M賦值 end end h = hamming(n); %加 hamming 窗,以增加音框左端和右端的連續(xù)性 M2 = diag(h) * M; for i = 1:nbFrame frame(:,i) = fft(M2(:, i)); %對信號進(jìn)行快速傅里葉變換FFT end t = n / 2; tmax = l / fs; m = melfb(20, n, fs); %將上述線性頻譜通過Mel 頻率濾波器組得到Mel 頻譜,下面在將其轉(zhuǎn)化成對數(shù)頻譜 n2 = 1 + floor(n / 2); z = m * abs(frame(1:n2, :)).^2; r = dct(log(z)); %將上述對數(shù)頻譜,經(jīng)過離散余弦變換(DCT)變換到倒譜域,即可得到Mel 倒譜系數(shù)(MFCC參數(shù)) 函數(shù)disteu ---計(jì)算測試者和模板碼本的距離 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í)間長度不相等 end d = zeros(N, P); if (N < P)%在兩個(gè)音頻時(shí)間長度相等的前提下copies = zeros(1,P);for n = 1:Nd(n,:) = sum((x(:, n+copies) - y) .^2, 1);end elsecopies = zeros(1,N);for p = 1:Pd(:,p) = sum((x - y(:, p+copies)) .^2, 1)';end%%成對歐氏距離的兩個(gè)矩陣的列之間的距離 end d = d.^; 函數(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^ir(:, j) = mean(d(:, find(ind == j)), 2);x = disteu(d(:, find(ind == j)), r(:, j));for q = 1:length(x)t = t + x(q);endendif (((dpr - t)/t) < e)break;elsedpr = t;endend end 函數(shù)test function finalmsg = test(testdir, n, code)for k = 1:n % read test sound file of each speakerfile = sprintf('%ss%', testdir, k);[s, fs] = wavread(file); v = mfcc(s, fs); % 得到測試人語音的mel倒譜系數(shù) distmin = 4; %閾值設(shè)置處% 就判斷一次,因?yàn)槟0謇锩嬷挥幸粋€(gè)文件d = disteu(v, code{1}); %計(jì)算得到模板和要判斷的聲音之間的“距離”dist = sum(min(d,[],2)) / size(d,1); %變換得到一個(gè)距離的量%測試閾值數(shù)量級msgc = sprintf('與模板語音信號的差值為:%10f ', dist);disp(msgc); %此人匹配 if dist <= distmin %一個(gè)閾值,小于閾值,則就是這個(gè)人。msg = sprintf('第%d位說話者與模板語音信號匹配,符合要求!\n', k); finalmsg = '此位說話者符合要求!'; %界面顯示語句,可隨意設(shè)定 disp(msg); end %此人不匹配 if dist > distmin msg = sprintf('第%d位說話者與模板語音信號不匹配,不符合要求!\n', k);finalmsg = '此位說話者不符合要求!'; %界面顯示語句,可隨意設(shè)定disp(msg); end end函數(shù)testDB 這個(gè)函數(shù)實(shí)際上是對數(shù)據(jù)庫一個(gè)查詢,根據(jù)測試者的聲音,找相應(yīng)的文件,并且給出是誰的提示 function testmsg = testDB(testdir, n, code) nameList={'1','2','3','4','5','6','7','8','9' }; %這個(gè)是我們要識別的9個(gè)數(shù) for k = 1:n % 數(shù)據(jù)庫中每一個(gè)說話人的特征file = sprintf('%ss%', testdir, k); %找出文件的路徑[s, fs] = wavread(file); v = mfcc(s, fs); % 對找到的文件取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 < distmindistmin = dist;%%這里和test函數(shù)里面一樣 但多了一個(gè)具體語者的識別k1 = l;end endmsg=nameList{k1}msgbox(msg); end函數(shù)train ---該函數(shù)就是對音頻進(jìn)行訓(xùn)練,也就是提取特征參數(shù) function code = train(traindir, n)k = 16; % number of centroids required for i = 1:n % 對數(shù)據(jù)庫中的代碼形成碼本file = sprintf('%ss%', 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函數(shù)melfb ---確定矩陣的濾波器 function m = melfb(p, n, fs)f0 = 700 / fs; fn2 = floor(n/2); lr = log(1 + 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);

總結(jié)

以上是生活随笔為你收集整理的MATLAB语音识别系统[声纹识别]的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。