Algoritmo che sostituisce la carta di smith per la risoluzione dell’adattamento a singolo stub nelle guide d’ondaAlgoritmo eseguito in MATLAB utile per il calcolo dei parametri necessari per eseguire l’adattamento di una guida d’onda a singolo stub.
clc
clear all
disp('IMPEDENZA DI LINEA');
disp(' ');
Zc=input('Assegna il valore dell''impedenza caratteristica (in ohm): ');
Zl=input('Assegna il valore dell''inpedenza di carico (in ohm): ');
global Zc Zl
Nmax=1/2;
Nmin=0;
zero=[];
j=1;
passo=(Nmax-Nmin)/10;
for L=Nmin:passo:Nmax,
pol2=real(ammett(L))-1;
if L~=Nmin
if pol2*pol1<=0
ris=bisez2(L,L1);
zero(j)=ris;
j=j+1;
end;
end;
pol1=pol2;
L1=L;
end;
clc
if sign(imag(ammett(zero(1))))==1
disp('E'' possibile mettere uno stub induttivo che ha (in s):')
ammettenza=0-i*imag(ammett(zero(1)))
disp('che presenta una distanza dal carico (normalizzato a lamda):')
distanza=zero(1)
global ammettenza
bisezstu;
disp('premere un tasto per continuare...')
pause
clc
disp('inoltre')
disp('E'' possibile mettere uno stub capacitivo che ha (in s):')
ammettenza=0-i*imag(ammett(zero(2)))
disp('che presenta una distanza dal carico (normalizzato a lamda):')
distanza=zero(2)
global ammettenza
bisezstu;
else
disp('E'' possibile mettere uno stub capacitivo che ha (in s):')
ammettenza=0-i*imag(ammett(zero(1)))
disp('che presenta una distanza dal carico (normalizzato a lamda):')
distanza=zero(1)
global ammettenza
bisezstu;
disp('premere un tasto per continuare...')
pause
clc
disp('inoltre')
disp('E'' possibile mettere uno stub induttivo che ha (in s):')
ammettenza=0-i*imag(ammett(zero(2)))
disp('che presenta una distanza dal carico (normalizzato a lamda):')
distanza=zero(2)
global ammettenza
bisezstu;
end
function c=bisez2(bk,ak);
global Zc Zl
e=1e-8;
c=ak;
i=1;
q=real(ammett(c))-1;
while abs(bk-ak)>e
c=(ak+bk)/2;
q=real(ammett(c))-1;
if q~=0
w=real(ammett(ak))-1;
if q*w>0
ak=c;
else bk=c;
end;
end
i=i+1;
if i==200
bk=ak;
end;
end;
end;
function gf=ammett(L);
global Zc Zl
z=Zl/Zc;
roz=(z-1)/(z+1);
A=angle(roz);
B=abs(roz);
ROZ=B*exp(-4*i*pi*L);
C=angle(ROZ);
D=abs(ROZ);
Q=A+C;
x=D.*cos(Q);
y=D.*sin(Q);
rozNUOVO=x+i*y;
zf=((1+rozNUOVO)./(1-rozNUOVO));
gf=1/zf;
disp('INDICARE ADESSO IL TIPO DI STUB')
disp(' ')
disp('1: lo stub è in corto-circuito')
disp('2 (o altro): lo stub è in circuito aperto')
valore=input('');
if valore==1
disp('l''ammettenza iniziale dello stub è infinita')
else
disp('l''ammettenza iniziale dello stub è nulla')
end
global valore ammettenza;
bk=0.5;
ak=0;
e=1e-8;
c=ak;
j=1;
q=imag(stub1(c))-imag(ammettenza);
while abs(bk-ak)>e
c=(ak+bk)/2;
q=imag(stub1(c))-imag(ammettenza);
if q~=0
w=imag(stub1(ak))-imag(ammettenza);
if q*w>0
ak=c;
else bk=c;
end;
end
j=j+1;
if j==200
bk=ak;
end;
end;
end;
disp(' ')
disp('La lunghezza dello stub (normalizzata a lamda) è:')
if valore==1
lunghezza=c
else
if c>0.25
lunghezza=c-0.25
else
lunghezza=c+0.25
end
end
function gf=stub1(L);
ROZ=exp(-4*i*pi*L);
C=angle(ROZ);
Q=pi+C;
x=cos(Q);
y=sin(Q);
rozNUOVO=x+i*y;
if rozNUOVO~=1
zf=((1+rozNUOVO)./(1-rozNUOVO));
else
zf=10000;
end
gf=1/zf;
Esecuzione del programma
» princ
IMPEDENZA DI LINEA
Assegna il valore dell’impedenza caratteristica (in ohm): 50
Assegna il valore dell’inpedenza di carico (in ohm): 60+25i
E’ possibile mettere uno stub induttivo che ha (in s):
ammettenza =
0 – 0.4916i
che presenta una distanza dal carico (normalizzato a lamda):
distanza =
0.2211
INDICARE ADESSO IL TIPO DI STUB
1: lo stub è in corto-circuito
2 (o altro): lo stub è in circuito aperto
1
l’ammettenza iniziale dello stub è infinita
La lunghezza dello stub (normalizzata a lamda) e:
lunghezza =
0.1773
premere un tasto per continuare…
inoltre
E’ possibile mettere uno stub capacitivo che ha (in s):
ammettenza =
0 + 0.4916i
che presenta una distanza dal carico (normalizzato a lamda):
distanza =
0.4328
INDICARE ADESSO IL TIPO DI STUB
1: lo stub è in corto-circuito
2 (o altro): lo stub è in circuito aperto
2
l’ammettenza iniziale dello stub è nulla
La lunghezza dello stub (normalizzata a lamda) è:
lunghezza =
0.0727