2026a

# 创建移动平均值的 SyslabObject


此示例说明如何实现移动平均滤波器的 SyslabObject,模型路径为 SyslabWorkspace.Examples.Demo_SyslabObject_MovingAverageFilter

# 简介

在此示例中,您将创建并使用 movingAverageFilter SyslabObject,用于计算由参数 WindowLength 输入的采样未加权均值。WindowLength 是移动平均值窗口的长度。movingAverageFilter 是接受单精度和双精度的二维输入矩阵,输入矩阵的每列被视为一个独立的(一维)通道,输入的第一个维度定义通道的长度(或输入帧的大小)。在仿真过程中,movingAverageFilter 随时间变化独立计算每个输入通道的移动平均值。

# 创建 SyslabObject

在 Syslab 的主页选项卡中,您可通过选择新建 > 新建 Julia 对象 创建一个新 SyslabObject 类,此时 SyslabObject 模板将在 Syslab 编辑器中打开,请参考模板中的注释进行编辑。您也可以在 Sysplorer 中通过SyslabObject组件的新建按钮新建 Julia 对象。

重命名类名movingAverageFilter,并将文件保存为 movingAverageFilter.jl。

注意

类名需与文件名保持一致

# 添加属性

此 SyslabObject 需要四个属性。首先,添加公共属性 WindowLength 来控制移动平均值窗口的长度,将此属性的默认值设置为 0。

# Parameter (用于生成Modelica组件参数,包括类型、名称、描述)
WindowLength::Int64 = 0            #窗口长度

接下来,添加名为StatepNumChannelspCoefficients的三个内部变量。State 保存移动平均滤波器的状态。pNumChannels 存储通道数量,由输入中的列数决定。pCoefficients存储 FIR 分子系数。

# Private (内部变量,不对用户展示)
pNumChannels::Int64 = -1
pCoefficients = []
State = []

# 在 setupImpl 中进行设置和初始化

setupImpl方法用于设置对象并实现一次性初始化任务。对于此 SyslabObject,需要修改默认的setupImpl方法来计算滤波器系数、状态和通道数。滤波器系数由指定的WindowLength决定(请注意,每个输入通道有 WindowLength-1 个状态)。通道数由输入中的列数决定。

function setupImpl(self, u)
    # Perform one-time calculations, such as computing constants
    self.pNumChannels = size(u, 2)
    self.pCoefficients = ones(1, self.WindowLength) / self.WindowLength
    self.State = zeros(self.WindowLength - 1, self.pNumChannels)
    return nothing
end #setupImpl

# 在 stepImpl 中定义算法

在此示例中,需要修改stepImpl以计算输出,并使用filter函数更新对象的状态值。

function stepImpl(self, u)
    # % Implement algorithm. Calculate y as a function of input u and states.
    y, self.State = filter1(self.pCoefficients', 1, u, self.State)
    return y
end #stepImpl

# 在 Sysplorer 中使用 movingAverageFilter

创建完成 Julia 对象文件后,您可在 Sysplorer 中使用该文件。

# 关联组件对应的对象文件

加载 SyslabWorkspace 模型库,拖拽创建单个 SyslabObject 组件。右击组件在上下文菜单中单击 选择Syslab对象文件 ,弹出 “Syslab对象参数” 对话框。单击对话框中的 “浏览…” 按钮选择已创建完成的 movingAverageFilter.jl 文件,您也可在文本框中输入此文件的路径。单击 “确定” 按钮,组件将自动生成 movingAverageFilter.jl 文件中定义的参数和端口。

# 组件参数设置

在 Sysplorer 的组件参数栏常规页中,将WindowLength参数的初始值设置为10,您也可以根据需要更改其他参数。

# 将组件组合到系统中

除了 SyslabObject 组件外,您还需要一个资源组件作为输入数据。拖拽TimeTable组件,组件路径为Modelica.Blocks.Sources.TimeTable。请参考案例中的数据进行TimeTable组件参数配置。

当您确定了所需组件并已创建和配置 SyslabObject 之后,请组装您的系统。

# 运行系统

单击建模菜单页中的仿真图标,开始进行系统仿真。仿真结束后,选择in_uout_y作为绘图数据,可以得到以下曲线窗口。