Simple Audio Recognition②(MFCC; Mel-Frequency Cepstrum Coefficients)|音声認識(Audio Recognition)のトレンドを追う #2

f:id:lib-arts:20190630163911p:plain

下記の記事でSimple Audio Recognitionについて取り扱ったのですが、背景知識やさらなるトレンドも含めると2回じゃまとまりきらなそうだったので、音声認識(Audio Recognition)のシリーズとして別途開始することにしました。

#1では、上記で動かしたSimple Audio Recognitionの動作結果を振り返りながら、実装にあたっての背景知識の整理を行いました。

#2ではSimple Audio Recognitionの実装で特徴量の抽出として用いられているMFCC(Mel-Frequency Cepstrum Coefficients)について取り扱います。
以下目次になります。
1. 音声データのデジタル化とデータ形式
2. フーリエ変換(Fourier Transform)とスペクトラム(Spectrum)
3. MFCC(Mel-Frequency Cepstrum Coefficients)
4. まとめ


1. 音声データのデジタル化とデータ形式
1節では音声データについての概要を掴むにあたって、音声データのデジタル化とデータ形式についてまとめます。

・標本化、量子化
まずは標本化と量子化について取り扱います。

f:id:lib-arts:20190630163937p:plain

標本化 - Wikipedia

標本化は上記のように波の形で表された音の情報をデジタル化することです。

標本化(ひょうほんか)または英語でサンプリング(sampling)とは、連続信号を一定の間隔をおいて測定することにより、離散信号として収集することである。アナログ信号をデジタルデータとして扱う(デジタイズ)場合には、標本化と量子化が必要になる。

Wikipediaの「標本化」より冒頭部を引用すると上記のような記述を確認することができます。標本化(sampling)は「連続信号を一定の感覚をおいて測定する」とあります。こうすることによって離散的なデータを得ることができます。またこの際に量子化を行うことによって、各測定における値をビットで表すことによってデータのデジタル化が可能です。例えば8bitは2^8=256、16bitは2^{16}=65536となります。量子化にあたっては大体このように値を表現するため、256や65536はプログラミングをする際などにあちこちで見かける数字になります。

・サンプリング周波数とナイキスト周波数
標本化、量子化については一通り理解できたので、波で表した音声をデジタル化する流れについては大体つかめた形になります。次に気になるのは、どのくらいの区間で標本化するかです。この時に重要になる考え方がサンプリング周波数という考え方です。

f:id:lib-arts:20190630165235p:plain

サンプリング周波数 - Wikipedia
上記がサンプリング周波数の概要です。単位時間あたりに標本を採る頻度であり、単位はHzが一般的に使われるとされています。

f:id:lib-arts:20190630165309p:plain
ここで重要なのが、サンプリング周波数の1/2よりも周波数が大きい成分は復元時に折り返し雑音になるので、標本化の前に帯域制限フィルタを用いて遮断しておかなければならないということです。
音楽CDで利用されるサンプリング周波数が44.1kHz(44,100Hz)なのは、人間の可聴域の上限は20kHz(20,000Hz)とされているため、その2倍強にサンプリング周波数を設定しておけば実用上問題ないということに起因しています。ここで1/2と2倍の話については波は振動であり、高い値と低い値を持つためです。
またこの際にサンプリング周波数の1/2の周波数のことをナイキスト周波数(Nyquist frequency)と呼んでおり、一旦は可聴域の20kHzよりもCDなどのナイキスト周波数は大きくしているということだけ掴んでおければ十分そうです。

ここまでで音声データのデジタル化に関して大体の内容についてまとめられたので、1節はここまでとします。


2. フーリエ変換(Fourier Transform)とスペクトラム(Spectrum)
波のデータの分析にあたって周波数成分に関する考察は昔から行われてきており、今回のテーマであるMFCC(Mel-Frequency Cepstrum Coefficients)でもフーリエ変換をベースとして用いています。そのため2節ではフーリエ変換(Fourier Transform)について取り扱っていきます。

f:id:lib-arts:20190630171520p:plain

フーリエ変換 - Wikipedia
上記はWikipediaの記事の冒頭です。信号を周波数の違うsinやcosなどの線型結合で表すのがフーリエ変換の考え方です。

f:id:lib-arts:20190630171539g:plain

イメージとしてはWikipediaフーリエ変換記事の上図がアニメーションのためわかりやすいです。任意の波を周波数の異なる複数の波の足し合わせで表しています。

フーリエ変換を行なうにあたって、各周波数での波の強さ(振幅)を表すことで情報を表すことができます。これを周波数スペクトル(Frequency spectrum)と呼んでいます。説明だとわかりづらいのでまずは図を見てみましょう。

f:id:lib-arts:20190630172943p:plain

周波数スペクトル - Wikipedia
このように変換前の音声の波形のデータ(左)を周波数スペクトル(右)に変換することができます。周波数スペクトルの見方としては、その周波数における波の振幅の大きさを表していると考えると良いです。横軸で周波数が表されています。
ここまでの内容でフーリエ変換についての把握と、音の特徴量の抽出への繋がりがなんとなくイメージできたところで3節では実際にMFCCの話を行なっていきます。


3. MFCC(Mel-Frequency Cepstrum Coefficients)
3節では音声データから特徴量を抽出する手法であり、DeepLearning登場以前から音声認識の分野では支配的な手法であった、MFCCについて取り扱います。

f:id:lib-arts:20190630174340p:plain
上記のようにMel-Frequency Cepstrum Coefficientsで検索したところいくつか見つかったのですが、中でも一番上に出てきたLogan[2000]の研究が被引用数が多かったのでこちらを参考にします(被引用数は一概に言えないところもありますが、基本的にはあてにして良い指標だと思われます)。

f:id:lib-arts:20190630174400p:plain

http://ismir2000.ismir.net/papers/logan_paper.pdf
以後、上記を読み解いていきます。タイトルやAbstractの記載にもあるように、この研究は音声認識の分野で支配的に用いられる特徴量(dominant feature used speech recognition)のMFCCを音楽のモデリングに適用しています。今回知りたいのはMFCCについてなので、MFCCについて言及のある論文のSection2の"MFCCs for Speech Recognition"について取り扱います。

f:id:lib-arts:20190630175238p:plain
MFCCの処理の大まかな流れは論文のFigure1で記述されています。まず音声信号をフレーム単位に分割し、2節のフーリエ変換を離散的に行う、離散フーリエ変換(DFT; Discrete Fourier Transform)を行います。

f:id:lib-arts:20190630180626p:plain
次に上記のFigure2のように高周波成分を取り除き、かつMelスケールで値を表しています。

f:id:lib-arts:20190630180738p:plain

Melスケールについては上記のFigure3で説明されています。
最後に相関性の高いMel-spectrulベクトルを分離するにあたって、離散コサイン変換(DCT; Discrete Cosine Transform)を行うとされています。離散コサイン変換(DCT)は離散フーリエ変換(DFT)と同様に信号圧縮によく用いられている手法で、DFTよりもDCTの方がパワーのほとんどが低周波領域に集中するとされています。


4. まとめ
#2では音声認識においてDeepLearning以前からよく用いられていたMFCC[1993]について見てきました。ざっくり掴むにあたっては細かい処理というよりはフーリエ変換と同様のイメージで、信号のデータを周波数に着目して分解していくイメージを持つと良いです。
#3では、DeepLearningを用いた最近の研究について何かしら取り扱えればと思います。