Simulink基础模块库:常用连续/离散模块、信号源与显示模块、数学运算模块的功能与参数设置
Simulink 的模块库(Library Browser)是构建系统模型的核心素材库,其中 Simulink 基础模块库(Simulink/Commonly Used Blocks 及 Simulink 下的各子库)提供了绝大多数仿真所需的底层组件。本章将聚焦三类最核心的模块族:连续/离散模块、信号源与显示模块、数学运算模块。理解这些模块的数学模型、参数含义及适用场景,是进行复杂系统建模的基石。我们将从模块的数学本质出发,结合参数设置技巧与典型工程案例,帮助您建立从“模块功能”到“系统行为”的映射能力。
上图展示了本章所涉及的模块族在典型仿真模型中的位置与信号流关系。信号源模块产生激励,连续或离散模块描述系统动态特性,数学运算模块实现信号间的代数与逻辑关系,最终由显示模块观测结果。下面我们将逐一深入剖析各模块族的数学本质、参数配置方法及工程应用要点。
3.1 连续模块:积分器、传递函数与状态空间
核心原理
连续模块用于描述随时间连续变化的动态系统,其数学基础是微分方程。在 Simulink 中,最基础的连续模块是积分器(Integrator),它实现 y(t) = ∫₀ᵗ u(τ)dτ + y₀ 的运算。积分器是构建状态方程的核心元件,任何线性时不变连续系统都可以通过积分器和增益/加法器组合实现。传递函数模块(Transfer Fcn)则直接以有理多项式形式 H(s) = num(s)/den(s) 表示系统,适用于线性单输入单输出系统。状态空间模块(State-Space)使用 dx/dt = Ax + Bu; y = Cx + Du 矩阵形式,是多输入多输出系统建模的首选。
参数设置与操作流程
积分器的关键参数包括初始条件(Initial condition)和外部重置(External reset)。初始条件决定了仿真起始时刻的状态值,在物理系统中通常对应初始位移、初始速度等。外部重置允许通过外部信号将积分器状态强制归零或设为指定值,常用于分段控制策略。传递函数模块的参数设置界面中,需要分别输入分子和分母多项式的系数向量(按 s 的降幂排列)。例如,要表示 H(s) = (s+2)/(s²+3s+5),分子填 [1 2],分母填 [1 3 5]。状态空间模块则需要输入 A、B、C、D 四个矩阵,并注意矩阵维度的匹配。
案例拆解:弹簧-质量-阻尼系统建模
考虑一个典型的机械振动系统:质量 m=2kg,弹簧刚度 k=50N/m,阻尼系数 c=5N·s/m。系统微分方程为 m·d²x/dt² + c·dx/dt + k·x = F(t)。我们使用积分器构建仿真模型:
- 状态变量选择:令 x₁ = x(位移),x₂ = dx/dt(速度),则 dx₁/dt = x₂,dx₂/dt = (F - c·x₂ - k·x₁)/m。
- 模型搭建:使用两个积分器串联,第一个积分器输出 x₂,第二个积分器输出 x₁。将 x₁ 乘以 k/m 后与 x₂ 乘以 c/m 相加,再与 F/m 做减法,反馈至第二个积分器的输入端。
- 参数设置:两个积分器的初始条件分别设为 0(初始位移)和 0.5(初始速度 m/s)。增益模块分别设置为 k/m=25 和 c/m=2.5。
- 仿真验证:输入阶跃力 F=10N,仿真时间 5s。观察位移输出,应呈现衰减振荡,稳态位移为 F/k = 0.2m。
该案例展示了积分器在状态空间建模中的核心地位。相比直接使用传递函数模块,积分器结构允许我们方便地引入非线性项(如库仑摩擦)或时变参数,扩展性更强。
常见误区与复盘
- 误区1:混淆传递函数分子分母的系数顺序。Simulink 要求按降幂排列,
[1 2]表示 s+2,而非 2s+1。 - 误区2:忽略积分器的初始条件。在闭环控制仿真中,若初始条件设置不当,系统可能从一开始就处于非平衡状态,导致仿真初期出现较大瞬态。
- 误区3:连续模块与离散模块混用时不设置合适的采样时间。若模型中同时存在连续积分器和离散延迟,必须通过零阶保持器或速率转换模块统一采样率,否则会产生代数环错误。
3.2 离散模块:单位延迟、离散传递函数与零阶保持器
核心原理
离散模块描述的是在离散时间点 t = n·Ts(Ts 为采样周期)上更新的系统。最基础的离散模块是单位延迟(Unit Delay),其功能为 y[n] = u[n-1],即输出等于上一采样时刻的输入。单位延迟是数字滤波器、离散状态空间模型的基本构建单元。离散传递函数模块(Discrete Transfer Fcn)以 z 变换形式 H(z) = num(z)/den(z) 表示系统,其参数设置与连续传递函数类似,但需额外指定采样时间 Ts。零阶保持器(Zero-Order Hold)则用于将连续信号转换为离散信号,它在每个采样时刻捕获输入值并保持到下一个采样时刻,是连续系统与离散系统接口的关键模块。
采样时间设置与操作流程
离散模块的采样时间参数(Sample time)是核心设置项。在 Simulink 中,采样时间可以设置为标量(如 0.01 表示 10ms 采样周期)或向量 [period offset]。当模型中存在多个离散模块时,Simulink 会自动检测采样时间冲突。若需要混合不同采样率的模块,必须使用速率转换模块(Rate Transition)或零阶保持器进行桥接。离散传递函数模块的参数设置界面中,分子分母系数按 z 的降幂排列,例如 H(z) = (z+0.5)/(z²-0.3z+0.1),分子填 [1 0.5],分母填 [1 -0.3 0.1],采样时间填 0.01。
案例拆解:数字低通滤波器设计
设计一个一阶 IIR 低通滤波器,截止频率 fc=10Hz,采样频率 fs=100Hz。根据双线性变换法,数字滤波器系数为:y[n] = 0.245·(x[n] + x[n-1]) + 0.51·y[n-1]。在 Simulink 中实现:
- 模块选择:使用离散传递函数模块,分子系数
[0.245 0.245],分母系数[1 -0.51],采样时间 0.01s。 - 信号源设置:使用 Signal Generator 模块产生 1Hz 和 30Hz 的叠加正弦信号,采样时间设为 0.01s(离散模式)。
- 显示与验证:将原始信号和滤波后信号分别接入 Scope。仿真 2s,观察 30Hz 分量是否被明显衰减。
- 参数调整:若滤波效果不理想,可调整截止频率并重新计算系数。注意系数变化对相位延迟的影响。
该案例体现了离散模块在数字信号处理中的直接应用。通过修改离散传递函数的系数,可以灵活实现各种数字滤波器,而无需改变模型结构。
常见误区与复盘
- 误区1:将离散传递函数的采样时间设为 0。采样时间为 0 表示连续时间,离散模块不允许设置为 0。
- 误区2:忽略单位延迟的初始条件。单位延迟的初始条件默认是 0,但在某些控制算法中,需要设置非零初始值以避免启动冲击。
- 误区3:在离散系统中使用连续积分器。这会导致混合系统仿真,虽然 Simulink 支持,但会显著降低仿真速度,且可能引入数值稳定性问题。
3.3 信号源与显示模块:激励生成与结果观测
核心原理
信号源模块为模型提供输入激励,是仿真测试的起点。常用信号源包括:常数(Constant)提供恒定值;阶跃(Step)在指定时刻从初始值跳变到终值;正弦波(Sine Wave)产生正弦信号,可设置幅值、频率、相位和偏置;信号发生器(Signal Generator)支持正弦、方波、锯齿波等波形;随机数(Random Number)产生服从正态分布的随机序列。显示模块用于观测仿真结果,示波器(Scope)是最常用的时域波形显示工具,支持多通道、缩放、游标测量;数据显示(Display)以数值形式显示当前时刻的信号值;XY 图(XY Graph)用于绘制两个信号的相平面轨迹。
参数设置与操作流程
阶跃模块的关键参数包括阶跃时间(Step time)、初始值(Initial value)和终值(Final value)。正弦波模块的采样时间参数需特别注意:若设为 0,则产生连续正弦波;若设为正值,则产生离散正弦序列。信号发生器模块的波形类型、频率、幅值均可调,且支持设置单位(Hz 或 rad/s)。示波器的配置包括:坐标轴数量、时间范围、Y 轴上下限、游标测量等。在仿真大型模型时,建议将示波器数据记录到工作区(Logging),以便后续用 MATLAB 脚本进行批量分析。
案例拆解:阶跃响应与正弦扫频测试
对一个二阶系统 H(s) = 100/(s² + 10s + 100) 进行性能测试:
- 阶跃响应测试:使用 Step 模块(阶跃时间 0.1s,初始值 0,终值 1)作为输入,连接至传递函数模块,输出接 Scope。仿真 2s,读取超调量(约 4.3%)、峰值时间(约 0.31s)和调节时间(约 0.8s)。
- 正弦扫频测试:使用 Signal Generator 产生正弦波,频率从 0.1Hz 线性扫频至 20Hz(通过 MATLAB 脚本动态改变频率参数)。记录输出幅值变化,绘制幅频特性曲线。
- 数据导出:在 Scope 中启用“Logging”功能,将时间与输出数据保存到工作区变量
logsout,使用plot(logsout)命令在 MATLAB 中重绘并添加标注。
该案例展示了信号源与显示模块在系统辨识和性能验证中的配合使用。通过对比不同激励下的响应,可以全面评估系统的动态特性。
常见误区与复盘
- 误区1:正弦波模块的“Sample time”误设为 0 导致离散系统仿真时产生混叠。若模型是离散的,正弦波必须设置为离散模式。
- 误区2:示波器显示波形“看起来”正确,但实际数据已失真。原因是仿真步长过大,建议将最大步长设置为信号周期的 1/100 以下。
- 误区3:使用 Display 模块显示连续信号时,显示值会不断跳动,难以读取。应使用 Scope 或先经过采样保持模块。
3.4 数学运算模块:增益、求和、乘积与逻辑运算
核心原理
数学运算模块对信号执行代数或逻辑变换。增益(Gain)模块实现标量乘法 y = K·u,K 可以是常数、变量或矩阵;求和(Sum)模块实现多个输入的加减运算,通过符号列表(如 |+-)指定各输入的正负号;乘积(Product)模块支持元素级乘法或矩阵乘法;逻辑运算(Logical Operator)模块实现 AND、OR、NOT 等布尔运算,常用于控制逻辑和状态判断。此外,查表(Lookup Table)模块通过插值实现任意非线性函数映射,是处理传感器标定曲线、非线性特性的常用工具。
参数设置与操作流程
增益模块的“Multiplication”参数可选择 Element-wise(K.*u) 或 Matrix(K*u),前者适用于标量或同维数组运算,后者适用于矩阵乘法。求和模块的“Icon shape”可设为 rectangular 或 round,输入符号列表中的“|”表示分隔符,例如 |+- 表示第一个输入为正,第二个为负。乘积模块的“Number of inputs”可设为标量或向量,若设为向量 [2 3] 则先执行 2×3 矩阵乘法。逻辑运算模块的“Operator”下拉菜单选择逻辑类型,“Number of input ports”设置输入数量。
Kp)时,修改变量值后需重新运行仿真才能生效。若希望实时调参,可使用“Tunable”参数属性,或使用“Gain”模块的“Parameter”对话框中的“Tunable”选项。
案例拆解:PID 控制器的数学运算实现
在 Simulink 中手动搭建 PID 控制器(不使用 PID Controller 模块),以理解其数学结构:
- 比例项:误差信号 e(t) 直接通过增益模块 Kp=2.5。
- 积分项:误差信号接入积分器,输出乘以增益 Ki=1.8。
- 微分项:误差信号接入微分器(或使用带滤波的导数模块),输出乘以增益 Kd=0.4。
- 求和:使用 Sum 模块将三项相加,符号列表设为
|+++。 - 限幅:在输出端串联饱和模块(Saturation),设置上下限为 ±10,防止执行机构过载。
该案例展示了数学运算模块在控制器设计中的灵活组合。相比使用封装好的 PID 模块,手动搭建更利于理解各环节的作用,也便于引入非线性特性(如积分限幅、微分滤波)。
常见误区与复盘
- 误区1:增益模块的乘法类型选择错误。当输入是行向量而增益是矩阵时,若选择 Element-wise 会报维度错误。
- 误区2:求和模块的输入符号列表与端口数量不匹配。例如符号列表为
|+-但只有两个输入端口,会导致错误。 - 误区3:逻辑运算模块的输入类型不匹配。逻辑运算要求输入为布尔型(boolean),若输入为 double 型,需先经过关系运算模块(如 Relational Operator)转换。
3.5 模块选型对比与综合应用建议
为帮助读者快速选择合适模块,下表总结了常用模块的适用场景与关键参数:
| 模块类别 | 模块名称 | 数学模型 | 关键参数 | 典型应用 |
|---|---|---|---|---|
| 连续 | Integrator | ∫u dt + y₀ | 初始条件、外部重置 | 状态方程构建、积分环节 |
| Transfer Fcn | num(s)/den(s) | 分子/分母系数向量 | 线性 SISO 系统 | |
| State-Space | dx/dt=Ax+Bu | A、B、C、D 矩阵 | MIMO 系统、现代控制 | |
| 离散 | Unit Delay | y[n]=u[n-1] | 采样时间、初始条件 | 数字滤波器、状态延迟 |
| Discrete TF | num(z)/den(z) | 系数向量、采样时间 | 数字控制、DSP | |
| 信号源 | Step | 阶跃函数 | 阶跃时间、初值/终值 | 阶跃响应测试 |
| Sine Wave | A·sin(2πft+φ) | 幅值、频率、相位、采样时间 | 正弦激励、载波信号 | |
| 显示 | Scope | 时域波形 | 坐标轴、游标、记录 | 波形观测、数据记录 |
| Display | 数值显示 | 格式、采样时间 | 实时数值监控 | |
| 数学运算 | Gain | y=K·u | 增益值、乘法类型 | 比例控制、信号缩放 |
| Sum | Σ±uᵢ | 符号列表、输入数 | 误差计算、信号叠加 |
在实际工程建模中,模块选型应遵循“最小复杂度”原则:能用简单模块组合实现的,不引入复杂模块;能用连续模块描述的,不强行离散化。同时,要注意模块间的数据类型一致性,避免因 double/single/boolean 类型不匹配导致仿真错误。