音声認識メモ(HMM)その2(HTK HCopyコマンド(2))
音声認識は音声データをそのまま扱うのではなく、MFCCという音響特徴データに変換する。
MFCCは"Mel Frequency Cepstrum Coefficents"の略。
音というのは波で、複数の純音が重なり合っている(ならば、純音に分離できるということ)。
音声データは"x軸が時間でy軸が振幅"なので、これを"x軸が周波数でy軸が振幅"に変換する。
人間の耳は、高い周波数の音ほど違いが分かりにくくなるので、周波数の帯域に重み付け(フィルタ)をする。
周波数のうち、音声の特徴をよく表しているものを取り出す("次元"というのは、いくつ取り出すかを表す)
音響特徴データを得るためのコマンドが「HCopy」コマンド。
ソースファイル(HCopy.c)の冒頭コメントでは、以下の一文で要約されている。
Copy one Speech File to another
使い方
HCopy -C "<configファイル名>" "<音声ファイル名>" "<出力結果ファイル名>"
configファイルに指定するパラメータ例
SOURCEFORMAT = WAV SOURCEKIND = WAVEFORM SOURCERATE = 625 NUMCEPS = 12 TARGETKIND = MFCC_0_D_A WINDOWSIZE = 250000.0 TARGETRATE = 100000.0 USEHAMMING = T PREEMCOEF = 0.97 NUMCHANS = 24
意味は以下の通り。
SOURCEFORMAT = WAV / NOHEAD
フォーマット状態(ヘッダがあるかないか等)
SOURCEKIND = WAVEFORM
データの種類、"WAVEFORM"なら波形データであることを示す
SOURCERATE = 625
音声データの1サンプルあたりの時間。100ナノ秒単位で指定。
16KHz -> 625 8KHz -> 1250
周波数の逆数で求める(16KHzを例にした計算式は以下のとおり)
1 / 16000[Hz] * 1000[ms] * 1000[us] * 1000[ns] / 100[ns]
NUMCEPS = 12
MFCCの次元数
TARGETKIND = MFCC_0_D_A
MFCCのタイプ
_0 -> 0次の係数を使う _D -> 1次差分 _A -> 2次差分
前出の"NUMCEPS"に"12"を指定した場合、0次の分を加えて13次元、これの1次差分、2次差分をとると、MFCCの出力は39個(=13 * 3)になる。
WINDOWSIZE = 250000.0
MFCC計算の単位となる時間。100ナノ秒単位で指定。
TARGETRATE = 100000.0
MFCC計算の周期となる時間。100ナノ秒単位で指定。
USEHAMMING = T
ハミング窓を使う。データ境界での情報量の落ち込みを低減。
PREEMCOEF = 0.97
プリエンファシス係数。音声データの周波数成分の強調で使う。
NUMCHANS = 24
フィルタバンク解析で指定する係数。