主要内容

在Simulink中使用系统对象进万博1manbetx行系统设计

在Simulink中的系统设计与仿真万博1manbetx

您可以在模型中使用System对象在Simulink中进行模拟万博1manbetx®

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

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

  3. 属性将System对象添加到模型中MATLAB系统块。看到添加系统对象到你的Simulink模型万博1manbetx获取信息。

  4. 根据需要添加其他Si万博1manbetxmulink块,并连接这些块来构建您的系统。

  5. 运行系统

定义在Simulink中使用的新系统对象万博1manbetx

System对象是一个可以在MATLAB中创建系统的组件。您可以在MATLAB中编写代码,并使用该代码在Simulink中创建块。万博1manbetx要定义自己的System对象,需要编写一个类定义文件,这是一个基于文本的MATLAB文件,其中包含定义对象的代码。看到使用MATLAB系统块集成系统对象

用块自定义定义系统对象

创建一个在Simulink中使用的System对象。万博1manbetx该实例使用最小均方(LMS)自适应滤波器进行系统识别。

创建一个类定义文本文件来定义System对象。本例中的代码创建了最小均方(LMS)过滤器,并包括对块图标和对话框外观的自定义。

请注意

代替手工创建类定义文件,可以使用>系统对象>万博1manbetx模型的扩展打开模板的菜单选项。此模板包括在Simulink中使用的System对象的自定义万博1manbetxMATLAB系统块。您可以编辑模板文件,使用它作为指南,来创建您自己的System对象。

在类定义文件的第一行,指定System对象和子类的名称matlab。系统.的matlab。系统基类允许您使用所有基本System对象方法,并指定块输入和输出名称、标题和属性组。

添加适当的基本System对象方法来设置、重置、设置输入和输出的数量,并运行算法。关于每个方法的实现,请参阅下面每个方法的参考页和完整的类定义文件。

  • 使用setupImpl方法执行一次性计算和初始化变量。

  • 使用stepImpl方法来实现块的算法。

  • 使用resetImpl方法重置状态属性或DiscreteState属性。

  • 使用getNumInputsImplgetNumOutputsImpl方法分别指定输入和输出的数量。

控件的外观,请添加适当的方法MATLAB系统块模型。万博1manbetx关于每个方法的实现,请参阅下面每个方法的参考页和完整的类定义文件。

  • 使用getHeaderImpl方法指定要显示在块对话框上的标题和描述。

  • 使用getPropertyGroupsImpl方法指定要在块对话框中显示的属性组。

  • 使用getIconImpl方法指定要在块图标上显示的文本。

  • 使用getInputNamesImplgetOutputNamesImpl方法指定要为块输入和输出端口显示的标签。

最小均方滤波器的完整类定义文件为:

classdeflmsSysObj < matlab。系统最小均方(LMS)自适应滤波。% # codegen属性步长μ= 0.005;结束属性(Nontunable)% Weights过滤权重重量= 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 = dy;obj.H = obj.H + obj.Mu*e*obj.X;e_norm =规范(obj.Weights -obj.H);结束函数resetImpl (obj) obj。X = 0 (obj.N, 1);obj.H = 0 (obj.N, 1);结束结束%块图标和对话框自定义方法(静态,访问=受保护)函数header = matlab.system.display.Header(...“lmsSysObj”...“标题”的LMS自适应滤波器);结束函数groups = getPropertyGroupsImpl upperGroup = matlab.system.display.SectionGroup(...“标题”“一般”...“PropertyList”, {“亩”});lowerGroup = matlab.system.display.SectionGroup (...“标题”“系数”...“PropertyList”, {“重量”“N”});组= [upperGroup, lowerGroup];结束结束方法(访问=保护)函数icon = getIconImpl(~) icon = sprintf(“LMS自适应\ nFilter”);结束函数[in1name, in2name] = getInputNamesImpl(~) in1name =“想要的”;in2name =“实际”结束函数[out1name, out2name] = getOutputNamesImpl(~) out1name =“输出”;out2name =“EstError”结束结束结束

使用非直接馈通定义系统对象

创建一个在Simulink中使用的System对象。万博1manbetx该实例使用最小均方(LMS)自适应滤波器和反馈环路进行系统识别。

创建一个类定义文本文件来定义System对象。此示例中的代码创建一个整数延迟,并包含反馈循环和对块图标的自定义。有关反馈循环的信息,请参见在反馈循环中使用系统对象.这个示例实现了一个System对象,您可以将其用于非直接馈通。万博1manbetx仿真软件的例子。

在类定义文件的第一行,从matlab。系统.的matlab。系统基类允许您使用所有基本System对象方法,并指定块输入和输出名称、标题和属性组。

添加适当的基本System对象方法来设置和重置对象,并设置和验证属性。由于此对象支持非直接馈通,因此不实现万博1manbetxstepImpl方法。你实现了updateImploutputImpl而不是方法。关于每个方法的实现,请参阅下面每个方法的参考页和完整的类定义文件。

  • 使用setupImpl方法初始化对象的一些属性。

  • 使用resetImpl方法重置属性状态。

  • 使用validatePropertiesImpl方法检查属性值是否有效。

添加以下类方法而不是stepImpl方法指定块如何更新其状态和输出。关于这些方法的实现,请参阅下面的参考页面和完整的类定义文件。

  • 使用outputImpl方法来实现计算块输出的代码。

  • 使用updateImpl方法来实现代码以更新块的内部状态。

  • 使用isInputDirectFeedthroughImpl方法指定该块不是直接馈通的。它的投入并不直接影响它的产出。

添加getIconImpl方法来定义通过MATLAB系统块在Simulink中使用的块图标。万博1manbetx有关此方法的实现,请参阅下面的参考页和完整的类定义文件。

延迟的完整类定义文件是:

classdefintDelaySysObj < matlab。系统% intDelaySysObj指定采样次数的延迟输入。% # codegen属性% InitialOutput初始输出InitialOutput = 0;结束属性(Nontunable)% NumDelays延迟次数NumDelays = 1;结束属性(DiscreteState) PreviousInput;结束方法(访问=保护)函数setupImpl (obj ~) obj。obj.NumDelays PreviousInput = 1 (1) * obj.InitialOutput;结束函数[y] = outputImpl(obj, ~)%输出不直接依赖于输入y = obj.PreviousInput(结束);结束函数updateImpl (obj, u) obj。PreviousInput = [u obj.PreviousInput(1:end-1)];结束函数flag = isInputDirectFeedthroughImpl(~,~) flag = false;结束函数validatePropertiesImpl (obj)如果((元素个数(obj.NumDelays) > 1) | | (obj。NumDelays <= 0))错误(“延迟次数必须是正的非零……标量价值。');结束如果(元素个数(obj.InitialOutput) > 1)错误(“初始输出必须是标量值。”);结束结束函数resetImpl (obj) obj。obj.NumDelays PreviousInput = 1 (1) * obj.InitialOutput;结束函数icon = getIconImpl(~) icon = sprintf(“整数\ nDelay”);结束结束结束

在MATLAB中测试新的系统对象

  1. 创建一个新的System对象的实例。例如,创建lmsSysObj

    s = lmsSysObj;

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

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

添加系统对象到你的Simulink模型万博1manbetx

MATLAB函数块中的系统对象

控件可以在Simulink模型中包含System对象代码万博1manbetxMATLAB函数块。函数可以包含一个或多个System对象。在MATLAB环境中实现部分系统可能比直接在Simulink中更容易。万博1manbetx许多系统对象具有具有相同功能的Simulink块。万博1manbetx在编写要包含在Simulink模型中的MATLAB代码之前,检查执行所需操作的现有块。万博1manbetx

MATLAB系统块中的系统对象

控件可以将使用类定义文件创建的单个System对象包含到Simulink中万博1manbetxMATLAB系统块。这个选项是将自己的算法块添加到Simulink模型中的一种方法。万博1manbetx

控件将System对象添加到Simulink模型中万博1manbetxMATLAB系统块,如映射系统对象代码到MATLAB系统块对话框

信息,请参阅使用MATLAB系统块集成系统对象