标签: simulink

stateflow和simulink有什么区别?

据我所知,stateflow和simulink经常同时使用,并且都是MathWorks开发的环境,他们制作了Matlab.我可以知道它们之间有什么区别吗?

matlab simulink stateflow

7
推荐指数
1
解决办法
2万
查看次数

在没有'fieldnames'的情况下迭代MATLAB中的结构

在MATLAB中迭代结构数据类型的常用方法是使用以下fieldnames()函数:

mystruct = struct('a',3,'b',5,'c',9);

fields = fieldnames(mystruct);

for i=1:numel(fields)
  mystruct.(fields{i});
end
Run Code Online (Sandbox Code Playgroud)

不幸的是,这总是生成单元格数据类型,我想在SIMULINK中使用这种迭代来进行Matlab功能块,因为代码生成原因不允许单元格数据类型.

有没有办法在不同时使用单元数据类型的情况下迭代结构?

在Octave中有一种简洁的方法,在https://www.gnu.org/software/octave/doc/interpreter/Looping-Over-Structure-Elements.html中有解释.

for [val, key] = mystruct
  # do something esp. with 'key'
end
Run Code Online (Sandbox Code Playgroud)

有没有人在MATLAB中知道类似的方法?

matlab struct loops simulink matlab-coder

7
推荐指数
1
解决办法
2147
查看次数

在MATLAB-Simulink项目中查找未使用的变量和函数

我有一个复杂的MATLAB-Simulink项目,涉及许多m文件和mdl文件.一些m文件定义了在其他m文件中使用的变量(糟糕的设计,我知道,但它是遗留代码).还有一些功能不再使用.

我需要一种自动方式来查找未使用的变量和函数,以便我可以删除它们并使整个事情变得不那么复杂.理想情况下,我应该有一个脚本/工具,它将项目根目录的名称作为输入,扫描子目录中的所有文件,并输出所有未在任何m文件或mdl文件中使用的变量和函数.

我知道我可以找到mdl文件中没有使用的变量(参见提示和技巧 - 在Simulink模型中跟踪变量).我想将该方法应用于项目中的所有文件.

我想检测m文件中未使用的变量的想法是暂时将所有m文件合并到一个文件中并在上运行mlint.有更好的想法吗?

matlab simulink

6
推荐指数
1
解决办法
4610
查看次数

这种技术会减少MATLAB实时车间编码器的编译时间吗?

我的工作场所使用MATLAB和子产品Simulink,Realtime workshop(RTW),RTW Embedded Coder.我们有一个大型的simulink模型,它被编译成C然后到一个目标文件,以便加载到嵌入式目标上.整个编译过程需要大约3小时,这很长,主要是从simulink模型生成的C文件的编译和链接.

删除一个特定子系统会将编译时间缩短到30分钟,并且由于此子系统不会经常更改,我计划在C中编码,然后在MEX中编码,并在主模型中使用MEX文件.

该技术会缩短编译时间吗?我应该研究另一种技术吗?

编辑:我认为解决方案将是粗略的:从违规子系统生成C将此编译为某种对象,库将其包含在模型中(但我对模拟不感兴趣,它只有输入)在构建中包含此内容进程,可能是在编译其余代码后进行链接

c compiler-construction matlab simulink mex

6
推荐指数
1
解决办法
896
查看次数

在SImulink中禁用/注释块

是否可以在任何编程语言中注释掉Simulink中的块?我的意思是,使用逻辑,我可以禁用块.但它并不是最好的解决方案.

我宁愿禁用/注释掉我模型中块的一部分来测试Simulink中的各个模块.

任何提示都将受到高度赞赏.

谢谢

matlab simulink

6
推荐指数
2
解决办法
8324
查看次数

为Arduino库创建Simulink块,如liquidcrystal

我想使用Simulink为Arduino Uno硬件创建程序.但我想使用现有的库,如liquidcrystal,来处理LCD显示器的输出.如何创建包含liquidcrystal类文件的s函数?

我认为s函数是要走的路,因为现有的Simulink Arduino库块实际上是被屏蔽的s函数.我使用的是Simulink学生版,所以我认为我不能从模型中编译C代码并将其合并到Arduino IDE中的项目中.

c matlab simulink arduino

6
推荐指数
1
解决办法
3491
查看次数

在Simulink中,Goto和From块通常被认为是不好的风格吗?

我最近正在研究一种Simulink模型,正在使用GotoFrom阻止一个非常繁忙的系统变成一堆扭曲的电线.我被告知我不会使用GotoFrom阻止,因为他们被认为是不好的风格(至少,根据我的雇主).

虽然我认为应尽可能保持电线连接,但我相信,如果模型会产生大量交叉线Goto,那么From块和块可以显着提高系统/子系统的可读性; 特别是如果块可以用颜色编码(例如紫色Goto块到达所有紫色From块).

我提供了一个我正在使用的子系统的图像,但我不确定我可以把它放在这里.子系统本身有大约12个子系统块(可能更晚),每个子系统块有两个总线型输出.每个子系统的第一个输出转到一个Bus Creator块,每个子系统的第二个输出转到第二个Bus Creator块.由于子系统垂直对齐而Bus Creators位于右侧,因此会产生许多交叉线.我正在使用GotoFrom阻止清理系统.

我可以提供一个较小但相似模型的图像,我将这个问题放在一起. 小Simulink系统描绘交叉线. 对于大约12个子系统的系统,这变得非常繁忙.我正在使用GotoFrom阻止连接子系统和Bus Creators而没有过多的交叉线.

我相信我的雇主可能会承担使用goto基于文本的语言的语句并将其应用于Simulink中的Goto/ From块的耻辱.一般来说,使用GotoFrom阻止这种方式(或任何方式)被认为是不好的风格?

matlab styles simulink goto

6
推荐指数
1
解决办法
5975
查看次数

在Matlab/Simulink中增加蒙特卡罗模拟的仿真时间

我使用Matlab脚本运行蒙特卡罗模拟Simulink模型,该脚本看起来或多或少像这样:

model = 'modelName';

load_system(model)

for ii = 1 : numberOfMC
    % Some set_param...
    % Some values are set

    sim(model);
    results{ii, 1} = numberOfMC;
    % ect...
end
close_system(model,0);
Run Code Online (Sandbox Code Playgroud)

随着蒙特卡罗试验次数的增加,一次模拟的时间也随着n ^ 2的增加而增加.

有没有一个简单的解释,是否有解决方案,以及时间线性?

谢谢!

编辑:

当我将模拟分成6批,并且我将它们串联运行时,模拟时间的总和远小于我在一次运行整个模拟时的总和.

matlab simulink

6
推荐指数
1
解决办法
748
查看次数

多个起点和终点的高效冒号运算符

假设我有以下两个变量:

start_idx = [1 4 7];
end_idx   = [2 6 15];
Run Code Online (Sandbox Code Playgroud)

我想有效地(无for循环如果可能的话)产生的单排它由操作者结肠中的相应元件之间施加start_idxend_idx.对于此示例,这将导致:

result = [1:2 4:6 7:15];
Run Code Online (Sandbox Code Playgroud)

因此:

results = [1 2 4 5 6 7 8 9 10 11 12 13 14 15];
Run Code Online (Sandbox Code Playgroud)

执行此操作的方法应该可以在Simulink的MATLAB功能块中使用.非常感谢你!

matlab simulink vectorization

6
推荐指数
2
解决办法
208
查看次数

从SIMULINK到工作区FFT?

如果我想在Matlab中绘制一个简单的正弦波的PSD,我会做如下的事情:

Fs = 1000;
t = 0:1/Fs:1-(1/Fs);
x = cos(2*pi*100*t) ;

N = length(x);
xdft = fft(x);
xdft = xdft(1:N/2+1);
psdx = (1/(Fs*N)) * abs(xdft).^2;
psdx(2:end-1) = 2*psdx(2:end-1);
freq = 0:Fs/length(x):Fs/2;

plot(freq,10*log10(psdx))
grid on
Run Code Online (Sandbox Code Playgroud)

但是,为简单起见,我在SIMULINK中有一个正弦波发生器,我需要绘制PSD.我做了类似以下的事情: 在此输入图像描述

然后我得到了一个名为"Sinwave"的变量,我怎么可能应用上面的Matlab代码来绘制PSD?

请注意,变量Sinewave是1x1双倍时间序列.我试图用Sinwave替换x,但它没有用.

更新:应用答案

我应用了推荐的内容,但是我的输出与使用Matalb的输出不同.这是我使用的代码:

Fs = 1000;
x = Sinwave.Data;
N = length(x);
dft = fft(x);
dft = dft(1:N/2+1);
psd = (1/(Fs*N)) * abs(dft).^2;
psd(2:end-1) = 2*psd(2:end-1);
freq = 0:Fs/length(x):Fs/2;

plot(freq,10*log10(psd))
grid on
Run Code Online (Sandbox Code Playgroud)

这个用于SIMULINK导出的正弦波 在此输入图像描述

但是,来自matlab代码的代码如下: 在此输入图像描述

我需要输出来自matalb ,在噪声层中具有所有这些涟漪.如何获得准确的输出?

请注意我已经使用了两者的确切值.

更新2:SIMULINK正弦波设置

1-正弦波块 …

workspace matlab simulink

6
推荐指数
1
解决办法
1527
查看次数