見出し画像

MATLABとSimulinkと私 (思考を止めない開発ツール)

まずは自己紹介。
これまで30年以上、主にデジタルオーディオ・ビデオ信号処理アルゴリズムの研究開発~インプリを担当してきました。
「ソフト屋・組込屋さん」という訳ではありません。信号処理アルゴリズム検証・実装のため、必要に駆られてソフトも書く、という感じです。


おそらく、MATLABを積極的に使い始めてから15年以上になると思います。
とはいえ、限られた機能しか使わないので、ほんの一部しか知りませんが・・。


一般的にMATLABのメリットは、定番の信号処理が関数・ブロック化されていることにあると言われていると思います。

ただ私の場合、特にここ数年はDSP/ICへの最適化インプリが前提だったので、MATLAB特有の関数は使わず、普通にgccレベルで開発してきました。
(特性解析時には大変重宝するので使いますが)

それでもMATLAB/Simulinkがない開発は考えられないと思っています。


今日は、MATLABに馴染みがあまりない人向けに、「MATLAB/Simulinkをこういう風に使っている」というのを、多少のTipsを交えながら書きたいと思います。
(主に、リアルタイムオーディオ信号処理を念頭に置いてはいますが、ほとんどの部分は一般的にも言えると思います)


MATLAB/Simulinkとは
まず、ご存じない方のために、MATLAB/Simulink は信号処理系では標準と言える開発ツールです。
一言で言うと、MATLABは行列演算が得意なスクリプト言語、Simulinkはブロックベースのグラフィカルなモデルベースデザインシステムです。

詳しくはマスワークスさんのサイトをご覧ください。

論文等には、MATLABコードが載っている場合も多いです


値段は高いです!
小さい会社などではおいそれと買えないかもしれません・・。
ここで値段が見られます。

ただ、開発効率アップだけでなく、MATLABがなければこのアルゴリズムを考えつくことができなかっただろうと思ったことが何度もあり、お値段以上であることも確か。
でも高いです。
(IC開発用とか、もっと高い開発ツールはいくらでもありますが・・)

逆に大企業、特に自動車メーカーとかだと、全面的に採用している会社も多いと思います。


ただ、救いの手も!

スタートアップ向けプランもあります。

営業さんに相談してみましょう。


HOME版もあります。

安いです!
MATLAB 15,500円、その他、全Toolbox 4,490円!!
だいたい数万円で必要なToolboxは揃うと思います。

ただし、制限もあります。
非営利目的のみです 仕事では使えません。
アプリ化系など、一部、HOME版にはないToolboxがあります。
Simulinkの読み込めるブロック数は1000個までという制限があります。
昔作った画像認識系のモデルは、軒並みダメでした。
Simulinkの高速シミュレーションモードもありません。


学生さんはご安心ください。
確か、めちゃくちゃ安いです。
使い放題の大学もあります。
使えない場合は、大学に文句を言いましょう。


MATLAB/Simulinkのメリット
新しい信号処理アルゴリズムなどを考えるとき、最も重要なのが、思い付いたことをすぐ実現でき、思考を妨げない・止めないことだと思います。これにより発想の幅が広がり、クオリティが間違いなくアップします。

MATLAB以前はC/C++を使っていたので、信号処理本体よりもビジュアライズルーチン(デバッグ用を含む)等の方が遙かに巨大なことも多かったです。

MATLAB/Simulinkなら、思いつきを即座に実現でき、変更、継承も思いのままです。
(バージョン間の違いには要注意! 仕様が変わってたりします)


MATLAB/Simulinkを使った開発工程
さて、前置きが長くなりましたが、私のMATLAB/Simulinkを使った開発工程についてです。

概略はこんな感じ

1.Simulinkでアイデアを実装して効果確認
2.メイン処理をMATLAB Function化
3.GUIアプリ化

GUIアプリの方が、細かいパラメータ調整などには向いており、実行速度的にも有利です。
他の人にも使ってもらってフィードバックが欲しい場合も多く、アプリ化まで行います。
これがほぼシームレスにできることも大きな魅力。

Windows/Mac間で互換性があり(Linux版は使ったことないです)、一つのモデルから各OS上で動作するアプリも作れます(各OS上でコンパイルする必要はあります)。
ただ、Windows版の方が動作が安定しているという印象です。
Macを持っていても、BootcampでWindows版を使っている人を結構見かけます。

以下、開発工程を順を追って見てみましょう

1.まず、何か思い付いたらSimulinkで作ります

画像1

Simulinkのメリット
-用意されているブロックを繋ぐだけ!
-MATLABスクリプトで書くこともできるので自由度が高い
 MATLAB Functionブロックを使えば、その中に書けます

画像2


-任意のポイントでデータ表示・グラフ表示等ができる
 線を繋げばタイムスコープやスペアナ表示等ができるので、デバッグ効率は極めて高いです

画像3


-構成を簡単に変えられる
 ブロックの順番を変えたりもマウスで移動させるだけ
 データ・パラメータの変更・調整も簡単 実行させながらも変更可能
 ブロックをコピーすればそのまま動くので、多重化・一部を変えた複数設定切替・比較等も簡単
-簡単なGUIブロックも用意されている
 キャンバス上に他のブロックと同じように置いて接続できます

画像4

と、一般的なプログラミング言語では相当面倒なことが一瞬でできます。

(私はまだ使ったことがありませんが、R2020aから、Simulinkモデルからスタンドアロンの実行可能ファイルを生成できる、Simulink Compiler という製品も発売になっています)

それと、MATLAB/Simulink共通ですが、OSがサポートするマルチメディアファイルをそのまま読み込めます。(オーディオ系だと、wav/ogg/flac/mp3/m4a/mp4等)
ファイルの読み込み・書き込みダイアログも一行ですし、書き込み時に同じファイル名があれば自動で確認ダイアログが出ます。
excelファイルの読み書きもできます。

Tips:plotブロック自体はありませんが、MATLAB Function内に書けばplot系も使えます

画像5

Tips:パラメータ設定部が複雑で処理時間が掛かる場合等、その部分のサンプルレートを他の処理と変えることができるので、メイン処理のパフォーマンスに影響を与えずにUIを付けることもできます
Rate Transition ブロックを入れれば自動でレートが変換されます

画像6

(S-Functionブロックを使うとSimulinkにC/C++ソースを組み込むこともできますが、ここ10年ほど使ってないので割愛させて頂きます)

2.構成が定まったらメインの処理をMATLABスクリプト化し、MATLAB Functionブロック内に置きます。

デバッグは、すでに作ったSimulinkブロック出力と比較すれば良く、
途中データを出力してグラフ化することも簡単にできるのでかなり楽です。


3.できたスクリプトをGUIに組込みます。

基本的に、デバッグ済みスクリプトを入れるだけなのですぐ動きます。

App Designer(またはGUIDE)というGUI開発環境が用意されているので、基本的には部品を置いて各コールバック関数を書くだけです。

画像7


MATLAB Compilerがあれば、アプリを実行ファイルに変換することができ、
MATLAB環境がなくても、フリーのMATLAB Runtimeを入れれば実行可能です。
このアプリにより、他部署に評価してもらったり、顧客にそのまま評価版として出すこともできます。

簡単なパスワード認証、Web認証、有効期限なども、自分で書けば・・、できます。
MATLAB自体にアプリ認証機能が付くと良いのですが・・。

VSTプラグイン/VSTのスタンドアローンexe版も作ることができます。
(スタンドアローンexeは要R2020a以降)
(使えるMATLAB関数が限られているので、パスワード認証とかはできません)

というように、アルゴリズム検討からテストアプリ開発までほぼシームレスに行え、任意の時点に戻ることも容易です。DSP/FPGA/IC用テストデータ作り・検証にもとても便利です。

なので、開発のどこかの時点でMATLABを使わなくなるということはまずありません。

仕事でMATLABを使わない日はほぼないと言ってもよいでしょう。


またこのシームレスさが、最初に書いた「思考を妨げない・止めない」ことを実現しています。

少なくとも個人的には、信号処理アルゴリズム開発ツールとしては最適かと。

特に、最終的な実装まで考えて信号処理アルゴリズムを開発する必要がある場合や、それを一人でやる場合は、MATLAB/Simulinkが最強ではないでしょうか。

また、結果をすぐ見て試せることや、ドキュメント・例・Webセミナー等が充実しているので、学習用としても有用です。


以上、思いのほか長くなりましたが、私のMATLAB/Simulinkの使い方について書いてみました。

何かのご参考になれば幸いです。


追補

App Designerについて

GUI開発環境です。
以前はGUIDEという環境が提供されていました。
GUIDEは現在も提供されていますが、Mathworksとしては、GUIDEを将来廃止してApp Designerに移行するとしています。
Webアプリ化などは、App Designerのみ対応しています。

詳しくは → App Designer と GUIDE


しかし、確かに開発効率としては圧倒的にApp Designerが上ですが、少なくとも現時点ではGUIDEの方が(実行速度的に)パフォーマンスが優れています。
特にサンプル単位の処理を行ってリアルタイムに音を出したい場合はGUIDEの方が安全かもしれません。

以下のようにすることでかなり改善されますが、今のところ、特に何も気にしないで作ったGUIDE版の方がパフォーマンスは上なことが多いようです。

-メイン関数での割り込み許可を "drawnow" ではなく "drawnow limitrate" にする
-グラフを使用している場合は、ツールバーを非表示にする
 app.UIAxes.Toolbar.Visible = 'off';
-グラフの割り込みを禁止する
 disableDefaultInteractivity(app.UIAxes)
(下2つは、任意のタイミングで「許可」にもできます)


また、GUIDE → App Designer移行ツールも提供されていますが、全自動では移行できません。
複雑なGUIの場合は、一から作り直した方が早いでしょう。

ただ、App Designerの操作性に慣れてしまうと、GUIDEには戻りたくないのも事実。
タブグループ、スピナーなど、App Designerにしかないコンポーネントもあります。

今後のApp Designerパフォーマンスの向上に期待です!

では、素敵なMATLAB/Simulinkライフを!


この記事が気に入ったらサポートをしてみませんか?