pythonで音声分析~LPC分析&ケプストラム分析~

今回は音声分析手法であるケプストラム分析とLPC分析をpythonを用いてやってみます。
音声は日本声優統計学会というところからお借りしました。
https://voice-statistics.github.io/
藤東知夏さんがテキストを読み上げている10秒ほどのデータ(fujitou_normal_001.wav)を使用しました。

LPC解析(Linear Predictive Coding)

声道を音響管の連接と捉えて特徴を抽出します。
ケプストラム分析に比べてformantピークが良く抽出できるみたいです。
lpc係数を求めるプログラムを示します。
librosa.lpc関数を用います。解析する信号と次数を渡すと係数が返ってきます。

lpc係数を求めてからスペクトル包絡を求めるプログラムは以下のようになります。
scipy.signal.freqz関数を用います。

ケプストラム分析

声道の特性(低周波数で変動)と音源の特性(高周波で変動)を分離して抽出します。
信号 → FT → abs() → log → 位相アンラッピング → FT → ケプストラム(Wikipedia)
操作が簡単で、これを改善したメルケプストラムが機械学習等で多く用いられています。
ケプストラム係数を求めるプログラムを示します。

ケプストラム係数を求めてからスペクトル包絡を求めるプログラムは以下のようになります。

実行結果

先ほど示した関数を用いて係数の算出を行います。
今回は、信号を区切り、順番に計算を行います。

係数の算出とプロットのプログラムは以下の通りです。

実行結果はこんな感じです。
同じ次数(order=20)で抽出をしましたが、係数の雰囲気は違います。

スペクトル包絡の算出とプロットのプログラムは以下の通りです。

実行結果は下のグラフです。
異なる手法ですが似たようなスペクトル包絡が生成されています。

次はMFCCもやりたいです。

コメント

タイトルとURLをコピーしました