当前位置: 首页 > news >正文

《信号与系统》学习笔记——第八章(补充部分)

利用 MATLAB 进行系统的状态变量分析

微分方程到状态方程的转换

MATLAB 提供的函数 tf2ss,可将描述系统的微分方程转换为相应的状态方程,函数调用形式如下:

其中 num, den 分别表示系统函数 H(s) 的分子和分母多项式系数矩阵。A ,B ,C ,D 分别为状态方程和输出方程的系数矩阵。 

eg:

描述因果 LTI 系统的微分方程为

试求该系统的状态方程。

可得

所以系统的状态方程和输出方程分别为

MATLAB代码:

%例子
[A,B,C,D] = tf2ss([1 4],[1 5 10])

运行结果如下:

系统函数矩阵的计算

利用 MATLAB 提供的函数 ss2tf,可以根据系统的状态方程和输出方程计算出相应的系统函数矩阵 H(s) ,函数调用形式如下:

 其中 A ,B ,C ,D 分别为状态方程和输出方程中的系数矩阵。k 表示函数 ss2tf 计算与第 k 个输入相关的系统函数,即 H(s) 的第 k 列。num 表示 H(s) 第 k 列的 m 个元素的分子多项式,den 表示 H(s) 公共的分母多项式

eg:

利用 MATLAB 计算例 8-5 的系统函数矩阵 H(s) 。

MATLAB代码如下:

%例子
A = [2 3; 0 -1];
B = [0 1; 1 0];
C = [1 1; 0 -1];
D = [1 0; 1 0];
[B1, A1] = ss2tf(A, B, C, D, 1);
[B2, A2] = ss2tf(A, B, C, D, 2);

 运行结果:

所以系统函数矩阵 H(s) 为 

利用 MATLAB 求解连续时间系统状态方程 

连续 LTI 系统状态方程的一般形式为

可用函数 lsim 获得状态方程的数值解。lsim 的基本调用形式为 

其中:

  • sys —— 连续系统模型,由函数 ss(A, B, C, D) 获得;
  • t —— 输入信号的时间样点;
  • x(:, n) —— 系统第 n 个输入在 t 时刻的值;
  • q0 —— 系统的初始状态;
  • tout —— 输出信号的时间样点(有可能与输入 t 不同);
  • y(:, n) —— 系统的第 n 个输出在 tout 时刻的值;
  • q(:, n) —— 系统的第 n 个状态在 tout 时刻的值

 eg:利用 MATLAB 计算例 8-5 的数值解。

 MATLAB 程序如下:

%例子
clear;
A = [2 3; 0 -1];
B = [0 1; 1 0];
C = [1 1; 0 -1];
D = [1 0; 1 0];
q0 = [2 -1];
dt = 0.01;
t = 0:dt:2;
x(:,1) = ones(length(t), 1);
x(:,2) = exp(-3*t)';
sys = ss(A, B, C, D);
[y, t, q] = lsim(sys, x, t, q0);
subplot(2,1,1);
plot(t, y(:,1), 'r'); ylabel('y1(t)');
xlabel('t');
subplot(2,1,2);
plot(t, y(:,2)); ylabel('y2(t)');
xlabel('t');

运行结果如下:

 

利用 MATLAB 求解离散时间系统状态方程

离散 LTI 系统状态方程的一般形式为

 可用函数 lsim 获得离散时间状态方程的数值解。用 lsim 求解离散系统的状态方程的基本调用形式为

 

其中:

  • sys —— 离散系统模型,由函数 ss(A, B, C, D, []) 获得;
  • x(:, n) —— 系统第 n 个输入;
  • q0 —— 系统的初始状态;
  • k —— 输出样点;
  • y(:, n) —— 系统的第 n 个输出;
  • q(:, n) —— 系统的第 n 个状态。
  • eg:

MATLAB 程序如下: 

%例子
clear;
A = [0 1; -1/6 5/6];
B = [0; 1];
C = [-1 5; 2 0];
D = zeros(2, 1);
q0 = [2; 3];
N = 10;
k = 0:N-1;
x = ones(1, N);
sys = ss(A, B, C, D, []);
[y, k, q] = lsim(sys, x, [], q0);
subplot(1, 2, 1);
y1 = y(:, 1)';
stem(k, y1 - 12);
xlabel('k');
ylabel('y_{1}[k] - 12');
subplot(1, 2, 2);
y2 = y(:, 2)';
stem(k, y2 - 6);
xlabel('k');
ylabel('y_{2}[k] - 6');

运行结果如下:

结果如图所示。为了清楚地显示出系统输出 y1​[k] 与 y2​[k] 的变化规律,在画图时幅度上分别减去了常数 12 和 6。

http://www.lryc.cn/news/583901.html

相关文章:

  • Java多线程:核心技术与实战指南
  • 前端本地化存储数据方案详解
  • React 实现五子棋人机对战小游戏
  • 【TCP/IP】11. IP 组播
  • mvn能只test单独一个文件吗
  • Unity插件——ABC详解
  • pyqt-3(QSS、读取带qrc的ui、信号与槽函数)
  • 从面向对象编程语言PHP转到Go时的一些疑惑?
  • 文心一言4.5开源部署指南及文学领域测评
  • Go语言教程-变量、常量、命名规则
  • GO启动一个视频下载接口 前端可以边下边放
  • Django中序列化与反序列化
  • 实现源图像到目标图像的转换(提示:RGB值互换,新R=旧G,新G=旧B,新B=旧R)
  • Redis数据库基础
  • JSZip 使用详解
  • vue3 td 标签优化时间显示
  • 50天50个小项目 (Vue3 + Tailwindcss V4) ✨ | DoubleVerticalSlider(双垂直滑块)
  • JavaScript 树形菜单总结
  • SoC程序如何使用单例模式运行
  • vue3 el-table 列汉字 排序时排除 null 或空字符串的值
  • 第二章-AIGC入门-AI视频生成:几款实用AI视频生成工具全解析(7/36)
  • 2025年软件测试面试题,精选33道,附答案
  • 数据结构笔记10:排序算法
  • 【办公类-107-01】20250710视频慢速与视频截图
  • 用OpenCV标定相机内参应用示例(C++和Python)
  • window显示驱动开发—XR_BIAS 和 PresentDXGI
  • 图像亮度调整的简单实现
  • 0基础学Python系列【31】 详细讲解Python中SQLAlchemy包的用法:从入门到精通
  • k8s:安装 Helm 私有仓库ChartMuseum、helm-push插件并上传、安装Zookeeper
  • zookeeper etcd区别