以前、音声分析手法としてLPC分析とケプストラム分析をしました。
pythonで音声分析~LPC分析&ケプストラム分析~
今回は人間の聴覚特性を考慮したケプストラム分析を用いてメル周波数ケプストラム係数(MFCC)を求めます。
MFCCは人の音声分析の分野ではとてもよく使われる特徴量だと認識しています。
音声は日本声優統計学会というところからお借りしました。
https://voice-statistics.github.io/
藤東知夏さんがテキストを読み上げている10秒ほどのデータ(fujitou_normal_001.wav)を使用しました。
メル周波数ケプストラムの算出
前回行ったケプストラム分析との違いは、計算したスペクトルを人間の聴覚特性を考慮したメルフィルタバンクに掛けるところです。
これにより人間の聴覚特性(低周波数で細かく高周波数で大雑把)を表現できます。
librosa.feature.mfccを用いれば一発でできるので前回より簡単です。
よく使われるアルゴリズムはライブラリが使いやすくていいですね。
1 2 3 4 5 6 7 8 9 10 |
import librosa if __name__ == "__main__": wave, fs = wav_read(path_to_wavfile) order = 20 mfccs = librosa.feature.mfcc(y=wave, sr=fs, n_mfcc=order) t = librosa.frames_to_time(np.arange(len(mfccs[0])), sr=fs) # 時間軸 orderscale = np.arange(order) # 次数軸 plt.pcolormesh(t, orderscale, mfccs, cmap='jet') plt.show() plt.close() |
実行結果のグラフのこれです。
前回と似てますがちょっと違いますね。
スペクトル包絡の計算
こちらもライブラリがあるのでそれを用います。
librosa.feature.inverse.mfcc_to_melでMFCCからメルスペクトログラムを求めます。
librosa.feature.inverse.mel_to_stftでさらにメルスペクトログラムをSTFTに変換します。
1 2 |
mel_spec = librosa.feature.inverse.mfcc_to_mel(mfccs) stft = librosa.feature.inverse.mel_to_stft(mel_spec, sr=fs) |
これでスペクトル包絡の時間変化が計算されます。
コメント