scilab講座その1 ファイルからデータを得る

フーリエ変換やフィルター処理をさせる時系列データは、通常は量が多いのでファイルから入力します。
ここで5秒間のランダムノイズの44.1kHzでサンプリングされたステレオサウンドwaveファイルがあるとします。
scilabは以下の1行で"white-5s.wav"というwaveファイルからwavにデータを、sfにサンプリング周波数を与えます。
[wav, sf] = wavread("white-5s.wav");

例えば、
[wav, sf] = wavread("white-5s.wav");
sf
size(wav)
とすれば、以下のような数値がコンソールに出てきて、変数sfとwavにどういう情報が入っているかが判ります。別にwavやsfは違う名前でも構いません。
sf =

44100.
ans =

2. 220500.
ここで例えばsfのように変数名が記述されていれば、その変数の中身が表示されます。ただ、行列のようなたくさんのデータがあるのは、全部表示されても
困るので、後ろに;をつけて中身を表示させなくします。また行列はその行数列数を知りたい場合は、size(行列)とすることで行数列数を知ることが出来ます。


入力させたいファイルがcsv等のアスキーファイルの場合、以下のようになります。
csv=read("white-5s.csv",-1,2);
2というのはデータ数で、ステレオなので2列、-1というのは、全部読むと言う指定で、整数を入れれば、その数だけ読みます。
行は-1で全部読めるのに、列は-1では駄目です。ちなみにcsvはwavと同じデータが入る事になるけど、sfに相当する情報は得られないので
自分で指定する必要があります。
例えば、
csv=read("white-5s.csv",-1,2);
sf=44100;
等とすれば、"white-5s.csv"からの必要な情報は得られた事になります。
ちなみに、色々違う読み方もあります。

得たデータがどんな波形か見たい場合は、以下の行でグラフをプロットしてくれます。ここでwav(1,:)とは、1は1行目を指し、:は1行目の全列データを意味します。
plot(wav(1,:));
そうするとこんなグラフが出てきます。

これでは、x軸が単なるデータ数の意味しかないので、時間データを持たせます。
time=[ ];
time=(0:1/sf:(length(wav(1,:))-1)*(1/sf));// 初期値:増分:最終値
time=[ ]でtimeという空の変数を作成し、time=(初期値:増分:最終値)で0から5秒までの間を1/サンプリング周波数で増えていく時間データを入れて行きます。

先ほどのplotでは無く、plot2dという別のグラフプロットを使います。timeの後ろに'を付けているのは、行と列を入れ替えてwav(1,:)に合わせる為です。
plot2d(time',wav(1,:));

そうするとこんなグラフになります。


こういう処理を例えばVBとかC#等で行おうとするとこんな行では済まず、特にwaveファイルを読み込まそうとすると、ちょっと大変です。
グラフのプロットも、VB等では大変だけど、こんなに簡単に描いてくれます。色が違うのはデフォルト値が違うようです。当然変えられます。
[wav, sf] = wavread("white-5s.wav");
time=[ ];
time=(0:1/sf:(length(wav(1,:))-1)*(1/sf));// 初期値:増分:最終値
plot2d(time',wav(1,:));