脉冲响应
%脉冲响应
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);