How to solve Microwave Engineering Pozar chapter 5 exercise 3 with MATLAB

Question:



Literature source [POZAR] is available here:
https://www.amazon.co.uk/Microwave-Engineering-David-M-Pozar/dp/0470631554

There's a hand written solutions manual available here:
https://www.scribd.com/doc/176505749/Microwave-engineering-pozar-4th-Ed-solutions-manual


Answer:



MATLAB code: blue bold font.
MATLAB console results: blue font.
MATLAB comments: green font.
Internet links: light blue underlined font.


Attached .zip pack including:
  • the question
  • MATLAB script pozar_05_exercise_03.m
  • explanation in Adobe format pozar_05_exercise_03.pdf
  • all support functions needed to run the main MATLAB script

Single shunt open circuit stub with transmission line, both stub and transmission line with Z0=75, to match ZL=100+1j*80.



Matching with transmission line and shunt-stub requires calculating 2 transmission line lengths, expressed in multiples of wavelength:

beta*L=2*pi/lambda*lambda*D=2*pi*D

D is wavelength multiple, or the wave phase angle, that is also the halved angle measured on Smith chart.

1.- the length of the TL where the shunt is placed: D_TL
2.- the length of the parallel shunt stub itself: D_oc_stub


There are 2 solutions, towards generator, CW, along SWR circle, until

real(Zin)==Z0

Now, graphically getting the 1st length of the transmission line

clc;clear all; close all
Z0=75; ZL=100+1j*80;
sm1=smithchart; ax=gca; hold all;
gamma_ZL=(ZL-Z0)/(ZL+Z0);

plot(ax,real(gamma_ZL),imag(gamma_ZL),'o','Color',[1 0 0])
% ZL
YL=1/ZL
gamma_YL=-gamma_ZL
gamma_YL_angle=angle(gamma_YL);gamma_YL_mod=abs(gamma_YL)
if gamma_YL_angle<0 gamma_YL_angle=2*pi+gamma_YL_angle; end
if gamma_YL_angle>(2*pi) gamma_YL_angle=gamma_YL_angle-2*pi; end
Smith_plotY(ax,YL,1/Z0)
Smith_plotRefLine2PhaseCircle(ax,YL,1/Z0,[.6 1 .6])
[x_swr,y_swr]=Smith_plotGammaCircle(ax,ZL,Z0,[1 .6 .6])
[g1x,g1y]=pol2cart(gamma_YL_angle,gamma_YL_mod)
[xr1,yr1]=Smith_plotRcircle(ax,Z0,Z0,[0 0 1])
[xint,yint]=intersections(x_swr,y_swr,xr1,yr1);
plot(ax,xint,yint,'go')
gb1=xint(1)+1j*yint(1);
gb1_angle=angle(gb1);gb1_mod=abs(gb1)
if gb1_angle<0 gb1_angle=2*pi+gb1_angle; end
if gb1_angle>(2*pi) gb1_angle=gb1_angle-2*pi; end
Yb_1=(1/Z0*(1-gb1)/(1+gb1)) %^-1
1/Yb_1 % check real(Z) spot on r=1 circle
Smith_plotRefLine2PhaseCircle(ax,1/Yb_1,Z0,[.6 1 .6])
da=1/100;arc1=da
a0=gamma_YL_angle;a1=gb1_angle;gamma_mod=gamma_YL_mod
while abs(a0-a1)>.01
a0=a0-da;arc1=arc1+da;

if a0<0 a0=2*pi+a0; end
% avoid negative angle
if a0>(2*pi) a0=a0-2*pi; end
gamma=gamma_mod*(cos(a0)+1j*sin(a0));
plot(ax,real(gamma),imag(gamma),'ro','LineWidth',1.5); % drawnow
end
plot(ax,xint,yint,'go')




Checking that stub is already on r=1 (r=R/Z0) circle

1/Yb_1

=
75.009858443284173 -72.565629355776338i


isequal(Yb_1,gamma2z(-gb1,1/Z0))
=

1

D1_TL_lambda=arc1/(4*pi)

=
0.406640879599787


D1_TL_angle_rad=arc1/2

=
2.554999999999968


D1_TL_angle_deg=arc1*90/pi

=
1.463907166559235e+02



The 2nd transmission line length:

clc;clear all; close all
Z0=75; ZL=100+1j*80;
sm1=smithchart; ax=gca; hold all;
gamma_ZL=(ZL-Z0)/(ZL+Z0);

plot(ax,real(gamma_ZL),imag(gamma_ZL),'o','Color',[1 0 0])
% ZL
YL=1/ZL
gamma_YL=-gamma_ZL
gamma_YL_angle=angle(gamma_YL);gamma_YL_mod=abs(gamma_YL)
if gamma_YL_angle<0 gamma_YL_angle=2*pi+gamma_YL_angle; end
if gamma_YL_angle>(2*pi) gamma_YL_angle=gamma_YL_angle-2*pi; end
Smith_plotY(ax,YL,1/Z0)
Smith_plotRefLine2PhaseCircle(ax,YL,1/Z0,[.6 1 .6])
[x_swr,y_swr]=Smith_plotGammaCircle(ax,ZL,Z0,[1 .6 .6])
[g1x,g1y]=pol2cart(gamma_YL_angle,gamma_YL_mod)
[xr1,yr1]=Smith_plotRcircle(ax,Z0,Z0,[0 0 1])
[xint,yint]=intersections(x_swr,y_swr,xr1,yr1);
plot(ax,xint,yint,'go')
gb2=xint(1)+1j*yint(1);
gb2_angle=angle(gb2);gb2_mod=abs(gb2)
if gb2_angle<0 gb2_angle=2*pi+gb2_angle; end
if gb2_angle>(2*pi) gb2_angle=gb2_angle-2*pi; end
Yb_2=(1/Z0*(1-gb2)/(1+gb2)) %^-1

1/Yb_2 % check real(Z) spot on r=1 circle
Smith_plotRefLine2PhaseCircle(ax,1/Yb_1,Z0,[.6 1 .6])
da=1/100;arc2=da
a0=gamma_YL_angle;a1=gb2_angle;gamma_mod=gamma_YL_mod
while abs(a0-a1)>.01
a0=a0-da;arc2=arc2+da;

if a0<0 a0=2*pi+a0; end
% avoid negative angle
if a0>(2*pi) a0=a0-2*pi; end
gamma=gamma_mod*(cos(a0)+1j*sin(a0));
plot(ax,real(gamma),imag(gamma),'ro','LineWidth',1.5);
% drawnow
end
plot(ax,xint,yint,'go')




Again check series transmission line has shifted impedance to r=1:

1/Yb_2

isequal(Yb_2,gamma2z(-gb2,1/Z0))


D2_TL_lambda=arc2/(4*pi)

D2_TL_angle_rad=arc2/2

D2_TL_angle_deg=arc2*90/pi


1/Yb_2 =
75.009858443284173 +72.565629355776380i

=
1

D1_TL_lambda =
0.228387343336868

D1_TL_angle_rad =
1.434999999999

D1_TL_angle_deg =
82.219443601272644



Now the OC shunt stubs

Calculating stub lenght Dstub1

hf(3)=figure(3);sm(3)=smithchart; ax(3)=hf(3).CurrentAxes; hold(ax(3),'on');
plot(ax(3),real(gamma_ZL),imag(gamma_ZL),'o','Color',[1 0 0])
gamma_YL_angle=angle(gamma_YL);gamma_YL_mod=abs(gamma_YL)
if gamma_YL_angle<0 gamma_YL_angle=2*pi+gamma_YL_angle; end
if gamma_YL_angle>(2*pi) gamma_YL_angle=gamma_YL_angle-2*pi; end
Smith_plotY(ax(3),YL,1/Z0)


Smith_plotRefLine2PhaseCircle(ax(3),YL,1/Z0,[.2 .6 .2])
[x_swr,y_swr]=Smith_plotGammaCircle(ax(3),ZL,Z0,[1 .6 .6])


[g1x,g1y]=pol2cart(gamma_YL_angle,gamma_YL_mod)
[xr1,yr1]=Smith_plotRcircle(ax(3),Z0,Z0,[0 0 1])
[xint,yint]=intersections(x_swr,y_swr,xr1,yr1,1);
plot(ax(3),xint,yint,'go')


gb1=xint(1)+1j*yint(1);gb1_angle=angle(gb1);gb1_mod=abs(gb1)
if gb1_angle<0 gb1_angle=2*pi+gb1_angle; end
if gb1_angle>(2*pi) gb1_angle=gb1_angle-2*pi; end


yb_1=1/Z0*((1+gb1)/(1-gb1))^-1
1/yb_1
% check already on r=1
Smith_plotRefLine2PhaseCircle(ax(3),1/yb_1,Z0,[.2 .8 .2]) % 1st intersection

gstub=conj(gb1) % where Zin has to move next
plot(ax(3),real(gstub),imag(gstub),'bo')
Zbs=(1/Z0*(1-gstub)/(1+gstub)) ^-1
% using Z Smith chart values
Zbs2=1j*imag(Zbs)
refl_Zstub=(Z0-Zbs2)/(Z0+Zbs2)
refl_Ystub=-refl_Zstub
plot(ax(3),real(refl_Ystub),imag(refl_Ystub),'ro')


Smith_plotRefLine2PhaseCircle(ax(3),Zbs2,Z0,[.2 .2 .8])
Smith_plotBarc(ax(3),Zbs,Z0,[1 0 1])






da=1/100;a_stub=[angle(refl_Ystub): -da: -pi];arc_stub1=da;
for k=1:1:numel(a_stub)
gamma_stub=cos(a_stub)+1j*sin(a_stub);
arc_stub1=arc_stub1+da;
plot(ax(3),real(gamma_stub),imag(gamma_stub),'bo','LineWidth',1.5);
end
arc_stub1=arc_stub1-da;




directly from the intersection points

Dstub1_lambda=abs(-pi-angle(gstub))*.25/pi

electric length of OC stub

Dstub1_angle_rad=abs(-pi-angle(gstub))/2
Dstub1_angle_deg=abs(-pi-angle(gstub))*90/pi


from the arc on Smith chart

arc_stub1*180/pi
arc_stub1_lambda=.25/pi*arc_stub1


same as

Dstub1_lambda=arc_stub1/(4*pi)
Dstub1_angle_deg= arc_stub1/2*360/(2*pi)


While operating the equations, decision points keep showing up where signs have to be discerned.

Yet, reading the covered arc, from the intersection point to Y Smith chart Open Circuit -1+0*1j, it's simple and straight to get how long the stub has to be.

Dstub1_lambda = 0.160864794588070
Dstub1_angle_rad = 1.010743313798222
Dstub1_angle_deg = 57.911326051705117
arc_stub1_lambda = 0.377992989843247
Dstub1_lambda = 0.377992989843247
Dstub1_angle_deg = 1.360774763435689e+02



Calculating stub lenght Dstub2

hf(4)=figure(4);sm(4)=smithchart; ax(4)=hf(4).CurrentAxes; hold(ax(4),'on');
plot(ax(4),real(gamma_ZL),imag(gamma_ZL),'o','Color',[1 0 0])

Smith_plotY(ax(4),YL,1/Z0)

Smith_plotRefLine2PhaseCircle(ax(4),YL,1/Z0,[.2 .6 .2])
[x_swr,y_swr]=Smith_plotGammaCircle(ax(4),ZL,Z0,[1 .6 .6])

[g1x,g1y]=pol2cart(gamma_YL_angle,gamma_YL_mod)

[xr1,yr1]=Smith_plotRcircle(ax(4),Z0,Z0,[0 0 1])
[xint,yint]=intersections(x_swr,y_swr,xr1,yr1,1);
plot(ax(4),xint,yint,'go')

gb2=xint(2)+1j*yint(2);gb2_angle=angle(gb2);gb2_mod=abs(gb2)
if gb2_angle<0 gb2_angle=2*pi+gb2_angle; end
if gb2_angle>(2*pi) gb2_angle=gb2_angle-2*pi; end

Yb_2=1/Z0*((1+gb2)/(1-gb2)) ^-1
1/Yb_2
% check already on r=1
Smith_plotRefLine2PhaseCircle(ax(4),1/Yb_2,Z0,[.2 .8 .2])

gstub=conj(gb2)
plot(ax(4),real(gstub),imag(gstub),'bo')

Zbs=(1/Z0*(1-gstub)/(1+gstub)) ^-1 % using Z Smith chart values as if reversed Y Smith chart
Smith_plotBarc(ax(4),Zbs,Z0,[1 0 1]) % constant reactance arc plot line can also be called after defining Zbs

Zbs2=1j*imag(Zbs)

refl_Zstub=(Z0-Zbs2)/(Z0+Zbs2)
refl_Ystub=-refl_Zstub

plot(ax(4),real(refl_Ystub),imag(refl_Ystub),'ro')

Smith_plotRefLine2PhaseCircle(ax(4),Zbs2,Z0,[.2 .2 .8])



da=1/100;a_stub=[angle(refl_Ystub): -da : -pi];arc_stub2=da;

for k=1:1:numel(a_stub)
gamma_stub=cos(a_stub)+1j*sin(a_stub);
arc_stub2=arc_stub2+da;
plot(ax(4),real(gamma_stub),imag(gamma_stub),'bo','LineWidth',1.5);
end
arc_stub2=arc_stub2-da;





directly from the intersection points

Dstub2_lambda=abs(-pi-angle(gstub))*.5/pi
Dstub2_angle_rad=abs(-pi-angle(gstub))/2
Dstub2_angle_deg=abs(-pi-angle(gstub))*90/pi


Dstub2_lambda=abs(-pi-angle(gstub))*.25/pi


electric length of OC stub

Dstub2_angle_rad=abs(-pi-angle(gstub))/2

Dstub2_angle_deg=abs(-pi-angle(gstub))*90/pi


from the arc on Smith chart

arc_stub2_lambda=.25/pi*arc_stub2

same as

Dstub2_lambda=arc_stub2/(4*pi)

Dstub2_angle_deg=arc_stub2/2*360/(2*pi)




Without Smith chart

[POZAR] solves this single open shunt stub match directly with the following equations



The same equations are also extensively used by Ali Behagi [BEH] in his book 'RF and Microwave Circuit Design'

https://www.amazon.co.uk/RF-Microwave-Circuit-Design-Approach/dp/0996446613

[BEH] writes his book entirely using Keysight's ADS

https://www.keysight.com/en/pc-1297113/advanced-design-system-ads?cc=GB&lc=eng

These equations, in MATLAB:

RL=real(ZL);XL=imag(ZL);Y0=1/Z0;

% when RL~=Z0 (~= same as != or <> not equal to)
t1=(XL+((RL*((Z0-RL)^2+XL^2))/Z0)^.5)/(RL-Z0)
t2=(XL-((RL*((Z0-RL)^2+XL^2))/Z0)^.5)/(RL-Z0)


% when RL==Z0
D1_TL=1/(2*pi)*atan(t1);if atan(t1)<0 D1_TL=D1_TL+.5; end
D2_TL=1/(2*pi)*atan(t2);if atan(t2)<0 D2_TL=D2_TL+.5; end


B1=(RL^2*t1-(Z0-XL*t1)*(XL+Z0*t1))/(Z0*(RL^2+(XL+Z0*t1)^2))
B2=(RL^2*t2-(Z0-XL*t2)*(XL+Z0*t2))/(Z0*(RL^2+(XL+Z0*t2)^2))


Dstub1=1/(2*pi)*atan(B1/Y0); if atan(B1/Y0)<0 Dstub1=Dstub1+.5; end
Dstub2=1/(2*pi)*atan(B2/Y0); if atan(B2/Y0)<0 Dstub2=Dstub2+.5; end


Dstub1oc=Dstub1
Dstub2oc=Dstub2


t1
= 7.071261637588793
t2
= -0.671261637588793

D1_TL
= 0.227640974365225
D2_TL
= 0.405911259087935

B1
= 0.012904205458629
B2
= -0.012904205458629

Dstub1oc
= 0.122397174557474
Dstub2oc
= 0.372397174557474




Putting Smith chart and equation obtained transmission line and stub lengths together:

D_TL=[D1_TL_lambda D2_TL_lambda]
Dstub=[Dstub1_lambda Dstub2_lambda]



from the equations

D_TL_eq=[D1_TL D2_TL]
Dstub_eq=[Dstub1oc Dstub2oc]



either combine

D_TL(1)
Dstub(1)


or

D_TL(2)
Dstub(2)



So, all obtained TL and stub length in one matrix

D=[D_TL D_TL_eq;Dstub([2 1]) Dstub_eq([2 1])]

D =
Columns 1 through 3
0.405924682355882 0.227671146092940 0.227640974365225
0.162338041953733 0.339238761200356 0.377602825442526
Column 4
0.405911259087935
0.122397174557474




Frequency response

Let be the following f0 and band:

c0=2.998e8;
f0=2e9;
df=1e6;f1=1e9;f2=3e9;f=[f1:df:f2];


% Then the physical lengths of all transmission lines and stubs are:

L=D*c0/f0

L =
Columns 1 through 3
0.060848109885147 0.034127904799332 0.034123382057347
0.024334472488865 0.050851890303933 0.056602663533835
Column 4
0.060846097737281
0.018347336466165


frequency sweep

Y0=1/Z0;
GL=real(YL);BL=imag(YL);

s11=zeros(size(D,2),numel(f)); % s11_mod=zeros(size(D,2),numel(f));

ZinTL=zeros(size(D,2),numel(f));
Zin_stb_oc=zeros(size(D,2),numel(f));
Zin=zeros(size(D,2),numel(f));


for k=1:1:size(L,2)

ZinTL(k,: )=Z0*(ZL+1j*Z0*tan(2*pi*f/c0*L(1,k)))./(Z0+1j*ZL*tan(2*pi*f/c0*L(1,k))); % series transmission line input impedance
end

for k=1:1:size(D,2)

Zin_stb_oc(k,: )=Z0./(1j*tan(2*pi*L(2,k)*f/c0)); % open circuit shunt stub input impedance
end

Zin=1./(ZinTL.^-1+Zin_stb_oc.^-1);

s11=(Zin-Z0)./(Zin+Z0);
s11_mod=abs(s11);

for k=1:1:size(s11_mod,1)
hf(10)=figure(10);plot(f,s11_mod(k,: ));hold all;
end
grid on
title('TL + OC shunt stub |s11| - f sweep');xlabel('f [Hz]')
legend('arc1','arc2','eq1','eq2','Location','northwest')







Sweep relative frequency f/f0:

frel=linspace(.5,1.5,numel(f));

for k=1:1:size(L,2)

ZinTL(k,: )=Z0*(ZL+1j*Z0*tan(2*pi*frel*f0/c0*L(1,k)))./(Z0+1j*ZL*tan(2*pi*frel*f0/c0*L(1,k))); % series transmission line input impedance
end

for k=1:1:size(D,2)
Zin_stb_oc(k,: )=Z0./(1j*tan(2*pi*L(2,k)*frel*f0/c0));
% open circuit shunt stub input impedance
end

Zin=1./(ZinTL.^-1+Zin_stb_oc.^-1);

s11=(Zin-Z0)./(Zin+Z0);
s11_mod=abs(s11);

for k=1:1:size(s11_mod,1)
hf(11)=figure(11);plot(frel,s11_mod(k,: ));hold all;
end
grid on
title('TL + OC shunt stub |s11| - f relative sweep');xlabel('frel=f/f0')
legend('arc1','arc2','eq1','eq2','Location','northwest')


Resulting same plot.

Sweep transmission line and stub lengths

Drel=linspace(.5,1.5,numel(f));

for k=1:1:size(L,2)

ZinTL(k,: )=Z0*(ZL+1j*Z0*tan(2*pi*Drel*D(1,k)))./(Z0+1j*ZL*tan(2*pi*Drel*D(1,k)));
% series transmission line input impedance
end

for k=1:1:size(D,2)

Zin_stb_oc(k,: )=Z0./(1j*tan(2*pi*Drel*D(2,k))); % open circuit shunt stub input impedance
end

Zin=1./(ZinTL.^-1+Zin_stb_oc.^-1);

s11=(Zin-Z0)./(Zin+Z0);
s11_mod=abs(s11);

for k=1:1:size(s11_mod,1)
hf(12)=figure(12);plot(Drel,s11_mod(k,: ));hold all;
end
grid on
title('TL + OC shunt stub |s11| - stub length sweep');
xlabel('Drel=[D/a a*D]')
legend('arc1','arc2','eq1','eq2','Location','northwest')


Resulting again same plot.

Complete overlap of frequency responses, the calculated lengths with Smith Chart arcs and directly with the customized equations return same
transmission line, OC shunt stub lengths.


Comment error when stubs slightly short because of Smith Chart Zin reading error:

in attached script pozar_05_exercise_03.m 2nd part erroneously reads stubs Zin following straight lines, with the following frequency response




Observation: Despite both stubs being a little bit too short, one pushes the deteriorated frequency notch
to a slightly higher frequency, while the other, still being a bit shorter than it should be, it shifts the
deteriorated frequency notch to a slightly lower frequency. So, for fine tuning, it's not always 'shorter'
for higher frequencies or 'longer' for lower frequencies.



John BG
jgb2012@sky.com


The superbly robust support function included in the attached .zip was written by Mr Douglas Schwarz, that can be downloaded from https://www.mathworks.com/matlabcentral/fileexchange/11837-fast-and-robust-curve-intersections

Blog entry information

Author
John_2016
Views
1,429
Last update

More entries in General

More entries from John_2016

Share this entry

Top