主要内容

比较Sum块和MATLAB®功能块中Sum的数值响应

这个示例展示了如何生成仿真输入,并使用它们在整个操作范围内运行模型。在本例中,生成测试数据来模拟一个模型,比较Sum块的数值响应,并在MATLAB®函数块中实现Sumex_testsum模型。

打开模型。

模型=“ex_testsum”;open_system(模型);set_param(模型,“SimulationCommand”“更新”);

指定数据属性并生成数据

使用固定的。DataSpecification对象来指定输入数据属性。在本例中,创建两个DataSpecification对象,其中一个使用双精度数据类型,另一个使用单精度数据类型。第一个对象的取值范围是1 ~ 64,第二个对象的取值范围是1 ~ 32。

dataspec1 =固定。DataSpecification (“双”“间隔”, {64});dataspec2 =固定。DataSpecification (“单一”“间隔”32、{1});

DataGenerator对象生成数值丰富的值的组合。要在Simulink®模型中使用输出数据,设置输出的格式金宝app为“timeseries”

datagen = fixed.DataGenerator;datagen。dataspec1 = {dataspec1, dataspec2};[tsdata1, tsdata2] = outputAllData(datagen,“timeseries”);

建立模型并进行仿真

的属性DataSpecification对象到模型中的import块。

applyOnRootInport (datagen。DataSpecifications{1}, model, 1); applyOnRootInport(datagen.DataSpecifications{2}, model, 2);

将生成的timeseries数据加载到模型中并进行模拟。

set_param(模型,“LoadExternalInput”“上”...“ExternalInput”'tsdata1,tsdata2'...“StopTime”,字符串(tsdata1.Time(end));simout=sim(模型);

可视化输出

可视化模拟的输出,并比较和操作的两种实现的数值行为。

在生成的数据中获取每组数据的唯一值。[x,y]=datagen.getUniqueValues;d=abs(simout.yout{1}.Values.Data-simout.yout{2}.Values.Data);X=重塑(tsdata1.Data,numel(X),[]);Y=重塑(tsdata2.Data,numel(x),[]);D=重塑(D,努梅尔(x),[]);图形%根据输入值绘制输出之间的差值。冲浪(X, Y, D,“EdgeColor”“没有”);网格在…上;视图(2);轴;包含(“三机”);ylabel (“In2”);colorbar;标题('abs(MATLAB函数块输出- Sum块输出)');

从图中可以看出,随着数值输入值的增大,两种实现之间的差异增大。这种差异是由于两种实现中累加器的数据类型不同造成的。

数值响应与单精度累加器的比较

蓄电池数据类型Sum块的参数设置为继承:通过内部规则继承.在本例中,用于累加器的数据类型是双精度浮点类型。设置蓄电池数据类型再次比较输出结果。

set_param([模型,/笔的],“AccumDataTypeStr”“单一”) simout = sim(模型);

可视化输出。当Sum块的累加器类型被设置为时,实现对所有值返回相同的结果。

[x,y]=datagen.getUniqueValues;d=abs(simout.yout{1}.Values.Data-simout.yout{2}.Values.Data);X=重塑(tsdata1.Data,numel(X),[]);Y=重塑(tsdata2.Data,numel(x),[]);D=重塑(D,努梅尔(x),[]);图形冲浪(X, Y, D,“EdgeColor”“没有”);网格在…上;视图(2);轴;包含(“三机”);ylabel (“In2”);colorbar;标题('abs(MATLAB函数块输出- Sum块输出)');