MATLAB impulse函数脉冲响应完整实操教程
📅 2026/7/12 7:06:00
👁️ 阅读次数
📝 编程学习
文章目录
- 一、impulse函数基础作用
- 二、前置:系统建模两种常用写法
- 方式1:分子分母向量建模(适合考试、实验报告)
- 方式2:符号s快速建模(复杂分式更简洁)
- 多阶相乘用conv函数
- 三、impulse基础绘图语法
- 1. 最简调用,自动生成时间轴
- 2. 自定义仿真时间范围
- 四、进阶常用实操场景
- 场景1:多个系统脉冲响应同图对比
- 场景2:只提取脉冲响应数据,不绘图
- 场景3:离散系统脉冲响应
- 五、搭配反馈闭环系统分析脉冲响应
- 六、常见报错与实操注意事项
- 七、完整可直接运行综合示例脚本
一、impulse函数基础作用
impulse是控制系统工具箱专属函数,用于求解单位脉冲输入下线性定常系统的输出时域曲线,直观反映系统固有动态特性,和阶跃响应step配套使用。
数学意义:输入信号为δ(t)单位脉冲,输出就是系统单位脉冲响应g(t),传递函数G(s)拉普拉斯逆变换结果。
使用前提:必须先通过tf、ss、zpk建立LTI线性系统模型,未安装Control System Toolbox会直接报函数未定义。
二、前置:系统建模两种常用写法
方式1:分子分母向量建模(适合考试、实验报告)
传递函数G ( s ) = b m s m + . . . + b 0 a n s n + . . . + a 0 G(s)=\frac{b_m s^m+...+b_0}{a_n s^n+...+a_0}G(s)=ansn+...+a0bmsm+...+b0,num填分子降幂系数,den填分母降幂系数。
示例二阶系统G ( s ) = 9 s 2 + 3 s + 9 G(s)=\frac{9}{s^2+3s+9}G(s)=s2+3s+99
num=[9];den=[139];G=tf(num,den);方式2:符号s快速建模(复杂分式更简洁)
s=tf('s');G=9/(s^2+3*s+9);多阶相乘用conv函数
开环系统G ( s ) = 2 s ( s + 4 ) G(s)=\frac{2}{s(s+4)}G(s)=s(s+4)2
num=[2];den=conv([10],[14]);G=tf(num,den);三、impulse基础绘图语法
1. 最简调用,自动生成时间轴
clear;clc;s=tf('s');G=16/(s^2+4*s+16);figure;impulse(G);grid on;title('二阶系统单位脉冲响应曲线');xlabel('时间 t / s');ylabel('系统输出 y(t)');运行后自动弹出图像,右键画布选择「特性」,可查看峰值、振荡时长等动态指标。
2. 自定义仿真时间范围
默认时间由MATLAB自适应,想要固定0~20s、步长0.01高精度曲线:
t=0:0.01:20;impulse(G,t);grid on;四、进阶常用实操场景
场景1:多个系统脉冲响应同图对比
调试不同阻尼、不同增益系统时,用线型、颜色区分曲线,搭配图例方便对比:
clear;clc;s=tf('s');G1=10/(s^2+2*s+10);G2=25/(s^2+2*s+25);t=0:0.01:15;figure;impulse(G1,t,'r-',G2,t,'b--');grid on;legend('G1 阻尼比更大','G2 阻尼比更小','Location','best');title('两组二阶系统脉冲响应对比');场景2:只提取脉冲响应数据,不绘图
实验需要手动计算峰值、振荡次数时,返回时间数组t和输出数组y,自行处理数据:
s=tf('s');G=16/(s^2+4*s+16);[y,t]=impulse(G);% 计算峰值peak_y=max(y);disp(['脉冲响应峰值:',num2str(peak_y)]);% 手动绘图plot(t,y,'k-');grid on;xlabel('t(s)');ylabel('输出');title('手动绘制脉冲响应曲线');场景3:离散系统脉冲响应
离散传递函数需要指定采样时间Ts,tf第三个参数填采样周期:
num=[0.2];den=[1-0.70.1];Ts=0.1;Gz=tf(num,den,Ts);figure;impulse(Gz);grid on;title('离散系统脉冲响应');五、搭配反馈闭环系统分析脉冲响应
实际工程大多是闭环控制系统,先用feedback构造闭环,再调用impulse分析动态特性:
clear;clc;s=tf('s');G_open=5/(s*(s+3));% 开环传递函数G_close=feedback(G_open,1);% 单位负反馈闭环figure;impulse(G_close);grid on;title('闭环控制系统单位脉冲响应');六、常见报错与实操注意事项
- 未定义函数’impulse’
控制系统工具箱未安装,命令行输入ver control查看,附加功能管理器安装Control System Toolbox。 - 曲线无输出、图像空白
传递函数分子分母系数写反,必须按s降幂顺序填写;分母最高次项系数不能省略。 - 多系统绘图线条重叠看不清
手动指定颜色、线型:'r-'红色实线、'g–'绿色虚线、'k:'黑色点线。 - 脉冲响应和阶跃响应混淆
step输入是阶跃信号,稳态值不为0;impulse输入是瞬时脉冲,稳定系统最终输出归零。
七、完整可直接运行综合示例脚本
% impulse脉冲响应完整仿真代码clear;clc;close all;% 1. 建立二阶系统传递函数s=tf('s');G=20/(s^2+5*s+20);% 2. 绘制脉冲响应曲线t=0:0.01:25;figure(1);impulse(G,t);grid on;title('二阶系统单位脉冲响应');xlabel('时间 t / s');ylabel('输出 y(t)');% 3. 提取响应数据计算峰值[y,t_data]=impulse(G);max_output=max(y);disp(['脉冲响应最大输出值:',num2str(max_output)]);% 4. 构建闭环并对比脉冲响应G_close=feedback(G,1);figure(2);impulse(G,t,'r',G_close,t,'b');grid on;legend('开环脉冲响应','闭环脉冲响应');title('开环与闭环脉冲响应对比');
编程学习
技术分享
实战经验