2016年12月26日月曜日

Octaveレッスン(15) - plot3関数で3次元グラフ表示

plot3関数を使用すると3次元グラフを簡単に表示することができる。

plot3(x, y, z) のようにx、y、zそれぞれの座標データを引数に与えればよい。

Octaveレッスン(6) で見た、FFTの基底の原始N乗根 ωN を3次元グラフに表示してみる。

ここでは N=128とする。
>> N=128, omega=e^(i*(2*pi/N));
>> x=0:N*20-1;
>> f=omega .^ x;
>> plot3(x, real(f), imag(f))
>> grid on
>> xlabel('X'), ylabel('real'), zlabel('imag')

グラフウィンドウの回転アイコン(左上端の円状の矢印)をクリックすると、グラフを回転させて、さまざまな角度から眺めることができる。
ぐるぐるグラフを回転させて x-y(real)平面を表示させると、cos関数のグラフが現れる。
さらに回転させて x-z(imag)平面を表示させると、sin関数のグラフが現れる。
y(real)-z(image)平面では、単位円のグラフが現れる。


参考:


2016年12月24日土曜日

Octaveレッスン(14) - ltfat packageを利用する

ltfat packageには、fwt関数などwavelet解析に便利な関数が用意されている。

windows版Octaveでは、下記コマンドで ltfat のインストールに成功するが、 Mac版では失敗する。
>> pkg install -forge ltfat
ドキュメントを読む限り、Mac版もWindows版も同じ手順でインストールできないとおかしいのだが、別のMacや旧いOSバージョン、旧いOctaveバージョンでも同様に失敗する。

そこで、別のアプローチを試してみたところ成功したので、メモを残しておく。

Mac版で動かすには、下記ページからltfat packageをダウンロードして展開する:
http://ltfat.sourceforge.net/download.php

Octaveのコマンドウィンドウにて、展開した ltfat ディレクトリへ移動して、
>> ltfatstart
と実行すれば、各種 ltfat の関数が利用可能になる。
waveletのデモを表示するには、
>> demo_wavelets
さらに処理速度を高速化したい場合には、
>> ltfatmex
と実行すればよい・・・ ハズなのだが失敗する。
fftw3ライブラリが見つからず、コンパイルエラーが発生する。

下記URLからfftw-3.3.5.tar.gzをダウンロードしてfftw3ライブラリをコンパイルする。
http://www.fftw.org/download.html

ターミナルを開いて、展開したfftw-3.3.5ディレクトリに移動して下記コマンドを実行:
$ ./configure --enable-threads
$ make 
libfftw3.a, libfftw3_threads.a が生成されるので、場所をfind等で探して、ltfat/lib へコピーする。
続いて、float対応版ライブラリをコンパイルする:
$ make clean
$ ./configure --enable-float --enable-threads
$ make 
libfftw3f.a, libfftw3f_threads.a が生成されるので、場所をfind等で探して、ltfat/lib へコピーする。

Octaveのコマンドウィンドウに戻って、
>> ltfatmex
と再実行すると、今度は成功する。

※ ltfatmex 実行すると、PortAudio が無いというコンパイル警告が出るため、私はPortAudioもダウンロード&インストールした。しかし、これは必須では無いはず。
 PartAudio関連サイト:

Octaveレッスン(13) - signal packageを利用する

fft関数などは、Octaveをインストールするだけで利用可能。
しかし、xcorr関数(相互相関)などを利用しようとすると、signal packageが必要になる。

windows版の場合は、Octaveインストール時にsignalパッケージもインストールされるので、下記コマンドでsignal packageをロードすれば利用可能になる
>> pkg load signal
Macの場合は、まずinstallする必要がある:
>> pkg install -forge signal
上記は、ネットワーク経由でダウンロード&インストールするコマンドだが、おそらくcontrol package が未インストールのため失敗するだろう。

そこで、まず control packageをinstallする:
>> pkg install -forge control
依存関係のあるcontrolをインストールできたので、signalをインストールしてロードする:
>> pkg install -forge signal
>> pkg load signal 
これで、xcorr関数などが利用可能になる。

なお、インストール済みパッケージは下記コマンドで一覧表示可能:
>> pkg list
また、別 package 無しで利用可能な関数の一覧は、[ドキュメント]タブ - 「Function Index」sectionで確認可能。