Matlabによる音声の前処理

音声信号の予備処理の結果、この信号を特徴付ける多くのスペクトルベクトルが取得され、さらなる認識に使用されます。



現代の認識装置で行われた基本的な仮定は、音声信号が数十ミリ秒の間隔にわたって静止している(つまり、そのスペクトル特性が比較的一定である)と見なされることです。 したがって、前処理の主な機能は、入力音声信号を間隔に分割し、各間隔の平滑化されたスペクトル推定値を取得することです。



1つの間隔の一般的な値は25.6ミリ秒です。 隣接する間隔は、前の間隔に対するオフセットで取得されます。 適用可能な間隔のオーバーラップ値は10ミリ秒です。 これらの各間隔の予備調査の結果、数十個のスペクトル値のベクトルを取得します。





音声信号の前処理アルゴリズムのブロック図を図1に示します。



音声信号の各間隔を事前に解決するために実行する必要のある手順について、以下で詳しく説明します。


例として、16 KHzの周波数と16ビットの解像度で離散化された音声サンプルを考えます。 離散化された音声信号は、25.6 msの間隔、つまり409サンプルに分割されます。 間隔は、10ミリ秒(160サンプル)のシフトでオーバーラップします。



図1 音声信号の予備処理のアルゴリズムのブロック図



次に、音声信号の予備処理の段階。


  1. デジタル化された(時間量子化およびレベルで量子化された)音声信号は、10 msごとにシフトして25.6 msのブロックに分割されます。つまり、160サンプルのシフトで各ブロック409サンプルのブロックです。
  2. 原則として、高周波増幅は、唇からの分散によって引き起こされる弱体化を補うために使用されます。 これを行うには、信号ブロックを1次フィルターに通します

    S(1)= 0; S(n)= y(n)-y(n-1)、n = 2 ... 409、

    ここで、y nはブロック内のn番目のサンプルです。
  3. このタイプの処理では、ウィンドウ関数が各ブロックに適用されます。

    この場合、ハミングウィンドウは次の式に従って取得されます。

    D(n)=(0.54-0.46•cos(2π•(n-1)/ 408))•S =(n)、n = 1、...、409。

  4. スペクトル推定値を取得するには離散フーリエ変換が使用されます。 この場合、必要な数のゼロを付けてブロックを右に追加することにより、ブロックの長さを512要素に増やします。 その後、512ポイントの長さの高速フーリエ変換を適用し、512個のスペクトル複素数値を取得します。 フーリエ変換を適用する512の値は実数であるため、取得されるスペクトル複素数値はペアワイズ共役です。2番目の値は512番目から、3番目は3番目から

    511番目など したがって、最後の256個の複雑な変換値は無視されます。これらは以前の値と複雑に結合されており、新しい情報を伝達しないためです。
  5. 最初の256の複素スペクトル値については、振幅を見つけます。 振幅フーリエスペクトルは、非線形(対数に似た) メルスケールにある「三角」周波数帯域内のスペクトル係数の振幅を加算することにより平滑化(平均化)されます。 16 KHzに等しい言語の制限周波数の場合、このような24の周波数帯域が使用されます。


メルスケールは、人間の耳の周波数分離を近似するために導入されており、最大1000 Hzまで線形で、1000 Hzを超える対数です。



最初の振幅係数(スペクトルの定数成分)は無視され、残りの255個のスペクトル値の振幅が平均化されます。 24個の三角バンドパスフィルターとして平均化を実装します。 このような帯域の低周波数、中周波数、および高周波数を表1に示します。



各三角フィルターは、特定のフィルターの低周波数と高周波数の間の周波数に対応する振幅スペクトル値の加重平均を見つけます。 振幅が帯域の平均周波数に正確に対応する場合、1に等しい係数が乗算されます。 周波数の対応する振幅値を中央から下限または上限に移動すると、係数は1からゼロに減少します。



係数による振幅の結果の積が加算され、振幅値の数で除算されます。 その結果、この周波数帯域の加重平均を見つけます。



256の振幅は、0 Hzから8000 Hzの周波数に対応しています。 移動のステップは8000/256 = 31.25 Hzです。 つまり、最初の振幅は0 Hz、2番目は31.25 Hz、3番目は62.5 Hzなどの周波数に対応します。

たとえば、メルスケールの最初の周波数帯域の場合、低い周波数は0 Hz、平均周波数は74.24 Hz、高い周波数は156.4 Hzです。



したがって、1番目(0 Hz)、2番目(31.25 Hz)、3番目(62.5 Hz)、4番目(93.75 Hz)、5番目(125 Hz)、6番目(156.25 Hz)が最初の周波数帯域に分類されます。振幅。

図2によると 3番目の振幅は、62.5 / 74.24≈0.84の係数に対応します。 5番目の振幅の場合、係数は(156.4-125)/(156.4-74.24)≈0.38です。





図2。



表1 メル周波数スケール



説明したアクションの結果として、24要素のスペクトル(音響)ベクトルを取得します。



結論として、1つの言語サンプル内の音響ベクトルを正規化します。 これを行うには、最長のベクトル長を見つけ、すべてのベクトルの値にこの長さの逆数を掛けます。



音声信号を前処理するアルゴリズムをシミュレートするために、MATLABメディアが選択されました。

clear all; close all; signal = wavread('example.wav') ; subplot(3,3,1); plot(signal);title('example.wav'); % signal: fdyscr=16 KHz, 16 bit % acoustic preprocessing of signal d=length(signal); tim=1; i=1; while i<d-408 y=signal(i:i+408); % block processing; result - acoustic vector x(1)=0.0; for j=2:409 x(j)=y(j)-y(j-1); end; %premphasis % pi=3.14; for j=1:409 z(j)=(0.54-0.46*cos(2*pi*(j-1)/408))*x(j); end; %Hamming window C=fft(z,512); C=abs(C); % FFT S=C(1:256); % amplitudes % binning of 255 spectral values amplitudes, j=2,3,...,256 f=[0; 74.24; 156.4; 247.2; 347.6; 458.7; 581.6; 717.5; 867.9; 1034; 1218; 1422; 1647; 1895; 2171; 2475; 2812; 3184; 3596; 4052; 4556; 5113; 5730; 6412; 7166; 8000]; krok=16000/512; % krok=31,25 a(1:26)=0; j=2; k=1; n(1:26)=0; h=krok*(j-1); while k<26 while and(f(k)<h,h<f(k+1)) alfa=(hf(k))/(f(k+1)-f(k)); % interval [f(k),f(k+1)]; a(k+1)=a(k+1)+S(j)*alfa; n(k+1)=n(k+1)+1; a(k)=a(k)+S(j)*(1-alfa); n(k)=n(k)+1; j=j+1; h=krok*(j-1); end; a(k)=a(k)/n(k); k=k+1; end; O(tim,1:24)=a(2:25); %O(tim,25)=sum(y.^2); norma(tim)=norm(O(tim,1:24)); i=i+160; tim=tim+1; % next block end; % end of block proccesing time=tim-1; normamax=max(norma(1:time)); O(1:time,1:24)= O(1:time,1:24)/normamax; % normalization % end of signal acoustic preprocessing subplot(3,3,2); plot(y);title(' 409 values '); subplot(3,3,3); plot(x);title(' premphasis '); subplot(3,3,4); plot(z);title(' Hemming'); subplot(3,3,5); plot(C);title(' 512 fft '); subplot(3,3,6); plot(S);title(' 256 elements '); subplot(3,3,7); plot(O(time,1:24));title(' 24-element vector');
      
      





音声信号の前処理のステップ1〜5の図を図3に示します。



図3 音声信号の前処理の段階



個別の処理ステップ




















最初の図は、16 KHzの周波数と16ビットのビット深度で離散化された言語信号example.wavを示しています。



2番目の図では、指定された音声信号の1ブロック(間隔)が25.6ミリ秒続きます。 このブロックは409サンプルに対応します。



3番目の図では、1次フィルターで処理した後の音声信号の1つのブロックが表示されています。



4番目のモデルは、ハミングウィンドウを適用した後の1ブロックを示しています。



5番目の図は、この単一ブロックの高速フーリエ変換の512の振幅値を示しています。



高速フーリエ変換のこれらの振幅値はペアごとに同一であるため(高速フーリエ変換の対応する複素数値はペアごとの複素共役であるため)、最初の256個の振幅値のみを取得できます。 これらの256個の振幅値は、6番目の図に示されています。



7番目の図は、24個の「三角」周波数帯域内の256個の振幅値を平均化した後の成分が得られる24要素ベクトルの値を示しています。



All Articles