問題タブ [s-function]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
matlab - c-mex s-functionで入力シーケンスを決定する方法は?
2 つの行列の乗算を高速化するために、simulink に c-mex 関数を実装しています。これまでのところ機能していますが、入力の順序/シーケンスは、接続された定数などの命名スキーマに依存していることがわかりました。説明のために 2 つの写真を添付しました。まず、入力に Constant と Constant1 という名前を付けました。次に、入力シーケンスは期待どおりです。 Constant を Constant2 に変更すると、入力シーケンスが変更されるため、c-mex 関数が正しくありません。 さて、私の質問は、どうすればこの動作を変更できるでしょうか? 行列乗算の順序は一般に非常に重要であるため、回避策を実装することができない場合はどうすればよいですか。
c - カスタマイズされた S ファンクション ブロックを作成し、リアルタイム ワークショップを使用して C コードを生成します。
カスタマイズされた S ファンクション ブロックを作成し、リアルタイム ワークショップを使用してそれらの C コードを生成したいと考えています。このタスクに適したドキュメントを見つけることができませんでした。誰かが正確で簡単なドキュメントを指摘して助けてくれませんか?
c++ - 複数のソース ファイルを含む Matlab C++ S-Function
C++ s-function を持つ simulink モデルがあります。この s-function は、多数 (>50) のクラスにアクセスする必要があります。各クラスは、ヘッダー ( .h) とソース ( .cpp) ファイルで構成されます。また、コードを複数のディレクトリに分割しました。
S-Function のコンパイルには、mex 関数を使用しています。
( http://de.mathworks.com/help/matlab/ref/mex.html )
しかし、これは、各ヘッダー フォルダーと ear ソース ファイルを個別に指定する必要があるため、ファイルが増えると非常に長くなり、見苦しくなります。多くのソース ファイルにアクセスする必要がある mex ファイルを作成するより良い方法はありますか?
私は次のアイデアを持っていますが、何が正しくて最も簡単な方法なのかわかりません。
すべてのヘッダー ファイルとソース ファイル (fileX.h/fileX.cpp) をビジュアル スタジオ プロジェクトに追加し、それらを *.lib ファイルにコンパイルします。次に、mex ツールを使用して sfun.cpp のみをコンパイルし、*.lib ファイルへのアクセスを提供します。
すべてのヘッダー ファイルとソース ファイルを 1 つのディレクトリに移動します。これにより、コマンド ラインが次のように短縮されます。
/li>ソースファイルが不要になるように、すべてをインライン化します。(非常に醜い解決策)
mex コンパイラ用の makefile のようなものはありますか?
#include ディレクティブを使用して、ヘッダー ファイルだけでなくソース ファイルもインクルードします。
現時点では、これらのアイデアのいずれにも確信が持てません。助けていただければ幸いです。
ありがとう
Edit1: 1 つの注釈: このプロジェクトは、後の段階で dspace pc に移植する必要があります。この場合、何か特別なことを考慮する必要がありますか?
matlab - Level-2 Matlab S-Function ブロックのサンプル時間を特定の時間間隔に設定する
ここのMatlab初心者で、私はいくつかの問題に悩まされており、Matlabのドキュメントも他の投稿も私を助けることができませんでした. USB経由でセンサー信号(ジャイロスコープ、磁力計、アクセラレーター信号)を受信するレベル2 Matlab S-Functionに取り組んでおり、より高レベルのタスクのために200ミリ秒ごとにこのデータを分析する必要があります。最初は、Simulink モデルのシミュレーション時間を開始時間 0 と停止時間 10 に設定し、ブロックのサンプル時間を block.SampleTimes = [0.2 0] で 0.2 に設定できると考えました。しかし、予期しない動作が発生した後、ドキュメンテーションを通じて、シミュレーション時間が Simulink のクロック時間と同じではないことがわかりました。
シミュレーション時間はクロック時間と同じではありません。たとえば、シミュレーションを 10 秒間実行しても、通常は 10 秒かかりません。合計シミュレーション時間は、モデルの複雑さ、ソルバーのステップ サイズ、コンピューターの速度などの要因によって異なります。
センサー データを 200 ミリ秒ごとに正確に出力する必要があり、Matlab や Simulink の経験がまったくないため、今は本当に行き詰まっています。私の問題が十分に明確であることを願っていますが、必要に応じて詳細を提供します。事前に助けてくれてありがとう。
matlab - S-Function を使用して Simulink で行列を渡す方法
MATLAB で S-Function を作成しました。ここで、「simin」ソースを介してマトリックスを入力に渡したいと思います。で simin 変数の時間を初期化し
simin.time = 0
、値は動的にサイズ変更されたマトリックスに格納されます。たとえばsimin.signals.values = ones(4)
。ここで、MATLAB から、「時間とデータの値は同じ行数でなければならない」と通知されます。私はそれを理解していますが、どうすれば1つのタイムステップでマトリックスを渡すことができますか? また、S-Function を 1 回だけシミュレートし、周期的にシミュレートすることはできますか?
matlab - バスセレクターとしてのs-function
S-Function をバス セレクターとして動作させる方法を知りたいです。s-function への入力として与えられる構造体があります。この構造には 283 個の要素があり (将来的にはさらに増える可能性があります)、バスとして提供されています。s-function が構造体の個々の要素を出力するようにします (したがって、バス セレクターのように動作します)。もちろん、手動入力でこれを簡単に行うことができます:
しかし、すべての構造要素の名前を知る必要があり、それらを手動で入力する必要もあります。単純な for ループを使用して、個々の要素の入力を s-function の出力に割り当てるだけの方法はありますか。
私はここで立ち往生しているので、ヒントを教えてください
アップデート
提案された答えの後、私はこのようなものを書き込もうとしました。
しかし、最初に、ループの一部として y1 y2 y3 などを作成するにはどうすればよいですか。もちろん、まったく別の変数なので、yi を書くことはできません。また、s-function builder の Code Description 部分に書いたこの部分もまた間違っていると思います。誰かが私が正確に何をすべきかを私に提案できますか.
別の重要な点は、異なるデータ型 (uint8、uint16、single など) のフィールドを含む構造体を送信しているため、入力データ型も決定する必要があることです。どうすればそれが可能になり、このデータ型をループ内の出力に設定することができますか?