はじめに
位相復元を行うための MATLAB/GNU Octaveライブラリ の一つにPHASERETがある.
このライブラリをoct2py経由でPythonから使えるようにしたサンプルスクリプトをいくつか整備したので,それらを紹介するのが本記事の主旨である.
ちなみに:oct2pyは主にOctaveで動くスクリプト(拡張子は ".m")をPython上で動かすための便利なライブラリである.
実装
以下のリポジトリに置いた.
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 以外にも数多く提案されているので,実装を通じて色々と勉強していきたい.