下載地址: http://download.csdn.net/detail/fzxy002763/4082023
算法不是原創的,由于網上流傳版本很多,不過都是獨立給出一些m文件,不完整,故筆者整理了一下,調試通過,方便大家學習下dtw算法。
其中dtw_test是測試文件,其他皆為function文件
disp('正在計算參考模板的參數...') for i=1:5 fname = sprintf('%da.wav',i); x=fname; [x,fs]=wavread(x); [x1 x2] = vad(x); m = mfcc(x); m = m(x1-2:x2-2,:); ref(i).mfcc = m; % soundview(x); end disp('正在計算測試模板的參數...') for i=1:1 %[x,fs]=wavread('E:\\3.wav') fname = sprintf('%db.wav',i); x=fname; [x,fs]=wavread(x); [x1 x2] = vad(x); m = mfcc(x); m = m(x1-2:x2-2,:); test(i).mfcc = m; end disp('正在進行模板匹配...') dist = zeros(1,5); for i=1:1 for j=1:5 dist(i,j) = dtw(test(i).mfcc, ref(j).mfcc); end end disp('正在計算匹配結果...') for i=1:1 [d,j] = min(dist(i,:)); fprintf('測試模板 %d 的識別結果為:%d\n', i, j); end略微改動了下原版,這里兩次循環,第一次1~5,主要檢索模板,計算梅爾倒普系數等一些聲紋特征,然后在第二次循環中進行模板匹配的計算。這里文件命名原則是%da,如1a,1b,測試結果顯示為“測試模板%d的識別結果為x”,即意義是哪一個wav文件匹配哪一個文件,如程序測試結果為:
1.vad
2.識別
故是4a.wav匹配1b.wav,可以自行設定理解,PS:
錄音最好時間差不多,且大于1S,要不然可能會報index exceeds matrix dimensions這種錯誤。
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
