Simulink 是什么:把系统画成方块图
MATLAB 本身是写脚本做数值计算的;Simulink 是它旁边那套用鼠标拖模块、连线搭系统的可视化仿真环境。你不再写一行行代码描述"信号怎么传",而是把信号源、增益、积分器这些模块拖到画布上,用线连起来,整个系统就变成一张看得见的方块图。
这种方式特别适合搞控制系统、信号处理、电力电子——这些领域的系统本来就是由"输入—环节—输出"串起来的,画出来比写代码直观得多。Simulink 会自动帮你按时间一步步算,把每个模块的输出传给下一个,最后画出波形。
Simulink 的本质:把一个连续动态系统拆成模块网络,然后数值积分它、按时间往前推,看每个量怎么随时间演化。
- 模块库正弦波、增益、求和、积分器、Scope 是最常用的几类积木。
- 连线模块之间用信号线连接,信号从左往右、从上往下流动。
- solver求解器决定"按多大步长积分",是仿真准确度与速度的开关。
- Scope示波器窗口,把信号随时间画成波形,是观察结果的眼睛。
搭第一个模型:信号源与示波器
新建一个 Simulink 模型(File → New → Model),打开左侧库浏览器,从 Sources 库拖一个 Sine Wave(正弦波信号源)到画布,再从 Sinks 库拖一个 Scope(示波器)。然后用鼠标从 Sine Wave 右边的输出端口拖一条线,连到 Scope 的输入端口。
点一下模型窗口上的"运行"按钮(绿色三角),等它跑完,双击 Scope,就能看到一条正弦波画出来。这就是最最小的一个 Simulink 模型:一个信号源、一个观察者,中间没有任何处理。
% 等价的 MATLAB 脚本写法(帮助你理解 Simulink 在算什么)
t = 0:0.01:10; % 时间轴 0 到 10 秒
y = sin(t); % 正弦信号
plot(t, y); grid on; % 画出来
脚本和仿真做的是同一件事:按时间轴算每一点的 sin 值。只不过 Simulink 让你拖模块、连线,还能在中间插入各种处理环节,而不用改代码。
常用模块:增益、求和、积分
真正搭系统时,你会反复用到这几类基础模块:
- Gain(增益):把信号乘以一个常数。比如把输入放大 2 倍,就放一个 Gain 模块、把增益值改成 2。
- Sum(求和):把多路信号加起来。正负号在模块参数里设,比如 "+−" 就一路加、一路减——反馈回路常用。
- Integrator(积分器):对信号做时间积分。这是 Simulink 最核心的模块之一——几乎所有连续动态系统(弹簧、电路、转动)都靠它来描述。
- Scope / To Workspace:前者实时画波形,后者把仿真结果输出到 MATLAB 工作区,方便你事后用 plot 处理。
把这些积木串起来,就能拼出相当复杂的动态系统模型。
跑仿真:solver 与时间步长
点运行之前,先在 Model Settings(齿轮图标)里看一下 Solver 这一页。两个关键参数:仿真停止时间(Stop time,比如设 10 秒)和求解器类型。
% 常用 solver 选择
% ode45 : 默认,自适应步长,适合大多数连续系统
% ode1 : 定步长,步长最小,速度慢但稳
% ode3 : 用于仿真需要固定步长的场合(如生成嵌入式代码前)
%
% 一般先用 ode45 跑通;要速度或对接硬件时再换定步长
solver 干的活:从 t=0 开始,每往前推一个小步长 dt,就根据当前状态算下一个时刻的状态。步长越小越准但越慢,自适应 solver 会自动在"变化快的地方走小步、平缓的地方走大步"。
看波形:Scope 里发生了什么
仿真结束后双击 Scope,你看到的横轴是时间、纵轴是信号值。常见要关注几件事:波形稳不稳定(有没有振荡发散)、响应快慢(从阶跃到稳定用了多久)、稳态误差(最后离目标差多少)。
如果波形看着"锯齿很粗糙",多半是步长太大了,把 solver 步长上限调小重跑;如果波形直接飞到几万几十万,那就是系统不稳定,要么反馈符号接反了、要么增益太大。
调参数:让系统响应更理想
Simulink 最大的价值就是改参数、重跑、立刻看波形的循环。比如你搭了一个反馈控制系统,响应太慢,就把控制器的增益调大;结果它振荡了,再把增益调小一点。这种"仿真—看波形—调参"的迭代,是工程上做控制器设计的标准动作。
% 在 MATLAB 命令行里改参数再重跑,比手动点快
set_param('my_model/Gain','Gain','5'); % 把某个 Gain 改成 5
sim('my_model'); % 重跑仿真
% 仿真结果自动存在 your_model_out 之类的变量里,直接 plot
把这套脚本写下来,你就拥有了一个"批量扫参数、自动出图"的小工具——一次跑 20 组增益,把 20 条响应曲线叠在一张图上对比,比手动点高效得多。
实战:搭一个一阶低通滤波模型
串起来:搭一个一阶低通滤波器,把正弦波叠噪声后的信号平滑掉。模型结构:Sine Wave → 叠加 Random Number(噪声)→ 一阶低通环节(用 Transfer Fcn 模块)→ Scope 同时看滤波前和滤波后。
% 一阶低通传递函数 H(s) = 1 / (RC*s + 1)
% 仿真里 Transfer Fcn 模块分母设 [R*C 1],R*C=0.5
%
% 跑出来你会看到:
% 滤波前:正弦波上抖动明显
% 滤波后:高频抖动被抹掉,留下平滑正弦
把时间常数 RC 从 0.1 改到 2,重跑:RC 越大滤波越狠,但正弦也会被拖得越慢。你就在仿真里亲眼看到了"滤波强度和信号延迟的 trade-off"。
Simulink 检查清单
把 Simulink 记成一条链:拖模块 → 连线 → 设参数 → 选 solver → 跑仿真 → 看 Scope → 调参重跑。提交模型前对照自查:
- 每个模块的参数(增益值、初值、采样时间)是不是按设计设好了,没有留默认?
- solver 选的是不是合适?连续系统用 ode45,别乱用定步长。
- Scope 看到的波形是不是符合预期?发散、振荡、延迟过大都要回头查。
- 调过的参数有没有记录在脚本或注释里,下次别人能复现?
- 模型命名、注释是否清晰?Simulink 图也得像代码一样可读。
Simulink 是工程师的"数字实验台":在仿真里把系统折腾坏了不花一分钱,等模型稳定了再去接硬件,成本和风险都小得多。
下一篇我们跳出 MATLAB,看看 R 怎么从网络上抓数据、再做文本挖掘——把统计工具用到真实世界的非结构化数据上。