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で出来ると思います。それ以上大きなファイルであれば、専用のコンバーターを作らないと厳しいでしょう。