zoukankan      html  css  js  c++  java
  • 毕业论文B.1 dtw和cdhmm代码学习

    代码结构

    已知函数或代码段详解

    testdtw.m是测试脚本。

     1 disp('正在计算参考模板的参数...')
     2 for i=1:10
     3     fname = sprintf('..\\ch6\\%da.wav',i-1);
     4     x = wavread(fname);
     5     [x1 x2] = vad(x);
     6     m = mfcc(x);
     7     m = m(x1-2:x2-2,:);
     8     ref(i).mfcc = m;
     9 end
    10 
    11 disp('正在计算测试模板的参数...')
    12 for i=1:10
    13     fname = sprintf('..\\ch6\\%db.wav',i-1);
    14     x = wavread(fname);
    15     [x1 x2] = vad(x);
    16     m = mfcc(x);
    17     m = m(x1-2:x2-2,:);
    18     test(i).mfcc = m;
    19 end
    20 
    21 disp('正在进行模板匹配...')
    22 dist = zeros(10,10);
    23 for i=1:10
    24 for j=1:10
    25     dist(i,j) = dtw(test(i).mfcc, ref(j).mfcc);
    26 end
    27 end
    28 
    29 disp('正在计算匹配结果...')
    30 for i=1:10
    31     [d,j] = min(dist(i,:));
    32     fprintf('测试模板 %d 的识别结果为:%d\n', i, j);
    33 end
    1. 使用同样的方法计算参考模板和测试模板的MFCC系数。
      其中经过读入输入数据、计算MFCC、端点检测、截取需要帧的MFCC系数。
    2. 利用dtw计算相异程度。
    3. 比较相异程度,最低的为匹配值。
    • VAD

    vad.m,端点检测。输入语音信号列向量,输出[x1 x2],x1开始点,x2结束点。

    • MFCC

    mfcc.m,Mel频率倒谱系数的算法里面的一行代码是

    bank=melbankm(24,256,8000,0,0.5,'m');

    里面的24即计算24阶Mel频率倒谱系数。该函数输入整段语音列向量,即wavread读出的向量。输出为矩阵,每行代表一个帧计算得来的24维特征。在进行MFCC计算时一般需要检测端点。

    • DTW和DTW2

    dtw/dtw.m和dtw/dtw2.m,这两个是动态时间规整算法,输入两个列数相同矩阵。矩阵每一行表示语音信号的每一个帧,一行中的每一个元素表示改帧通过特征提取而得来的一个值,比如24阶MFCC系数有24个特征值,那么一行就是24个元素。每一个帧的点数与这里的长度无关,因为这一步的输入是从特征提取函数而来比如MFCC。

    输入两个比较矩阵,每行为一个帧的特征。输出为一个值,即匹配程度。

     

  • 相关阅读:
    Modbus: 1. Java使用Modbus读取Slave端数据(TCP)
    Nodejs后台发送https请求验证证书
    Cocos2d-JS: 2.编译到安卓和iOS
    Cocos2d-JS: 1.环境搭建
    [转载]聪明人为什么不统治世界——从围棋到德州扑克
    [转载] 国内外GIS方面的网站(较全)
    [转载]土豪算法(笑话也是实话)
    [转载]混沌理论三原则
    [转]追MM的各种算法
    [转载]建筑美和数学美
  • 原文地址:https://www.cnblogs.com/cheetahw/p/2512970.html
Copyright © 2011-2022 走看看