自动控制原理大作业

脉冲响应

%脉冲响应
clc
clear all
close all
w_n=6;
zeta=[0.2:0.2:1.0,2.0]; %zeta为阻尼比,范围为0.2 0.4 0.6 0.8 1.0 2.0
Tim=[0:0.01:5];%Tim为脉冲的反应时间
figure('Name','学号:xxx,xxx','NumberTitle','off');
hold on
for kk=zeta 
    num=w_n.^2;%num为脉冲方程分子
    den=[1,2*kk*w_n,w_n.^2] ;%den为脉冲方程分母的系数
    Y_out=impulse(num,den,Tim);
    plot(Tim,Y_out,'color',rand(1,3),'linewidth',1.4);
end
title('Impulse Response');
hold off
grid on %添加网格
xlabel('时间/s');
ylabel('幅度 /(Amp)');
set(gca,'FontSize',14,'FontName','Times New Roman');%gca-当前坐标区或图
set(get(gca,'title'),'FontSize',14,'FontName','Times New Roman');%gca-当前坐标区或图 
%get(h,defaultTypeProperty) 返回指定图形对象 h 的指定属性和对象类型的默认值。
set(get(gca,'xlabel'),'FontSize',14,'FontName','Microsft YaHei UI');
set(get(gca,'ylabel'),'FontSize',14,'FontName','Microsft YaHei UI');
legend('\xi=0.2','\xi=0.6','\xi=0.8','\xi=1.0','\xi=2.0');

阶跃响应

close all         % 清除图形.
clear all          % 清除工作空间的变量,释放内存.
w_n=6;
zeta=[0.2: 0.2: 1.0, 2.0];
Tim=[0:0.01:5];
figure('NumberTitle','off','Name','学号:xxx,xxx');
hold on
for kk=zeta 
    num=w_n.^2;
    den=[1, 2*kk*w_n, w_n.^2];
    Y_Out=step(num, den, Tim);      % Step Response Time: 5s
    plot(Tim, Y_Out, 'Color', rand(1, 3), 'linewidth', 1.4);
end
title('Step Response');
hold off
grid on
xlabel('时间/(s)'); 
ylabel('幅度/(Amp)');
set(gca, 'FontSize', 14, 'FontName', 'Times New Roman');
set(get(gca,'title'), 'FontSize', 14, 'FontName', 'Microsft YaHei UI');     %设置标题字体大小,字型
set(get(gca,'XLabel'), 'FontSize', 14, 'FontName', 'Microsft YaHei UI');  %设置X坐标标题字体大小,字型 
set(get(gca,'YLabel'), 'FontSize', 14, 'FontName', 'Microsft YaHei UI');  %设置Y坐标标题字体大小,字型
legend('\xi=0.2','\xi=0.4','\xi=0.6','\xi=0.8','\xi=1.0','\xi=2.0');

bode图

%bode图
clc
clear all
close all
figure('Name','学号:xxx,xxx','NumberTitle','off');
w_n=3;
num=w_n.^2;
zeta=[0.2:0.2:1.0];%zeta为阻尼比
for kk=zeta
   den=[1 2*kk*w_n w_n.^2]; 
   sys=tf(num,den);
   hold on;
   bode(sys);   %bode图上半部分图为幅频响应,下半部分图为相频响应
end
legend('\xi=0.2','\xi=0.4','\xi=0.6','\xi=0.8','\xi=1.0')

nyquist图

clc
clear all
close all
figure('Name','学号:xxx,xxx','NumberTitle','off');
w_n=3;
num=w_n.^2;
% zeta=[0.2:0.2:1.0];%zeta为阻尼比
zeta=[0.2:0.2:1.0];%zeta为阻尼比
for kk=zeta
   den=[1 2*kk*w_n w_n.^2]; 
   sys=tf(num,den);
   hold on; %在nyquist命令之前加一个hold on 命令就可以将所有图形画在一张图上
   nyquist(sys);
end
legend('\xi=0.2','\xi=0.4','\xi=0.6','\xi=0.8','\xi=1.0');

串联校正

clc
clear all
num=40;%%校正前传递函数
f1=[1,0];f2=[1,2];
den=conv(f1,f2);
sys=tf(num,den);
[Gm,Pm,Wcg,Wcp] = margin(sys);
gamma=50;gamma_0=Pm;delta_phi=5;
while true
    phi_0=gamma-gamma_0+delta_phi;
    alpha=(1-sin(deg2rad(phi_0)))/(1+sin(deg2rad(phi_0)));
    syms x
    s=solve(0.25*x^2 + 1*x + -(10/10^(10*log10(alpha)/20))^2 == 0);
    %fprintf('%f\n',s(2)^(1/2));
    omega_c=s(2)^(1/2);
    T=1/alpha^(1/2)/omega_c;
    alpha_T=alpha*T;
    %fprintf('%f\n',T);
    %fprintf('%f\n',alpha_T);
    num1=[T,1];
    den1=[alpha_T,1];
    sys1=tf(double(num1),double(den1));

    sys2=series(sys,sys1);
    [Gm1,Pm1,Wcg1,Wcp1] = margin(sys2);
    if Pm1 > 50
        break;
    end
    delta_phi=delta_phi+0.1;
end
figure('Name','学号:xxx,xxx','NumberTitle','off');        %第一个图  显示原系统的bode图
margin(sys);
hold on
margin(sys2);
legend('校正前','校正后');
fprintf('校正前系统的幅值裕量:%f dB\n',Gm);
fprintf('校正后系统的幅值裕量:%f dB\n',Gm1);
fprintf('校正前系统的相角裕量:%f deg\n',Pm);
fprintf('校正后系统的相角裕量:%f deg\n',Pm1);
fprintf('相角补偿量:%f deg\n',delta_phi);

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值