scilabの文法(1)

ここで、ここまでに出てきたscilabの文法を整理しておこう。

fs=44100;

このように

変数=式;

と、入力すると、変数に値を代入することができる。

サンプリング周波数=44100は、CDやパソコンでよく利用されているサンプリング周波数だ。毎回44100と書くのは面倒なので、このようにfsという変数に代入して、以後fsを使うと便利である。

scilabでは、式の部分にはC言語やJavaで使えるような数値計算の式であればおおむね使用することができる。

t=0:1/fs:2;

これはC言語にはない形の式で、scilab独自の書き方だ。

これを理解するためにまず、

n=1:5

と入力してみよう。以下のような結果になる。

-->n=1:5
n =
1. 2. 3. 4. 5.

つまり, 1:5という式は1から5までの数列、という意味になる。scilabではこのように、数値、だけでなく、数列、を計算に使用したり、代入することができる。wavデータのような波形は数値でなくて数列だから、wavデータを処理するにはscilabはとても都合がよい。

次に以下を試してみよう。

t=0:0.2:1

すると結果は以下のようになる。

-->t=0:0.2:1
t =
0. 0.2 0.4 0.6 0.8 1.

つまり、a:b:cという式では、aからcまでの間の値をとり、bずつ増えていく数列になる。

さて、最初に戻って、以下の式であるが、

t=0:1/fs:2;

ここで 1/fsは、サンプリング感覚、つまり1サンプル毎の時間間隔である。したがって、この式全体では0秒から2秒までのすべてのサンプルの時刻を、秒であらわした数列になる。

最後に以下の式について説明しておこう。

x=sin(2*%pi*440*t);

この式ではsin波形を計算している。C言語やEXELなどで、sin波形を計算しようとしたならば、各サンプル毎にsin波形を計算しなければならない。つまり、各サンプルの時刻に対してsin関数を計算する必要がある。

これを正直に1つ1つ計算すると、

x[1] = sin(2*%pi*440*t[1]);

x[2] = sin(2*%pi*440*t[2]);

x[3] = sin(2*%pi*440*t[3]);

x[4] = sin(2*%pi*440*t[4]);

x[5] = sin(2*%pi*440*t[5]);

こんな式になるだろう。これではとても面倒だ。

ところが、scilabでは単に

x=sin(2*%pi*440*t)

と書くことで、同じことができてしまう。つまりtという変数に数列が入っていると、普通に計算式を書くだけで、数列の値すべてについて計算を行って、新しい数列を作ってくれる。