メルフィルタバンクを理解する

はじめに

Kaggle Free Sound Audio Tagging 2019で学ぶ音声処理ではKaggleコンペとその解法を題材に音声処理について解説しています。この記事は、メルスペクトログラムの計算中に出てきたメルフィルタバンクについて解説します。

librosa.feature.melspectrogram

librosa.feature.melspectrogramのコードを読むで出てきた通り、librosa.feature.melspectrogramは引数として音声を受け取ることも、スペクトログラムを受け取ることもできます。

内部ではスペクトログラムに対して、メルフィルタバンクと呼ばれるものをかけています。

1
2
3
mel_basis = librosa.filters.mel(sr, n_fft=2048)
S = np.abs(librosa.stft(y))**2
melspec = np.dot(mel_basis, S)

(見やすくするために、下図では対数を取っています。)

メルフィルタバンク

メルフィルタバンクは、複数のバンドパスフィルタをメル尺度上で等間隔となるように配置しています。また周波数が高いほど、バンド幅が広くなっていることがわかります。これは上の図でも確認できます。

librosaでは以下のように計算できます。

1
mel_basis = librosa.filters.mel(sr, n_fft=2048)

メルフィルタバンクの効果

通常のスペクトログラムと、メルスペクトログラムを比較してみましょう。メルスペクトラムの方が高周波が強調され見やすくなっていると思います。(いずれも対数を取っています。)

記事情報

  • 投稿日:2020年7月1日
  • 最終更新日:2020年7月1日