主要内容

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

此示例说明如何生成模拟输入,并使用它们在整个工作范围内运行模型。在此示例中,生成测试数据以模拟模型,并比较Sum块的数值响应,以及在中的MATLAB®功能块中实现的Sumex_testsum模型

打开模型。

模型=“ex_testsum”; 开放式系统(模型);设置参数(模型,“模拟命令”,“更新”);

指定数据属性并生成数据

使用fixed.DataSpecification对象来指定输入数据属性。在本例中,创建两个数据规格对象,一个使用双精度数据类型,另一个使用单精度数据类型。第一个对象生成的值的间隔为1到64,第二个对象生成的值的间隔为1到32。

dataspec1=fixed.DataSpecification(“双人”,“间隔”,{1 64});dataspec2=fixed.DataSpecification(“单身”,“间隔”, {1 32});

这个数据发生器对象生成数值丰富的值的组合。要在Simulink®模型中使用输出数据,请将输出格式设置为万博1manbetx“timeseries”.

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

建立模型并进行仿真

应用数据规格对象添加到模型中的输入块。

applyOnRootInport(datagen.DataSpecifications{1},模型,1);applyOnRootInport(datagen.DataSpecifications{2},模型,2);

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

设置参数(模型,“加载外部输入”,“开”,...“外部输入”,'tsdata1,tsdata2',...“停车时间”,字符串(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);轴牢固的;xlabel('在1');伊莱贝尔(“In2”)颜色条;标题('abs(MATLAB功能块输出-求和块输出)');

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

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

这个累加器数据类型Sum块的参数设置为继承:通过内部规则继承。在这种情况下,累加器使用的数据类型是双精度浮点类型。设置累加器数据类型仅有一个的然后再次比较输出。

设置参数([model,“/Sum”],“AccumDataTypeStr”,“单身”)simout=sim(模型);

可视化输出。当总和块的累加器类型设置为仅有一个的,实现在所有值上返回相同的结果。

[x,y]=datagen.getUniqueValues;d=abs(simout.yout{1}.Values.Data-simout.yout{2}.Values.Data);x=restrape(tsdata1.Data,numel(x),[]);y=restrape(tsdata2.Data,numel(x),[]);d=restrape(d,numel(x),[]);figure;surf(x,y,d,“EdgeColor”,“没有”);网格在…上;视图(2);轴牢固的;xlabel('在1');伊莱贝尔(“In2”)颜色条;标题('abs(MATLAB功能块输出-求和块输出)');