94    const bool Z0_invalid = !std::isfinite( 
Z0 ) || 
Z0 < 0;
 
   95    const bool ANG_L_invalid = !std::isfinite( 
ANG_L ) || 
ANG_L < 0;
 
   96    const bool L_invalid = !std::isfinite( 
L ) || 
L < 0;
 
   97    const bool W_invalid = !std::isfinite( W ) || W <= 0;
 
 
  119    const bool Z0_invalid = !std::isfinite( 
Z0 ) || 
Z0 < 0;
 
  120    const bool ANG_L_invalid = !std::isfinite( 
ANG_L ) || 
ANG_L < 0;
 
  121    const bool L_invalid = !std::isfinite( 
L ) || 
L < 0;
 
  122    const bool W_invalid = !std::isfinite( W ) || W <= 0;
 
 
  135                     + ( ( e_r - 1 ) / ( e_r + 1 ) * ( 0.23 + ( 0.11 / e_r ) ) );
 
  142        w_h = 8 * exp( a ) / ( exp( 2. * a ) - 2 );
 
  147              * ( b - 1. - log( ( 2 * b ) - 1. )
 
  148                  + ( ( e_r - 1 ) / ( 2 * e_r ) ) * ( log( b - 1. ) + 0.39 - 0.61 / e_r ) );
 
 
  164    const double R_1 = 0.03891 * pow( e_r, 1.4 );
 
  165    const double R_2 = 0.267 * pow( u, 7.0 );
 
  166    const double R_3 = 4.766 * exp( -3.228 * pow( u, 0.641 ) );
 
  167    const double R_4 = 0.016 + pow( 0.0514 * e_r, 4.524 );
 
  168    const double R_5 = pow( f_n / 28.843, 12.0 );
 
  169    const double R_6 = 22.2 * pow( u, 1.92 );
 
  170    const double R_7 = 1.206 - 0.3144 * exp( -R_1 ) * ( 1.0 - exp( -R_2 ) );
 
  171    const double 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 ) ) );
 
  172    double       tmpf = pow( e_r - 1.0, 6.0 );
 
  173    const double R_9 = 5.086 * R_4 * ( R_5 / ( 0.3838 + 0.386 * R_4 ) ) * ( exp( -R_6 ) / ( 1.0 + 1.2992 * R_5 ) )
 
  174                       * ( tmpf / ( 1.0 + 10.0 * tmpf ) );
 
  175    const double R_10 = 0.00044 * pow( e_r, 2.136 ) + 0.0184;
 
  176    tmpf = pow( f_n / 19.47, 6.0 );
 
  177    const double R_11 = tmpf / ( 1.0 + 0.0962 * tmpf );
 
  178    const double R_12 = 1.0 / ( 1.0 + 0.00245 * u * u );
 
  179    const double R_13 = 0.9408 * pow( e_r_eff_f, R_8 ) - 0.9603;
 
  180    const double R_14 = ( 0.9408 - R_9 ) * pow( e_r_eff_0, R_8 ) - 0.9603;
 
  181    const double R_15 = 0.707 * R_10 * pow( f_n / 12.3, 1.097 );
 
  182    const double R_16 = 1.0 + 0.0503 * e_r * e_r * R_11 * ( 1.0 - exp( -pow( u / 15.0, 6.0 ) ) );
 
  183    const double R_17 = R_7 * ( 1.0 - 1.1241 * ( R_12 / R_16 ) * exp( -0.026 * pow( f_n, 1.15656 ) - R_15 ) );
 
  185    return pow( R_13 / R_14, R_17 );
 
 
  191    const double freq = 6.0 + ( 2.0 * 
M_PI - 6.0 ) * exp( -pow( 30.666 / u, 0.7528 ) );
 
  192    return ( 
TC::ZF0 / ( 2.0 * 
M_PI ) ) * log( freq / u + sqrt( 1.0 + 4.0 / ( u * u ) ) );
 
 
  198    const double h2hp1 = 1.0 + h2h;
 
  199    const double P = 270.0 * ( 1.0 - tanh( 1.192 + 0.706 * sqrt( h2hp1 ) - 1.389 / h2hp1 ) );
 
  200    const double Q = 1.0109 - 
atanh( ( 0.012 * u + 0.177 * u * u - 0.027 * u * u * u ) / ( h2hp1 * h2hp1 ) );
 
 
  207    const double u2 = u * u;
 
  208    const double u3 = u2 * u;
 
  209    const double u4 = u3 * u;
 
  210    const double a = 1.0 + log( ( u4 + u2 / 2704 ) / ( u4 + 0.432 ) ) / 49.0 + log( 1.0 + u3 / 5929.741 ) / 18.7;
 
  211    const double b = 0.564 * pow( ( e_r - 0.9 ) / ( e_r + 3.0 ), 0.053 );
 
  212    return pow( 1.0 + 10.0 / u, -a * b );
 
 
  218    return tanh( 1.043 + 0.121 * h2h - 1.164 / h2h );
 
 
  224    return ( 2.0 * log( 2.0 ) / 
M_PI ) * ( t_h / sqrt( u ) );
 
 
  230    return 0.5 * ( e_r + 1.0 ) + 0.5 * q * ( e_r - 1.0 );
 
 
  241        delta_u = ( t_h / 
M_PI ) * log( 1.0 + ( 4.0 * M_E ) * pow( tanh( sqrt( 6.517 * u ) ), 2.0 ) / t_h );
 
  243        delta_u = 0.5 * delta_u * ( 1.0 + 1.0 / cosh( sqrt( e_r - 1.0 ) ) );
 
 
  256            0.27488 + u * ( 0.6315 + 0.525 / pow( 1.0 + 0.0157 * f_n, 20.0 ) ) - 0.065683 * exp( -8.7513 * u );
 
  257    const double P_2 = 0.33622 * ( 1.0 - exp( -0.03442 * e_r ) );
 
  258    const double P_3 = 0.0363 * exp( -4.6 * u ) * ( 1.0 - exp( -pow( f_n / 38.7, 4.97 ) ) );
 
  259    const double P_4 = 1.0 + 2.751 * ( 1.0 - exp( -pow( e_r / 15.916, 8.0 ) ) );
 
  261    return P_1 * P_2 * pow( ( P_3 * P_4 + 0.1844 ) * f_n, 1.5763 );
 
 
  329    const double q = ( q_inf - q_t ) * q_c;
 
  335    const double e_r_eff = e_r_eff_t * pow( 
Z0_h_1 / Z0_h_r, 2.0 );
 
 
  358    const double e_r_eff_f = e_r - ( e_r - e_r_eff_0 ) / ( 1.0 + P );
 
  360    const double D = 
Z0_dispersion( u, e_r, e_r_eff_0, e_r_eff_f, f_n );
 
  361    const double Z0_f = 
Z0_0 * 
D;
 
 
  382    mur_eff = ( 2.0 * mur ) / ( ( 1.0 + mur ) + ( ( 1.0 - mur ) * pow( ( 1.0 + ( 10.0 * h / w ) ), -0.5 ) ) );
 
 
double w_eff
Effective width of line.
 
void microstrip_Z0()
Calculates the microstrip static impedance.
 
static double e_r_effective(double, double)
Calculates effective dielectric constant from material e_r and filling factor.
 
bool Synthesize(SYNTHESIZE_OPTS aOpts) override
Synthesis track geometry parameters to match given Z0.
 
double Z0_0
static characteristic impedance
 
void line_angle()
Calculates microstrip length in radians.
 
void Analyse() override
Analyse track geometry parameters to output Z0 and Ang_L.
 
static double Z0_dispersion(double, double, double, double, double)
Calculates the dispersion correction factor for the characteristic impedance static.
 
void dispersion()
Calculates frequency dependent parameters of the microstrip.
 
static double filling_factor(double, double)
Calculates the filling factor for a microstrip without cover and zero conductor thickness.
 
double SynthesizeWidth() const
Calculates the width with the current set of parameters.
 
static double e_r_dispersion(double, double, double)
Calculates the dispersion correction factor for the effective permeability.
 
static double delta_u_thickness(double, double, double)
Calculates the thickness effect on normalized width.
 
static double delta_q_thickness(double, double)
Calculates the thickness effect on filling factor.
 
static double delta_q_cover(double)
Calculates the cover effect on filling factor.
 
double mur_eff
Effective mag. permeability.
 
double er_eff_0
Static effective dielectric constant.
 
void mur_eff_ms()
Calculates the effective magnetic permeability.
 
void SetSynthesisResults() override
Sets the output values and status following synthesis.
 
void SetAnalysisResults() override
Sets the output values and status following analysis.
 
static double Z0_homogeneous(double)
Calculates the impedance for a stripline in a homogeneous medium, without cover effects.
 
double dielectric_losses() const
Calculates the microstrip dielectric losses per unit.
 
double Z0_h_1
homogeneous stripline impedance
 
void attenuation()
Calculates the attenuation of the microstrip.
 
static double delta_Z0_cover(double, double)
Calculates the cover effect on impedance for a stripline in a homogeneous medium.
 
double conductor_losses() const
Calculate the microstrip conductor losses per unit.
 
double GetParameter(const TRANSLINE_PARAMETERS aParam) const
Gets the given calculation property.
 
void SetParameter(const TRANSLINE_PARAMETERS aParam, const double aValue)
Sets the given calculation property.
 
void SetSynthesisResult(TRANSLINE_PARAMETERS aParam, const double aValue, const TRANSLINE_STATUS aStatus=TRANSLINE_STATUS::OK)
Sets a synthesis result.
 
double SkinDepth() const
Calculate skin depth.
 
bool MinimiseZ0Error1D(TRANSLINE_PARAMETERS aOptimise, TRANSLINE_PARAMETERS aMeasure, bool aRecalculateLength=false)
minimizeZ0Error1D
 
void SetAnalysisResult(TRANSLINE_PARAMETERS aParam, const double aValue, const TRANSLINE_STATUS aStatus=TRANSLINE_STATUS::OK)
Sets an analysis result.
 
static double UnitPropagationDelay(double aEpsilonEff)
Calculates the unit propagation delay (ps/cm) for the given effective permittivity.
 
SYNTHESIZE_OPTS
Options for specifying synthesis inputs, targets, or strategies.
 
TRANSLINE_PARAMETERS
All possible parameters used (as inputs or outputs) by the transmission line calculations.