主要内容

在Simulink中使用系统对象进金宝app行系统设计

Simulink系统设计与仿真金宝app

您可以在模型中使用系统对象在Simulink中进行模拟金宝app®

  1. 创建要在模型中使用的System对象™。看到定义用于Simulink的新系统对象金宝app获取信息。

  2. 在MATLAB中测试新的System对象®.看到在MATLAB中测试新系统对象

  3. 方法将System对象添加到模型中MATLAB系统块。看到向Simulink模型中添加系统对象金宝app获取信息。

  4. 根据需要添加其他Si金宝appmulink块,并将这些块连接起来构建您的系统。

  5. 运行系统

定义用于Simulink的新系统对象金宝app

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”);结束结束结束

在MATLAB中测试新系统对象

  1. 创建新System对象的实例。类的实例lmsSysObj

    s = lmsSysObj;

  2. 使用不同的输入多次运行该对象。在将其添加到Simulink之前,执行此步骤测试语法错误和其他可能的问题。金宝app例如,

    期望= 0;实际= 0.2;(实际需要,);

向Simulink模型中添加系统对象金宝app

MATLAB函数块中的系统对象

控件可以在Simulink模型中包含系统对象代码金宝appMATLAB函数块。函数可以包含一个或多个System对象。系统的某些部分可能在MATLAB环境中比直接在Simulink中更容易实现。金宝app许多System对象都有具有等效功能的Simuli金宝appnk块对应对象。在编写要包含在Simulink模型中的MATLAB代码之前,请检查执行所需操作的现有块金宝app。

MATLAB系统块中的系统对象

类可以将使用类定义文件创建的单个系统对象包含到Simulink中金宝appMATLAB系统块。此选项是将自己的算法块添加到Simulink模型中的一种方法。金宝app

控件将系统对象添加到Simulink模型中金宝appMATLAB系统块,如将系统目标代码映射到MATLAB系统块对话框

有关信息,请参见使用MATLAB系统块集成系统对象