matlab 在simulink中如何使用子系统输出作为下一次迭代的输入

ssm49v7z  于 7个月前  发布在  Matlab
关注(0)|答案(1)|浏览(239)

我试图在Simulink(2015 a)中创建SHA 256哈希函数,同时尽可能避免使用用户定义的函数-使用它们不是我正在寻找的答案。
我试过使用Delay块,但它也会延迟a-h变量的初始化(这意味着,例如,我的T1将为0),所以问题可能就在那里
我是新的这种事情,所以我很抱歉,如果这是一个问题,已经回答了我只是不知道什么谷歌得到我的答案,因为英语不是我的第一语言,无论如何,这是我的计划:
For loop (but with placeholder const 1)
get a...g function
First iteration is giving me the correct output
它应该代表这个MATLAB代码:

% H = 1x8 const
% constK = 1x64 const

a = H(1);
b = H(2);
c = H(3);
d = H(4);
e = H(5);
f = H(6);
g = H(7);
h = H(8);

% Calc H1 subsystem in Simulink
for t = 1:64
    K = constK(t);
    temp1 = addMsgSch(h, cSigma1(e), choice(e, f, g), K, W(t));
    temp2 = addMsgSch(cSigma0(a), majority(a, b, c));
    h = g;
    g = f;
    f = e;
    e = addMsgSch(d, temp1);
    d = c;
    c = b;
    b = a;
    a = addMsgSch(temp1, temp2);
end

% addMsgSch(a, b... z) = a + b + ... + z;

字符串
所以我的问题是:* 我如何用新分配的变量(重新)开始循环?*

4urapxun

4urapxun1#

首先:我没有2015 a(所以不能很容易地测试它),而且我对SHA 256的来龙去脉并不特别熟悉。
Delay块的默认行为是将其输出信号初始化为全零,但这不是它唯一可用的行为。初始条件可以在掩码上设置,或者(至少在最近的版本中)有a check box on the mask会“神奇地”使一个额外的输入端口出现:
x 0-初始条件标量|向量
指定为从输入端口继承的初始条件。当选择初始条件:源参数作为输入端口时启用。
(令人沮丧的是,许多内置Simulink模块都具有类似的“多态”能力,可以更改输入或输出端口)
在启用这个额外的端口后,您可以将H信号路由到它(并且可能将H1路由到Delay块的“主”输入)。
为了让您有所了解,许多Simulink模块都有一些设置初始条件的机制,通常使用掩码参数。还有相关的IC模块,它可以根据掩码参数设置信号的初始条件。
FWIW,根据我的经验,在“纯”Simulink中实现这样的东西并不能真正发挥Simulink的优势。(以及信息)路由,它的动态引擎相当强大。但是对于做“简单”的数学,块的堆积通常不如使用Matlab函数块清晰。您的m-代码for循环对我来说比等效的Simulink更简单(并且您的Simulink以非常合理的方式布局)。
另外供参考,您用于将H拆分为a. h的Subsystem块可能会被Demux替换。
进一步的FYI,在我看来,你使用的addMsgSch(a, b... z)可以替换为sum([a, b... z])或只是常规的加法,这两种方法都可以提高可读性。

相关问题