您可以在模型中使用系统对象在Simulink中进行模拟金宝app®.
创建要在模型中使用的System对象™。看到定义用于Simulink的新系统对象金宝app获取信息。
在MATLAB中测试新的System对象®.看到在MATLAB中测试新系统对象
方法将System对象添加到模型中MATLAB系统块。看到向Simulink模型中添加系统对象金宝app获取信息。
根据需要添加其他Si金宝appmulink块,并将这些块连接起来构建您的系统。
运行系统
System对象是一个可以用来在MATLAB中创建系统的组件。您可以在MATLAB中编写代码,并使用该代码在Simulink中创建块。金宝app要定义自己的System对象,需要编写一个类定义文件,这是一个基于文本的MATLAB文件,其中包含定义对象的代码。看到使用MATLAB系统块集成系统对象.
创建一个在Simulink中使用的System对象。金宝app该示例使用最小均方(LMS)自适应滤波器进行系统识别。
创建一个类定义文本文件来定义System对象。本例中的代码创建了最小均方(LMS)过滤器,并包括对块图标和对话框外观的自定义。
请注意
类定义文件可以使用新>系统对象>金宝app模型的扩展菜单选项,打开模板。此模板包括在Simulink中使用的System对象的自定义金宝appMATLAB系统块。以模板文件为指导,编辑模板文件,创建自己的System对象。
在类定义文件的第一行,指定System对象和子类的名称matlab。系统
.的matlab。系统
基类使您能够使用所有基本的System对象方法,并指定块输入和输出名称、标题和属性组。
添加适当的基本System对象方法来设置、重置、设置输入和输出的数量,并运行算法。请参阅每种方法的参考页和下面的完整类定义文件,以了解每种方法的实现。
使用setupImpl
方法执行一次性计算并初始化变量。
使用stepImpl
方法来实现块的算法。
使用resetImpl
方法重置状态属性或DiscreteState
属性。
使用getNumInputsImpl
而且getNumOutputsImpl
方法分别指定输入和输出的数量。
属性的外观添加适当的方法MATLAB系统block在Sim金宝appulink中。请参阅每种方法的参考页和下面的完整类定义文件,以了解每种方法的实现。
使用getHeaderImpl
方法指定要在块对话框上显示的标题和说明。
使用getPropertyGroupsImpl
方法指定要在块对话框上显示的属性组。
使用getIconImpl
方法指定要显示在块图标上的文本。
使用getInputNamesImpl
而且getOutputNamesImpl
方法指定要为块输入和输出端口显示的标签。
最小均方滤波器的完整类定义文件是:
classdeflmsSysObj < matlab。系统% lmsSysObj LMS自适应滤波。% # codegen属性步长Mu = 0.005;结束属性(Nontunable)过滤器权重权重= 0;% N过滤器权重的个数N = 32;结束属性(DiscreteState) X;H;结束方法(访问=受保护)函数setupImpl (obj) obj。X = 0 (obj.N,1);obj.H = 0 (obj.N,1);结束函数[y, e_norm] = stepImpl (obj d u) tmp = obj.X (1: obj.N-1);obj.X(2:obj.N,1) = tmp;obj.X(1,1) = u;y = obj.X'*obj.H;E = d-y;obj.H = obj.H + obj.Mu*e*obj.X;e_norm = norm(obj.Weights'-obj.H);结束函数resetImpl (obj) obj。X = 0 (obj.N,1);obj.H = 0 (obj.N,1);结束结束块图标和对话框自定义方法(静态,访问=受保护)函数header = getHeaderImpl header = matlab.system.display.Header(...“lmsSysObj”,...“标题”,“LMS自适应滤波器”);结束函数groups = getPropertyGroupsImpl upperGroup = matlab.system.display.SectionGroup(...“标题”,“一般”,...“PropertyList”, {“亩”});lowerGroup = matlab.system.display.SectionGroup(...“标题”,“系数”,...“PropertyList”, {“重量”,“N”});组= [upperGroup,lowerGroup];结束结束方法(访问=受保护)函数图标= getIconImpl(~)图标= sprintf(“LMS自适应\ nFilter”);结束函数[in1name, in2name] = getInputNamesImpl(~) in1name =“想要的”;in2name =“实际”;结束函数[out1name, out2name] = getOutputNamesImpl(~) out1name =“输出”;out2name =“EstError”;结束结束结束
创建一个在Simulink中使用的System对象。金宝app该示例使用最小均方(LMS)自适应滤波器并使用反馈环执行系统识别。
创建一个类定义文本文件来定义System对象。本例中的代码创建了一个整数延迟,并包括反馈循环和对块图标的自定义。有关反馈循环的信息,请参见在反馈循环中使用系统对象.这个示例实现了一个System对象,您可以将其用于非直接馈通。金宝app仿真软件的例子。
在类定义文件的第一行,subclass frommatlab。系统
.的matlab。系统
基类使您能够使用所有基本的System对象方法,并指定块输入和输出名称、标题和属性组。
添加适当的基本System对象方法来设置和重置对象以及设置和验证属性。由于此对象支持非直接馈通,因此不需要金宝app实现stepImpl
方法。你实现updateImpl
而且outputImpl
而不是方法。请参阅每种方法的参考页和下面的完整类定义文件,以了解每种方法的实现。
使用setupImpl
方法初始化对象的某些属性。
使用resetImpl
方法重置属性状态。
使用validatePropertiesImpl
方法检查属性值是否有效。
添加以下类方法,而不是stepImpl
方法指定块如何更新其状态和输出。有关这些方法的实现,请参阅下面的参考页和完整的类定义文件。
使用outputImpl
方法实现计算块输出的代码。
使用updateImpl
方法来实现更新块内部状态的代码。
使用isInputDirectFeedthroughImpl
方法来指定块不是直接馈通的。它的输入并不直接影响其输出。
添加getIconImpl
通过MATLAB系统块在Simulink中使用时,定义块图标的方法。金宝app有关此方法的实现,请参阅下面的参考页和完整的类定义文件。
延迟的完整类定义文件是:
classdefintDelaySysObj < matlab。系统% intDelaySysObj延迟输入指定样本数。% # codegen属性% InitialOutput初始输出InitialOutput = 0;结束属性(Nontunable)% numdelayed延迟次数numdelayed = 1;结束属性(DiscreteState) PreviousInput;结束方法(访问=受保护)函数setupImpl(obj, ~) obj。PreviousInput = ones(1,obj. numdelayed)*obj.InitialOutput;结束函数[y] = outputImpl(obj, ~)输出不直接依赖于输入y = obj.PreviousInput(end);结束函数updateImpl(obj, u) obj。PreviousInput = [u obj.PreviousInput(1:end-1)];结束函数isInputDirectFeedthroughImpl(~,~) flag = false;结束函数validatePropertiesImpl (obj)如果((数值(obj. numdelayed)>1) || (obj. numdelayed)>1)numdelayed <= 0))错误(“延迟次数必须是正的而非零……标量价值。');结束如果(元素个数(obj.InitialOutput) > 1)错误(初始输出必须为标量值。);结束结束函数resetImpl (obj) obj。PreviousInput = ones(1,obj. numdelayed)*obj.InitialOutput;结束函数图标= getIconImpl(~)图标= sprintf(“整数\ nDelay”);结束结束结束
创建新System对象的实例。类的实例lmsSysObj
.
s = lmsSysObj;
使用不同的输入多次运行该对象。在将其添加到Simulink之前,执行此步骤测试语法错误和其他可能的问题。金宝app例如,
期望= 0;实际= 0.2;(实际需要,);
控件可以在Simulink模型中包含系统对象代码金宝appMATLAB函数块。函数可以包含一个或多个System对象。系统的某些部分可能在MATLAB环境中比直接在Simulink中更容易实现。金宝app许多System对象都有具有等效功能的Simuli金宝appnk块对应对象。在编写要包含在Simulink模型中的MATLAB代码之前,请检查执行所需操作的现有块金宝app。
类可以将使用类定义文件创建的单个系统对象包含到Simulink中金宝appMATLAB系统块。此选项是将自己的算法块添加到Simulink模型中的一种方法。金宝app
控件将系统对象添加到Simulink模型中金宝appMATLAB系统块,如将系统目标代码映射到MATLAB系统块对话框.
有关信息,请参见使用MATLAB系统块集成系统对象.