sin波
デスクトップからscilabを起動する
以下コマンドを実行する。
t=0:1/44100:2; これで、44100サンプル/秒で2秒間のサンプルのサンプリング時間のリストが作成された。
このtを使い、以下のコマンドを実行すると、2秒間分の440Hzのsin波ができる。
x=sin(2*%pi*440*t); 次に以下コマンドで、4410サンプルだけこのsin波をプロットしてみよう。
plot2d(t(1:4410),x(1:4410)); ここでplot2dを使用した。plot2dの最初の引数はx座標を、2番目の引数はy座標を指定する。ここではそれぞれ4410サンプル分の数列が指定されている。
このplot2dを実行すると以下のグラフが表示される。
サンプリング周波数
サンプリング周波数とは、1秒間のサンプルの数である。
44100サンプル/秒であれば、毎秒44100サンプルになる。
4410サンプルは何秒に相当するだろうか。
グラフに表示されている範囲は0から0.1秒の間になっている。毎秒44100サンプルの中の4410サンプルであるから、 4410/44100=0.1秒となる。
この関係を式であらわすと、サンプリングレート fs, サンプル数 N の場合、Nサンプルに相当する時間は、
N/fs
となる。
またsin関数なので-1から1の間で振動している。440Hzなので0.01秒の間には4.4回の波があるはずであるが、だいたい4回よりちょっと多い。
グラフ中でまずルーペの+印(赤丸の部分)をクリックしてから、マウスで下の図のように範囲を指定すると、その部分が拡大される。
マウスで範囲を指定する。
その範囲が拡大される。
拡大された図を見ると、0.01秒までに確かに4回と少しの周期があることがわかる。
確認できたら、このウインドウを一旦閉じる。
以下のように、最初から220サンプルだけをプロットするコマンドを実行すれば、拡大をしなくても最初から一部だけが拡大してプロットできる。
clf;
plot2d(t(1:220),x(1:220));ここで、clfは、前のプロット画面を消すコマンドである。
このグラフを見ると、1周期はだいたい0.0023秒だ。グラフから読み取った周期から周波数を計算してみよう。周波数=1/周期だから、1/0.0023 は434であるが、これはだいたい440になり、たしかに440Hzのsin波ができている。
このウインドウは閉じないでそのまま表示しておく。
次に以下のようにxを0.5倍すると、振幅を半分にすることができる。
y=x * 0.5; 最初のyとxの220サンプルをプロットしてみよう。
clf;
plot2d(t(1:220),[x(1:220);y(1:220)]');
確かに、さきほどプロットした振幅1のsin波の上に、振幅0.5のsin波がプロットされている。
flameflag=8を使うと、プロットの上に別のプロットを重ね描きすることができる。
cos波形を重ねてプロットしてみよう。
a=cos(2*%pi*440*t);
plot2d((1:220),a(1:220),frameflag=8);するとこのようなグラフになる。
練習問題
自分で答えを考えてから答えを見よう
時々繰り返し練習しよう
1. 880Hzのsin波を作成しなさい
2. 振幅 1/10の440Hzのsin波を作成しなさい
3. 最初の 100サンプルをプロットしなさい