目录
0 背景
上午想绘制重复控制器的伯德图,但是因为重复控制器属于离散系统,所以不同于常规的线性连续系统,不是很好绘制,同时CSDN、MATLAB/SIMULINK论坛上也没有什么分享,经过1个多小时的摸索,我终于搞明白了,现在分享给大家,防止大家重复浪费时间。
1 重复控制器模型
![](https://i-blog.csdnimg.cn/blog_migrate/aa80edb00148978aece0382ea97b7f67.png)
![](https://i-blog.csdnimg.cn/blog_migrate/b03e781f4c432c0881563f66a19a961f.png)
当我们取Q = 0.95,N = 200的时候,重复控制器的数学模型就是这样了:,我们编写.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 结果示例
显然,重复控制器在系统倍周期处,具有较大的增益,可以有效地抑制周期性干扰,跟随周期性给定信号
![](https://i-blog.csdnimg.cn/blog_migrate/05cb1192e8a479c72ab7dc11b14ea2b9.png)
当然,有的同学可能想对比一下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
![](https://i-blog.csdnimg.cn/blog_migrate/a505869fd743f51a9d540b62b1dde7bc.png)
PS :
有什么问题,留言在评论区即可,看见后会回复。
觉得对你有用的话,可以点赞、关注我哦,我会经常分享自己学的小知识,避免大家浪费时间。