skripta za mikrotrakasto linijo in pasovno sito
commit
220fa85dfa
Binary file not shown.
|
@ -0,0 +1,123 @@
|
||||||
|
#!/usr/bin/python3
|
||||||
|
|
||||||
|
import numpy as np
|
||||||
|
import scipy.optimize as opt
|
||||||
|
import microstrip as ms
|
||||||
|
|
||||||
|
def Butterworth(n):
|
||||||
|
'''
|
||||||
|
Return koefficents of Butterworth n-th order filter
|
||||||
|
g0 and gn+1 are assumed to be 1
|
||||||
|
|
||||||
|
[g0, g1, ... gn, gn+1] = Buttherworth(n)
|
||||||
|
'''
|
||||||
|
gi = 2*np.sin((2*np.arange(1,n+1)-1)*np.pi/2/n)
|
||||||
|
return np.hstack([1,gi,1])
|
||||||
|
|
||||||
|
def Tchebysheff(n, ripple):
|
||||||
|
'''
|
||||||
|
Return coefficents of Tchebysheff n-th order filter
|
||||||
|
with specified ripple in passband.
|
||||||
|
|
||||||
|
[g0, g1, ... gn, gn+1] = Tchebysheff(n, ripple)
|
||||||
|
n <- order of filter
|
||||||
|
ripple <- ripple in passband (dB)
|
||||||
|
'''
|
||||||
|
b = np.log(1/np.tanh(ripple/17.37))
|
||||||
|
k = np.sinh(b/2/n)
|
||||||
|
|
||||||
|
g = np.ones(n+2)
|
||||||
|
g[1] = 2/k*np.sin(np.pi/2/n)
|
||||||
|
for i in range(2,n+1):
|
||||||
|
g[i] = 1/g[i-1]*4*np.sin((2*i-1)*np.pi/2/n)*np.sin((2*i-3)*np.pi/2/n)/\
|
||||||
|
(k**2+np.sin((i-1)*np.pi/n)**2)
|
||||||
|
|
||||||
|
if n % 2 == 0:
|
||||||
|
g[-1] = 1/np.tanh(b/4)**2
|
||||||
|
|
||||||
|
return g
|
||||||
|
|
||||||
|
def mclBPF(h, e_r, fbw, gk, f0):
|
||||||
|
'''
|
||||||
|
Calculate dimensions of microstrip coupled lines bandpass
|
||||||
|
filter.
|
||||||
|
|
||||||
|
h <- height of substrate (mm)
|
||||||
|
e_r <- dielectric constant of substrate
|
||||||
|
fbw <- fractional bandwidth of bpf
|
||||||
|
gk <- filter coefficents
|
||||||
|
f0 <- central frequency (GHz)
|
||||||
|
'''
|
||||||
|
|
||||||
|
n = len(gk)-2
|
||||||
|
J = np.ones(n+1)
|
||||||
|
J[0] = np.sqrt(np.pi*fbw/2/gk[0]/gk[1])
|
||||||
|
J[-1] = np.sqrt(np.pi*fbw/2/gk[-2]/gk[-1])
|
||||||
|
for j in range(1,n):
|
||||||
|
J[j] = np.pi*fbw/2/np.sqrt(gk[j]*gk[j+1])
|
||||||
|
|
||||||
|
Zo = np.zeros(n+1)
|
||||||
|
Ze = np.zeros(n+1)
|
||||||
|
|
||||||
|
for j in range(n+1):
|
||||||
|
Ze[j] = 50*(1+J[j]+J[j]**2)
|
||||||
|
Zo[j] = 50*(1-J[j]+J[j]**2)
|
||||||
|
|
||||||
|
lambda4 = 3e8/f0/1e9/4 *1e3
|
||||||
|
W = np.zeros(n+1)
|
||||||
|
s = np.zeros(n+1)
|
||||||
|
l = np.zeros(n+1)
|
||||||
|
for j in range(n+1):
|
||||||
|
x = ms.get_mcl(Ze[j],Zo[j],h,e_r,f0)
|
||||||
|
W[j] = x[0]
|
||||||
|
s[j] = x[1]
|
||||||
|
dl = ms.open_end(W[j],h,e_r,f0)
|
||||||
|
eps = ms.mcl_eps(W[j],h,s[j],e_r,f0)
|
||||||
|
# popravek z upostevanjem disperzije
|
||||||
|
l[j] = lambda4/np.sqrt(np.sqrt(eps[0]*eps[1]))-dl
|
||||||
|
#print(l[j])
|
||||||
|
# popravek s staticnim eps
|
||||||
|
l[j] = lambda4/np.sqrt(np.sqrt(eps[2]*eps[3]))-dl
|
||||||
|
#print(l[j])
|
||||||
|
|
||||||
|
return {'W':W, 's':s, 'l':l, 'f':f0, 'fbw':fbw}
|
||||||
|
|
||||||
|
def prtmclBFP(bfp):
|
||||||
|
'''
|
||||||
|
Print filter in readable format
|
||||||
|
'''
|
||||||
|
n = len(bfp['W'])
|
||||||
|
print("Microstrip coupled line bandpass filter:\nAll dimensions in mm.")
|
||||||
|
print("\tW\ts\tl")
|
||||||
|
for i in range(n):
|
||||||
|
print("{}:\t{:.2f}\t{:.2f}\t{:.2f}".format(i+1,bfp['W'][i],\
|
||||||
|
bfp['s'][i],bfp['l'][i]))
|
||||||
|
|
||||||
|
print("Length of filter: {} mm".format(sum(bfp['l'])))
|
||||||
|
print("Width of filter: {} mm".format(sum(bfp['W'])+sum(bfp['s'])))
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
gk = Tchebysheff(7,0.05)
|
||||||
|
#bfp = mclBPF(1.54, 3.66, 0.1, gk, 10.2)
|
||||||
|
bfp = mclBPF(0.76, 3.66, 0.1, gk, 10.2)
|
||||||
|
#prtmclBFP(bfp)
|
||||||
|
|
||||||
|
print(ms.getWf(50, 0.76, 3.66, 10.2))
|
||||||
|
|
||||||
|
print("=== interstage filter za bfp840 ===")
|
||||||
|
gk = Butterworth(7)
|
||||||
|
bfp = mclBPF(0.8, 3.66, 0.3, gk, 10.5)
|
||||||
|
prtmclBFP(bfp)
|
||||||
|
print("=== interstage filter za bfp840 ===")
|
||||||
|
gk = Butterworth(5)
|
||||||
|
bfp = mclBPF(0.8, 3.66, 0.3, gk, 10.5)
|
||||||
|
prtmclBFP(bfp)
|
||||||
|
print("=== interstage filter za bfp840 ===")
|
||||||
|
gk = Butterworth(5)
|
||||||
|
bfp = mclBPF(0.8, 3.66, 0.05, gk, 10.5)
|
||||||
|
prtmclBFP(bfp)
|
||||||
|
print("=== interstage filter za bfp840 ===")
|
||||||
|
gk = Butterworth(3)
|
||||||
|
bfp = mclBPF(0.8, 3.66, 0.05, gk, 10.5)
|
||||||
|
prtmclBFP(bfp)
|
|
@ -0,0 +1,333 @@
|
||||||
|
#!/usr/bin/python3
|
||||||
|
|
||||||
|
import numpy as np
|
||||||
|
import scipy.optimize as opt
|
||||||
|
|
||||||
|
np.seterr(under='ignore')
|
||||||
|
### STATIC approx
|
||||||
|
def eps_re(u, e_r):
|
||||||
|
'''
|
||||||
|
Calculate effective dielectric constant
|
||||||
|
using the expressions given in
|
||||||
|
E. Hammerstad and O. Jensen, "Accurate Models for
|
||||||
|
Microstrip Computer-Aided Design," 1980 IEEE MTT-S
|
||||||
|
International Microwave symposium Digest, Washington,
|
||||||
|
DC, USA, 1980, pp. 407-409.
|
||||||
|
doi: 10.1109/MWSYM.1980.1124303
|
||||||
|
|
||||||
|
e_re = eps_re(u, e_r):
|
||||||
|
u <- ratio W/h
|
||||||
|
e_r <- substrate relative dielectric constant
|
||||||
|
e_re -> effective relative dielectric constant
|
||||||
|
of microstrip line
|
||||||
|
'''
|
||||||
|
a = 1 + np.log((u**4 + (u/52)**2)/(u**4+0.432))/49 +\
|
||||||
|
np.log(1+(u/18.1)**3)/18.7
|
||||||
|
b = 0.564*( (e_r-0.9)/(e_r+3) )**(0.053)
|
||||||
|
|
||||||
|
e_re = 0.5*(e_r+1)+0.5*(e_r-1)*(1+10/u)**(-a*b)
|
||||||
|
return e_re
|
||||||
|
|
||||||
|
def getZc(u, e_r):
|
||||||
|
'''
|
||||||
|
Calculate characteristic impedance Zc
|
||||||
|
using the expressions given in
|
||||||
|
E. Hammerstad and O. Jensen, "Accurate Models for
|
||||||
|
Microstrip Computer-Aided Design," 1980 IEEE MTT-S
|
||||||
|
International Microwave symposium Digest, Washington,
|
||||||
|
DC, USA, 1980, pp. 407-409.
|
||||||
|
doi: 10.1109/MWSYM.1980.1124303
|
||||||
|
(neglected thickness of copper)
|
||||||
|
|
||||||
|
Zc = getZc(u, e_r)
|
||||||
|
u <- ratio W/h
|
||||||
|
e_r <- substrate relative dielectric constant
|
||||||
|
Zc -> characteristic impedance of microstrip line
|
||||||
|
'''
|
||||||
|
F = 6 + (2*np.pi-6)*np.exp(-(30.666/u)**0.7528)
|
||||||
|
e_re = eps_re(u, e_r)
|
||||||
|
Zc = (120*np.pi)/(2*np.pi*np.sqrt(e_re))*np.log(\
|
||||||
|
F/u + np.sqrt(1 + (2/u)**2))
|
||||||
|
return Zc
|
||||||
|
|
||||||
|
### Dispersion correction
|
||||||
|
def eps_f(W,h,e_r,f):
|
||||||
|
'''
|
||||||
|
Calculate effective dieletric constant using formulas given by:
|
||||||
|
M. Kirschning and R. H. Jansen, "Accurate Model for Effective
|
||||||
|
Dielectric Constant of Microstrip with Validity up to Millimeter-Wave
|
||||||
|
Frequencies," Electronics Letters, vol. 8, no. 6, pp. 272-273,
|
||||||
|
Mar. 1982.
|
||||||
|
R. H. Jansen and M. Kirschning, "Arguments and an accurate Model
|
||||||
|
for the Power-Current Formulation of Microstrip Characteristic
|
||||||
|
Impedance," Archiv für Elektronik und Übertragungstechnik (AEÜ),
|
||||||
|
vol. 37, pp. 108-112, 1983.
|
||||||
|
http://qucs.sourceforge.net/tech/node75.html
|
||||||
|
|
||||||
|
e_re = eps_f(W,h,e_r,f)
|
||||||
|
W <- width of microstrip (mm)
|
||||||
|
h <- height of substrate (mm)
|
||||||
|
e_r <- substrate relative dielectric cosntatn
|
||||||
|
f <- frequency (GHz)
|
||||||
|
e_re -> effective dielectric constant of microstrip line
|
||||||
|
'''
|
||||||
|
fn = f*h
|
||||||
|
u = W/h
|
||||||
|
P1 = 0.27488 + (0.6315+0.525/(1+0.0157*fn)**20)*u - 0.065683*np.exp(\
|
||||||
|
-8.7513*u)
|
||||||
|
P2 = 0.33622*(1-np.exp(-0.03442*e_r))
|
||||||
|
P3 = 0.0363*np.exp(-4.6*u)*(1-np.exp(-(fn/38.7)**4.97))
|
||||||
|
P4 = 1+2.751*(1-np.exp(-(e_r/15.916)**8))
|
||||||
|
Pf = P1*P2*((0.1844+P3*P4)*fn)**1.5763
|
||||||
|
eps0 = eps_re(u,e_r)
|
||||||
|
return e_r - (e_r - eps0)/(1+Pf)
|
||||||
|
|
||||||
|
def getZcf(W,h,e_r,f,R=False):
|
||||||
|
'''
|
||||||
|
Calculate characteristic impedance using formulas given by:
|
||||||
|
M. Kirschning and R. H. Jansen, "Accurate Model for Effective
|
||||||
|
Dielectric Constant of Microstrip with Validity up to Millimeter-Wave
|
||||||
|
Frequencies," Electronics Letters, vol. 8, no. 6, pp. 272-273,
|
||||||
|
Mar. 1982.
|
||||||
|
R. H. Jansen and M. Kirschning, "Arguments and an accurate Model
|
||||||
|
for the Power-Current Formulation of Microstrip Characteristic
|
||||||
|
Impedance," Archiv für Elektronik und Übertragungstechnik (AEÜ),
|
||||||
|
vol. 37, pp. 108-112, 1983.
|
||||||
|
http://qucs.sourceforge.net/tech/node75.html
|
||||||
|
|
||||||
|
Zc = Zcf(W,h,e_r,f,R=False)
|
||||||
|
W <- width of microstrip (mm)
|
||||||
|
h <- height of substrate (mm)
|
||||||
|
e_r <- substrate relative dielectric cosntatn
|
||||||
|
f <- frequency (GHz)
|
||||||
|
R=False <- flag telling whether to return R17 or not
|
||||||
|
Zc -> characteristic impedance of microstrip line
|
||||||
|
R17 -> parameter used to calculate impedance and coupled line
|
||||||
|
return only if R=True
|
||||||
|
'''
|
||||||
|
fn = f*h
|
||||||
|
u = W/h
|
||||||
|
ef = eps_f(W,h,e_r,f)
|
||||||
|
e0 = eps_re(u,e_r)
|
||||||
|
|
||||||
|
R1 = 0.03891*e_r**1.4
|
||||||
|
R2 = 0.267*u**7
|
||||||
|
R3 = 4.766*np.exp(-3.228*u**0.641)
|
||||||
|
R4 = 0.016 + (0.0514*e_r)**4.524
|
||||||
|
R5 = (fn/28.843)**12.0
|
||||||
|
R6 = 22.20*u**1.92
|
||||||
|
|
||||||
|
R7 = 1.206-0.3144*np.exp(-R1)*(1-np.exp(-R2))
|
||||||
|
R8 = 1+1.275*(1-np.exp(-0.004625*R3*e_r**1.674)*(fn/18.365)**2.745)
|
||||||
|
R9 = 5.086*R4*R5*np.exp(-R6)*(e_r-1)**6/\
|
||||||
|
((0.3838+0.386*R4)*(1+1.2992*R5)*(1+10*(e_r-1)**6))
|
||||||
|
|
||||||
|
R10 = 0.00044*e_r**2.136+0.0184
|
||||||
|
R11 = (fn/19.47)**6/(1+0.0962*(fn/19.47)**6)
|
||||||
|
R12 = 1/(1+0.00245*u**2)
|
||||||
|
R13 = 0.9408*ef**R8-0.9603
|
||||||
|
R14 = (0.9408-R9)*e0**R8-0.9603
|
||||||
|
R15 = 0.707*R10*(fn/12.3)**1.097
|
||||||
|
R16 = 1+0.0503*e_r**2*R11*(1-np.exp(-(u/15)**6))
|
||||||
|
R17 = R7*(1-1.1241*R12*np.exp(-0.026*fn**1.15656-R15)/R16)
|
||||||
|
|
||||||
|
Z0 = getZc(u,e_r)
|
||||||
|
Zc = Z0*(R13/R14)**R17
|
||||||
|
if R:
|
||||||
|
return (Zc, R17)
|
||||||
|
else:
|
||||||
|
return Zc
|
||||||
|
|
||||||
|
def getWf(Zk,h,e_r,f):
|
||||||
|
'''
|
||||||
|
Calculate width of microstrip line when also
|
||||||
|
taking in to account dispersion.
|
||||||
|
|
||||||
|
W = getWf(Zk,h,e_r,f)
|
||||||
|
Zk <- characteristic impedance (ohms)
|
||||||
|
h <- substrate height
|
||||||
|
e_r <- substrate relative di. costant
|
||||||
|
f <- frequency (GHz)
|
||||||
|
W -> widht of microstrip line (mm)
|
||||||
|
'''
|
||||||
|
u = opt.root_scalar(lambda X: Zk-getZcf(X,h,e_r,f),x0=h,\
|
||||||
|
method='brentq', bracket=[0.01,100])
|
||||||
|
return u.root
|
||||||
|
|
||||||
|
### coupled lines
|
||||||
|
def mcl_eps(W,h,s,e_r,f):
|
||||||
|
'''
|
||||||
|
Calculate effective odd and even permittivity of parallel
|
||||||
|
coupled microstrip lines.
|
||||||
|
M. Kirschning, R. H. Jansen, and N. H. L. Koster,
|
||||||
|
"Coupled microstrip parallel-gap model for improved filter and coupler design,"
|
||||||
|
Electronics Letters, vol. 19, no. 10, pp. 377–379, May 1983,
|
||||||
|
doi: 10.1049/el:19830261.
|
||||||
|
|
||||||
|
even, odd = mcl_eps(W,h,s,e_r,f):
|
||||||
|
W <- width of microstrip (mm)
|
||||||
|
h <- height of substrate (mm)
|
||||||
|
s <- spacing between lines (mm)
|
||||||
|
e_r <- substrate relative dielectric cosntatn
|
||||||
|
f <- frequency (GHz)
|
||||||
|
even -> even mode dielectric constant
|
||||||
|
odd -> odd mode dielectric constant
|
||||||
|
'''
|
||||||
|
u = W/h
|
||||||
|
g = s/h
|
||||||
|
fn = f*h
|
||||||
|
|
||||||
|
eps0 = eps_re(u,e_r)
|
||||||
|
|
||||||
|
v = u * (20+g**2)/(10+g**2)+ g*np.exp(-g)
|
||||||
|
ae = 1+np.log((v**4+(v/52)**2)/(v**4+0.432))/49+np.log(1+(v/18.1)**3)/18.7
|
||||||
|
be = 0.564*((e_r-0.9)/(e_r+3))**0.053
|
||||||
|
even0 = 0.5*(e_r+1)+0.5*(e_r-1)*(1+10/v)**(-ae*be)
|
||||||
|
|
||||||
|
ao = 0.7287*(eps0-0.5*(e_r+1))*(1-np.exp(-0.179*u))
|
||||||
|
bo = 0.747*e_r/(0.15+e_r)
|
||||||
|
co = bo - (bo-0.207)*np.exp(-0.414*u)
|
||||||
|
do = 0.593+0.694*np.exp(-0.562*u)
|
||||||
|
odd0 = (0.5*(e_r+1)+ao-eps0)*np.exp(-co*g**do)+eps0
|
||||||
|
|
||||||
|
P1 = 0.27488+(0.6315+0.525/(1+0.0157*fn)**20)*u-0.065683*np.exp(-8.7513*u)
|
||||||
|
P2 = 0.33622*(1-np.exp(-0.03442*e_r))
|
||||||
|
P3 = 0.0363*np.exp(-4.6*u)*(1-np.exp(-(fn/38.7)**4.97))
|
||||||
|
P4 = 1+2.751*(1-np.exp(-(e_r/15.916)**8))
|
||||||
|
P5 = 0.334*np.exp(-3.3*(e_r/15)**3)+0.746
|
||||||
|
P6 = P5*np.exp(-(fn/18)**0.368)
|
||||||
|
P7 = 1+4.069*P6*g**0.479*np.exp(-1.347*g**0.595-0.17*g**2.5)
|
||||||
|
Fe = P1*P2*((P3*P4+0.1844*P7)*fn)**1.5763
|
||||||
|
even = e_r - (e_r - even0)/(1+Fe)
|
||||||
|
|
||||||
|
P8 = 0.7168*(1+1.076/(1+0.0576*(e_r-1)))
|
||||||
|
P9 = P8-0.7913*(1-np.exp(-(fn/20)**1.424))*np.arctan(2.481*(e_r/8)**0.946)
|
||||||
|
P10 = 0.242*(e_r - 1)**0.55
|
||||||
|
P11 = 0.6366*(np.exp(-0.3401*fn)-1)*np.arctan(1.263*(u/3)**1.629)
|
||||||
|
P12 = P9 + (1-P9)/(1+1.183*u**1.376)
|
||||||
|
P13 = 1.695 * P10/(0.414+1.605*P10)
|
||||||
|
P14 = 0.8928+0.1072*(1-np.exp(-0.42*(fn/20)**3.215))
|
||||||
|
P15 = np.abs(1-0.8928*(1+P11)*np.exp(-P13*g**1.092)*P12/P14)
|
||||||
|
Fo = P1*P2*((P3*P4+1.844)*fn*P15)**1.5763
|
||||||
|
odd = e_r - (e_r - odd0)/(1+Fo)
|
||||||
|
|
||||||
|
return even,odd,even0,odd0
|
||||||
|
|
||||||
|
def mclZcf(W,h,s,e_r,f):
|
||||||
|
'''
|
||||||
|
Calculate odd and even characteristic impedance of parallel
|
||||||
|
coupled microstrip lines.
|
||||||
|
M. Kirschning, R. H. Jansen, and N. H. L. Koster,
|
||||||
|
"Coupled microstrip parallel-gap model for improved filter and coupler design,"
|
||||||
|
Electronics Letters, vol. 19, no. 10, pp. 377–379, May 1983,
|
||||||
|
doi: 10.1049/el:19830261.
|
||||||
|
|
||||||
|
even, odd = mcl_eps(W,h,s,e_r,f):
|
||||||
|
W <- width of microstrip (mm)
|
||||||
|
h <- height of substrate (mm)
|
||||||
|
s <- spacing between lines (mm)
|
||||||
|
e_r <- substrate relative dielectric cosntatn
|
||||||
|
f <- frequency (GHz)
|
||||||
|
Ze -> even mode charachterstic impedance
|
||||||
|
Zo -> odd mode characteristic impedance
|
||||||
|
'''
|
||||||
|
u = W/h
|
||||||
|
g = s/h
|
||||||
|
fn = f*h
|
||||||
|
|
||||||
|
eps0 = eps_re(u,e_r)
|
||||||
|
epsf = eps_f(W,h,e_r,f)
|
||||||
|
even,odd,even0,odd0 = mcl_eps(W,h,s,e_r,f)
|
||||||
|
Z0 = getZc(u,e_r)
|
||||||
|
Z0f, Q0 = getZcf(W,h,e_r,f,R=True)
|
||||||
|
|
||||||
|
Q1 = 0.8695*u**0.194
|
||||||
|
Q2 = 1+0.7519*g+0.189*g**2.31
|
||||||
|
Q3 = 0.1975+(16.6 + (8.4/g)**6)**-0.387 +np.log(g**10/(1+(g/3.4)**10))/241
|
||||||
|
Q4 = 2*Q1/Q2/(np.exp(-g)*u**Q3+(2-np.exp(-g))*u**-Q3)
|
||||||
|
|
||||||
|
Ze0 = np.sqrt(eps0/even0)*Z0/(1-Z0/377*np.sqrt(eps0)*Q4)
|
||||||
|
|
||||||
|
Q5 = 1.794 + 1.14*np.log(1+0.638/(g+0.517*g**2.43))
|
||||||
|
Q6 = 0.2305+np.log(g**10/(1+(g/5.8)**10))/281.3+np.log(1+0.598*g**1.154)/5.1
|
||||||
|
Q7 = (10+190*g**2)/(1+82.3*g**3)
|
||||||
|
#print(-6.5-0.95*np.log(g)-(g/0.15)**5)
|
||||||
|
Q8 = np.exp(-6.5-0.95*np.log(g)-(g/0.15)**5)
|
||||||
|
Q9 = np.log(Q7)*(Q8+1/16.5)
|
||||||
|
Q10 = (Q2*Q4-Q5*np.exp(np.log(u)*Q6*u**-Q9))/Q2
|
||||||
|
|
||||||
|
Zo0 = np.sqrt(eps0/odd0)*Z0/(1-Z0/377*np.sqrt(eps0)*Q10)
|
||||||
|
|
||||||
|
# dispersion accounted
|
||||||
|
Q11 = 0.893*(1-0.3/(1+0.7*(e_r-1)))
|
||||||
|
Q12 = 2.121*(fn/20)**4.91*np.exp(-2.87*g)*g**0.902/(1+Q11*(fn/20)**4.91)
|
||||||
|
Q13 = 1+0.038*(e_r/8)**5.1
|
||||||
|
Q14 = 1+1.203*(e_r/15)**4/(1+(e_r/15)**4)
|
||||||
|
Q15 = 1.887*np.exp(-1.5*g**0.84)*g**Q14/(1+0.41*(fn/15)**3*u**(2/Q13)/(0.125+u**(1.625/Q13)))
|
||||||
|
Q16 = Q15 * (1+ 9/(1+0.403*(e_r-1)**2))
|
||||||
|
Q17 = 0.394*(1-np.exp(-1.47*(u/7)**0.672))*(1-np.exp(-4.25*(fn/20)**1.87))
|
||||||
|
Q18 = 0.61*(1-np.exp(-2.13*(u/8)**1.593))/(1+6.544*g**4.17)
|
||||||
|
Q19 = 0.21*g**4/(1+0.18*g**4.9)/(1+0.1*u**2)/(1+(fn/24)**3)
|
||||||
|
Q20 = Q19 * (0.09+1/(1+0.1*(e_r-1)**2.7))
|
||||||
|
Q21 = np.abs(1-42.54*g**0.133*np.exp(-0.812*g)*u**2.5/(1+0.033*u**2.5))
|
||||||
|
|
||||||
|
re = (fn/28.843)**12
|
||||||
|
qe = 0.016+(0.0514*e_r*Q21)**4.524
|
||||||
|
pe = 4.766*np.exp(-3.228*u**0.641)
|
||||||
|
de = 5.086*qe*re*np.exp(-22.2*u**1.92)*(e_r-1)**6/(0.3838+0.386*qe)/(1+1.2992*re)/(1+10*(e_r-1)**6)
|
||||||
|
|
||||||
|
Ce = 1+1.275*(1-np.exp(-0.004625*pe*e_r**1.674*(fn/18.365)**2.745))-Q12+Q16-Q17+Q18+Q20
|
||||||
|
Ze = Ze0*( (0.9408*epsf**Ce-0.9603)/( (0.9408-de)*eps0**Ce-0.9603))**Q0
|
||||||
|
|
||||||
|
Q29 = 15.16/(1+0.196*(e_r-1)**2)
|
||||||
|
Q28 = 0.149*(e_r-1)**3/(94.5+0.038*(e_r-1)**3)
|
||||||
|
Q27 = 0.4*g**0.84*(1+(2.5*(e_r-1)**1.5)/(5+(e_r-1)**1.5))
|
||||||
|
Q26 = 30 - ( 22.2*((e_r-1)/13)**13)/(1+3*((e_r-1)/13)**12) - Q29
|
||||||
|
Q25 = (0.3*fn**2)/(10+fn**2)*(1+(2.333*(e_r-1)**2)/(5+(e_r-1)**2))
|
||||||
|
Q24 = 2.506*Q28*u**0.894/(3.575+u**0.894)*((1+1.3*u)*fn/99.25)**4.29
|
||||||
|
Q23 = 1+0.005*fn*Q27/(1+0.812*(fn/15)**1.9)/(1+0.025*u**2)
|
||||||
|
Q22 = 0.925*(fn/Q26)**1.536/(1+0.3*(fn/30)**1.536)
|
||||||
|
|
||||||
|
Zo = Z0f+(Zo0*(odd/odd0)**Q22 - Z0f*Q23)/(1+Q24+(0.46*g)**2.2*Q25)
|
||||||
|
return Ze,Zo
|
||||||
|
|
||||||
|
def get_mcl(Ze, Zo, h, e_r, f):
|
||||||
|
'''
|
||||||
|
Find width W and gap s of parallel coupled microstrip lines
|
||||||
|
|
||||||
|
[W, s] = get_mcl(Ze, Zo, h, e_r, f):
|
||||||
|
Ze <- even mode characteristic impedance (ohm)
|
||||||
|
Zo <- odd mode ch. impedance (ohm)
|
||||||
|
h <- height of substrate (mm)
|
||||||
|
e_r <- relative permitivity of substrate
|
||||||
|
f <- frequency (GHz)
|
||||||
|
W -> strip width (mm)
|
||||||
|
s -> gap (mm)
|
||||||
|
'''
|
||||||
|
Z = np.array([Ze,Zo])
|
||||||
|
u = opt.root(lambda X: Z - np.array(mclZcf(X[0],h,X[1],e_r,f)), [h/2,h/5],method='lm')
|
||||||
|
return u.x
|
||||||
|
|
||||||
|
def open_end(W, h, e_r, f):
|
||||||
|
'''
|
||||||
|
Calculate open end displacment dl of microstrip open end.
|
||||||
|
Kirschning, M., R. H. Jansen, and N. H. L. Koster.
|
||||||
|
"Accurate model for open end effect of microstrip lines."
|
||||||
|
Electronics Letters 17.3 (1981): 123-125.
|
||||||
|
|
||||||
|
dl = open_end(W,h,e_r,f)
|
||||||
|
W <- width of microstrip line (mm)
|
||||||
|
h <- height of substrate (mm)
|
||||||
|
e_r <- relative dielectric constant of substrate
|
||||||
|
f <- frequency (GHz)
|
||||||
|
'''
|
||||||
|
epsf = eps_f(W,h,e_r,f)
|
||||||
|
u = W/h
|
||||||
|
|
||||||
|
x1 = 0.434907*(epsf**0.81+0.26)/(epsf**0.81-0.189)*(u**0.8544+0.236)/(u**0.8544+0.87)
|
||||||
|
x2 = 1 + u**0.371/(2.358*e_r+1)
|
||||||
|
x3 = 1 + 0.5274*np.arctan(0.084*u**(1.9413/x2))/epsf**0.9236
|
||||||
|
x4 = 1 + 0.0377*np.arctan(0.067*u**1.456)*(6-5*np.exp(0.036*(1-e_r)))
|
||||||
|
x5 = 1 - 0.218*np.exp(-7.5*u)
|
||||||
|
|
||||||
|
return x1*x3*x5/x4 *h
|
Loading…
Reference in New Issue