Octave を使う
行列計算・数値計算・信号処理・グラフ作成などを行うための
ツール octave をインストールしました。
詳しいことは下記のように実行してヘルプ(英文)を見てください。
% octave
> help -i
MATLAB (行列処理の有名なソフト)と互換性があるようです。
MATLAB の解説書を買えば、たぶん役立つでしょう。
- 行末に ; をつけると、結果を表示しません。
行末に ; がない場合は、実行後に結果を表示します。
行列演算のときは結果がたくさん出てしまうので、; をつけましょう。
実行例
・3行3列の行列 a を作る
octave:29> a = [ 1, 1, 2; 3, 5, 8; 13, 21, 34 ]
a =
1 1 2
3 5 8
13 21 34
・2行3列の乱数による行列 b を作る
octave:30> b = rand (3, 2);
octave:31> b
b =
0.045038 0.811955
0.650747 0.312116
0.560927 0.436864
・行列の演算
octave:32> 2 * a
ans =
2 2 4
6 10 16
26 42 68
octave:33> a * b
ans =
1.8176 1.9978
7.8763 7.4914
33.3227 31.9632
・転置行列とのかけ算
octave:34> a' * a
ans =
179 289 468
289 467 756
468 756 1224
・方程式 aX = b の解を求める
octave:35> a \ b
ans =
-0.247116 1.588145
0.223479 -1.347559
-0.023637 0.240586
波形ファイルを作ってみる
x = (0: 0.01:pi * 2);
x10 = [x, x, x, x, x, x, x, x, x, x];
wav = sin(x10);
wav10 = [wav,wav,wav,wav,wav,wav,wav,wav,wav,wav];
length(wav10)
結果:ans = 62900
amp = (1:62900) / 2;
w = wav10 .* amp;
plot(w); ... なぜか1回目はよくエラーになるので、2回実行する。
saveaudio( "wave", w, "lin", 16 ); ... 波形を wave.lin に保存できた。
w = loadaudio( "wave", "lin", 16 ); ... また行列 w に読み込んだ
w2 = flipud(w); ... loadaudio するとデータは縦に並ぶらしい
w3 = [w;w2];
plot(w3);
saveaudio( "wave-ud", w3, "lin", 16 ); .. 振幅が0から増えてまた減る波形
ケプストラムファイルを読み込む
% ~nishi/bin/cepbody in.cep > in.body
167フレーム、42次元であることを確認したとすると。。
以下 octave にて
FD = fopen( "in.body", "r" );
cep = fread( FD, [167,42], 'real*4', 0, 'native' );
fclose(FD);
octave:> size(cep)
ans =
167 42
octave:> cep
cep =
Columns 1 through 6:
-1.1981e+00 7.6284e-01 -1.2176e-02 3.4426e-15 -1.2909e-02 -1.6549e-01
1.0175e-01 -7.6717e-01 -3.1124e-02 2.5877e-02 -6.7313e-15 -3.1126e-02
3.0323e-17 -2.4683e-01 -6.5423e-01 -8.0611e-01 -3.9612e-02 4.6820e-15
-2.4454e-01 -9.7447e-18 -7.6301e-02 -8.6648e-01 3.5877e-01 4.5510e-02
Takuya NISHIMOTO
Last modified: Tue Oct 7 21:11:31 1997