当前位置: 首页 > 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.dtcms.com/a/272500.html

相关文章:

  • 缺乏日常项目进度例会机制,如何系统推进
  • 基于大模型的膀胱癌全周期精准诊疗方案研究
  • GitHub敏感信息收集与防御指南
  • 【音视频】TS协议解析
  • 音频 SDP 文件格式
  • 基于多模态感知的裂缝2D及3D检测方案
  • Boost.Asio学习(3):异步读写
  • windows对\和/敏感吗?
  • 小白成长之路-NFS文件存储及论坛项目搭建(php)
  • C++之unordered_set和unordered_map基本介绍
  • jmeter如何让一个线程组中的多个请求同时触发
  • PyTorch中torch.eq()、torch.argmax()函数的详解和代码示例
  • 多线程交替打印ABC
  • Windows安装DevEco Studio
  • 解决问题:在cmd中能查看到pnpm版本,在vscode终端中却报错
  • [5种方法] 如何将iPhone短信保存到电脑
  • 搜索算法在前端的实践
  • G5打卡——Pix2Pix算法
  • Vue前端导出页面为PDF文件
  • 【HDLBits习题 2】Circuit - Sequential Logic(4)More Circuits
  • AI驱动的业务系统智能化转型:从静态配置到动态认知的范式革命
  • 基础 IO
  • Spring Boot中的中介者模式:终结对象交互的“蜘蛛网”困境
  • JAVA JVM的内存区域划分
  • Redis的常用命令及`SETNX`实现分布式锁、幂等操作
  • Redis Stack扩展功能
  • K8S数据流核心底层逻辑剖析
  • AI进化论06:连接主义的复兴——神经网络的“蛰伏”与“萌动”
  • k8s集群--证书延期
  • 项目进度管控依赖Excel,如何提升数字化能力