当前位置: 首页 > 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.xdnf.cn/news/1095805.html

相关文章:

  • 分库分表之实战-sharding-JDBC分库分表执行流程原理剖析
  • 【算法笔记】6.LeetCode-Hot100-链表专项
  • VTK 9.0中的屏幕空间环境光遮挡
  • 【Android】在平板上实现Rs485的数据通讯
  • 【Docker基础】Docker容器与网络关联命令使用指南:深入理解容器网络连接
  • 基于Catboost算法的茶叶数据分析及价格预测系统的设计与实现
  • AI技术通过智能缺陷检测正在深度重构多个行业的生产模式、质量管理体系和人才结构,其影响已超越单纯的技术升级,正在引发系统性变革。
  • 可视化DIY小程序工具!开源拖拽式源码系统,自由搭建,完整的源代码包分享
  • 3D lidar目标跟踪
  • 机器学习:反向神经元传播公式推导
  • 网安-解决pikachu-rce乱码问题
  • 企业使用银河麒麟系统下载vscode显示界面不全
  • swift开发,关于应用、页面、视图的生命周期
  • WIFI协议全解析05:WiFi的安全机制:IoT设备如何实现安全连接?
  • 【数据结构】时间复杂度和空间复杂度
  • 解析LLM层裁剪:Qwen实战指南
  • XMAPP MySQL 启动后自动停止
  • Java-69 深入浅出 RPC 单体架构 垂直架构 分布式架构 微服务架构
  • 堆的应用(讲解超详细)
  • 学习软件测试的第十四天(移动端)
  • ElementUI:高效优雅的Vue.js组件库
  • 【HarmonyOS Next之旅】DevEco Studio使用指南(四十二) -> 动态修改编译配置
  • Eigen中四元数、欧拉角、旋转矩阵、旋转向量之间的转换
  • 解锁医疗新视界:医患共决策时间轴AI可视化工具
  • HighReport报表工具开始支持BS报表设计器
  • msf复现永恒之蓝
  • 不止于快:金士顿XS2000移动固态硬盘如何重塑你的数字生活
  • 32多串300A保护板测试仪:新能源电池安全的核心守护者
  • 服务器组件与 Actions:重塑 React 数据交互
  • Linux 内核日志中常见错误