%%%主函数%%%%%
for fp=1:1:1000;
w=2*pi*fp;
s=w*i
G1=(s^2+2*s+3)/(s^3+2*s^2+3*s+4);
GM_Y11=GM(G1);
PM_Y11=PM(G1);
GM_Y11_1(fp)=GM_Y11;
PM_Y11_1(fp)=PM_Y11;
end
fc=1:1000;
figure(2)
subplot(2,1,1)
semilogx(fc,GM_Y11_1,'b','linewidth',1);hold on;
subplot(2,1,2)
semilogx(fc,PM_Y11_1,'b','linewidth',1);hold on;
%%%%%%两个子函数
function g = GM(G)
% 幅值裕度计算函数
%
% Syntax: g = GM(G)
%
% Inputs:
% G - 传递函数
%
% Outputs:
% g - 对应幅值裕度
%
absG=abs(G);
g=20*log10(absG);
function g = PM(G)
% 相位裕度计算函数
%
% Syntax: g = PM(G)
%
% Inputs:
% G - 传递函数
%
% Outputs:
% g - 对应幅值裕度
%
PM_G_1=(angle(G))*180/pi;
if PM_G_1>=200
g=PM_G_1-360;
else
if PM_G_1<=-200
g=PM_G_1+360;
else
g=PM_G_1;
end
end
例
G=tf([1 2 3],[1 2 3 4]);
figure(1)
bode(G);
结果比较