本帖最后由 Zhao_kar 于 2024-1-24 20:46 编辑
控制之美(卷2)第一节——开箱+octave的环境搭建+基本测试
声明:
- 本次参与好书共读活动:《控制之美(卷2)——最优化控制MPC与卡尔曼滤波器》活动,感谢eeworld提供免费阅读本书学习的机会。
- 因为是大学僧,从1.12差不多就收到书了,但是因为期末,所以到今天才能正式的开始测评。
- 本次主要是octave的环境搭建,还有基本测试,因为其语法近似于matlab,这一部分上手起来不会困难。
- 最后会按照计划更新,这两周缺的内容也会在后续加更补上。
- 本节测试以第一节的如何将连续系统转换为离散系统展开
一、Octave的环境搭建
1、先去官网下载资源,建议科学上网
主界面
下载(按需下载)
2、安装
初始界面
下载
选择目录路径
3、两个UI的选择(命令行和UI,一般用UI,如下)
具体的语法跟matlab差不多,这里不详细说了。
二、本书几个概念的引入(用于下文的测试)
1、线性时不变系统状态空间方程的解
首先这个是一个概念引入,下面为一个线性时不变系统状态空间方程的解
先关注几个重点概念:
n维状态变量x,m维输出变量y,p维输入变量u
矩阵:
- A为n*n的矩阵,表示状态矩阵
- B为n*p的矩阵,表示输入矩阵
- C是m*m的输出矩阵
- D是m*p的直接传递矩阵
然后具体后续的推导过程比较漫长,这边就不放了,总之得到的关键结果如下,也就是状态空间方程的解。
其中第一部分,也就是左边的式子,是一个和系统初始条件相关的部分,其中e的At是状态转移矩阵,而右边的部分是一个卷积关系,是系统状态和系统输入之间的关系,也就是输入和输出的之间是卷积。
2、了解完上述的概念后,接下来就是一个离散化的概念
首先采样原理就不细说了,这里以一个模拟信号的简单理解描述,比如一个ADC采集模拟信号,假定是一个1khz的采样率,那就是1ms采集一个点,假定使用单片机把adc的数据发送到pc端,那么会看到几个连着的点,这些点在时域为x轴的基础上,两个点之间的距离就是采样周期,相应的采样频率一个道理,然后为了采样的精度,本书给了两个方法。
其一是采集数量变大,也就是数据的总量变多,相应的需要高存储
其二是奈奎斯特采样定理,也就是fs=2fH
然后本文还有一个作者举的例子,用于理解这个概念和其存在的意义
比如把体重控制在一个范围内,需要一个计划,而假定我一个月记录一次体重,那么采样周期就是一个月,那么就是频率太低的情况,低频会导致精度低,换句话说,这一个月内的变化趋势会被忽略掉,我个人有一个理解就是,比如这一个月你的减肥计划,在前两周下降了,而后两周是缓慢上升,但是实际上你的计划是一个月四周都是缓慢下降,也就是说不能及时的反馈当前的状态。
第二个就是采样周期太短,比如10min一次,因为太快了,会获得大量的重复信息,也就是没办法去跟你的计划值进行比较,换句话说就是难以于参考对比,而且正因为数据太多了,你可能还需要考虑这一部分数据中实际有用的(玩数模玩的)。
综上,就是本次的理论知识的引入,接下来直接上代码,附带两个注释:
三、如何将连续系统转换为离散系统
1、先看代码
% 构建系统矩阵 A
A = [0 1; -2 -3];
% 构建输入矩阵 B
B = [0; 1];
% 定义两组采样时间
Ts_1 = 0.2; % 第一组采样时间
Ts_2 = 1; % 第二组采样时间
% 根据公式计算第一组离散系统的状态转移矩阵 Fd_1 和输入矩阵 Gd_1
Fd_1 = expm(A * Ts_1); % 计算状态转移矩阵
Gd_1 = inv(A) * (Fd_1 - eye(size(A, 1))) * B; % 计算输入矩阵
% 根据公式计算第二组离散系统的状态转移矩阵 Fd_2 和输入矩阵 Gd_2
Fd_2 = expm(A * Ts_2); % 计算状态转移矩阵
Gd_2 = inv(A) * (Fd_2 - eye(size(A, 1))) * B; % 计算输入矩阵
% 将连续系统转换为离散系统
sys_d_1 = c2d(ss(A, B), Ts_1); % 第一组离散系统
sys_d_2 = c2d(ss(A, B), Ts_2); % 第二组离散系统
% 绘制连续系统的单位阶跃响应,使用红色
step(ss(A, B), 'r');
hold on;
% 绘制第一组离散系统的单位阶跃响应,使用蓝色
step(sys_d_1, 'b');
hold on;
% 绘制第二组离散系统的单位阶跃响应,默认颜色
step(sys_d_2);
2、得到的结果
补充:首先在知道两个矩阵的情况下,通过前面的理论,可以求得如下的结果(代码我改过,我把连续的结果2也放进来了,原先只有一个离散的结果)
其中红色为连续,蓝紫色是T=0.2s的采集,蓝色是T=1s,通过这个结果就可以对比了。
本次先简单做一个测试,后续更新会根据学习进度相应的安排。
下一次更新报告预计这周末补充一篇,毕竟按照计划需要差不多8篇。