1

Simulinkモデルに長さが異なる2つのベクトル信号があります。ここで、短い信号の値を長い信号の特定の要素に追加したいと思います。例を使って説明しましょう:

信号Aの値が[123 4 5]であり、信号Bの値が[248]であると仮定します。Aの1番目、3番目、5番目の要素にBの値を追加すると、[3 2 7413]になります。対応するmatlab-commandはA([1 3 5])=A([1 3 5])+B

Insert Zero-Blockを使用してBをAと同じ長さにパディングし、両方のベクトルを追加することで、Simulinkでも同じことが可能になります。残念ながら、このブロックには私が持っていない通信システムツールボックスが必要です。埋め込まれたmatlab関数を使用する以外に、他の可能性はありますか?

4

3 に答える 3

1

セレクターブロックを使用してMATLABでインデックスをエミュレートしてみることができます。現在、Simulinkを使用していないため、モデルのパワーポイントバージョンを次に示します。セレクターブロックでは、必要なインデックスをハードコーディングするか、ブロックのポートを使用してインデックスをフィードすることができます。

この場合、モデルは以下を実装します。

Y = A([1 3 5 7 9]) + B;

詳細については、Selectorブロックのドキュメントを参照してください。

ここに画像の説明を入力してください

于 2012-06-01T00:57:53.680 に答える
0

ゼロブロックを挿入する方法がわかりませんが、信号を同じ長さにパディングします。指定したようなインデックスを計算するのは非常に簡単です。

私はこのようなことをします:

a = zeros(1000,1);
b = rand(20,1);
indexes = round(linspace(1,numel(a),numel(b)))
a(indexes) = a(indexes)+b;
于 2012-05-25T10:43:18.353 に答える
0

これはあなたの質問ではありませんが、あなたがしていることは、2つの不等間隔の信号を一緒に追加する方法ではありません。問題は、のすべての値を変更していないことですAB値があったとしましょう[10 10 10]。ええと、それはそれが10の定数値を持っていることを意味するので、私たちはただになりBたいと思います。ありません。AA + 10[10 2 13 4 15]

一般に、信号を同じ間隔で補間してから、それらを追加する必要があります。まず、アレイに対応する時間ベクトルを生成し、次に、より粗くサンプリングされた信号を他の信号に補間します。

% Let's say t runs from 0 to 100
tA = linspace(0, 100, 5);
tB = linspace(0, 100, 3);
Bi = interp1(tB, B, tA);
combined = A + Bi;

Biは上記の重要な変数であり、あなたの例では、値があります[2 3 4 6 8]resample信号処理ツールボックスがあれば、この関数はおそらく一般的な信号に対してさらに優れています。

したがって、これが信号の加算をより正確に説明していると思われる場合は、Simulinkのどこを見ればよいかがわかります。Simulinkリサンプリングブロックを探します。

于 2012-05-25T14:01:59.847 に答える