矩形波を作る

直接波形としての矩形波を作る方法は、いろいろありそうです。ここでは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()を通すのはもどかしいですが、三角関数に周期をあわせやすいので、波形合成が楽になります。