MATLABプロダクトファミリ
「MATLAB」という単語は多義語で、ある時は80以上ものオプション製品を含むMATLABプロダクトファミリ全体を指す言葉として、ある時はMATLABプロダクトファミリの中のベーシックなプログラミング環境を指す言葉として使用されます。MathWorksの社員は区別しているのですが、MATLABユーザの中には、ブロック線図環境「Simulink」のことまでMATLABと呼ぶ人もいます。さて、前回までMATLABのベーシックなプログラミング環境について解説しましたが、このSimulinkとは何をするツールでMATLABとは何が違うのでしょう?
製品の2大柱MATLABとSimulink
MATLABプロダクトファミリには2大柱MATLABとSimulinkがあります。それぞれにはアプリケーション分野向けの機能やコード生成機能などを提供するオプション製品があります。MATLABはすべての製品のプラットフォームとしての役割を担うと同時に、プログラミングにより技術計算を行う環境となっています。
MATLABを起動してMATLABデスクトップ画面を見てみましょう。中央にコマンド入力を行う「コマンドウィンドウ」があり、左にディレクトリ移動を行ったりファイル操作を行ったりする「現在のフォルダー」ウィンドウ、右上には変数情報を表示する「ワークスペース」ウィンドウ、右下にはコマンド入力履歴が表示されている「コマンド履歴」ウィンドウが配置されています。上部には、機能を一連のタブの中に各種機能にアクセスするためのアイコンがレイアウトされています。
ブロック線図シミュレータSimulink
MATLABがプログラミング環境で数値演算や解析を行うのに対して、Simulinkはブロック線図を描いて時間軸でのシミュレーションを行う環境です。ブロック線図とはエンジニアリングにおいて、構成要素や機能をブロックで表し、それらを線で繋いで何らかのシステムをグラフィカルに表示するものです。プログラムはある程度その文法を把握していないと処理内容を理解できないのに対し、ブロック線図ではブロック間の数学的関係を図示しているので、文法を理解せずともある程度処理内容を理解できる普遍性・汎用性を持っています。Simulinkには次のような特徴があります。
- タイムドリブンシミュレーション(基本機能)
- イベントドリブンシミュレーション(オプション製品機能)
- 連続システム/離散システムのシミュレーションに対応
- MATLAB(プログラミング環境)と密に連携
- データ精度(浮動小数点/整数/固定小数点)の選択が可能(一部オプション製品機能)
- C/C++コード生成およびVHDL/Verilogコード生成機能による組み込み開発が可能(オプション製品機能)
- 他社のシミュレータや開発環境との連携機能が豊富
- 電気/電子回路、メカニカルシステムなどの物理モデリング(オプション製品機能)
このブロック線図環境を使ってシミュレーションをしているユーザは主に製造業に携わるエンジニアで、シミュレーションの例としては
- 自動車、飛行機、ロボットなどの制御アルゴリズム開発
- ICの処理アルゴリズムの開発
- 携帯電話や無線LANなど新しい通信システムの方式検討
- テレビやデジカメなどの画像補正、物体認識アルゴリズム開発
のように、「アルゴリズム」のあるところでSimulinkが活躍しています。それではなぜSimulinkを使ってシミュレーションを行うのでしょうか? C言語などのプログラミング言語を使ってもシミュレーションをすることは出来るはずですし、現にそうしているエンジニアも世の中に沢山いると思います。Simulinkを使うに値する理由、つまりアドバンテージとそれによる恩恵は何なのでしょうか?
それは次のようなことが考えられます。
- ブロック線図という図式化した表現を用いているので内容を理解しやすい→設計資産の再利用性が高まり、チーム間のコミュニケーションが良くなる
- 伝達関数、PIDコントローラ、FFT、可視化など各種ライブラリを提供しているので、処理の詳細まで自分自身でプログラムを記述する必要がない→開発期間の短縮
- 処理の変更やパラメータチューニングが簡単なので、アルゴリズムの試行錯誤、検証、デバッグがやりやすい→アルゴリズムの最適化、品質向上
というように現在の開発現場において課題として挙げられていることを解決できるのです。
Simulinkを使ったシミュレーション例
Simulinkによるシミュレーション例をいくつか見てみましょう。まずはモータ制御モデルです。アプリケーションとしての制御系設計は最もSimulinkユーザの多い領域です。
このモデルでは、プラント(制御対象)であるDCモータを、第一原理(運動方程式や回路方程式)モデリングにより構築しています。連続時間伝達関数(a1s+a2/b1s+b2)ブロックに係数を設定する方法もありますが、このモデルでは、連続時間積分(1/s)ブロック、加算器、Gainブロックを使ってモデリングしています。コントローラ側はPIコントローラ、不感帯補償に加えて、全体を監視しフェールセーフ機能を持たせるための状態遷移図(ステートマシン)で構成されています。状態遷移図はStateflowと呼ばれるオプションを使ってモデリングしています。
次に連続・離散マルチレート信号処理システムの例を示します。Simulinkで連続・離散系混在かつ離散のサンプルレートが複数あるようなマルチレート信号処理システムのシミュレーションをするような場合においては、サンプルレート変換を行うブロックを信号線に挟むと、連続と離散の信号の変換や、サンプルレートの変換に伴う間引き/挿入を自動的に行ってくれます。
このモデルでは設定により、サンプルレートごとに色分け表示されています。モデル内の黒色で表示されたアナログ・フィルタブロックおよび信号線は連続系で動作しています。また、離散で動作する部分(ゼロ次ホールド、ディジタル・フィルタブロックなど)はサンプルレートの早い順に赤、緑、青色で表示されており、黄色はサンプルレート変換(アップ・サンプリング)を行っているブロックです。
著者紹介
松本 充史(まつもと あつし)
MathWorks Japan
アプリケーションエンジニアリング部
シニアアプリケーションエンジニア
Mathworks JapanではMATLABの中でも特に信号処理やコード生成に関する機能を担当している