2010/03/22からのアクセス回数 10302 ここでは、sage上でFastICAを使って独立成分分析をする方法に説明します。 2015/08/09にsklearnとPySoundFileを使用しるように改編しました。 このページのsageノートブックは、以下のURLで見ることができます。 http://www15191ue.sakura.ne.jp:8000/home/pub/21/ 必要なライブラリ †残念ながら、sage上にはFastICAのアルゴリズムは実装されていません。 以前は、MDPとAudiolabを使っていましたが、MDPはsklearnに吸収され、 Audiolabはサポートされていません。 そこで、Audiolabの代わりに [[PySoundFile>https://github.com/bastibe/PySoundFile]] をインストールします。
audiolabのインストール †audiolabは、 libsndfileを内部で使用しており、 他のライブラリも必要とするため、 以下のようにインストールしました。
簡単な例題を解く †A simple FastICA example の例題に沿ってsage上で独立成分分析(ICA)を試してみましょう。 例では、2つのモノラル信号を配合を少し変えて混合した音源を2個、左右の音に録音したWavファイル を入力とします。 2つの信号を混合した音(右クリックでファイルをダウンロードして再生してください) 必要なインポート †必要なインポート文は、以下の通りです。 sageへの入力: # 必要なインポート # FastICAのパッケージ先が変更になった # from mdp import fastica from sklearn.decomposition import FastICA # scikits.audiolabは、メンテナンスされなくなったので、PySoundFileに変更した(2015/08/08) import soundfile as sf from numpy import abs, max オーディオファイルの読み込み †WAVファイルの読み込み関数wavreadを使ってオーディオファイルの音源を 2個の配列に取り込みます。 sageへの入力: # 2つの信号を混合したWavファイルを読み込む # recording, fs, enc = wavread(DATA + 'mixed.wav') recording, fs = sf.read(DATA + 'mixed.wav') ICAを解く †fastica関数を使って2個の音源を分離します。 sageへの入力: # 左右2チャンネルの信号に対して、FastICAを適用する decomposer = FastICA(n_components=2) decomposer.fit(recording) sources = decomposer.transform(recording) # 出力レベルを1にノーマライズする sources /= max(abs(sources), axis = 0) オーディオファイルへの書き込み †抽出された2個の音源を左右の音に持つオーディオファイルを作成します。 sageへの入力: sf.write(sources, DATA + 'source.wav', samplerate=fs) 結果ファイルの確認方法 †残念ながらsageで直接オーディオファイルを再生することができないため、 以下のようにファイルをダウンロードして再生してください。 sageへの入力: # 結果を確認する方法 html('<a href="source.wav">結果(右クリックでファイルをダウンロードして再生してください)</a>') 結果(右クリックでファイルをダウンロードして再生してください) コメント †皆様のご意見、ご希望をお待ちしております。
Tweet |