Contact
CoCalc Logo Icon
StoreFeaturesDocsShareSupport News AboutSign UpSign In
| Download

All published worksheets from http://sagenb.org

Views: 168731
Image: ubuntu2004
()

FastICAを使って独立成分分析をする

ここでは、sage上でFastICAを使って独立成分分析をする方法に説明します。

必要なライブラリ

残念ながら、sage上にはFastICAのアルゴリズムは実装されていません。 そこで、以下のpythonライブラリをインストールします。

  • MDP: pythonでFastICAを実装したライブラリ
  • Audiolab: pythonでオーディオファイルを扱うためのライブラリ

MDPのインストール

MDPのインストール手順を説明します。

  • http://sourceforge.net/projects/mdp-toolkit/files/から最新のソースをダウンロードします
  • ダウンロードしたファイルを適当な場所(ここでは~/local)で解凍します
解凍したディレクトリに移動して、sageのpythonを使って以下のコマンドを実行すると、 インストールは完了です。
$ cd ~/local/mdp-2.5
$ ~/local/sage/local/bin/python setup.py install

audiolabのインストール

audiolabは、 libsndfileを内部で使用しており、 他のライブラリも必要とするため、 以下のようにインストールしました。

  • MacPortを使ってaudiolabをインストールします
  • $ sudo port install py26-scikits-audiolab
    
    内部でgcc version4をインストールするので、結構時間がかかります。
  • audiolabの最新ソースをダウンロードを ここ からダウンロードし、~/localにて解凍します
  • MacPortのライブラリを使うように、site.cfgを以下のように作成します
  • include_dirs = /opt/local/include
    library_dirs = /opt/local/lib
    libraries = sndfile,vorbis,vorbisenc,FLAC,ogg
    
  • sageのpythonを使ってインストールします
  • $ cd ~/local/scikits.audiolab-0.10.2
    $ ~/local/sage/local/bin/python setup.py install
    

簡単な例題を解く

A simple FastICA example の例題に沿ってsage上で独立成分分析(ICA)を試してみましょう。

例では、2つのモノラル信号を配合を少し変えて混合した音源を2個、左右の音に録音したWavファイル を入力とします。

2つの信号を混合した音(右クリックでファイルをダウンロードして再生してください)

必要なインポート

必要なインポート文は、以下の通りです。

# 必要なインポート from mdp import fastica from scikits.audiolab import wavread, wavwrite from numpy import abs, max

オーディオファイルの読み込み

WAVファイルの読み込み関数wavreadを使ってオーディオファイルの音源を 2個の配列に取り込みます。

# 2つの信号を混合したWavファイルを読み込む recording, fs, enc = wavread(DATA + 'mixed.wav')

ICAを解く

fastica関数を使って2個の音源を分離します。

# 左右2チャンネルの信号に対して、FastICAを適用する sources = fastica(recording) # 出力レベルを1にノーマライズする sources /= max(abs(sources), axis = 0)

オーディオファイルへの書き込み

抽出された2個の音源を左右の音に持つオーディオファイルを作成します。

wavwrite(sources, DATA + 'source.wav', fs, enc)

結果ファイルの確認方法

残念ながらsageで直接オーディオファイルを再生することができないため、 以下のようにファイルをダウンロードして再生してください。

# 結果を確認する方法 html('<a href="source.wav">結果(右クリックでファイルをダウンロードして再生してください)</a>')