基于simulink的周期采样与周期脉冲初探


  前面我们了解了简单的基于simulink的常微分方程组和简单的时滞微分方程组的仿真,这次我们初步了解一下周期脉冲控制和周期采样控制的基本模块,为了给大家说清楚机理,我们不直接讲微分方程组,而是选择正弦信号作为例子,简要说明基于simulink的这两种控制方式的处理。一个正弦信号模块如下:


  可能有的读者找到的正弦波信号的方框是有输入端的,如下:

  我们在待会儿处理脉冲的时候要用到输入端,暂时不需要,不需要输入端即默认系统的仿真时间t,因此,我们可以点击正弦波信号模块,得到下图:

  选择“Use simulation time”即默认使用仿真的时刻,这样输入端就自然没有了。保存咱们搭建的框图,双击示波器“Scope”方框,运行(不记得怎么运行的看看前面的博文),得到下图:

  这是一个很简单的正弦波信号,振幅是1,周期是$2\pi$,下面咱们考虑采样信号,这就需要借助“Zero-Order Hold”模块,如下图:

  双击此模块可以得到下图,输入采样周期,这里假定是0.5:

  完成咱们的搭建如下:

  保存后打开“Scope”模块,运行结果如图所示:

  大家很容易看到,每次信号都会保持0.5个单位的时间,即采样周期为0.5。
  下面我们考虑脉冲信号输入,很惭愧,simulink我也是初窥,不知道哪个模块表示脉冲,但是,我可以借助自定义函数模块“Matlab Function”去写一个脉冲信号的输入。同样以正弦波信号为例,现在咱们希望每经过0.5个单位的时间,就有一次脉冲将信号振幅变成原来的2倍,该如何实现呢?这里需要对当前时刻做一个判断,它是不是0.5的整数倍?如果是,我们对信号就要做处理(乘以2),所以我们需要的自定义函数模块“Matlab Function”就得有两个输入(当前时刻和当前信号)和一个输出(改变之后的信号)。这里又带来一个问题是,时间怎么统一?这就需要借助“Clock”模块,这个模块就是输出当前的仿真时间,对整个框图都是统一的,因此,咱们可以搭建如下框图:

  其中,自定义函数模块“Matlab Function”的代码如下:

function y = fcn(t,u)
y = u;
T=0.5;%脉冲周期
if 0==mod(t,T)
    y=2*u;%脉冲时刻信号处理
end

  保存后,运行示波器“Scope”效果如下:


  很明显,达到了咱们预期的脉冲效果。在这里需要说明一个问题,可能会有读者照着这个过程做,最后运行出来的脉冲效果如下:

  出现这种情况的原因是仿真算法是变步长的,咱们可以根据前面的博文调整一下仿真算法为固定步长,而且步长取0.001或者0.01,都可以得到我们预期的效果。
  今天这篇博文主要是对周期的脉冲和采样的处理一个初步探究,如何利用到系统的控制中去,我们后面再谈。

2019.10.22 王飞


posted @ 2019-10-22 22:44  Wang_Fei  阅读(2779)  评论(0编辑  收藏  举报