?? smithch.m
字號:
function[A]=smithch(arg,z,Km,la);
%用法一:A=smithch(z1)是已知歸一化特性阻抗z1
%用法二:A=smithch([VSWR zmin Zc] 是已知駐波比、電壓波節(jié)點的位置zmin(單位是波長)和特性阻抗Zc
if nargin<4; la=1/8; end; %1/8波長
if nargin<3; Km=0; end;
if nargin<1; arg=1; end;
if length(arg)==3;
z1=arg(1); zmin=arg(2); Zc=arg(3); Km=0; ph=(1-zmin*4)*pi; %arg()是取幅角
gm=(z1-1)/(z1+1)*exp(-j*ph); z=(1+gm)/(1-gm); Kz=1; %gm是反射系數(shù)
else;
z1=arg(1); Zc=1; Kz=0;
end;
%..................................................................繪制圓圖
t=(0:360)*pi/180; x=cos(t); y=sin(t); r=[0.99 1.02];
plot(x,y,'k'); hold on; whitebg('w'); axis equal; axis off; %繪制最外的等圓,whitebg為用色風格設置
H=plot([-1.02 1.02],[0 0]); set(H,'color',[0 0.5 0]);
for i=1:6; %將外圓等分為24份
u=r*cos(pi*i/12); v=r*sin(pi*i/12);
plot(u,v,'k',u,-v,'k',-u,v,'k',-u,-v,'k');
end;
text(-1.06,0,'0','fontname','arial','fontsize',10, ... %給主要的4個分點做標注
'color',[0 0 0.5],'fonta','italic');
text(-0.06,1.04,'0.125','fontname','arial','fontsize',10, ...
'color',[0 0 0.5],'fonta','italic');
text(1.03,0,'0.25','fontname','arial','fontsize',10, ...
'color',[0 0 0.5],'fonta','italic');
text(-0.06,-1.04,'0.375','fontname','arial','fontsize',10, ...
'color',[0 0 0.5],'fonta','italic');
i=150:170; xi=x(i)*1.1; yi=y(i)*1.1;
H=plot([-1 xi],[0.5 yi],'k',[-1 xi],[-0.5 -yi],'k'); %繪制向源和向負載箭頭
text(-1,0.78,'向源','fontname','arial','fontsize',9); %箭頭類型標注
text(-1,-0.7,'向負載','fontname','arial','fontsize',9);
plot(0.5*x+0.5,0.5*y,'b'); %繪制r=1的圓,因為外圓半徑為1,所以這里用0.5做半徑
text(0.02,0.33,'1','fontname','arial','fontsize',10,'color','b');
if Km<1;
i=1:10:361; xi=x(i); yi=y(i);
gm=1/3; H=plot(gm*xi,gm*yi,':'); set(H,'color',[0 0.5 0]); %繪制模值為1/3和2/3的反射系數(shù)圓
gm=2/3; H=plot(gm*xi,gm*yi,':'); set(H,'color',[0 0.5 0]);
text(-0.23,0.19,'1/3','fontname','arial','fontsize',10, ...
'color',[0 0.5 0]);
text(-0.58,0.48,'2/3','fontname','arial','fontsize',10, ...
'color',[0 0.5 0]);
a=1/(1+2); plot(a*x+1-a,a*y,'b'); %r=2,繪制電阻圓圖
a=1/(1+0.5); plot(a*x+1-a,a*y,'b'); %r=0.5,繪制電阻圓圖
text(0.36,0.033,'2','fontname','arial','fontsize',10,'color','b');
text(-0.42,0.033,'0.5','fontname','arial','fontsize',10,'color','b');
text(-0.97,0.033,'0','fontname','arial','fontsize',10,'color','b');
xx=x+1; yy=y+1; I=find((xx.*xx+yy.*yy)<=1.001); %用find函數(shù)返回所有小于等于1.001的圓圖
plot(xx(I),yy(I),'r',xx(I),-yy(I),'m'); %x=-1,1,繪制電抗圓圖
a=1/2; xx=a*x+1; yy=a*y+a; I=find((xx.*xx+yy.*yy)<=1.001);
plot(xx(I),yy(I),'r',xx(I),-yy(I),'m'); %x=-2,2,電抗圓圖
a=1/0.5; xx=a*x+1; yy=a*y+a; I=find((xx.*xx+yy.*yy)<=1.001);
plot(xx(I),yy(I),'r',xx(I),-yy(I),'m'); %x=-0.5, 0.5,電抗圓圖
text(0.53,0.79,'2','fontname','arial','fontsize',10,'color','r');
text(-0.04,0.95,'1','fontname','arial','fontsize',10,'color','r');
text(-0.63,0.72,'1/2','fontname','arial','fontsize',10,'color','r');
text(0.52,-0.79,'-2','fontname','arial','fontsize',10,'color','m');
text(-0.05,-0.95,'-1','fontname','arial','fontsize',10,'color','m');
text(-0.65,-0.72,'-1/2','fontname','arial','fontsize',10,'color','m');
end;
%..........................................................................
gm=(z1-1)/(z1+1); g1=real(gm); g2=imag(gm); %g1、g2分別是反射系數(shù)的實部和虛部
ph0=round(angle(gm)*1800/pi)*0.1; gm=abs(gm); %求反射系數(shù)的模
plot(gm*x,gm*y,'k'); if(Km+Kz)==0; plot(g1,g2,'k*'); end;
VSWR=(1+gm)/(1-gm-(gm==1)*eps); A=[gm ph0 VSWR]; %加eps是防止分母為0
if gm>0.1;
ph=190*pi/180; u=1.01*gm*cos(ph); v=1.01*gm*sin(ph);
text(u,v,['G=' num2str(round(gm*100)*0.01)],'fontname','symbol', ...
'fontsize',10,'hor','right');
text(-1,-1,['VSWR=' num2str(round(VSWR*100)*0.01)], ...
'fontname','arial','fontsize',10);
if Km==1; %單支節(jié)匹配
u=gm*gm; v=sqrt(0.25-(u-0.5)^2); x1=2*v/((1-u)^2+v*v);
a=1/x1; xx=a*x+1; yy=a*y+a; I=find((xx.*xx+yy.*yy)<=1.002);
plot(-g1,-g2,'k*'); a1=atan2(-g2,-g1)+pi; zmax=a1*0.25/pi;
text(-1.2*g1,-1.2*g2,'Y_L','fontname','arial', ...
'fontsize',10,'hor','center');
H=plot([0 -g1],[0 -g2],':'); set(H,'color',[0 0.6 0])
H=plot(xx(I),yy(I),'r',xx(I),-yy(I),'m');
u1=u/gm; v1=v/gm; plot([0 u1],[0 v1],'k:',[0 u1],[0 -v1],'k:');
x=gm*gm; y=sqrt(x-x*x); a1=atan(y/x);
d1=(1-a1/pi)*0.25; d1=round(d1*1000)*0.001; u2=1.13*u1; v2=1.13*v1;
text(u2,v2,['d1=' num2str(d1)],'fontname','arial', ...
'fontsize',9,'fonta','italic','color', ...
[0.8 0 0.8],'hor','center');
text(u2,-v2,['d2=' num2str(0.5-d1)],'fontname','arial', ...
'fontsize',9,'fonta','italic','color','r','hor','center');
text(u2+0.17,v2,'l','fontname','symbol','color', ...
[0.8 0 0.8],'fontsize',10);
text(u2+0.17,-v2,'l','fontname','symbol','color','r', ...
'fontsize',10);
v=2/x1/(1+1/x1/x1); u=1-v/x1;
a1=atan2(v,u); a1=a1+(a1<0)*pi;
u2=1.15*cos(a1); v2=1.15*sin(a1);
L1=0.25*a1/pi; L1=round(L1*1000)*0.001;
text(u2,-v2,['L1=' num2str(L1)],'fontname','arial', ...
'fontsize',9,'fonta','italic','color', ...
[0.8 0 0.8],'hor','center');
text(u2,v2,['L2=' num2str(0.5-L1)],'fontname','arial', ...
'fontsize',9,'fonta','italic','color', ...
'r','hor','center');
text(u2+0.17,-v2,'l','fontname','symbol', ...
'color',[0.8 0 0.8],'fontsize',10);
text(u2+0.17,v2,'l','fontname','symbol','color','r','fontsize',10);
A=[d1 0.5-d1 zmax,L1 0.5-L1 zmax];
elseif Km==2; %雙支節(jié)匹配 d=1/8 波長
u1=0.5*x; v1=0.5*y+0.5;
H=plot(u1,v1); set(H,'color',[0 0.7 0]);
gm=(z1-1)/(z1+1); g1=real(-gm); g2=imag(-gm); plot(g1,g2,'k*');
text(1.1*g1,1.1*g2,'Y_L','fontname','arial', ...
'fontsize',10,'hor','center');
gm=gm*exp(-j*4*pi*la); y1=(1-gm)/(1+gm);
g=real(y1); ba1=imag(y1);
if g>2;
gm=gm*exp(-j*pi/2); y1=(1-gm)/(1+gm);
g=real(y1); ba1=imag(y1); Km=3;
end;
P=str2mat('AB','BC');
g1=real(-gm); g2=imag(-gm); plot(g1,g2,'b*');
text(1.2*g1,1.2*g2,[P(Km-1,1) ''''],'fontname','arial', ...
'fontsize',10,'color','b','hor','center');
a=1/abs(ba1); xx=a*x+1; yy=a*y+a;
I=find((xx.*xx+yy.*yy)<=1.01);
c='mr'; plot(xx(1),sign(bal)*yy(I),c(0.5*sign(bal)+1.5));
a=1/(1+g); u2=a*x+1-a; v2=a*y; plot(u2,v2,'b');
if abs(g-1)<0.001;
u=g1; v=g2; uu=u; vv=-v;
else;
t=(0:0.001:0.705)*pi; u=0.5*sin(t); v=0.5-0.5*cos(t);
I=find(abs((u-g*a).^2+v.*v-a*a)<0.001);m=fix(mean(I));
u=u(m); v=v(m); uu=v; vv=-u;
end;
plot(u,v,'r*',uu,vv,'m*');
text(1.2*u,1.2*v,P(Km-1,1),'fontname','arial','fontsize',10, ...
'color','r','hor','center');
text(1.2*uu,1.2*vv,P(Km-1,2),'fontname','arial','fontsize',10, ...
'color','m','hor','center');
gm=-(u+j*v); y1=(1-gm)/(1+gm); g=real(y1); ba=imag(y1);
a=1/abs(ba); xx=a*x+1; yy=a*y+a;
I=find((xx.*xx+yy.*yy)<=1.01);
plot(xx(I),sign(ba)*yy(I),c(0.5*sign(ba)+1.5));
gm=-(v-j*u); y1=(1-gm)/(1+gm); g=real(y1); bb=imag(y1);
a=1/abs(bb); xx=a*x+1; yy=a*y+a;
I=find((xx.*xx+yy.*yy)<=1.01);
plot(xx(I),sign(bb)*yy(I),c(0.5*sign(bb)+1.5));
ph0=atan(v/u); ph=(0:-10:-90)*pi/180+ph0; rh=sqrt(u*u+v*v);
H=plot(rh*cos(ph),rh*sin(ph),':'); set(H,'color',[0 0.6 0]);
b1=ba-ba1; b1=round(b1*1000)*0.001; b2=-round(bb*1000)*0.001;
if Km==2;
bstr=str2mat(['b1:' num2str(b1)],['b2:' num2str(b2)]);
A=[b1 b2];
elseif Km==3;
bstr=str2mat('b1:Inf',['b2:' num2str(b1)], ...
['b3:' num2str(b2)]);
A=[inf b1 b2];
end;
text(0.94,0.9,bstr,'fontname','arial','fontsize',10, ...
'color',[0 0 0.6]);
end;
end;
%..........................................................................
if exist('z')&Km<1;
text(0.8,1,['z1=' num2str(round(z*100)*0.01)], ...
'fontname','arial','fontsize',10);
text(0.8,0.9,['y1=' num2str(round(1/z*100)*0.01)], ...
'fontname','arial','fontsize',10);
gm=(z-1)/(z+1); g1=real(gm); g2=imag(gm);
gm=abs(gm); ph=atan2(g2,g1)*180/pi; ph=round(ph*10)*0.1;
plot([0 g1/gm],[0 g2/gm],'k:',g1,g2,'k*');
a1=atan2(g2,g1); a1=round(a1*180/pi);
L=(1-a1/180)/4; L=round(L*1000)*0.001;
text(0.8,0.8,['L=' num2str(L) '(num2str(al)°)'], ...
'fontname','arial','fontsize',10);
A=[z 1/z gm ph];
end;
if Kz==1;
nstr=['VSWR=' num2str(VSWR),'zmin=' num2str(zmin)];
nstr=[nstr 'lambda','Z=' num2str(round(z*Zc*10)*0.1) 'Ohm'];
A=z*Zc;
elseif Km==1;
nstr='Smith Chart: Stub Matching,BBI 2000';
elseif Km==2;
nstr='Smith Chart: Two Stubs Matching,BBI 2000';
elseif Km==3;
nstr='Smith Chart: Three Stubs Matching,BBI 2000';
else;
nstr='Smith Chart, BBI 2000';
end;
set(gcf,'name',nstr,'num','off','color','w'); hold off;
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -