top of page

exercise 5.13

ZIP with MATLAB scripts and note:

Small tag OK.jpg
pozar_05_exercise_13_question.jpg

 exercise 5.13 notes:

Small tag OK.jpg
pozar_05_exercise_13_circuit.jpg

1.- calculation of l/4 transformer characteristic impedance Z1

ZL=350;Z0=100;f0=4e9;

Z1=(ZL*Z0)^.5

SWR=2;g_mod=(SWR-1)/(SWR+1)

2.- Fractional Bandwidth Df/f0, as defined [POZAR] 248pg

df_over_f0=2-4/pi*acos((g_mod)/(1-g_mod^2)^.5*(2*(Z0*ZL)^.5)/abs(ZL-Z0))

 

This expression of fractional bandwidth is only valid when

 

  • approximating l/4 |G| transformer general expression with (sec(q))^2>>1, q=b*L

  • TEM line only; q=b*L=2*p*f/vp*vp/(4*f0)= p*f/(2*f0)

001.jpg
002.jpg

Checking frequency response

 

c0=2.998*10^8;

df=1e6;

f0=2e9;f1=0;f2=2*f0;

dfrel=df/f0;

frel=[f1/f0:dfrel:f2/f0];

 

D1=.25;L1=D1*c0/f0

Zin=Z1*(ZL+1j*Z1*tan(2*pi*frel.*f0/c0.*L1))./...

(Z1+1j*ZL*tan(2*pi*frel.*f0/c0.*L1))

gamma1=(Zin-Z0)./(Zin+Z0)

 

hf1=figure(1);ax1=gca

plot(ax1,frel,abs(gamma1));grid on  

title(['|gamma| ZL/Z0=' num2str(ZL/Z0)])

xlabel('f/f0')

axis([0 2 0 1])

 

 

 

 

 

 

 

 

Z0=100;ZL1=10*Z0;Z1_1=(ZL1*Z0)^.5

Zin1=Z1_1*(ZL1+1j*Z1_1*tan(2*pi*frel.*f0/c0.*L1))./...

(Z1_1+1j*ZL1*tan(2*pi*frel.*f0/c0.*L1));

gamma1_mod=abs((Zin1-Z0)./(Zin1+Z0));

hf2=figure(2);ax2=gca

plot(ax2,frel,gamma1_mod);grid on  

 

ZL2=4*Z0;Z1_2=(ZL2*Z0)^.5

Zin2=Z1_2*(ZL2+1j*Z1_2*tan(2*pi*frel.*f0/c0.*L1))./...

(Z1_2+1j*ZL2*tan(2*pi*frel.*f0/c0.*L1));

gamma2_mod=abs((Zin2-Z0)./(Zin2+Z0));

 

hold(ax2,'on')

plot(ax2,frel,gamma2_mod);grid on  

ZL3=2*Z0;Z1_3=(ZL3*Z0)^.5

Zin3=Z1_3*(ZL3+1j*Z1_3*tan(2*pi*frel.*f0/c0.*L1))./...

(Z1_3+1j*ZL3*tan(2*pi*frel.*f0/c0.*L1));

gamma3_mod=abs((Zin3-Z0)./(Zin3+Z0));

plot(ax2,frel,gamma3_mod);grid on  

str1=['ZL/Z0=' num2str(ZL1/Z0)]

str2=['ZL/Z0=' num2str(ZL2/Z0)]

str3=['ZL/Z0=' num2str(ZL3/Z0)]

egend(str1,str2,str3)

axis(ax2,[0 2 0 1]);xlabel('f/f0');ylabel('|\Gamma|')

3.- µ-strip dimensioning

pozar_05_exercise_13_ustrip_dimensioning

A first approximation, sometimes valid, would be manual iteration suggested in the solutions manual:

 

Let be Wd for W/d:

for the microstrip already with Z0=100 generator side:

 

guess that W/d<2  for instance W/d=.5

 

d=1.59e-3;Wd0=.5;er=2.2

ee0=(er+1)/2+(er-1)/2*1/(1+12*1/Wd0)^.5 

 

for the microstrip on the generator side

 

Z0=100;

 

A100=Z0/60*((er+1)/2)^.5+(er-1)/(er+1)*(.23+.11/er)

B100=377*pi/(2*Z0*er^.5)

 

then

 

Wd100=8*exp(A100)/(exp(2*A100)-2)

W1=Wd100*d

 

check

 

60/ee0^.5*log(8/Wd100+.24*Wd100)

 

quite close to Z0=100

 

for the l/4 transformer microstrip, also guess W/d<2

 

Z1=187;

A187=Z1/60*((er+1)/2)^.5+(er-1)/(er+1)*(.23+.11/er)

B187=377*pi/(2*Z1*er^.5)

 

Wd187=8*exp(A187)/(exp(2*A187)-2)

W187=Wd187*d

 

check

 

60/ee0^.5*log(8/Wd187+.24*Wd187)

 

again close enough to Z1=187

 

Then the length [metre] of the transformer would be

 

c0=2.998e8;f0=4e9;

lambda0=c0/f0

lambdag=lambda0/ee0^.5

L_trf=lambdag/4

 

 

 

 

er =   2.200000000000000

ee0 =   1.720000000000000

 

 

 

 

 

A100 =   2.213185106778920

B100 =   3.992545616410477

 

 

 

Wd100 =   0.896248722160686

W100 =   0.001425035468235

 

 

 

=  1.012342362687005e+02

 

 

 

 

 

 

A187 =   4.047306149676580

B187 =   2.135051131770309

 

Wd187 =  0.139840322091229

W187 =    2.223461121250534e-04

 

 

 

 

=     1.851614198712142e+02

 

 

 

 

 

 

 

L_trf =   0.014287209808036

The guessing whether W/d<2 is a try-and-error manual process that can be somehow simplified sweeping all possible values, in same way when seeking function roots.

Copy of the support function iter_Wovd appended to this note. Start values Wd=1.5 (W/d) and the step d_Wd=0.01

d=1.59e-3 %mm thick

er=2.2

 

% 1st  round

Wd0=1.5

d_Wd=.01

% dZ1=.01*Z1

ee0=(er+1)/2+(er-1)/2*1/(1+12*1/Wd0)^.5 

if Wd0>=1

    Z1_t2=120*pi/(ee0^.5*(Wd0+1.393+.667*log(Wd0+1.444)));   %W/d>=1

    else

        Z1_t2=60/ee0^.5*log(8/Wd0+.24*Wd0);   % W/d<1

end

Z1_v=Z1_t2

errZ1_v=abs(Z1_t2-Z1)    % .5*Z1  % Z1 error vector

Wd_v=Wd0                        % W/d vector

 

k=1

while errZ1_v(end)>.01 && k<2e3   % && k<2e3 safety switch or the loop doesn't stop  

   [Z1_2,Wd1]=iter_Z1_Wovd(Z1_v(end),Wd_v(end),er)

   [Z1_2_dZup,Wd1_dZup]=iter_Z1_Wovd(Z1_v(end),Wd_v(end)+d_Wd,er)

   [Z1_2_dZdown,Wd1_dZdown]=iter_Z1_Wovd(Z1_v(end),Wd_v(end)-d_Wd,er)

    if abs(Z1-Z1_2_dZup)<abs(Z1-Z1_2_dZdown)

        errZ1_v=[errZ1_v   abs(Z1-Z1_2_dZup)];

        Wd_v=[Wd_v Wd1_dZup];

        Z1_v=[Z1_v Z1_2_dZup];

   end

  if abs(Z1-Z1_2_dZup)>abs(Z1-Z1_2_dZdown)

        errZ1_v=[errZ1_v   abs(Z1-Z1_2_dZdown)];

        Wd_v=[Wd_v Wd1_dZdown];       

        Z1_v=[Z1_v Z1_2_dZdown];

   end

   k=k+1;

end

 

figure(3);stem(errZ1_v);grid on;title('Z1 error vector')

figure(4);stem(Z1_v);grid on;title('Z1')

figure(5);stem(Wd_v);grid on;title('W/d')

010.jpg

When W/d step is too small the convergence of Z1 happens with offset dZ1=85 ohm. 

85 ohm away from the expected Z1 is an excessive deviation.

Let's increase step: d_Wd=.1

When starting with larger W/d step Z1 is eventually reached

 

% 13.2 Microstrip

d=1.59e-3 %mm thick

er=2.2

 

% 1st  round

Wd0=1.5

d_Wd=.1

% dZ1=.01*Z1

 

ee0=(er+1)/2+(er-1)/2*1/(1+12*1/Wd0)^.5 % eff rel diel permittivity

 

if Wd0>=1

    Z1_t2=120*pi/(ee0^.5*(Wd0+1.393+.667*log(Wd0+1.444)));

%W/d>=1

    else

        Z1_t2=60/ee0^.5*log(8/Wd0+.24*Wd0);   % W/d<1

end

 

Z1_v=Z1_t2

errZ1_v=abs(Z1_t2-Z1)    % .5*Z1  % Z1 error vector

Wd_v=Wd0                  % W/d vector

 

k=1

 

while errZ1_v(end)>.01   

       

   [Z1_2,Wd1]=iter_Z1_Wovd(Z1_v(end),Wd_v(end),er)

   [Z1_2_dZup,Wd1_dZup]=…

iter_Z1_Wovd(Z1_v(end),Wd_v(end)+d_Wd,er)

   [Z1_2_dZdown,Wd1_dZdown]=…

iter_Z1_Wovd(Z1_v(end),Wd_v(end)-d_Wd,er)

 

   if abs(Z1-Z1_2_dZup)<abs(Z1-Z1_2_dZdown)

        errZ1_v=[errZ1_v   abs(Z1-Z1_2_dZup)];

        Wd_v=[Wd_v Wd1_dZup];

        Z1_v=[Z1_v Z1_2_dZup];

   end

   

   if abs(Z1-Z1_2_dZup)>abs(Z1-Z1_2_dZdown)

        errZ1_v=[errZ1_v   abs(Z1-Z1_2_dZdown)];

        Wd_v=[Wd_v Wd1_dZdown];

        Z1_v=[Z1_v Z1_2_dZdown];

   end

        

%    if abs(Z1-Z1_2_dZup)==abs(Z1-Z1_2_dZdown)

%         return;

%    end

 

figure(6);hold all;stem(errZ1_v);grid on;title('Z1 error vector')

figure(7);hold all;stem(Z1_v);grid on;title('Z1')

figure(8);hold all;stem(Wd_v);grid on;title('W/d')

 

   k=k+1;

 

end

 

Same result if W/d>2 W/d=2.5 Wd0=2.5 and d_Wd=0.1

 

The error threshold to stop is too small compared to the step the span is a bit too wide, yet when attempting to reduce both, again convergence is too far from Z1.

 

The point that this basic solver loop doesn't stop for some W/d and error threshold values or the span of the correct convergence can be narrowed, are points that can be improved is about diverting time on the algorithm, for instance adding variable steps.

011.jpg

Yet since Z1 values eventually hang around the expected Z1 and the error close to zero, we can focus on the smallest errors and from there get W/d:

the following ends up within a few seconds and converges to Z1

 

find(errZ1_v<.2)

 

 

 

Wd_v(find(errZ1_v<.2))

 

 

 

 

so the result is

Wd=mean(Wd_v(find(errZ1_v<.2)))

 

 

d

W=Wd*d

 

er

ee1=(er+1)/2+(er-1)/2*1/(1+12*1/Wd)^.5 

 

lambda0=c/f0;lambda_eff=lambda0/(ee1)^.5

and with c=3e8

L_transformer=lambda_eff/4 % m

 

 

=         497         628         957        1683        2400

        2612        2882        2980        3119        3375

        3422        3831        4083        4235        5663

 

 =   0.140344773157983   0.140416696611814   0.140182123411192

     0.140392081104524   0.140193473954178   0.139486015946577

     0.139983812519741   0.140263297911968   0.139605857141912

     0.139484812310120   0.140322941984743   0.139283038977218

     0.140218003471145   0.139906790481617   0.139859977987934

 

Wd =   0.139996246464844

 

d =   0.001590000000000

W =     2.225940318791026e-04

 

er =   2.200000000000000

ee1 =   1.664431786024021

 

lambda_eff =   0.058133739859052

 

L_transformer =   0.014533434964763

  • L_transformer=14.55 mm

  • W transformer track width 0.22mm

 

 

Again, single shot approach, compact, for instance W/d=.5  Wd=.5

d=1.59e-3;Wd=.5,Z1=187;er=2.2

A1=Z1/60*((er+1)/2)^.5+(er-1)/(er+1)*(.23+.11/er)

Wd_check=8*exp(A1)/(exp(2*A1)-2)  % <1, ok

% since Wd is also <1

ee=(er+1)/2+(er-1)/2*1/(1+12*Wd_check)^.5

Z1=60/ee^.5*log(8/Wd_check+.24*Wd_check)

W_Z1=Wd*d

Z1=173 ohm, rather close to 187 ohm, the solutions manual leaves this as good enough

d=1.59e-3;Z0=100;Wd=.5,Z1=Z0;er=2.2

A0=Z1/60*((er+1)/2)^.5+(er-1)/(er+1)*(.23+.11/er)

Wd_check=8*exp(A0)/(exp(2*A0)-2)  % <1, ok

% since Wd is also <1

ee=(er+1)/2+(er-1)/2*1/(1+12*Wd_check)^.5

Z0_check=60/ee^.5*log(8/Wd_check+.24*Wd_check)

W_Z0=Wd_check*d

 

A1 =   4.047306149676580

Wd_check =   0.139840322091229

 

ee =   1.966639425647109

Z1 =     1.731619051045303e+02

W_Z1 =  7.950000000000000e-04

A0 =   2.213185106778920

Wd_check =   0.896248722160686

 

ee =   1.775000873695489

Z0_check =  99.653452321549082

W_Z0 =   0.001425035468235

In any case it's highly recommended to validate results with a real prototype or with reliable microstrip calculators like LineCalc.

LineCalc is ADS microstrip utility, also used in this solution.

 Another microstrip application that may turn useful is the free online microstrip calculator Chemandy:

http://chemandy.com/calculators/microstrip-transmission-line-calculator.htm.

ads_001.jpg
ads_002.jpg
ads_003.jpg

The online microstrip calculator Chemandy uses Z0(W/d) slightly different a bit more compact expressions than POZAR.

Now calculating ee(er) and ee(W/d)

first ee(W/d)

Wd=[.5:.5:3];er=[1:.1:15];

ee=zeros(numel(Wd),numel(er))

hold all

for s=1:1:numel(Wd)

    ee(s,:)=(er+1)/2+(er-1)/2*1/(1+12*Wd(s))^.5;

    semilogy(er,ee(s,:));

end

grid on;

str1=['W/d= ' num2str(Wd(1))];str2=['W/d= ' num2str(Wd(2))];

str3=['W/d= ' num2str(Wd(3))];str4=['W/d= ' num2str(Wd(4))];

str5=['W/d= ' num2str(Wd(5))];str6=['W/d= ' num2str(Wd(6))];

legend(str1,str2,str3,str4,str5,str6)

 

 

 

 

 

 

 

 

and now ee(er)

er=[1:1:6];Wd=[.5:.01:3];

ee=zeros(numel(er),numel(Wd));hold all

 

for s=1:1:numel(er)

          ee(s,:)=(er(s)+1)/2+(er(s)-1)/2*1./(1+12*Wd).^.5;

    semilogy(Wd,ee(s,:));

end

grid on;

str1=['er= ' num2str(er(1))];str2=['er= ' num2str(er(2))];

str3=['er= ' num2str(er(3))];str4=['er= ' num2str(er(4))];

str5=['er= ' num2str(er(5))];str6=['er= ' num2str(er(6))];

evalin('base','legend(str1, str2 , str3 , str4 , str5)')

legend(str1,str2,str3,str4,str5,str6)

 

evalin is a powerful function that enables code generation.

ads_004.jpg
ads_005.jpg
ads_006.jpg
ads_004-2.jpg

Support function iter_Z1_Wovd

 

function [Z1_t2,Wd_t2]=iter_Z1_Wovd(Z1_t1,Wd_t1,er)

 

ee=(er+1)/2+(er-1)/2*1/(1+12*Wd_t1)^.5                                            % effective relative dielectric permittivity

 

if Wd_t1>=1

    Z1_t2=120*pi/(ee^.5*(Wd_t1+1.393+.667*log(Wd_t1+1.444)));   %W/d>=1

    else

        Z1_t2=60/ee^.5*log(8/Wd_t1+.24*Wd_t1);                                  % W/d<1

end

 

A=Z1_t2/60*((er+1)/2)^.5+(er-1)/(er+1)*(.23+.11/er)

B=377*pi/(2*Z1_t2*er^.5)

 

if (Wd_t1>2) 

    Wd_t2=2/pi*(B-1-log(2*B-1)+(er-1)/(2*er)*(log(B-1)+.39-.61/er));

    else

         Wd_t2=8*exp(A)/(exp(2*A)-2);

end

 

  % err_Z1=abs(Z1-Z1_t2)

 

end

bottom of page