天天看点

使用MATLAB绘制重复控制器的bode图0 背景1 重复控制器模型2 编写matlab程序3 结果示例

目录

0 背景

1 重复控制器模型

2 编写matlab程序

3 结果示例

0 背景

      上午想绘制重复控制器的伯德图,但是因为重复控制器属于离散系统,所以不同于常规的线性连续系统,不是很好绘制,同时CSDN、MATLAB/SIMULINK论坛上也没有什么分享,经过1个多小时的摸索,我终于搞明白了,现在分享给大家,防止大家重复浪费时间。

1 重复控制器模型

使用MATLAB绘制重复控制器的bode图0 背景1 重复控制器模型2 编写matlab程序3 结果示例

Fig.1 重复控制器的框图

使用MATLAB绘制重复控制器的bode图0 背景1 重复控制器模型2 编写matlab程序3 结果示例

Fig.2 重复控制器数学模型

         当我们取Q = 0.95,N = 200的时候,重复控制器的数学模型就是这样了:

使用MATLAB绘制重复控制器的bode图0 背景1 重复控制器模型2 编写matlab程序3 结果示例

,我们编写.m文件如下:

2 编写matlab程序

N = 200;%1个系统单位时间内的采样个数
Q = 0.95
ts = 1/(N*50);%采样时间,50表示系统频率是50Hz,如工频电网
    H4 = tf([ 1 zeros(1,N)],[1 zeros(1,N-1) -Q],ts);%重复控制器的模型
    bode(H4)%绘制重复控制器的伯德图
           

3 结果示例

       显然,重复控制器在系统倍周期处,具有较大的增益,可以有效地抑制周期性干扰,跟随周期性给定信号

使用MATLAB绘制重复控制器的bode图0 背景1 重复控制器模型2 编写matlab程序3 结果示例

Fig.3 bode图

当然,有的同学可能想对比一下Q取不同值的结果,以及希望横坐标为Hz,并且限制为[0 1000]Hz,只需要如下程序即可: 

P = bodeoptions;%设置bode图对象
P.FreqUnits = 'Hz';%设置横轴为Hz
P.grid = 'on';%打开网格
P.XLim={[10      1000]};%设置横轴范围
N = 200;%1个系统单位时间内的采样个数
ts = 1/(N*50);%采样时间,50表示系统频率是50Hz,如工频电网
for i = 0.8:-0.2:0
    Q = 1 - i;%改变多个Q值
    H4 = tf([ 1 zeros(1,N)],[1 zeros(1,N-1) -Q],ts);%重复控制器的模型
    bode(H4,P)%绘制重复控制器的伯德图
    hold on
end
           
使用MATLAB绘制重复控制器的bode图0 背景1 重复控制器模型2 编写matlab程序3 结果示例

Fig.4 bode图

 PS :

      有什么问题,留言在评论区即可,看见后会回复。

      觉得对你有用的话,可以点赞、关注我哦,我会经常分享自己学的小知识,避免大家浪费时间。

继续阅读