oct2py経由でPHASERETを使って位相復元を行うためのPythonスクリプトを書いた話

はじめに

位相復元を行うための MATLAB/GNU Octaveライブラリ の一つにPHASERETがある.

ltfat.org

このライブラリをoct2py経由でPythonから使えるようにしたサンプルスクリプトをいくつか整備したので,それらを紹介するのが本記事の主旨である.

ちなみに:oct2pyは主にOctaveで動くスクリプト(拡張子は ".m")をPython上で動かすための便利なライブラリである.

実装

以下のリポジトリに置いた.

github.com

PHASERET は 信号処理系ライブラリ LTFAT に依存しているため,まずはLTFATをOctaveから使えるようにしなければならない.それゆえに公式リポジトリからのダウンロードとコンパイルが必要である.LTFATのコンパイルが済んだらPHASERETも同様にコンパイルすればよい.

現時点では以下の4手法に基づく位相復元のデモンストレーションスクリプトが用意されている.

  • Single Pass Spectrogram Inversion (SPSI) による位相復元
  • Phase Gradient Heap Integration (PGHI) による位相復元
  • Real-Time Phase Gradient Heap Integration (RTPGHI) による位相復元
  • Real-Time Iterative Spectrogram Inversion with Look Ahead (RTISILA) による位相復元

上記リポジトリではないが,おまけでPESQスコアにより復元性能を簡単に表示するスクリプトも書いた(python-pesq利用).

ところで以下のサンプル音声に対して位相復元を試み,PESQスコアを算出してみた(wideband対応のPESQ).音声の分析条件は上記スクリプトのデフォルト値の通りである.

得られたスコアは下記の通り."RTISILA (online)"は「先読みフレーム数が0」,いわゆる "causal"な設定である. 一方で"RTISILA (offline)" は「先読みフレーム数が3」である. RTISILAのオフライン設定が一番高いPESQ値を記録した.

手法 音声 PESQ
SPSI 3.7033
RTPGHI 3.6068
PGHI 4.3099
RTISILA (online) 3.6174
RTISILA (offline) 4.3247

おわりに

位相復元手法はGriffin-Lim Algorithm 以外にも数多く提案されているので,実装を通じて色々と勉強していきたい.