MATLAB impulse函数脉冲响应完整实操教程

文章目录

一、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

matlab 复制代码
num = [9];
den = [1 3 9];
G = tf(num,den);

方式2:符号s快速建模(复杂分式更简洁)

matlab 复制代码
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

matlab 复制代码
num = [2];
den = conv([1 0],[1 4]);
G = tf(num,den);

三、impulse基础绘图语法

1. 最简调用,自动生成时间轴

matlab 复制代码
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高精度曲线:

matlab 复制代码
t = 0:0.01:20;
impulse(G,t);
grid on;

四、进阶常用实操场景

场景1:多个系统脉冲响应同图对比

调试不同阻尼、不同增益系统时,用线型、颜色区分曲线,搭配图例方便对比:

matlab 复制代码
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,自行处理数据:

matlab 复制代码
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第三个参数填采样周期:

matlab 复制代码
num = [0.2];
den = [1 -0.7 0.1];
Ts = 0.1;
Gz = tf(num,den,Ts);
figure;
impulse(Gz);
grid on;
title('离散系统脉冲响应');

五、搭配反馈闭环系统分析脉冲响应

实际工程大多是闭环控制系统,先用feedback构造闭环,再调用impulse分析动态特性:

matlab 复制代码
clear;clc;
s = tf('s');
G_open = 5/(s*(s+3)); % 开环传递函数
G_close = feedback(G_open,1); % 单位负反馈闭环
figure;
impulse(G_close);
grid on;
title('闭环控制系统单位脉冲响应');

六、常见报错与实操注意事项

  1. 未定义函数'impulse'
    控制系统工具箱未安装,命令行输入ver control查看,附加功能管理器安装Control System Toolbox。
  2. 曲线无输出、图像空白
    传递函数分子分母系数写反,必须按s降幂顺序填写;分母最高次项系数不能省略。
  3. 多系统绘图线条重叠看不清
    手动指定颜色、线型:'r-'红色实线、'g--'绿色虚线、'k:'黑色点线。
  4. 脉冲响应和阶跃响应混淆
    step输入是阶跃信号,稳态值不为0;impulse输入是瞬时脉冲,稳定系统最终输出归零。

七、完整可直接运行综合示例脚本

matlab 复制代码
% 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('开环与闭环脉冲响应对比');
相关推荐
空堂与归22 分钟前
单机 Python 跑不动?Ray 分布式计算框架让 AI 训练提速 10 倍
开发语言·人工智能·python
JacksonMx29 分钟前
Java 线程池:复用、Spring 管理、监控与线上故障排查全指南
开发语言·python
脉动数据行情37 分钟前
Python WebSocket 实现融通金实时行情监听
开发语言·python·websocket
only-qi38 分钟前
Python Agent 开发速通清单
开发语言·python
zq_63891 小时前
ObjectModel_diagram.pdf 文档详细总结
开发语言·matlab
自己的九又四分之三站台2 小时前
C# 接入 RasterLite2:从原生 DLL 加载到 Coverage、Section、Tile 验证
开发语言·c#·地理信息
飞翔的火箭弹2 小时前
企业网络资产管理用什么系统工具
开发语言·网络·php
码云骑士2 小时前
116-Python调用GPT-4V分析图片-Base64编码-多图-JSON结构化输出
开发语言·python·json
88号技师2 小时前
2026年SCI-分数牛顿衍生优化算法Fractional Newton-derived optimizer-附Matlab免费代码
开发语言·算法·数学建模·matlab·优化算法
承渊政道2 小时前
【Python编程—从入门到实践】(Python操作列表深度教程:循环、切片、元组与代码风格)
开发语言·python·pycharm·列表·元组·切片