matlab/simulink,如何获取信号线上,上次的数值?(如何迭代?)有图

////////////////////////////////////////////////////////////////////////////////////////////////////
//////
/////////////////////////////////////////////////////////////////////////////////////////////////////
就是想实现下面这个表达式:
out = out + in
但是simulink提示出错,错误原因是:不能实现迭代。仔细想想这个错误也是情理之中,因为out并没有被赋予初始值,所以仿真时第一步(第一次采样)就会出现失败,因为out = out + in首先要读取out和in才能进行加法运算,out无法初始化,第一次进行out的读取操作,肯定就会失败了。

那我想问,怎么才能实现上面这个表达式呢?
就是说如何才能把一根信号线上的数值保存下来(即保存历史),然后下一次采样时,把“新的值”与“上次保存下来的数值”相加呢?

网上查了好久,有人说用S-function模块,具体不知道怎么做,求教高手

你所说的这种问题在Simulink里被称为代数环(Algebraic Loops),基本概念就是要计算一个信号,必须要用到信号自身。从数学的角度来说相当于是求一个隐函数;在Simulink里面,有个术语叫直接馈通(direct feedthrough),代数环就是由一个或多个直接馈通的模块构成了回路。要细说起来内容比较多,想深入了解的话,可以用上述两个关键词查一下相关的文档。

 

解决代数环的方法有多种,用哪种视具体的问题而定。比较简单的有这样两种:

 

1、在代数环中加入Memory模块,相当于把信号延后一个步长再输出(即信号的前一次采样值),由于Memory不是直接馈通的,也就不存在代数环了。如果问题本身不是要求用前一步的采样值,这种做法就引入了本来不存在的动态,在某些情况下会导致错误的结果。从你的描述看,似乎刚好符合使用这个模块的条件。Memory模块位于Discrete库。

 

2、如果有的问题不适用Memory,可以考虑使用IC模块。IC模块可以为代数状态变量一个初始估计,使得计算能够得以启动。该模块位于Signal Attributes库。

 

顺便说一句:建议用S函数的多数属于不懂装懂的大尾巴狼,根本没必要搞那么复杂。S函数的确非常有用,但用在这种场合有点杀鸡用牛刀了。

温馨提示:内容为网友见解,仅供参考
第1个回答  2020-03-31
使用延迟模块:离散库里的z-1,输出为上次采样值

matlab\/simulink,如何获取信号线上,上次的数值?(如何迭代?)有图
1、在代数环中加入Memory模块,相当于把信号延后一个步长再输出(即信号的前一次采样值),由于Memory不是直接馈通的,也就不存在代数环了。如果问题本身不是要求用前一步的采样值,这种做法就引入了本来不存在的动态,在某些情况下会导致错误的结果。从你的描述看,似乎刚好符合使用这个模块的条件。Memor...

MATLAB\/ Simulink的基本使用方法有哪些呢?
首先,我们需要在 Simulink 模型中添加一个示波器模块。打开 Simulink 库浏览器(Library Browser),在搜索栏输入 "Scope",然后将其拖动到你的 Simulink 模型中。连接你希望查看的信号到示波器的输入端口。二、配置示波器 1. 打开示波器窗口 双击示波器模块,会弹出示波器窗口。这个窗口可以实时显示你所连接...

MATLAB的Simulink的信号线
创建和连接信号时,只需从模块的输入或输出端口拖拽出信号线,通过双击或右键编辑信号名。信号线可以分支,通过Ctrl+左键拖曳实现。无需连接的信号线显示为红色虚线,连接后变为实线。删除信号线时,只需选中并按下Delete键,或右键选择删除标签。Simulink中,标量信号以细实线表示,向量和矩阵信号默认与标...

...simulink做仿真时,从示波器上得到了曲线图,有无办法直接导出图中数...
打开示波器 点Parameters->Data History,Save Data to Workspace打勾,输入你需要的变量名,确定 然后在主窗口里就可以调用这些数据了

在Maltlab 的simulink中怎么输入信号
有以下几种参考方法:1、将数据导出到工作空间 matlab--+>simulink--+>sinks--+>to workspace(simout)2、将数据导出到文件 matlab--+>simulink--+>sinks--+>to file (untilted.mat)3、将数据导出到simulink字系统 matlab--+>simulink--+>sinks--+>out(1)...

matlab simulink中的加减模块在哪里?如下图
1、使用命令行simulink,启动simulink工具。2、在simulink中打开库浏览器。3、找到源信号正弦波。4、再选择微分器模块,在连续系统里选择derivative。5、用信号线连接各个模块,并设置源信号参数。6、运行建立的模型,并示波器显示中查看原信号和微分信号的比较。注意事项:在MATLAB命令窗口中输入simulink结果是...

matlab中simulink连线怎么连不上啊???是红虚线,到底是哪里出错了_百度...
1、首先,我们要打开使用的matlab软件。接下来启动simulink工具,可以通过命令行或工具按钮。先打开一个simulink仿真库浏览。创建一个正弦波放大实例,先在库浏览的sources找到sinewave模块,正弦波发生器。2、你好,你的电阻可能选错了,选branch那个试试,别选load那个。3、原因是那几根线没有信宿。一根...

Matlab中simulink的问题 一个输入怎么多个输出 我做的是电机的仿真 具...
1、第一步,在Simulink中建立以下模型,见下图,转到下面的步骤。2、第二步,执行完上面的操作之后,将调制波设置为常数0.5,并且载波的设置参数和相应的载波信道形状如下,见下图,转到下面的步骤。3、第三步,执行完上面的操作之后,执行运行,PWM脉冲波形如下图所示,占空比为25%,见下图,转到下面...

如何查看MATLAB中simulink仿真曲线的超调量、调节时间等参数?
第一个部分5就是调出X,Y方向两个方向的刻度尺。每个方向的刻度尺有两个,4那个地方就可以显示了刻度尺的值,修改刻度值也在这里。1那里用来放大,2是让图像从放大状态还原到上面那张图的正常显示的样子。注意一点就是,1那里那个标签点一下高亮表示功能启用中,再点一下就变回未选中的样子,放大功能...

MATLABsimulink中如何设置、操作示波器
保存数据的操作中,点击“File”->“Save As”将数据保存为MATLAB文件或其他格式。MATLAB提供Simulink模型编程接口,用脚本控制示波器行为。代码示例演示如何通过命令行设置示波器参数,包括坐标轴范围、时间范围以及实时显示示波器。综上所述,灵活运用MATLAB\/Simulink中的示波器,实现信号实时监控与后处理具有高效...

相似回答