控制之美(卷2)第一节——octave的环境搭建+基本测试
<div class='showpostmsg'> 本帖最后由 Zhao_kar 于 2024-1-24 20:46 编辑<p style="text-align: center;"><strong><span style="font-size:22px;">控制之美(卷2)第一节——开箱+octave的环境搭建+基本测试</span></strong></p>
<p><span style="color:#e74c3c;">声明:</span></p>
<ul>
<li><span style="color:#e74c3c;">本次参与好书共读活动:《控制之美(卷2)——最优化控制MPC与卡尔曼滤波器》活动,感谢eeworld提供免费阅读本书学习的机会。</span></li>
<li><span style="color:#e74c3c;">因为是大学僧,从1.12差不多就收到书了,但是因为期末,所以到今天才能正式的开始测评。</span></li>
<li><span style="color:#e74c3c;">本次主要是octave的环境搭建,还有基本测试,因为其语法近似于matlab,这一部分上手起来不会困难。</span></li>
<li><span style="color:#e74c3c;">最后会按照计划更新,这两周缺的内容也会在后续加更补上。</span></li>
<li><span style="color:#e74c3c;">本节测试以第一节的如何将连续系统转换为离散系统展开</span></li>
</ul>
<p><strong><span style="font-size:20px;">一、Octave的环境搭建</span></strong></p>
<p>1、先去官网下载资源,建议科学上网</p>
<div style="text-align: center;"></div>
<div style="text-align: center;">主界面</div>
<div style="text-align: center;"></div>
<div style="text-align: center;">下载(按需下载)</div>
<div>2、安装</div>
<div>
<div style="text-align: center;"></div>
<div style="text-align: center;">初始界面</div>
<div style="text-align: center;"></div>
<div style="text-align: center;">下载</div>
<div style="text-align: center;"></div>
<div style="text-align: center;"></div>
<div style="text-align: center;">选择目录路径</div>
<div style="text-align: center;"></div>
<div>3、两个UI的选择(命令行和UI,一般用UI,如下)</div>
<div>具体的语法跟matlab差不多,这里不详细说了。</div>
<div>
<div style="text-align: center;"></div>
</div>
</div>
<p><strong><span style="font-size:20px;">二、本书几个概念的引入(用于下文的测试)</span></strong></p>
<p><strong>1、线性时不变系统状态空间方程的解</strong></p>
<p>首先这个是一个概念引入,下面为一个<span style="color:#e74c3c;">线性时不变系统</span>状态空间方程的解</p>
<div style="text-align: center;"></div>
<div>
<p cid="n5" mdtype="paragraph">先关注几个重点概念:</p>
<p cid="n5" mdtype="paragraph">n维状态变量x,m维输出变量y,p维输入变量u</p>
<p cid="n10" mdtype="paragraph">矩阵:</p>
<ul>
<li cid="n10" mdtype="paragraph">A为n*n的矩阵,表示状态矩阵</li>
<li cid="n12" mdtype="paragraph">B为n*p的矩阵,表示输入矩阵</li>
<li cid="n14" mdtype="paragraph">C是m*m的输出矩阵</li>
<li cid="n16" mdtype="paragraph">D是m*p的直接传递矩阵</li>
</ul>
<p>然后具体后续的推导过程比较漫长,这边就不放了,总之得到的关键结果如下,也就是状态空间方程的解。</p>
<div style="text-align: center;"></div>
<div>其中第一部分,也就是左边的式子,是一个和系统初始条件相关的部分,其中e的At是状态转移矩阵,而右边的部分是一个卷积关系,是系统状态和系统输入之间的关系,也就是输入和输出的之间是卷积。</div>
<div><strong>2、了解完上述的概念后,接下来就是一个离散化的概念</strong></div>
<div>首先采样原理就不细说了,这里以一个模拟信号的简单理解描述,比如一个ADC采集模拟信号,假定是一个1khz的采样率,那就是1ms采集一个点,假定使用单片机把adc的数据发送到pc端,那么会看到几个连着的点,这些点在时域为x轴的基础上,两个点之间的距离就是采样周期,相应的采样频率一个道理,然后为了采样的精度,本书给了两个方法。</div>
<div><span style="color:#e74c3c;">其一是采集数量变大,也就是数据的总量变多,相应的需要高存储</span></div>
<div><span style="color:#e74c3c;">其二是奈奎斯特采样定理,也就是fs=2fH</span></div>
<div>然后本文还有一个作者举的例子,用于理解这个概念和其存在的意义</div>
<div><strong>比如把体重控制在一个范围内,需要一个计划,而假定我一个月记录一次体重,那么采样周期就是一个月,那么就是频率太低的情况,低频会导致精度低,换句话说,这一个月内的变化趋势会被忽略掉,我个人有一个理解就是,比如这一个月你的减肥计划,在前两周下降了,而后两周是缓慢上升,但是实际上你的计划是一个月四周都是缓慢下降,也就是说不能及时的反馈当前的状态。</strong></div>
<div><strong>第二个就是采样周期太短,比如10min一次,因为太快了,会获得大量的重复信息,也就是没办法去跟你的计划值进行比较,换句话说就是难以于参考对比,而且正因为数据太多了,你可能还需要考虑这一部分数据中实际有用的(玩数模玩的)。</strong></div>
<div>综上,就是本次的理论知识的引入,接下来直接上代码,附带两个注释:</div>
<div>
<div style="text-align: center;"></div>
<p>这里先知道这个离散的,然后看下面的代码。</p>
</div>
</div>
<p><strong><span style="font-size:20px;">三、如何将连续系统转换为离散系统</span></strong></p>
<p>1、先看代码</p>
<pre>
<code>% 构建系统矩阵 A
A = ;
% 构建输入矩阵 B
B = ;
% 定义两组采样时间
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);
</code></pre>
<p><strong>2、得到的结果</strong></p>
<p>补充:首先在知道两个矩阵的情况下,通过前面的理论,可以求得如下的结果(代码我改过,我把连续的结果2也放进来了,原先只有一个离散的结果)</p>
<div style="text-align: center;"></div>
<div>其中红色为连续,蓝紫色是T=0.2s的采集,蓝色是T=1s,通过这个结果就可以对比了。</div>
<p> </p>
<p>本次先简单做一个测试,后续更新会根据学习进度相应的安排。</p>
<p>下一次更新报告预计这周末补充一篇,毕竟按照计划需要差不多8篇。</p>
</div><script> var loginstr = '<div class="locked">查看本帖全部内容,请<a href="javascript:;" style="color:#e60000" class="loginf">登录</a>或者<a href="https://bbs.eeworld.com.cn/member.php?mod=register_eeworld.php&action=wechat" style="color:#e60000" target="_blank">注册</a></div>';
if(parseInt(discuz_uid)==0){
(function($){
var postHeight = getTextHeight(400);
$(".showpostmsg").html($(".showpostmsg").html());
$(".showpostmsg").after(loginstr);
$(".showpostmsg").css({height:postHeight,overflow:"hidden"});
})(jQuery);
} </script><script type="text/javascript">(function(d,c){var a=d.createElement("script"),m=d.getElementsByTagName("script"),eewurl="//counter.eeworld.com.cn/pv/count/";a.src=eewurl+c;m.parentNode.insertBefore(a,m)})(document,523)</script> <p>离散化的概念还是挺有趣的啊</p>
<p>跟着楼主学习</p>
<p>这本书非常的实用,也可以结合作者bilibili上的视频一块看 </p>
<p><img height="48" src="https://bbs.eeworld.com.cn/static/editor/plugins/hkemoji/sticker/facebook/wanwan88.gif" width="59" /></p>
页:
[1]