操纵数组的特定元素

时间:2012-05-25 06:55:03

标签: matlab simulink

我在simulink模型中有两个不同长度的矢量信号。现在,我想将较短信号的值添加到较长信号的特定元素中。让我用一个例子解释一下:

假设,信号A的值为[1 2 3 4 5],信号B的值为[2 4 8]。我想将B的值加到A的第1,第3和第5个元素,得到[3 2 7 4 13]。相应的matlab命令为A([1 3 5])=A([1 3 5])+B

同样的事情应该可以在Simulink中使用Insert Zero-Block将B填充到与A相同的长度,然后添加两个向量。不幸的是,这个Block需要我没有的Communications System Toolbox。除了使用嵌入式matlab函数之外,您还有其他可能吗?

3 个答案:

答案 0 :(得分:1)

您可以尝试使用选择器块来模拟MATLAB中的索引,我现在没有Simulink,所以这里是模型的powerpoint版本。在选择器块中,您可以对所需的索引进行硬编码,也可以使用块上的端口来提供索引。

在这种情况下,模型实现,

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

有关详细信息,请参阅Selector block documentation.

enter image description here

答案 1 :(得分:0)

虽然我不知道插入零块如何将信号填充到相同的长度。计算指定的索引非常容易。

我会做这样的事情:

a = zeros(1000,1);
b = rand(20,1);
indexes = round(linspace(1,numel(a),numel(b)))
a(indexes) = a(indexes)+b;

答案 2 :(得分:0)

这不是你的问题,但你所做的不是如何将两个不等间距的信号加在一起。问题是你没有修改A的所有值。假设B的值为[10 10 10]。好吧,这意味着B的常量值为10,因此我们希望A只是A + 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重采样块。