MATLABで矩形波をつくる方法
ちょっとFFTとか信号解析を考えるときに便利なのが
ホワイトノイズ、矩形波、サイン波
です。
周期関数とそうでないもの代表がこれらってことです。
ちょっと考えてみますね。
square
MATLABコマンドで矩形波を発生させるのが
square
ってコマンドです。
さすがはMATLABと思いきや・・・
これ、SignalProcessingToolboxもってないとできない
トホホ・・・
ちなみに単なる矩形波だけだとこのsquareってコマンド
楽しくありませんが簡単にduty波形も出力できるのが便利かなと思います。
使い方
t=[0:0.1:100];
qq=square(2*pi*t);
plot(t,qq);
これで、2πn周期の矩形波が出力されます。
ちなみに
square(2*pi*t,80);
でduty比80%の波形が出力されます。
なおこのsquareコマンドはMATLABの
SignalProcessingToolbox
ないと実行できません。
ない場合は
>> square(t)
関数 ‘square’ (タイプ’double’ の入力引数) が未定義です。
とエラーが出ますのでverコマンドかwhichコマンドでライセンスを確認してください。
SignalProcessingToolbox使わない方法
MATLABのみでSignalProcessingToolbox使わない方法紹介します。
トランジスタアンプをイメージしてください。
トランジスタって信号を増幅しますが、入力信号レベルが大きかったり、
アンプゲインが大きくなると出力波形が電源電圧のレベルで飽和してしまいますよね?
アナログアンプとしてはあまり好ましくないことかもしれませんが
矩形波を生成する場合にこうした手段ってよく使われるんです。
特にAFオシレータなんて基本的にサイン波を出力し、ボタン切り替えで
同一周波数の矩形波出力させるのですがものによってはこうした手法使うんですよ。
あくまでもduty比が50%に限定されてしまいますので、
dutyオシレータの場合は異なります。
ではSignalProcessingToolbox使わないでMATLABのみで
矩形波出力する方法です。
t=[0:0.01:100];
aaa=100*sin(2*pi*t);
bb=2*gt(aaa,1)-1;
これでOKです。
サイン波を100倍にして、1より大きい値を抽出しそれを2倍します。
すると0または2が2*gt(aaa,1)で算出されるのであとは-1すれば
最初に示したsquareコマンドとほぼ同じ結果が得られます。
ちなみにこれはトランジスタアンプをイメージしてのでサイン波を
100倍するってことしましたが、別に100倍せずとも
gt(aaa,1)を例えばgt(aaa,0.01)というようにしてあとは
つじつまあうような式にすれば矩形波を作ることができます。
ぜひ試してくださいね。
Tags: MATLAB, SignalProcessingToolbox, 矩形波