Zhao_kar 发表于 2024-1-24 20:46

控制之美(卷2)第一节——octave的环境搭建+基本测试

<div class='showpostmsg'> 本帖最后由 Zhao_kar 于 2024-1-24 20:46 编辑

<p style="text-align: center;"><strong><span style="font-size:22px;">控制之美(卷2)第一节&mdash;&mdash;开箱+octave的环境搭建+基本测试</span></strong></p>

<p><span style="color:#e74c3c;">声明:</span></p>

<ul>
        <li><span style="color:#e74c3c;">本次参与好书共读活动:《控制之美(卷2)&mdash;&mdash;最优化控制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>&nbsp;</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>

Jacktang 发表于 2024-1-25 07:32

<p>离散化的概念还是挺有趣的啊</p>

<p>跟着楼主学习</p>

秦天qintian0303 发表于 2024-1-25 09:20

<p>这本书非常的实用,也可以结合作者bilibili上的视频一块看&nbsp;&nbsp;</p>

macready 发表于 2024-1-26 16:01

<p><img height="48" src="https://bbs.eeworld.com.cn/static/editor/plugins/hkemoji/sticker/facebook/wanwan88.gif" width="59" /></p>
页: [1]
查看完整版本: 控制之美(卷2)第一节——octave的环境搭建+基本测试