書いてみました。
https://github.com/ryogrid/pyssp_mod/blob/master/kpca_denoise.py
カーネルPCAの実装は以下から拝借しました。
https://github.com/lucasrodes/kPCA-denoising-python/blob/master/our_kpca.py
やっていることは、
-音声データを512サンプルに分割して並べて行列にする
-512サンプルごとにFFTをかけて、振幅スペクトルベクトル群(行列)と位相スペクトルベクトル群(行列)を求める
-上の振幅スペクトル行列にk-PCAを用いたデノイズ処理をかける
-得られた行列の中のデノイズされた振幅スペクトルベクトル(512要素)と位相スペクトルベクトルをよろしくして行列にする
-位相スペクトルベクトルに1j(虚数のみ1の複素数)をかけてexpをとったものに、振幅スペクトルを乗算
-上の行列の512要素(行か列かどっちだろ)ごとにIFFTをかける
- IFFTをかけた行列の全要素の実部だけとりだして、1次元ベクトルに並べ直す
- デノイズされた音声データが得られたぞ!
いくらかノイズ除去はできました。パラメータをいろいろ試せばもっと良い効果が得られるかも。
以上です。