0

読み始める前に、下手な英語を許してください、ありがとう。

私はリビアのコンピューター工学コースの最終学年です。

私の卒業プロジェクト名は「分類器融合法を用いた孤立単語の音声認識システム」です。このプロジェクトの基本的な考え方は、数字 (0 ~ 9) の 1 秒の記録を入力すると、それがテキストとして画面に表示されるというものです。私の手順は次のとおりです。

      * Input the word .
      * Pre-processing of the speech signal.
      * Extract features using Mel Frequency Cepstral Coefficients.
      *  classify the word using:
                   * MED Classifier. 
                   * Dynamic Time Warping Classifier .
                   * Bayes Classifier .
                   * Classifier Fusion: Combination of the above classifiers, hoping to compensate for weak   
                     classier performance.

そのため、MFCC を使用して機能を抽出した後、MED を使用して、ASR システム全体を見て、それがどのように機能するかを視覚化しました。それから私は DTW 分類子から始めました。正直なところ、私はそれを正しく行っているかどうか確信が持てません。したがって、ここにコードを示します。以前に DTW を分類子として使用したことがある場合は、DTW を使用するのが良い考えかどうか教えてください。それで、私はそれを正しくやっていますか?

test.mat には 2 つの変数があります。'm' は 1 番目の話された単語、'b' も 1 番目の話された単語ですが、すべてが単独で記録されたので、'm' を保持して比較します記録された単語2に対して、1vs1のコストは1vs2よりも小さくなければなりませんが、私の場合はそうではありません.なぜですか????

  clear;
  load('test.mat')
  b=m;
  m=b;
  dis=zeros(length(m),length(b));
  ac_cost=zeros(length(m),length(b));
  cost=0;
  p=[];
  %we create the distance matrix by calculating the Eucliden distance between
  %all pairs
  for i = 1 : length(m)
      for j = 1 : length(b)

          dis(i,j)=(b(j)-m(i))^2;

      end
  end
  ac_cost(1,1)=dis(1,1);
  %calculate first row
  for i = 2 : length(b)
      ac_cost(1,i)=dis(1,i)+ac_cost(1,i-1);

  end
  %calculate first coulmn
  for i = 2 : length(m)
      ac_cost(i,1)=dis(i,1)+ac_cost(i-1,1);

  end
  %calculate the rest of the matrix
  for i = 2 : length(m)
      for j = 2 : length(b)
          ac_cost(i,j)=min([ac_cost(i-1,j-1),ac_cost(i-1,j),ac_cost(i,j-1)])+dis(i,j);
      end
  end
  %find the best path
  i=length(m)
  j=length(b)
    cost=cost+dis(i,j)+dis(1,1)
  while i>1 && j>1

      cost=cost+min([dis(i-1, j-1), dis(i-1, j), dis(i, j-1)]);

      if i==1
          j=j-1;
      elseif j==1
          i=i-1;
      else
          if ac_cost(i-1,j)==min([ac_cost(i-1, j-1), ac_cost(i-1, j), ac_cost(i, j-1)])
              i=i-1;
          elseif ac_cost(i,j-1)==min([ac_cost(i-1, j-1), ac_cost(i-1, j), ac_cost(i, j-1)])
              j=j-1;
          else
              i=i-1;
              j=j-1;

          end
      end

  end

よろしくお願いします

4

0 に答える 0