52 double microstrip::Z0_homogeneous(
double u)
55 f = 6.0 + (2.0 *
M_PI - 6.0) *
exp(-
pow(30.666 / u, 0.7528));
56 Z0 = (
ZF0 / (2.0 *
M_PI)) *
log(f / u +
sqrt(1.0 + 4.0 / (u * u)));
65 double microstrip::delta_Z0_cover(
double u,
double h2h)
70 P = 270.0 * (1.0 -
tanh(1.192 + 0.706 *
sqrt(h2hp1) - 1.389 / h2hp1));
71 Q = 1.0109 -
atanh((0.012 * u + 0.177 * u * u - 0.027 * u * u * u) / (h2hp1 * h2hp1));
80 double microstrip::filling_factor(
double u,
double e_r)
87 a = 1.0 +
log((u4 + u2 / 2704) / (u4 + 0.432)) / 49.0 +
log(1.0 + u3 / 5929.741) / 18.7;
88 b = 0.564 *
pow((e_r - 0.9) / (e_r + 3.0), 0.053);
89 q_inf =
pow(1.0 + 10.0 / u, -a * b);
97 double microstrip::delta_q_cover(
double h2h)
100 q_c =
tanh(1.043 + 0.121 * h2h - 1.164 / h2h);
108 double microstrip::delta_q_thickness(
double u,
double t_h)
120 double microstrip::e_r_effective(
double e_r,
double q)
123 e_r_eff = 0.5 * (e_r + 1.0) + 0.5 * q * (e_r - 1.0);
131 double microstrip::delta_u_thickness(
double u,
double t_h,
double e_r)
138 delta_u = 0.5 * delta_u * (1.0 + 1.0 /
cosh(
sqrt(e_r - 1.0)));
149 void microstrip::microstrip_Z0()
151 double e_r, h2, h2h, u, t_h;
153 double delta_u_1, delta_u_r, q_inf, q_c, q_t, e_r_eff, e_r_eff_t, q;
162 delta_u_1 = delta_u_thickness(u, t_h, 1.0);
164 Z0_h_1 = Z0_homogeneous(u + delta_u_1);
166 delta_u_r = delta_u_thickness(u, t_h, e_r);
169 Z0_h_r = Z0_homogeneous(u);
172 q_inf = filling_factor(u, e_r);
174 q_c = delta_q_cover(h2h);
176 q_t = delta_q_thickness(u, t_h);
178 q = (q_inf - q_t) * q_c;
181 e_r_eff_t = e_r_effective(e_r, q);
184 e_r_eff = e_r_eff_t *
pow(Z0_h_1 / Z0_h_r, 2.0);
188 Z0 = Z0_h_r /
sqrt(e_r_eff_t);
200 double microstrip::e_r_dispersion(
double u,
double e_r,
double f_n)
202 double P_1, P_2, P_3, P_4, P;
204 P_1 = 0.27488 + u * (0.6315 + 0.525 /
pow(1.0 + 0.0157 * f_n, 20.0)) - 0.065683 *
exp(-8.7513 * u);
205 P_2 = 0.33622 * (1.0 -
exp(-0.03442 * e_r));
206 P_3 = 0.0363 *
exp(-4.6 * u) * (1.0 -
exp(-
pow(f_n / 38.7, 4.97)));
207 P_4 = 1.0 + 2.751 * (1.0 -
exp(-
pow(e_r / 15.916, 8.0)));
209 P = P_1 * P_2 *
pow((P_3 * P_4 + 0.1844) * f_n, 1.5763);
219 double microstrip::Z0_dispersion(
double u,
double e_r,
double e_r_eff_0,
double e_r_eff_f,
double f_n)
221 double R_1, R_2, R_3, R_4, R_5, R_6, R_7, R_8, R_9, R_10, R_11, R_12, R_13, R_14, R_15, R_16, R_17,
D, tmpf;
223 R_1 = 0.03891 *
pow(e_r, 1.4);
224 R_2 = 0.267 *
pow(u, 7.0);
225 R_3 = 4.766 *
exp(-3.228 *
pow(u, 0.641));
226 R_4 = 0.016 +
pow(0.0514 * e_r, 4.524);
227 R_5 =
pow(f_n / 28.843, 12.0);
228 R_6 = 22.2 *
pow(u, 1.92);
229 R_7 = 1.206 - 0.3144 *
exp(-R_1) * (1.0 -
exp(-R_2));
230 R_8 = 1.0 + 1.275 * (1.0 -
exp(-0.004625 * R_3 *
pow(e_r, 1.674) *
pow(f_n / 18.365, 2.745)));
231 tmpf =
pow(e_r - 1.0, 6.0);
232 R_9 = 5.086 * R_4 * (R_5 / (0.3838 + 0.386 * R_4)) * (
exp(-R_6) / (1.0 + 1.2992 * R_5)) * (tmpf / (1.0 + 10.0 * tmpf));
233 R_10 = 0.00044 *
pow(e_r, 2.136) + 0.0184;
234 tmpf =
pow(f_n / 19.47, 6.0);
235 R_11 = tmpf / (1.0 + 0.0962 * tmpf);
236 R_12 = 1.0 / (1.0 + 0.00245 * u * u);
237 R_13 = 0.9408 *
pow(e_r_eff_f, R_8) - 0.9603;
238 R_14 = (0.9408 - R_9) *
pow(e_r_eff_0, R_8) - 0.9603;
239 R_15 = 0.707 * R_10 *
pow(f_n / 12.3, 1.097);
240 R_16 = 1.0 + 0.0503 * e_r * e_r * R_11 * (1.0 -
exp(-
pow(u / 15.0, 6.0)));
241 R_17 = R_7 * (1.0 - 1.1241 * (R_12 / R_16) *
exp(-0.026 *
pow(f_n, 1.15656) - R_15));
243 D =
pow(R_13 / R_14, R_17);
253 void microstrip::dispersion()
255 double e_r, e_r_eff_0;
256 double u, f_n, P, e_r_eff_f,
D, Z0_f;
259 e_r_eff_0 = er_eff_0;
265 P = e_r_dispersion(u, e_r, f_n);
267 e_r_eff_f = e_r - (e_r - e_r_eff_0) / (1.0 + P);
269 D = Z0_dispersion(u, e_r, e_r_eff_0, e_r_eff_f, f_n);
281 double microstrip::conductor_losses()
283 double e_r_eff_0, delta;
284 double K, R_s, Q_c, alpha_c;
286 e_r_eff_0 = er_eff_0;
293 R_s = 1.0 / (
sigma * delta);
296 R_s *= 1.0 + ((2.0 /
M_PI) *
atan(1.40 *
pow((rough / delta), 2.0)));
298 Q_c = (
M_PI * Z0_h_1 * w *
f) / (R_s *
C0 * K);
299 alpha_c = (20.0 *
M_PI /
log(10.0)) * f *
sqrt(e_r_eff_0) / (
C0 * Q_c);
312 double microstrip::dielectric_losses()
314 double e_r, e_r_eff_0;
318 e_r_eff_0 = er_eff_0;
320 alpha_d = (20.0 *
M_PI /
log(10.0)) * (f /
C0) * (e_r /
sqrt(e_r_eff_0)) * ((e_r_eff_0 - 1.0) / (e_r - 1.0)) * tand;
329 void microstrip::attenuation()
333 atten_cond = conductor_losses() * l;
334 atten_dielectric = dielectric_losses() * l;
341 void microstrip::mur_eff_ms()
345 mureff = (2.0 *
mur) / ((1.0 +
mur) + ((1.0 -
mur) *
pow((1.0 + (10.0 * h / w)), -0.5)));
354 double microstrip::synth_width()
363 a = ((Z0 /
ZF0 / 2 /
M_PI) *
sqrt((e_r + 1) / 2.)) + ((e_r - 1) / (e_r + 1) * (0.23 + (0.11 / e_r)));
367 w_h = 8 *
exp(a) / (
exp(2. * a) - 2);
369 w_h = (2. /
M_PI) * (b - 1. -
log((2 * b) - 1.) + ((e_r - 1) / (2 * e_r)) * (
log(b - 1.) + 0.39 - 0.61 / e_r));
385 void microstrip::line_angle()
393 v =
C0 /
sqrt(e_r_eff * mur_eff);
397 ang_l = 2.0 *
M_PI * l / lambda_g;
401 void microstrip::calc()
420 void microstrip::get_microstrip_sub()
436 void microstrip::get_microstrip_comp()
445 void microstrip::get_microstrip_elec()
456 void microstrip::get_microstrip_phys()
463 void microstrip::show_results()
482 get_microstrip_sub();
485 get_microstrip_comp();
488 get_microstrip_phys();
498 #define MAX_ERROR 0.000001
505 double Z0_dest, Z0_current, Z0_result, increment, slope,
error;
509 get_microstrip_sub();
512 get_microstrip_comp();
515 get_microstrip_elec();
519 get_microstrip_phys();
535 error = fabs(Z0_dest - Z0_current);
539 increment = (w / 100.0);
548 slope = (Z0_result - Z0_current) / increment;
550 w += (Z0_dest - Z0_current) / slope - increment;
556 error = fabs(Z0_dest - Z0_current);
566 l =
C0 / f /
sqrt(er_eff * mur_eff) * ang_l / 2.0 /
M_PI;