本シリーズ、ScilabとOctaveにはお世話になっておりますが知らん事多いなと痛感。そこで使い方、といってもデジタル信号処理に使いそうな部分を改めて手習ひさせていただくことにいたしました。初回は離散時間信号のプロットです。今までテキトーにプロットして離散信号なのに連続信号っぽいプロットになってしまった件もあり。
※「手習ひデジタル信号処理」投稿順 Indexはこちら
※実習に使わせていただいている Scilab処理系は 6.1.1 (Windows版)です。
今回は冒頭のアイキャッチ画像に掲げましたが、連続時間信号(continuous-time siganl)に対しては左のようなグラフを、離散時間信号(discrete-time signal)に対しては右のようなグラフを描きたい、というのが目標です。知っていればなんてことないのですが、今まで成り行きで離散信号を左の形式でプロットしていたりしてカッコ悪かったです。
参照させていただいているページ
ありがたいことにScilabにはオンラインHELPの日本語版があります。Scilab Online Help(日本語)の中から今回参照させていただいているのは、以下と関連のページです。
Scilabにはplot関係のコマンドが多数あるのですが、その中で今回調べてみたのは2次元のグラフを描くための以下の5つです。
-
- plot
- plot2d
- plot2d2
- plot2d3
- plot2d4
1のplotは「Matlab構文との互換性を改善」した関数のようです。今回、恐れ多いので「Matlabとの互換性」には積極的に行かず、Scilab独自機能は率直に使わせていただく方針です。そこで今回は2~5を実際に使ってみる所存。なお3~5は独立の関数にも見えますが、plot2dにpolyline_styleオプションというものをつけても描けるのでplot2dのショートカット的な存在でしょうかね。
plot2d(polyline_styleオプションなし)の描画サンプル
引数をあたえず plot2d() のようにすると描画デモが走ります。こんな感じ。黄緑色の線のようにすれば連続時間「風」(実際にはコンピュータ上の数列なので連続じゃないですが)、プロット点を描いて間をつながなければ離散「風」です。
plot2d2(階段状関数)の描画サンプル
plot2d2()とするとデモしてくれるのが以下です。「AD、DAの信号の波形」風の階段状です。連続時間をサンプル&ホールドした感じ?
plot2d3(垂直棒グラフ)の描画サンプル
plot2d3()のデモです。これこそ離散時間信号の処理のときに、表示したいフォーマットでしょうかね。しかし複数個重なると下のものが隠れてしまってイマイチ見にくいことあり。
plot2d4(矢印形式)の描画サンプル
plot2d4()のデモが以下に。Helpによると、この矢印形式は「位相空間でのODE解のプロット」向けみたいです。知らんけど。
連続信号は左の形式、離散信号は右の形式でどうよ
今何を処理しているのか混乱しないように見た目から識別、今後は連続時間信号には左を、離散時間信号には右の形式にしていきたいと思います(場合によっては他の形式も使うかも。)
サンプルのScilabコードが以下に。
clf(); x=[0:0.1:2*%pi]; y=sin(x); subplot(1,2,1); plot(x,y); subplot(1,2,2); plot2d3(x,y);
上記コードの出力が以下に。どっちも元は離散的な数値リストなんだけれども。
見た目はスッキリした。ホントか?