FrontPage

2010/03/22からのアクセス回数 6241

ここでは、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]]
		をインストールします。
  • PySoundFile: Audiolabと同様にlibsndfileを使ってオーディオファイルを扱うためのライブラリ

audiolabのインストール

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

  • MacPortを使ってaudiolabをインストールします
    $ sudo port install py26-scikits-audiolab
    
    内部でgcc version4をインストールするので、結構時間がかかります。
  • PySoundFileのインストール PySoundFileは、 libsndfileとlibffiを内部で使用しており、 他のライブラリも必要とするため、 以下のようにインストールしました。
  • CentOSでのインストール
    $ sudo yum install libsndfile libffi-devel
    
  • sageのpythonを使ってインストールします
    $ sage -sh
    (sage-sh) $ easy_install cffi
    (sage-sh) $ easy_install pysoundfile
    

簡単な例題を解く

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>')

結果(右クリックでファイルをダウンロードして再生してください)

コメント

選択肢 投票
おもしろかった 10  
そうでもない 0  
わかりずらい 0  

皆様のご意見、ご希望をお待ちしております。

  • ライブラリを刷新しました。 -- 竹本 浩? 2015-08-09 (日) 08:41:02

(Input image string)


トップ   編集 凍結解除 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2015-08-09 (日) 08:41:02 (862d)
SmartDoc