2017-02-07 14 views
0

イメージに示すように、私のモデルには2D行列/配列があります。私はそれをランダムに索引付け/アクセスし、それを信号として渡すことができる必要があります。これはどうすればいいですか?Simulinkのアクセス/インデックス配列

ファイルブロックを使用することはできません。これは、埋め込みデザインでストレージが2倍になりすぎるためです。

これは表示されません。この配列は私のモデルでSoundArrayとして定義されているため、ワークスペースブロックから使用できます。

これは単純すぎるはずのようですが、わかりません。私がそれを行うと考えることができる唯一の方法は、カスタムCコードです...私はしたくありません。それはスコープ「パラメータ」である場合

おかげ

Array Definition and Model At Bottom

答えて

0

MATLAB Functionブロック(旧EML-ブロック)は、モデルワークスペースのデータを拾うことができますし、ファンクションブロック内のパラメータの入力を定義します。その後、ランダムアクセスを制御するために他の入力を使用して、MATLABファンクションブロックからの信号出力として必要な位置を返します。

function y = fcn(i,j,soundArray) 
y = soundArray(i,j); 
(soundArrayがパラメータとして定義され、i、jは入力されている)

編集: またはデータストアメモリを定義する(定義ブロックを追加します)。次に、2次元のセレクタブロックにルーティングされ、その両方の次元の「開始インデックス(ポート)」にルーティングされるメモリのデータストア読み取りブロックを配置します。 モデルワークスペースデータを使用してデータストアメモリを初期化することはできますが、モデルワークスペースデータはシミュレーション中に「ライブ」とは思われません。

+0

私の問題は、SoundArrayは変数です... constではありません。 Matlab: "パラメータ" "MATLAB®ワークスペースで定義された値、または親マスクされたサブシステムで定義および初期化するSimulink®ブロックパラメータから派生した値です。 Stateflowデータオブジェクトは、パラメータと同じ名前でなければなりません。 " – willworknow

+0

私の理解のために。 SoundArrayはSimulinkコンテキストの変数でもありますか?私。 Simulinkの実行中に変化します。そうでない場合は、パラメータ解決策が機能すると思います。さもなければ、データストアが行く方法だと思われますが、最初にインスタティアライズする必要があります。 – ErikP

+0

SoundArray [n 2]行列/変数はSimulinkで定義されていますが、ファイルのカスタムCコードではpread()で初期化されています。私はSoundArrayを変更する機能が必要です。これはすべてLinux上で動作し、使用できるブロックとデータタイプに関する問題が発生します。私は、カスタムコードから初期化されたデータストアは一切使用していません。 – willworknow