bd_asymp.m
来自「详细介绍了Mathlab的使用方法与技巧」· M 代码 · 共 52 行
M
52 行
function [wpos,ypos]=bd_asymp(G,w)
%kunm=[1 2];kden=[3 5 7];G=tf(knum,kden);
G1=zpk(G);wpos=[];pos1=[];
%[z p k]=tf2zp(knum,kden);
if nargin==1
w=freqint2(G)
end
pol=G1.p{1};gain=G1.k;zer=G1.z{1};
for i=1:length(zer);
if isreal(zer(i))
wpos=[wpos,abs(zer(i))];
pos1=[pos1,20];
else
if imag(zer(i))>0
wpos=[wpos,abs(zer(i))];
pos1=[pos1,40];
end,end,end
for i=1:length(pol);
if isreal(pol(i))
wpos=[wpos,abs(pol(i))];
pos1=[pos1,-20];
else
if imag(pol(i))>0
wpos=[wpos,abs(pol(i))];
pos1=[pos1,-40];
end,end,end
wpos=[wpos,w(1),w(length(w))];
pos1=[pos1,0,0];
[wpos,ii]=sort(wpos);pos1=pos1(ii);
ii=find(abs(wpos)<eps);kslp=0;
w_start=1000*eps;
if length(ii)>0
kslp=sum(pos1(ii));
ii=(ii(length(ii))+1):length(wpos);
wpos=wpos(ii);pos1=pos1(ii);
end
while 1
[ypos1,pp]=bode(G,w_start);
if isinf(ypos1),w_start=w_start*10;
else,break;end
end
wpos=[w_start wpos];
ypos=20*log10(ypos1);
pos1=[kslp pos1];
for i=2:length(wpos)
kslp=sum(pos1(1:i-1));
ypos(i)=ypos(i-1)+kslp*log10(wpos(i)/wpos(i-1));
end
ii=find(wpos>=w(1)&wpos<=w(length(w)));
wpos=wpos(ii);ypos=ypos(ii);
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?