矩形波を作る
直接波形としての矩形波を作る方法は、いろいろありそうです。ここではceil()関数を使う方法を紹介します。
ceil()関数はscilabにはじめから用意されている関数です。その機能は
与えられた引数を超えない、最大の整数を返す
というものです。たとえばceil(0)は0、ceil(0.1)は1になります。sin()関数の出力をceil()にかけると、
- sin()が正の時には1
- sin()が0の時には0
- sin()が-1の時には-1
- sin()が負の時には0
となります。-1が邪魔です。そこで、心もちsin()を小さくするために0.9をかけてやると、ceilの出力は1と0のみになり、そのデューティーは50%となります。それを利用したのが以下のプログラムです。
fs=22050; // default sampling frequency of Scilab[Hz] sec=fs; // unit of time Hz=2*%pi/fs; // unit of frequency // generate 440Hz square wave as 3 seconds wave=(ceil( sin( 440*Hz*[1:3*sec])*0.9)-0.5)*2; playsnd(wave); // play by 22.05kHz sampling
ceil(sin())の出力は0か1の値をとります。これを-1と1の範囲に変更するために、0.5を引いて2倍しています。
いったんsin()を通すのはもどかしいですが、三角関数に周期をあわせやすいので、波形合成が楽になります。