MFCC(メル周波数ケプストラム係数)

目的

ここでは,音声認識や楽器の識別等によく使用される特徴量であるメル周波数ケプストラム係数(Mel-Frequency Cepstrum Coefficients: MFCC)について学ぶ.

説明

メル尺度

音の周波数[Hz]は音の高さに対応する物理量であった.人間の聴覚において音の高さを知覚する際の量としてメル尺度[mel]がある.人間の聴覚には,周波数の低い音に対して敏感で,周波数の高い音に対しては鈍感であるという性質がある.音の周波数とメル尺度の間の関係は以下の図ようになり,メル尺度では低周波成分に対する分解能が高周波成分に対する分解能よりも高いことがわかる.

音声認識や楽器の識別を行う際に,人間の音の高さにおける感覚量を使用するほうが良いと考え,メル尺度を音響特徴量とすることがある.

メルフィルタバンク

音の周波数[Hz]をメル尺度[mel]に変換する際に,特徴量の次元数を落とし,低周波成分ほど分解能を高く,高周波成分になるほど分解能を低くするために,フィルタバンクを使用してフィルタをかける.最大周波数22050Hz,フィルタ数20のフィルタバンクは以下のようになる.

図からわかるように,各フィルタは三角形の形をしており,低周波成分ほど裾野が狭く,フィルタの数が多い.一方,高周波成分では裾野が広く,フィルタの数が少ない.このようなフィルタをかけることで,音の高さに対する分解能が低域ほど高く,広域ほど低くなるように,音の周波数をメル尺度に変換することができる.

では,日本語母音「あ」の音声データに対して,メルフィルタバンクをかけて特徴量を抽出してみよう.

41,42行目で窓関数をかけて切り出した1フレームの音声データに離散フーリエ変換をかけ,振幅スペクトルを求めている.27行目でフィルタの数を20に設定し,6行目でlibrosaモジュールをインポートし,44行目でlibrosaモジュールのfilters.mel関数を使用して20個のメルフィルタバンクを求めている.49行目でグラフの横軸のデータを作成し,55行目から61行目でメルフィルタバンクのグラフを描画している.45行目でフィルタをかけ,46行目で対数パワーを求めている.50,51行目で横軸のデータを作成し,63行目から72行目で対数パワーのグラフを描画している.

実行すると,以下のように表示され,20個のメルフィルタとそれによって求めた20点からなるメル尺度での対数パワースペクトルが表示される.結果から,スペクトル包絡の特徴が抽出できていることが確認できる.

MFCC

メルフィルタバンクにより求めたメル尺度での対数パワーに離散コサイン変換をかけると,メルケプストラムを求めることができる.高ケフレンシー成分を除去することでスペクトル包絡の特徴であるメル周波数ケプストラム係数(Mel-Frequency Cepstrum Coefficients: MFCC)を求めることができる.

メルフィルタバンクにより求めたメル尺度での対数パワーに,49行目で離散コサイン変換をかけ,メルケプストラムを求めている.29行目でMFCCの次元数を12に指定し,50行目で12より高いケフレンシー成分を除去している.51行目で離散コサイン逆変換を行い,MFCCによって求められた対数パワースペクトル包絡を求め,71行目で描画している.

実行すると,以下のように表示され,12次元のMFCCの特徴によって表される対数パワースペクトル包絡が表示される.

メルフィルタバンクの数を64,MFCCの次元数は上の例と同じ12とすると以下のようになる.上の結果と比較すると,日本語母音「あ」のスペクトル包絡の特徴がこちらのほうがよく現れているため,この後の例ではメルフィルタバンクの数を64,MFCCの次元数を12として説明する.

日本語5母音のMFCCの類似度

以上で求めたMFCCを使用して,日本語5母音の音声の類似度を測ってみよう.

41行目から70行目で音声データのURLと保存するファイル名を指定している.75行目で各データに対して繰り返し処理をしている.73行目で空のリストを作成し,84行目でHanning Windowをかけた音声波形をリストに保存し,89行目でndarrayに変換している.MFCCを求める処理は関数とし,23行目から32行目に記述されている.86行目で関数を呼び出し,MFCCを求め,74行目で初期化したリストに87行目で保存し,90行目でndarrayに変換している.93行目で全ての音声波形どうしのコサイン類似度を,95行目でMFCCどうしのコサイン類似度を求め,94,96行目でそれぞれを表示している.

実行すると以下のように表示され,音声波形どうしのコサイン類似度では,同じ母音の類似度が必ずしも高くなっていないが,MFCCのコサイン類似度では,声の高さが異なっていても同じ母音どうしで類似度が高くなっていることが確認できる.

「あいうえお」と連続して発声した音声データに対してフレーム処理を行い,MFCCを求め,日本語5母音の音声データから抽出したMFCCとの類似度を求めてみよう.

日本語5母音の音声データから70行目でMFCC特徴を求め,58行目で初期化したリストに71行目で保存し,72行目でndarrayに変換している.「あいうえお」と連続して発声した音声データの各フレームから86行目でMFCC特徴を求め,82行目で初期化したリストに87行目で保存し,89行目でndarrayに変換している.91行目でそれらのコサイン類似度を求め,102行目から108行目で表示している.

行すると以下のように表示され,各母音を発声している区間で該当する母音との類似度が高くなっていることがわかる.

課題

以下の音声データを使用して課題を行え.

  • 「あいうえお」と連続して発声している音声データ
    • http://makotomurakami.com/blog/wp-content/uploads/2020/05/aiueo.wav
  • 「あ」と発声している音声データ
    • http://makotomurakami.com/blog/wp-content/uploads/2020/05/a_normal.wav
  • 「い」と発声している音声データ
    • http://makotomurakami.com/blog/wp-content/uploads/2020/05/i_normal.wav
  • 「う」と発声している音声データ
    • http://makotomurakami.com/blog/wp-content/uploads/2020/05/u_normal.wav
  • 「え」と発声している音声データ
    • http://makotomurakami.com/blog/wp-content/uploads/2020/05/e_normal.wav
  • 「お」と発声している音声データ
    • http://makotomurakami.com/blog/wp-content/uploads/2020/05/o_normal.wav
  • 高い声で「あ」と発声している音声データ
    • http://makotomurakami.com/blog/wp-content/uploads/2020/05/a_high.wav
  • 低い声で「あ」と発声している音声データ
    • http://makotomurakami.com/blog/wp-content/uploads/2020/05/a_low.wav
  • 高い声で「い」と発声している音声データ
    • http://makotomurakami.com/blog/wp-content/uploads/2020/05/i_high.wav
  • 低い声で「い」と発声している音声データ
    • http://makotomurakami.com/blog/wp-content/uploads/2020/05/i_low.wav
  • 高い声で「う」と発声している音声データ
    • http://makotomurakami.com/blog/wp-content/uploads/2020/05/u_high.wav
  • 低い声で「う」と発声している音声データ
    • http://makotomurakami.com/blog/wp-content/uploads/2020/05/u_low.wav
  • 高い声で「え」と発声している音声データ
    • http://makotomurakami.com/blog/wp-content/uploads/2020/05/e_high.wav
  • 低い声で「え」と発声している音声データ
    • http://makotomurakami.com/blog/wp-content/uploads/2020/05/e_low.wav
  • 高い声で「お」と発声している音声データ
    • http://makotomurakami.com/blog/wp-content/uploads/2020/05/o_high.wav
  • 低い声で「お」と発声している音声データ
    • http://makotomurakami.com/blog/wp-content/uploads/2020/05/o_low.wav

課題0

高い声と普通の声と低い声で「あ」と発声している音声データに対してMFCCを求め,スペクトル包絡を描画し,比較せよ.

課題1

高い声と普通の声と低い声で「い」と発声している音声データに対してMFCCを求め,スペクトル包絡を描画し,比較せよ.

課題2

高い声と普通の声と低い声で「う」と発声している音声データに対してMFCCを求め,スペクトル包絡を描画し,比較せよ.

課題3

高い声と普通の声と低い声で「え」と発声している音声データに対してMFCCを求め,スペクトル包絡を描画し,比較せよ.

課題4

高い声と普通の声と低い声で「お」と発声している音声データに対してMFCCを求め,スペクトル包絡を描画し,比較せよ.

課題5

「あいうえお」と連続して発声した音声データに対してフレーム処理を行い,MFCC特徴を抽出し,日本語5母音の音声データから抽出したMFCC特徴との類似度を求めよ.