R2010b新機能:CSVやExcelデータをSimulinkへ

CSVやExcelデータをSimulinkへ入力する。かなり要望があると思うのですが、これまで出来ませんでした。(たぶん、みなさん独自にやっちゃっているのでしょう。)

R2010bでは、Signal BuilderブロックにCSVやExcelデータを読み込めるようになっています。

ところが、日本語版ヘルプには詳しい使い方が載っていません。そこで、Mathworks本社のオンラインヘルプを参照しつつ、使ってみました。

何が出来るのか?

CSVやExcelファイルのデータは、いったん「Signal Builder」ブロックに取り込みます。あとは、シミュレーション実行時にSignal Builderブロックからデータが出てきます。

CSVファイルの取り込み

CSVファイルは、次のようなフォーマットにしておきます。

<目的>

・上記のCSVを、Signal Builderに取り込む

<手順>

・Signal Builderブロックを配置する

・Signal Builderブロックをダブルクリックする

・メニューの「ファイル」>「ファイルからインポート」を選択する

・「参照」ボタンをクリックし、CSVファイルを指定する

・インポートしたいデータ列にチェックを入れる

・選択したデータの位置を、「既存のデータセットを置き換える」にして、「選択の確認」をクリック

・「OK」をクリック

・警告メッセージが出るので、「いいえ、保存しないでインポートします」をクリック

<結果>

CSVファイル内の信号が、Signal Builderに取り込まれました

出力データをスコープで見てみると、こんな感じです

Excelファイルの取り込み

Excelファイル( *xls, *.xlsx ) は、次のようなフォーマットにします

これを、CSVファイルの時と同様にインポートします。すると、CSVファイルの時とは違い、信号名付きでインポートされます。

Excelファイルの取り込み:追加実験

CSVファイルと違い、Excelファイルには計算式が入れられます。Signal Builderはそれを認識できるのでしょうか?

それを実験するため、 sin( t ), cos( t ) を作ってみました。

Signal Builderにインポートしてみると・・・

バッチリです。よく出来ていますね。

ちょっとした注意点

Signal Builderの基本的なモードは、「外挿」です。たとえば、さきほどの sin( t ), cos( t )を、時間1まででなく10までシミュレーションすると、こうなります。

sin( t ) , cos( t ) の値を大きく外れていってしまいます。下側のグラフなんかは、まるでここ数カ月のUSD相場を見ているようですね。

この振る舞いが良くない場合には、「ファイル」>「シミュレーションオプション」にて、設定を変えます。たとえば、ホールドにするとこうなります。

(USD相場もこんな感じになってほしかった!)

ただ残念なことに、「外挿」「ホールド」「ゼロに戻す」しか選べません。リピートなんかがあっても良かったと思うんですが、そのあたりは今後に期待です。

まとめ

お手軽にCSVやExcelファイルを取り込むには十分な機能をもっていると思います。

ただし、CSVやExcelファイルの内容は、毎回手でSignal Builderブロックに取り込まないといけません。テストパターンを変えつつシミュレーション自動実行を行いたいという事は出来ないようです。(Signal Builderブロックをいじるためのm-fileコマンド signalbuilder は存在します。しかし、 CSVやExcelファイルのインポートには対応していないようです)

また、大量の実験データをSimulinkモデルにつっこむ、というような使い方には向かない気がします。そういう事がしたいのであれば、実験データ(CSVなど)を、いったんMATファイルにコンバートして、それをFromFileブロックで取り込んだ方が良いでしょう。ちなみにコンバートは、数百Mバイト程度のCSVファイルまでなら、MATLABで出来ると思います。それ以上大きなファイルであれば、専用のコンバーターを作らないと厳しいでしょう。