|
|
@ -60,21 +60,6 @@ static DoubleComplex rdivide(double n1, DoubleComplex n2) |
|
|
//static cpline_state_t *state = NULL; |
|
|
//static cpline_state_t *state = NULL; |
|
|
static void cm_cpmline_callback(ARGS, Mif_Callback_Reason_t reason); |
|
|
static void cm_cpmline_callback(ARGS, Mif_Callback_Reason_t reason); |
|
|
|
|
|
|
|
|
static void analyseQuasiStatic (double W, double h, double s, |
|
|
|
|
|
double t, double er, |
|
|
|
|
|
int SModel, double* Zle, |
|
|
|
|
|
double* Zlo, double* ErEffe, |
|
|
|
|
|
double* ErEffo); |
|
|
|
|
|
|
|
|
|
|
|
static void analyseDispersion (double W, double h, double s, |
|
|
|
|
|
double t, double er, double Zle, |
|
|
|
|
|
double Zlo, double ErEffe, |
|
|
|
|
|
double ErEffo, double frequency, |
|
|
|
|
|
int DModel, double *ZleFreq, |
|
|
|
|
|
double *ZloFreq, |
|
|
|
|
|
double *ErEffeFreq, |
|
|
|
|
|
double *ErEffoFreq); |
|
|
|
|
|
|
|
|
|
|
|
static void calcPropagation (double W, double s, |
|
|
static void calcPropagation (double W, double s, |
|
|
double er, double h, double t, double tand, double rho, double D, |
|
|
double er, double h, double t, double tand, double rho, double D, |
|
|
int SModel, int DModel, double frequency) |
|
|
int SModel, int DModel, double frequency) |
|
|
@ -82,11 +67,11 @@ static void calcPropagation (double W, double s, |
|
|
|
|
|
|
|
|
// quasi-static analysis |
|
|
// quasi-static analysis |
|
|
double Zle, ErEffe, Zlo, ErEffo; |
|
|
double Zle, ErEffe, Zlo, ErEffo; |
|
|
analyseQuasiStatic (W, h, s, t, er, SModel, &Zle, &Zlo, &ErEffe, &ErEffo); |
|
|
|
|
|
|
|
|
cpmslineAnalyseQuasiStatic (W, h, s, t, er, SModel, &Zle, &Zlo, &ErEffe, &ErEffo); |
|
|
|
|
|
|
|
|
// analyse dispersion of Zl and Er |
|
|
// analyse dispersion of Zl and Er |
|
|
double ZleFreq, ErEffeFreq, ZloFreq, ErEffoFreq; |
|
|
double ZleFreq, ErEffeFreq, ZloFreq, ErEffoFreq; |
|
|
analyseDispersion (W, h, s, t, er, Zle, Zlo, ErEffe, ErEffo, frequency, DModel, |
|
|
|
|
|
|
|
|
cpmslineAnalyseDispersion (W, h, s, t, er, Zle, Zlo, ErEffe, ErEffo, frequency, DModel, |
|
|
&ZleFreq, &ZloFreq, &ErEffeFreq, &ErEffoFreq); |
|
|
&ZleFreq, &ZloFreq, &ErEffeFreq, &ErEffoFreq); |
|
|
|
|
|
|
|
|
// analyse losses of line |
|
|
// analyse losses of line |
|
|
@ -110,288 +95,6 @@ static void calcPropagation (double W, double s, |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* The function calculates the quasi-static dielectric constants and |
|
|
|
|
|
characteristic impedances for the even and odd mode based upon the |
|
|
|
|
|
given line and substrate properties for parallel coupled microstrip |
|
|
|
|
|
lines. */ |
|
|
|
|
|
static void analyseQuasiStatic (double W, double h, double s, |
|
|
|
|
|
double t, double er, |
|
|
|
|
|
int SModel, double* Zle, |
|
|
|
|
|
double* Zlo, double* ErEffe, |
|
|
|
|
|
double* ErEffo) { |
|
|
|
|
|
// initialize default return values |
|
|
|
|
|
*ErEffe = er; *ErEffo = er; |
|
|
|
|
|
*Zlo = 42.2; *Zle = 55.7; |
|
|
|
|
|
|
|
|
|
|
|
// normalized width and gap |
|
|
|
|
|
double u = W / h; |
|
|
|
|
|
double g = s / h; |
|
|
|
|
|
|
|
|
|
|
|
// HAMMERSTAD and JENSEN |
|
|
|
|
|
if (SModel == HAMMERSTAD) { |
|
|
|
|
|
double Zl1, Fe, Fo, a, b, fo, Mu, Alpha, Beta, ErEff; |
|
|
|
|
|
double Pe, Po, r, fo1, q, p, n, Psi, Phi, m, Theta; |
|
|
|
|
|
|
|
|
|
|
|
// modifying equations for even mode |
|
|
|
|
|
m = 0.2175 + pow (4.113 + pow (20.36 / g, 6.), -0.251) + |
|
|
|
|
|
log (pow (g, 10.) / (1 + pow (g / 13.8, 10.))) / 323; |
|
|
|
|
|
Alpha = 0.5 * exp (-g); |
|
|
|
|
|
Psi = 1 + g / 1.45 + pow (g, 2.09) / 3.95; |
|
|
|
|
|
Phi = 0.8645 * pow (u, 0.172); |
|
|
|
|
|
Pe = Phi / (Psi * (Alpha * pow (u, m) + (1 - Alpha) * pow (u, -m))); |
|
|
|
|
|
// TODO: is this ... Psi * (Alpha ... or ... Psi / (Alpha ... ? |
|
|
|
|
|
|
|
|
|
|
|
// modifying equations for odd mode |
|
|
|
|
|
n = (1 / 17.7 + exp (-6.424 - 0.76 * log (g) - pow (g / 0.23, 5.))) * |
|
|
|
|
|
log ((10 + 68.3 * sqr (g)) / (1 + 32.5 * pow (g, 3.093))); |
|
|
|
|
|
Beta = 0.2306 + log (pow (g, 10.) / (1 + pow (g / 3.73, 10.))) / 301.8 + |
|
|
|
|
|
log (1 + 0.646 * pow (g, 1.175)) / 5.3; |
|
|
|
|
|
Theta = 1.729 + 1.175 * log (1 + 0.627 / (g + 0.327 * pow (g, 2.17))); |
|
|
|
|
|
Po = Pe - Theta / Psi * exp (Beta * pow (u, -n) * log (u)); |
|
|
|
|
|
|
|
|
|
|
|
// further modifying equations |
|
|
|
|
|
r = 1 + 0.15 * (1 - exp (1 - sqr (er - 1) / 8.2) / (1 + pow (g, -6.))); |
|
|
|
|
|
fo1 = 1 - exp (-0.179 * pow (g, 0.15) - |
|
|
|
|
|
0.328 * pow (g, r) / log (M_E + pow (g / 7, 2.8))); |
|
|
|
|
|
q = exp (-1.366 - g); |
|
|
|
|
|
p = exp (-0.745 * pow (g, 0.295)) / cosh (pow (g, 0.68)); |
|
|
|
|
|
fo = fo1 * exp (p * log (u) + q * sin (M_PI * log10 (u))); |
|
|
|
|
|
|
|
|
|
|
|
Mu = g * exp (-g) + u * (20 + sqr (g)) / (10 + sqr (g)); |
|
|
|
|
|
Hammerstad_ab (Mu, er, &a, &b); |
|
|
|
|
|
Fe = pow (1 + 10 / Mu, -a * b); |
|
|
|
|
|
Hammerstad_ab (u, er, &a, &b); |
|
|
|
|
|
Fo = fo * pow (1 + 10 / u, -a * b); |
|
|
|
|
|
|
|
|
|
|
|
// finally compute effective dielectric constants and impedances |
|
|
|
|
|
*ErEffe = (er + 1) / 2 + (er - 1) / 2 * Fe; |
|
|
|
|
|
*ErEffo = (er + 1) / 2 + (er - 1) / 2 * Fo; |
|
|
|
|
|
|
|
|
|
|
|
Hammerstad_er (u, er, a, b, &ErEff); // single microstrip |
|
|
|
|
|
|
|
|
|
|
|
// first variant |
|
|
|
|
|
Zl1 = Z0 / (u + 1.98 * pow (u, 0.172)); |
|
|
|
|
|
Zl1 /= sqrt (ErEff); |
|
|
|
|
|
|
|
|
|
|
|
// second variant |
|
|
|
|
|
Hammerstad_zl (u, &Zl1); |
|
|
|
|
|
Zl1 /= sqrt (ErEff); |
|
|
|
|
|
|
|
|
|
|
|
*Zle = Zl1 / (1 - Zl1 * Pe / Z0); |
|
|
|
|
|
*Zlo = Zl1 / (1 - Zl1 * Po / Z0); |
|
|
|
|
|
} |
|
|
|
|
|
// KIRSCHNING and JANSEN |
|
|
|
|
|
else if (SModel == KIRSCHING) { |
|
|
|
|
|
double a, b, ae, be, ao, bo, v, co, d, ErEff, Zl1; |
|
|
|
|
|
double q1, q2, q3, q4, q5, q6, q7, q8, q9, q10; |
|
|
|
|
|
|
|
|
|
|
|
// consider effect of finite strip thickness (JANSEN only) |
|
|
|
|
|
double ue = u; |
|
|
|
|
|
double uo = u; |
|
|
|
|
|
if (t != 0 && s > 10 * (2 * t)) { |
|
|
|
|
|
double dW = 0; |
|
|
|
|
|
// SCHNEIDER, referred by JANSEN |
|
|
|
|
|
if (u >= M_1_PI / 2 && M_1_PI / 2 > 2 * t / h) |
|
|
|
|
|
dW = t * (1 + log (2 * h / t)) / M_PI; |
|
|
|
|
|
else if (W > 2 * t) |
|
|
|
|
|
dW = t * (1 + log (4 * M_PI * W / t)) / M_PI; |
|
|
|
|
|
// JANSEN |
|
|
|
|
|
double dt = 2 * t * h / s / er; |
|
|
|
|
|
double We = W + dW * (1 - 0.5 * exp (-0.69 * dW / dt)); |
|
|
|
|
|
double Wo = We + dt; |
|
|
|
|
|
ue = We / h; |
|
|
|
|
|
uo = Wo / h; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// even relative dielectric constant |
|
|
|
|
|
v = ue * (20 + sqr (g)) / (10 + sqr (g)) + g * exp (-g); |
|
|
|
|
|
Hammerstad_ab (v, er, &ae, &be); |
|
|
|
|
|
Hammerstad_er (v, er, ae, be, ErEffe); |
|
|
|
|
|
|
|
|
|
|
|
// odd relative dielectric constant |
|
|
|
|
|
Hammerstad_ab (uo, er, &a, &b); |
|
|
|
|
|
Hammerstad_er (uo, er, a, b, &ErEff); |
|
|
|
|
|
d = 0.593 + 0.694 * exp (-0.562 * uo); |
|
|
|
|
|
bo = 0.747 * er / (0.15 + er); |
|
|
|
|
|
co = bo - (bo - 0.207) * exp (-0.414 * uo); |
|
|
|
|
|
ao = 0.7287 * (ErEff - (er + 1) / 2) * (1 - exp (-0.179 * uo)); |
|
|
|
|
|
*ErEffo = ((er + 1) / 2 + ao - ErEff) * exp (-co * pow (g, d)) + ErEff; |
|
|
|
|
|
|
|
|
|
|
|
// characteristic impedance of single line |
|
|
|
|
|
Hammerstad_zl (u, &Zl1); |
|
|
|
|
|
Zl1 /= sqrt (ErEff); |
|
|
|
|
|
|
|
|
|
|
|
// even characteristic impedance |
|
|
|
|
|
q1 = 0.8695 * pow (ue, 0.194); |
|
|
|
|
|
q2 = 1 + 0.7519 * g + 0.189 * pow (g, 2.31); |
|
|
|
|
|
q3 = 0.1975 + pow (16.6 + pow (8.4 / g, 6.), -0.387) + |
|
|
|
|
|
log (pow (g, 10.) / (1 + pow (g / 3.4, 10.))) / 241; |
|
|
|
|
|
q4 = q1 / q2 * 2 / |
|
|
|
|
|
(exp (-g) * pow (ue, q3) + (2 - exp (-g)) * pow (ue, -q3)); |
|
|
|
|
|
*Zle = sqrt (ErEff / *ErEffe) * Zl1 / (1 - Zl1 * sqrt (ErEff) * q4 / Z0); |
|
|
|
|
|
|
|
|
|
|
|
// odd characteristic impedance |
|
|
|
|
|
q5 = 1.794 + 1.14 * log (1 + 0.638 / (g + 0.517 * pow (g, 2.43))); |
|
|
|
|
|
q6 = 0.2305 + log (pow (g, 10.) / (1 + pow (g / 5.8, 10.))) / 281.3 + |
|
|
|
|
|
log (1 + 0.598 * pow (g, 1.154)) / 5.1; |
|
|
|
|
|
q7 = (10 + 190 * sqr (g)) / (1 + 82.3 * cubic (g)); |
|
|
|
|
|
q8 = exp (-6.5 - 0.95 * log (g) - pow (g / 0.15, 5.)); |
|
|
|
|
|
q9 = log (q7) * (q8 + 1 / 16.5); |
|
|
|
|
|
q10 = (q2 * q4 - q5 * exp (log (uo) * q6 * pow (uo, -q9))) / q2; |
|
|
|
|
|
*Zlo = sqrt (ErEff / *ErEffo) * Zl1 / (1 - Zl1 * sqrt (ErEff) * q10 / Z0); |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/* The function computes the dispersion effects on the dielectric |
|
|
|
|
|
constants and characteristic impedances for the even and odd mode |
|
|
|
|
|
of parallel coupled microstrip lines. */ |
|
|
|
|
|
static void analyseDispersion (double W, double h, double s, |
|
|
|
|
|
double t, double er, double Zle, |
|
|
|
|
|
double Zlo, double ErEffe, |
|
|
|
|
|
double ErEffo, double frequency, |
|
|
|
|
|
int DModel, double *ZleFreq, |
|
|
|
|
|
double *ZloFreq, |
|
|
|
|
|
double *ErEffeFreq, |
|
|
|
|
|
double *ErEffoFreq) { |
|
|
|
|
|
|
|
|
|
|
|
// initialize default return values |
|
|
|
|
|
*ZleFreq = Zle; |
|
|
|
|
|
*ErEffeFreq = ErEffe; |
|
|
|
|
|
*ZloFreq = Zlo; |
|
|
|
|
|
*ErEffoFreq = ErEffo; |
|
|
|
|
|
|
|
|
|
|
|
// normalized width and gap |
|
|
|
|
|
double u = W / h; |
|
|
|
|
|
double g = s / h; |
|
|
|
|
|
double ue, uo; |
|
|
|
|
|
double B, dW, dt; |
|
|
|
|
|
|
|
|
|
|
|
// compute u_odd, u_even |
|
|
|
|
|
if (t > 0.0) { |
|
|
|
|
|
if (u < 0.1592) { |
|
|
|
|
|
B = 2 * M_PI * W; |
|
|
|
|
|
} else { |
|
|
|
|
|
B = h; |
|
|
|
|
|
} |
|
|
|
|
|
dW = t * (1.0 + log(2 * B / t)) / M_PI; |
|
|
|
|
|
dt = t / (er * g); |
|
|
|
|
|
ue = (W + dW * (1.0 - 0.5 * exp( -0.69 * dW / dt ))) / h; |
|
|
|
|
|
uo = ue + dt / h; |
|
|
|
|
|
} else { |
|
|
|
|
|
ue = u; |
|
|
|
|
|
uo = u; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// GETSINGER |
|
|
|
|
|
if (DModel == GETSINGER) { |
|
|
|
|
|
// even mode dispersion |
|
|
|
|
|
Getsinger_disp (h, er, ErEffe, Zle / 2, |
|
|
|
|
|
frequency, ErEffeFreq, ZleFreq); |
|
|
|
|
|
*ZleFreq *= 2; |
|
|
|
|
|
// odd mode dispersion |
|
|
|
|
|
Getsinger_disp (h, er, ErEffo, Zlo * 2, |
|
|
|
|
|
frequency, ErEffoFreq, ZloFreq); |
|
|
|
|
|
*ZloFreq /= 2; |
|
|
|
|
|
} |
|
|
|
|
|
// KIRSCHNING and JANSEN |
|
|
|
|
|
else if (DModel == DISP_KIRSCHING) { |
|
|
|
|
|
double p1, p2, p3, p4, p5, p6, p7, Fe; |
|
|
|
|
|
double fn = frequency * h * 1e-6; |
|
|
|
|
|
|
|
|
|
|
|
// even relative dielectric constant dispersion |
|
|
|
|
|
p1 = 0.27488 * (0.6315 + 0.525 / pow (1 + 0.0157 * fn, 20.)) * ue - |
|
|
|
|
|
0.065683 * exp (-8.7513 * ue); |
|
|
|
|
|
p2 = 0.33622 * (1 - exp (-0.03442 * er)); |
|
|
|
|
|
p3 = 0.0363 * exp (-4.6 * ue) * (1 - exp (- pow (fn / 38.7, 4.97))); |
|
|
|
|
|
p4 = 1 + 2.751 * (1 - exp (- pow (er / 15.916, 8.))); |
|
|
|
|
|
p5 = 0.334 * exp (-3.3 * cubic (er / 15)) + 0.746; |
|
|
|
|
|
p6 = p5 * exp (- pow (fn / 18, 0.368)); |
|
|
|
|
|
p7 = 1 + 4.069 * p6 * pow (g, 0.479) * |
|
|
|
|
|
exp (-1.347 * pow (g, 0.595) - 0.17 * pow (g, 2.5)); |
|
|
|
|
|
Fe = p1 * p2 * pow ((p3 * p4 + 0.1844 * p7) * fn, 1.5763); |
|
|
|
|
|
*ErEffeFreq = er - (er - ErEffe) / (1 + Fe); |
|
|
|
|
|
|
|
|
|
|
|
// odd relative dielectric constant dispersion |
|
|
|
|
|
double p8, p9, p10, p11, p12, p13, p14, p15, Fo; |
|
|
|
|
|
p1 = 0.27488 * (0.6315 + 0.525 / pow (1 + 0.0157 * fn, 20.)) * uo - |
|
|
|
|
|
0.065683 * exp (-8.7513 * uo); |
|
|
|
|
|
p3 = 0.0363 * exp (-4.6 * uo) * (1 - exp (- pow (fn / 38.7, 4.97))); |
|
|
|
|
|
p8 = 0.7168 * (1 + 1.076 / (1 + 0.0576 * (er - 1))); |
|
|
|
|
|
p9 = p8 - 0.7913 * (1 - exp (- pow (fn / 20, 1.424))) * |
|
|
|
|
|
atan (2.481 * pow (er / 8, 0.946)); |
|
|
|
|
|
p10 = 0.242 * pow (er - 1, 0.55); |
|
|
|
|
|
p11 = 0.6366 * (exp (-0.3401 * fn) - 1) * |
|
|
|
|
|
atan (1.263 * pow (uo / 3, 1.629)); |
|
|
|
|
|
p12 = p9 + (1 - p9) / (1 + 1.183 * pow (uo, 1.376)); |
|
|
|
|
|
p13 = 1.695 * p10 / (0.414 + 1.605 * p10); |
|
|
|
|
|
p14 = 0.8928 + 0.1072 * (1 - exp (-0.42 * pow (fn / 20, 3.215))); |
|
|
|
|
|
p15 = fabs (1 - 0.8928 * (1 + p11) * |
|
|
|
|
|
exp (-p13 * pow (g, 1.092)) * p12 / p14); |
|
|
|
|
|
Fo = p1 * p2 * pow ((p3 * p4 + 0.1844) * fn * p15, 1.5763); |
|
|
|
|
|
*ErEffoFreq = er - (er - ErEffo) / (1 + Fo); |
|
|
|
|
|
|
|
|
|
|
|
// dispersion of even characteristic impedance |
|
|
|
|
|
double t, q11, q12, q13, q14, q15, q16, q17, q18, q19, q20, q21; |
|
|
|
|
|
q11 = 0.893 * (1 - 0.3 / (1 + 0.7 * (er - 1))); |
|
|
|
|
|
t = pow (fn / 20, 4.91); |
|
|
|
|
|
q12 = 2.121 * t / (1 + q11 * t) * exp (-2.87 * g) * pow (g, 0.902); |
|
|
|
|
|
q13 = 1 + 0.038 * pow (er / 8, 5.1); |
|
|
|
|
|
t = quadr (er / 15); |
|
|
|
|
|
q14 = 1 + 1.203 * t / (1 + t); |
|
|
|
|
|
q15 = 1.887 * exp (-1.5 * pow (g, 0.84)) * pow (g, q14) / |
|
|
|
|
|
(1 + 0.41 * pow (fn / 15, 3.) * |
|
|
|
|
|
pow (u, 2 / q13) / (0.125 + pow (u, 1.626 / q13))); |
|
|
|
|
|
q16 = q15 * (1 + 9 / (1 + 0.403 * sqr (er - 1))); |
|
|
|
|
|
q17 = 0.394 * (1 - exp (-1.47 * pow (u / 7, 0.672))) * |
|
|
|
|
|
(1 - exp (-4.25 * pow (fn / 20, 1.87))); |
|
|
|
|
|
q18 = 0.61 * (1 - exp (-2.31 * pow (u / 8, 1.593))) / |
|
|
|
|
|
(1 + 6.544 * pow (g, 4.17)); |
|
|
|
|
|
q19 = 0.21 * quadr (g) / (1 + 0.18 * pow (g, 4.9)) / (1 + 0.1 * sqr (u)) / |
|
|
|
|
|
(1 + pow (fn / 24, 3.)); |
|
|
|
|
|
q20 = q19 * (0.09 + 1 / (1 + 0.1 * pow (er - 1, 2.7))); |
|
|
|
|
|
t = pow (u, 2.5); |
|
|
|
|
|
q21 = fabs (1 - 42.54 * pow (g, 0.133) * exp (-0.812 * g) * t / |
|
|
|
|
|
(1 + 0.033 * t)); |
|
|
|
|
|
|
|
|
|
|
|
double re, qe, pe, de, Ce, q0, ZlFreq, ErEffFreq; |
|
|
|
|
|
Kirschning_er (u, fn, er, ErEffe, &ErEffFreq); |
|
|
|
|
|
Kirschning_zl (u, fn, er, ErEffe, ErEffFreq, Zle, &q0, &ZlFreq); |
|
|
|
|
|
re = pow (fn / 28.843, 12.); |
|
|
|
|
|
qe = 0.016 + pow (0.0514 * er * q21, 4.524); |
|
|
|
|
|
pe = 4.766 * exp (-3.228 * pow (u, 0.641)); |
|
|
|
|
|
t = pow (er - 1, 6.); |
|
|
|
|
|
de = 5.086 * qe * re / (0.3838 + 0.386 * qe) * |
|
|
|
|
|
exp (-22.2 * pow (u, 1.92)) / (1 + 1.2992 * re) * t / (1 + 10 * t); |
|
|
|
|
|
Ce = 1 + 1.275 * (1 - exp (-0.004625 * pe * pow (er, 1.674) * |
|
|
|
|
|
pow (fn / 18.365, 2.745))) - q12 + q16 - q17 + q18 + q20; |
|
|
|
|
|
*ZleFreq = Zle * pow ((0.9408 * pow (ErEffFreq, Ce) - 0.9603) / |
|
|
|
|
|
((0.9408 - de) * pow (ErEffe, Ce) - 0.9603), q0); |
|
|
|
|
|
|
|
|
|
|
|
// dispersion of odd characteristic impedance |
|
|
|
|
|
double q22, q23, q24, q25, q26, q27, q28, q29; |
|
|
|
|
|
Kirschning_er (u, fn, er, ErEffo, &ErEffFreq); |
|
|
|
|
|
Kirschning_zl (u, fn, er, ErEffo, ErEffFreq, Zlo, &q0, &ZlFreq); |
|
|
|
|
|
q29 = 15.16 / (1 + 0.196 * sqr (er - 1)); |
|
|
|
|
|
t = sqr (er - 1); |
|
|
|
|
|
q25 = 0.3 * sqr (fn) / (10 + sqr (fn)) * (1 + 2.333 * t / (5 + t)); |
|
|
|
|
|
t = pow ((er - 1) / 13, 12.); |
|
|
|
|
|
q26 = 30 - 22.2 * t / (1 + 3 * t) - q29; |
|
|
|
|
|
t = pow (er - 1, 1.5); |
|
|
|
|
|
q27 = 0.4 * pow (g, 0.84) * (1 + 2.5 * t / (5 + t)); |
|
|
|
|
|
t = pow (er - 1, 3.); |
|
|
|
|
|
q28 = 0.149 * t / (94.5 + 0.038 * t); |
|
|
|
|
|
q22 = 0.925 * pow (fn / q26, 1.536) / (1 + 0.3 * pow (fn / 30, 1.536)); |
|
|
|
|
|
q23 = 1 + 0.005 * fn * q27 / (1 + 0.812 * pow (fn / 15, 1.9)) / |
|
|
|
|
|
(1 + 0.025 * sqr (u)); |
|
|
|
|
|
t = pow (u, 0.894); |
|
|
|
|
|
q24 = 2.506 * q28 * t / (3.575 + t) * |
|
|
|
|
|
pow ((1 + 1.3 * u) * fn / 99.25, 4.29); |
|
|
|
|
|
*ZloFreq = ZlFreq + (Zlo * pow (*ErEffoFreq / ErEffo, q22) - ZlFreq * q23) / |
|
|
|
|
|
(1 + q24 + pow (0.46 * g, 2.2) * q25); |
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
void cm_cpmline (ARGS) |
|
|
void cm_cpmline (ARGS) |
|
|
{ |
|
|
{ |
|
|
Complex_t z11, z12, z13, z14; |
|
|
Complex_t z11, z12, z13, z14; |
|
|
@ -497,7 +200,7 @@ void cm_cpmline (ARGS) |
|
|
} |
|
|
} |
|
|
else if(ANALYSIS == TRANSIENT) { |
|
|
else if(ANALYSIS == TRANSIENT) { |
|
|
calcPropagation(W,s,er,h,t,tand,rho,D,SModel,DModel,0); |
|
|
calcPropagation(W,s,er,h,t,tand,rho,D,SModel,DModel,0); |
|
|
double t = TIME; |
|
|
|
|
|
|
|
|
double time = TIME; |
|
|
double Vp[PORT_NUM]; |
|
|
double Vp[PORT_NUM]; |
|
|
double Ip[PORT_NUM]; |
|
|
double Ip[PORT_NUM]; |
|
|
Vp[0] = INPUT(p1s); |
|
|
Vp[0] = INPUT(p1s); |
|
|
@ -518,10 +221,10 @@ void cm_cpmline (ARGS) |
|
|
if (TIME < last_time) { |
|
|
if (TIME < last_time) { |
|
|
delete_cpline_last_state((cpline_state_t **)sim_points); |
|
|
delete_cpline_last_state((cpline_state_t **)sim_points); |
|
|
} |
|
|
} |
|
|
append_cpline_state((cpline_state_t **)sim_points, t, Vp, Ip, 1.2*delay); |
|
|
|
|
|
|
|
|
append_cpline_state((cpline_state_t **)sim_points, time, Vp, Ip, 1.2*delay); |
|
|
} |
|
|
} |
|
|
if (t > delay && TModel == TRAN_FULL) { |
|
|
|
|
|
cpline_state_t *pp = find_cpline_state(*(cpline_state_t **)sim_points, t - delay); |
|
|
|
|
|
|
|
|
if (time > delay && TModel == TRAN_FULL) { |
|
|
|
|
|
cpline_state_t *pp = find_cpline_state(*(cpline_state_t **)sim_points, time - delay); |
|
|
if (pp != NULL) { |
|
|
if (pp != NULL) { |
|
|
|
|
|
|
|
|
double J1e = 0.5*(Ip[3] + Ip[0]); |
|
|
double J1e = 0.5*(Ip[3] + Ip[0]); |
|
|
|