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