|
KiCad PCB EDA Suite
|
#include <coupled_stripline.h>
Public Member Functions | |
| COUPLED_STRIPLINE () | |
| void | Analyse () override |
| Analyse track geometry parameters to output Z0 and Ang_L. | |
| bool | Synthesize (SYNTHESIZE_OPTS aOpts) override |
| Synthesis track geometry parameters to match given Z0. | |
| void | SetParameter (const TRANSLINE_PARAMETERS aParam, const double aValue) |
| Sets the given calculation property. | |
| double | GetParameter (const TRANSLINE_PARAMETERS aParam) const |
| Gets the given calculation property. | |
| double & | GetParameterRef (const TRANSLINE_PARAMETERS aParam) |
| Adds a constant to the given parameter. | |
| std::unordered_map< TRANSLINE_PARAMETERS, std::pair< double, TRANSLINE_STATUS > > & | GetAnalysisResults () |
| Gets the output parameters following analysis. | |
| std::unordered_map< TRANSLINE_PARAMETERS, std::pair< double, TRANSLINE_STATUS > > & | GetSynthesisResults () |
| Gets the output parameters following synthesis. | |
| virtual void | SetSynthesizeTarget (TRANSLINE_PARAMETERS aTarget) |
| Hint from UI picking which geometry parameter is the unknown when Synthesize is called. | |
| TRANSLINE_PARAMETERS | GetSynthesizeTarget () const |
| Returns the parameter that will be solved for during synthesis. | |
| void | UpdateDielectricModel () |
| Refit the Djordjevic-Sarkar model from the current parameter map. | |
| double | GetDispersedEpsilonR (double aF) const |
| Dispersed permittivity at aF. Returns raw EPSILONR when the model is inactive. | |
| double | GetDispersedTanDelta (double aF) const |
| Dispersed loss tangent at aF. Returns raw TAND when the model is inactive. | |
| virtual double | GetSoldermaskDeltaQ (double, double) const |
| Incremental filling factor Delta q_mask representing the fraction of the un-coated above-trace air region that a mask of thickness C displaces when laid on top of the substrate. | |
| std::pair< double, double > | ApplySoldermaskCorrection (double aEpsEffUncoated, double aTanDeltaSubstrate, double aEpsRSubstrate, double aWOverH, double aF) const |
| Apply a three-layer (substrate / soldermask / air) correction to an un-coated (eps_eff, tan_delta) pair using the air-replacement decomposition of Bahl and Stuchly 1980, with the mask filling factor computed from Svacina 1992 as improved by Wan and Hoorfar 2000. | |
Static Public Member Functions | |
| static bool | IsCenteredOffset (double a, double h) |
| Returns true when the strip plane offset a is effectively at the centre (a = h/2 within numerical tolerance). | |
| static double | WanHoorfarQ2 (double aU, double aHBarTop) |
| Wan-Hoorfar 2000 eq. | |
Protected Member Functions | |
| void | InitProperties (const std::initializer_list< TRANSLINE_PARAMETERS > &aParams) |
| Initialises the properties used (as inputs or outputs) by the calculation. | |
| void | SetAnalysisResult (TRANSLINE_PARAMETERS aParam, const double aValue, const TRANSLINE_STATUS aStatus=TRANSLINE_STATUS::OK) |
| Sets an analysis result. | |
| void | SetSynthesisResult (TRANSLINE_PARAMETERS aParam, const double aValue, const TRANSLINE_STATUS aStatus=TRANSLINE_STATUS::OK) |
| Sets a synthesis result. | |
| bool | MinimiseZ0Error1D (TRANSLINE_PARAMETERS aOptimise, TRANSLINE_PARAMETERS aMeasure, bool aRecalculateLength=false) |
| minimizeZ0Error1D | |
| bool | MinimiseZ0Error2D (TRANSLINE_PARAMETERS aParam1, TRANSLINE_PARAMETERS aParam2) |
| minimizeZ0Error2D | |
| double | SkinDepth () const |
| Calculate skin depth. | |
Static Protected Member Functions | |
| static double | UnitPropagationDelay (double aEpsilonEff) |
| Calculates the unit propagation delay (ps/cm) for the given effective permittivity. | |
| static std::pair< double, double > | EllipticIntegral (double arg) |
| Computes the complete elliptic integral of first kind K() and the second kind E() using the arithmetic-geometric mean algorithm (AGM) by Abramowitz and Stegun. | |
| static double | coth (const double x) |
| Calculates cosh of the given argument. | |
| static double | sech (const double x) |
| Calculates sech of the given argument. | |
Protected Attributes | |
| std::unordered_map< TRANSLINE_PARAMETERS, double > | m_parameters |
| All input and output properties used by the calculation. | |
| std::unordered_map< TRANSLINE_PARAMETERS, std::pair< double, TRANSLINE_STATUS > > | m_analysisStatus |
| Analysis results. | |
| std::unordered_map< TRANSLINE_PARAMETERS, std::pair< double, TRANSLINE_STATUS > > | m_synthesisStatus |
| Synthesis results. | |
| TRANSLINE_PARAMETERS | m_synthesizeTarget { TRANSLINE_PARAMETERS::UNKNOWN_ID } |
| Which geometry parameter is the unknown during synthesis (set by the UI) | |
| std::optional< DIELECTRIC_DJORDJEVIC_SARKAR > | m_dsModel |
| Fitted Djordjevic-Sarkar model. Empty unless DIELECTRIC_MODEL_SEL selects it. | |
Static Protected Attributes | |
| static constexpr double | m_maxError { 0.000001 } |
| The maximum error for Z0 optimisations. | |
Private Types | |
| enum class | ResultSink { ANALYSIS , SYNTHESIS } |
| Identifies which result map publishResults() should populate. More... | |
| using | TCP = TRANSLINE_PARAMETERS |
Private Member Functions | |
| void | SetAnalysisResults () override |
| Sets the output values and status following analysis. | |
| void | SetSynthesisResults () override |
| Sets the output values and status following synthesis. | |
| void | publishResults (ResultSink aSink, TRANSLINE_STATUS aImpedanceFailure, TRANSLINE_STATUS aGeometryFailure) |
| Shared body of SetAnalysisResults / SetSynthesisResults. | |
| double | calcZ0SymmetricStripline () |
| Calculates the impedance of a finite-width single strip. | |
| void | calcFringeCapacitances (double h, double t, double er) |
| Calculate the coupling fringe capacitances. | |
| void | calcSingleStripImpedances () |
| Calculates impedances of finite- and zero-thickness single strips. | |
| void | calcZeroThicknessCoupledImpedances (double h, double w, double s, double er) |
| Calculates zero-thickness coupled strip impedances. | |
| void | calcOffsetZeroThicknessCoupledImpedances (double h, double a, double w, double s, double t, double er) |
| Offset-aware wrapper around calcZeroThicknessCoupledImpedances built on Reference [3] Sec. | |
| std::pair< double, double > | calcOffsetVirtualBranch (double aVirtualH, double w, double s, double t, double er) |
| Runs the centred finite-thickness pipeline for a single Reference [3] virtual stripline of plate spacing aVirtualH. | |
| void | calcZ0EvenMode () |
| Calculates even mode Z0. | |
| void | calcZ0OddMode (double t, double s) |
| Calculates odd mode Z0. | |
| void | calcLosses () |
| Calculates conductor and dielectric losses. | |
| void | calcDielectrics () |
| Calculate dialectric and propagation parameters. | |
Static Private Member Functions | |
| static bool | isOffsetWithinFiniteThicknessLimits (double a, double h, double t) |
| Returns true when the offset a is far enough from each ground plane that the Reference [1] finite-thickness fringe formula is well defined on both virtual centred striplines produced by the Reference [3] Eq. | |
| static double | applyOffsetCorrection (double aZImage, double aOffset, double aPlateSpacing, double aWidth, double aThickness, double aEr) |
| Applies the Reference [3] Eq. | |
Private Attributes | |
| double | C_f_0 { 0.0 } |
| Fringing capacitance from one edge to ground of zero thickness strip. | |
| double | C_f_t_h { 0.0 } |
| Fringing capacitance of single strip of finite width. | |
| double | Z0_w_h_0 { 0.0 } |
| Impedance of single strip of zero thickness. | |
| double | Z0_w_h_t_h { 0.0 } |
| Impedance of single strip of finite thickness. | |
| double | Z0_e_w_h_0_s_h { 0.0 } |
| Even mode impedance of coupled zero thickness strips. | |
| double | Z0_o_w_h_0_s_h { 0.0 } |
| Odd mode impedance of coupled zero thickness strips. | |
| double | e_eff_e { 0.0 } |
| Even mode effective dielectric constant. | |
| double | e_eff_o { 0.0 } |
| Odd mode effective dielectric constant. | |
| double | ang_l { 0.0 } |
| Angular length (rad) | |
| double | unit_prop_delay_e { 0.0 } |
| Even mode unit propagation delay (ps/cm) | |
| double | unit_prop_delay_o { 0.0 } |
| Odd mode unit propagation delay (ps/cm) | |
| STRIPLINE | m_striplineCalc |
| Calculator used to determine single stripline values. | |
Definition at line 42 of file coupled_stripline.h.
|
private |
Definition at line 44 of file coupled_stripline.h.
|
strongprivate |
Identifies which result map publishResults() should populate.
| Enumerator | |
|---|---|
| ANALYSIS | |
| SYNTHESIS | |
Definition at line 75 of file coupled_stripline.h.
|
inline |
Definition at line 47 of file coupled_stripline.h.
References ANG_L, ATTEN_COND_EVEN, ATTEN_COND_ODD, ATTEN_DILECTRIC_EVEN, ATTEN_DILECTRIC_ODD, COUPLING_K, DIELECTRIC_MODEL_SEL, EPSILONR, EPSILONR_SPEC_FREQ, FREQUENCY, H, MUR, MURC, PHYS_LEN, PHYS_S, PHYS_WIDTH, ROUGH, SIGMA, SKIN_DEPTH, STRIPLINE_A, T, TAND, TRANSLINE_CALCULATION_BASE::TRANSLINE_CALCULATION_BASE(), Z0_E, Z0_O, Z_COMM, and Z_DIFF.
|
overridevirtual |
Analyse track geometry parameters to output Z0 and Ang_L.
Implements TRANSLINE_CALCULATION_BASE.
Definition at line 45 of file coupled_stripline.cpp.
References applyOffsetCorrection(), calcDielectrics(), calcFringeCapacitances(), calcLosses(), calcOffsetVirtualBranch(), calcOffsetZeroThicknessCoupledImpedances(), calcSingleStripImpedances(), calcZ0EvenMode(), calcZ0OddMode(), COUPLING_K, EPSILONR, FREQUENCY, TRANSLINE_CALCULATION_BASE::GetDispersedEpsilonR(), TRANSLINE_CALCULATION_BASE::GetDispersedTanDelta(), TRANSLINE_CALCULATION_BASE::GetParameter(), H, IsCenteredOffset(), isOffsetWithinFiniteThicknessLimits(), PHYS_S, PHYS_WIDTH, TRANSLINE_CALCULATION_BASE::SetParameter(), SKIN_DEPTH, TRANSLINE_CALCULATION_BASE::SkinDepth(), STRIPLINE_A, T, TAND, TRANSLINE_CALCULATION_BASE::UpdateDielectricModel(), Z0_E, Z0_e_w_h_0_s_h, Z0_O, Z0_o_w_h_0_s_h, Z_COMM, and Z_DIFF.
Referenced by BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), and Synthesize().
|
staticprivate |
Applies the Reference [3] Eq.
3.6.3.23 correction to an image-method impedance. The position factor |0.5 - a/h|^2.2 is zero at a = h/2 (centred) and grows with offset; the width factor ((t + w) / h)^2.9 scales with strip proximity. The correction is fit to single-ended data with a claimed ~2 percent accuracy for 0.2 < a/h < 0.8 and t/h < 0.2; used per mode here with the corresponding mode impedance.
Definition at line 466 of file coupled_stripline.cpp.
References correction, and M_PI.
Referenced by Analyse(), and calcOffsetZeroThicknessCoupledImpedances().
|
inherited |
Apply a three-layer (substrate / soldermask / air) correction to an un-coated (eps_eff, tan_delta) pair using the air-replacement decomposition of Bahl and Stuchly 1980, with the mask filling factor computed from Svacina 1992 as improved by Wan and Hoorfar 2000.
eps_eff_coated = eps_eff_uncoated + Delta q_mask * (eps_mask - 1)
tan_delta_coated = [ q_sub * eps_sub * tan_delta_sub
+ Delta q_mask * eps_mask * tan_delta_mask ] / eps_eff_coated
q_sub is inferred from eps_eff_uncoated using the standard filling factor relation q_sub = (eps_eff_uncoated - 1) / (eps_sub - 1), which is exact to within the quasi- TEM assumption that produces eps_eff in the first place. Returns the inputs unchanged when SOLDERMASK_PRESENT is 0, the mask thickness is 0, the mask parameters are non-physical, or the subclass reports Delta q_mask <= 0. aF is reserved for a future frequency-dependent mask model and currently unused.
Definition at line 274 of file transline_calculation_base.cpp.
References GetParameter(), GetSoldermaskDeltaQ(), H, SOLDERMASK_EPSILONR, SOLDERMASK_PRESENT, SOLDERMASK_TAND, and SOLDERMASK_THICKNESS.
Referenced by COPLANAR::Analyse(), COUPLED_MICROSTRIP::Analyse(), and MICROSTRIP::Analyse().
|
private |
Calculate dialectric and propagation parameters.
Definition at line 594 of file coupled_stripline.cpp.
References ang_l, TRANSLINE_CALCULATIONS::C0, e_eff_e, e_eff_o, EPSILONR, FREQUENCY, TRANSLINE_CALCULATION_BASE::GetParameter(), M_PI, PHYS_LEN, unit_prop_delay_e, unit_prop_delay_o, and TRANSLINE_CALCULATION_BASE::UnitPropagationDelay().
Referenced by Analyse().
|
private |
Calculate the coupling fringe capacitances.
Definition at line 371 of file coupled_stripline.cpp.
References C_f_0, C_f_t_h, TRANSLINE_CALCULATIONS::E0, and M_PI.
Referenced by Analyse(), and calcOffsetVirtualBranch().
|
private |
Calculates conductor and dielectric losses.
Definition at line 536 of file coupled_stripline.cpp.
References ANG_L, ATTEN_COND_EVEN, ATTEN_COND_ODD, ATTEN_DILECTRIC_EVEN, ATTEN_DILECTRIC_ODD, TRANSLINE_CALCULATIONS::C0, EPSILONR, FREQUENCY, TRANSLINE_CALCULATION_BASE::GetParameter(), H, TRANSLINE_CALCULATIONS::LOG2DB, LOSS_CONDUCTOR, M_PI, m_striplineCalc, MURC, PHYS_LEN, PHYS_WIDTH, TRANSLINE_CALCULATION_BASE::SetParameter(), SIGMA, STRIPLINE_A, T, TAND, Z0, Z0_E, and Z0_O.
Referenced by Analyse().
|
private |
Runs the centred finite-thickness pipeline for a single Reference [3] virtual stripline of plate spacing aVirtualH.
Returns the (Z0e, Z0o) pair seen at that plate spacing so the caller can combine the two halves via Eq. 3.6.3.22.
Definition at line 416 of file coupled_stripline.cpp.
References calcFringeCapacitances(), calcSingleStripImpedances(), calcZ0EvenMode(), calcZ0OddMode(), calcZeroThicknessCoupledImpedances(), TRANSLINE_CALCULATION_BASE::GetParameter(), H, TRANSLINE_CALCULATION_BASE::SetParameter(), Z0_E, and Z0_O.
Referenced by Analyse().
|
private |
Offset-aware wrapper around calcZeroThicknessCoupledImpedances built on Reference [3] Sec.
3.6.3 (off-center stripline). For centred cases it calls the base function once; otherwise Eq. 3.6.3.22 combines two virtual centred striplines at plate spacings 2a and 2(h - a) via parallel admittance, then Eq. 3.6.3.23 applies the three-term correction that restores the image-method result to within ~2 percent of numerical reference. Wadell derives the correction for a single strip; we apply it per even / odd mode, which preserves the centred limit (the position factor vanishes at a = h/2) while improving accuracy away from it.
Definition at line 431 of file coupled_stripline.cpp.
References applyOffsetCorrection(), calcZeroThicknessCoupledImpedances(), IsCenteredOffset(), Z0_e_w_h_0_s_h, and Z0_o_w_h_0_s_h.
Referenced by Analyse().
|
private |
Calculates impedances of finite- and zero-thickness single strips.
Definition at line 490 of file coupled_stripline.cpp.
References calcZ0SymmetricStripline(), TRANSLINE_CALCULATION_BASE::EllipticIntegral(), EPSILONR, TRANSLINE_CALCULATION_BASE::GetParameter(), H, M_PI, PHYS_WIDTH, TRANSLINE_CALCULATION_BASE::sech(), Z0_w_h_0, Z0_w_h_t_h, and TRANSLINE_CALCULATIONS::ZF0.
Referenced by Analyse(), and calcOffsetVirtualBranch().
|
private |
Calculates even mode Z0.
Definition at line 508 of file coupled_stripline.cpp.
References C_f_0, C_f_t_h, TRANSLINE_CALCULATION_BASE::SetParameter(), Z0_E, Z0_e_w_h_0_s_h, Z0_w_h_0, and Z0_w_h_t_h.
Referenced by Analyse(), and calcOffsetVirtualBranch().
|
private |
Calculates odd mode Z0.
Definition at line 517 of file coupled_stripline.cpp.
References C_f_0, C_f_t_h, TRANSLINE_CALCULATIONS::E0, TRANSLINE_CALCULATION_BASE::SetParameter(), Z0_O, Z0_o_w_h_0_s_h, Z0_w_h_0, Z0_w_h_t_h, Z_DIFF, and TRANSLINE_CALCULATIONS::ZF0.
Referenced by Analyse(), and calcOffsetVirtualBranch().
|
private |
Calculates the impedance of a finite-width single strip.
Definition at line 616 of file coupled_stripline.cpp.
References ANG_L, EPSILONR, FREQUENCY, TRANSLINE_CALCULATION_BASE::GetParameter(), H, m_striplineCalc, MURC, PHYS_LEN, PHYS_WIDTH, SIGMA, STRIPLINE_A, T, TAND, and Z0.
Referenced by calcSingleStripImpedances().
|
private |
Calculates zero-thickness coupled strip impedances.
Definition at line 383 of file coupled_stripline.cpp.
References TRANSLINE_CALCULATION_BASE::coth(), TRANSLINE_CALCULATION_BASE::EllipticIntegral(), M_PI, Z0_e_w_h_0_s_h, Z0_o_w_h_0_s_h, and TRANSLINE_CALCULATIONS::ZF0.
Referenced by calcOffsetVirtualBranch(), and calcOffsetZeroThicknessCoupledImpedances().
|
inlinestaticprotectedinherited |
Calculates cosh of the given argument.
Definition at line 328 of file transline_calculation_base.h.
Referenced by COUPLED_STRIPLINE::calcZeroThicknessCoupledImpedances().
|
staticprotectedinherited |
Computes the complete elliptic integral of first kind K() and the second kind E() using the arithmetic-geometric mean algorithm (AGM) by Abramowitz and Stegun.
Definition at line 340 of file transline_calculation_base.cpp.
Referenced by COPLANAR::Analyse(), COUPLED_STRIPLINE::calcSingleStripImpedances(), and COUPLED_STRIPLINE::calcZeroThicknessCoupledImpedances().
|
inherited |
Gets the output parameters following analysis.
Definition at line 40 of file transline_calculation_base.cpp.
References m_analysisStatus, and SetAnalysisResults().
Referenced by BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), and BOOST_AUTO_TEST_CASE().
|
inherited |
Dispersed permittivity at aF. Returns raw EPSILONR when the model is inactive.
Definition at line 200 of file transline_calculation_base.cpp.
References EPSILONR, GetParameter(), and m_dsModel.
Referenced by COAX::Analyse(), COPLANAR::Analyse(), COUPLED_MICROSTRIP::Analyse(), COUPLED_STRIPLINE::Analyse(), MICROSTRIP::Analyse(), RECTWAVEGUIDE::Analyse(), STRIPLINE::Analyse(), TWISTEDPAIR::Analyse(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), COAX::Synthesize(), and RECTWAVEGUIDE::Synthesize().
|
inherited |
Dispersed loss tangent at aF. Returns raw TAND when the model is inactive.
Definition at line 209 of file transline_calculation_base.cpp.
References GetParameter(), m_dsModel, and TAND.
Referenced by COAX::Analyse(), COPLANAR::Analyse(), COUPLED_MICROSTRIP::Analyse(), COUPLED_STRIPLINE::Analyse(), MICROSTRIP::Analyse(), RECTWAVEGUIDE::Analyse(), STRIPLINE::Analyse(), TWISTEDPAIR::Analyse(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), and RECTWAVEGUIDE::Synthesize().
|
inlineinherited |
Gets the given calculation property.
Definition at line 165 of file transline_calculation_base.h.
References m_parameters.
Referenced by COAX::AlphaC(), RECTWAVEGUIDE::AlphaC(), COAX::AlphaD(), RECTWAVEGUIDE::AlphaD(), COAX::Analyse(), COPLANAR::Analyse(), COUPLED_MICROSTRIP::Analyse(), COUPLED_STRIPLINE::Analyse(), MICROSTRIP::Analyse(), RECTWAVEGUIDE::Analyse(), STRIPLINE::Analyse(), TWISTEDPAIR::Analyse(), ApplySoldermaskCorrection(), MICROSTRIP::attenuation(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), COUPLED_STRIPLINE::calcDielectrics(), COUPLED_STRIPLINE::calcLosses(), COUPLED_STRIPLINE::calcOffsetVirtualBranch(), COUPLED_STRIPLINE::calcSingleStripImpedances(), COUPLED_STRIPLINE::calcZ0SymmetricStripline(), COUPLED_MICROSTRIP::compute_single_line(), COUPLED_MICROSTRIP::conductor_losses(), MICROSTRIP::conductor_losses(), COUPLED_MICROSTRIP::delta_u_thickness(), COUPLED_MICROSTRIP::dielectric_losses(), MICROSTRIP::dielectric_losses(), COUPLED_MICROSTRIP::diff_impedance(), MICROSTRIP::dispersion(), COUPLED_MICROSTRIP::er_eff_freq(), COUPLED_MICROSTRIP::er_eff_static(), RECTWAVEGUIDE::Fc(), GetDispersedEpsilonR(), GetDispersedTanDelta(), COPLANAR::GetSoldermaskDeltaQ(), COPLANAR::hasBackMetal(), RECTWAVEGUIDE::KcSquare(), RECTWAVEGUIDE::KvalSquare(), COUPLED_MICROSTRIP::line_angle(), MICROSTRIP::line_angle(), STRIPLINE::lineImpedance(), MICROSTRIP::microstrip_Z0(), MinimiseZ0Error1D(), MICROSTRIP::mur_eff_ms(), COUPLED_STRIPLINE::publishResults(), COAX::SetAnalysisResults(), COPLANAR::SetAnalysisResults(), COUPLED_MICROSTRIP::SetAnalysisResults(), MICROSTRIP::SetAnalysisResults(), RECTWAVEGUIDE::SetAnalysisResults(), STRIPLINE::SetAnalysisResults(), TWISTEDPAIR::SetAnalysisResults(), COAX::SetSynthesisResults(), COPLANAR::SetSynthesisResults(), COUPLED_MICROSTRIP::SetSynthesisResults(), MICROSTRIP::SetSynthesisResults(), RECTWAVEGUIDE::SetSynthesisResults(), STRIPLINE::SetSynthesisResults(), TWISTEDPAIR::SetSynthesisResults(), SkinDepth(), COUPLED_MICROSTRIP::syn_fun(), COUPLED_MICROSTRIP::synth_width(), COAX::Synthesize(), COUPLED_MICROSTRIP::Synthesize(), COUPLED_STRIPLINE::Synthesize(), MICROSTRIP::Synthesize(), RECTWAVEGUIDE::Synthesize(), MICROSTRIP::SynthesizeWidth(), UpdateDielectricModel(), COAX::UpdateModeCutoffs(), RECTWAVEGUIDE::UpdateModeStrings(), COUPLED_MICROSTRIP::Z0_dispersion(), and COUPLED_MICROSTRIP::Z0_even_odd().
|
inlineinherited |
Adds a constant to the given parameter.
Definition at line 168 of file transline_calculation_base.h.
References m_parameters.
Referenced by MinimiseZ0Error1D().
|
inlinevirtualinherited |
Incremental filling factor Delta q_mask representing the fraction of the un-coated above-trace air region that a mask of thickness C displaces when laid on top of the substrate.
Default zero means the subclass is not mask-eligible (stripline, coax, rectangular waveguide, twisted pair) and ApplySoldermaskCorrection will return its inputs unchanged. Mask-eligible subclasses (microstrip, coupled microstrip, CPW) override using the Wan-Hoorfar 2000 improved Svacina formula or a CPW-specific empirical form.
Reimplemented in COPLANAR, COUPLED_MICROSTRIP, and MICROSTRIP.
Definition at line 216 of file transline_calculation_base.h.
Referenced by ApplySoldermaskCorrection().
|
inherited |
Gets the output parameters following synthesis.
Definition at line 48 of file transline_calculation_base.cpp.
References m_synthesisStatus, and SetSynthesisResults().
|
inlineinherited |
Returns the parameter that will be solved for during synthesis.
Definition at line 192 of file transline_calculation_base.h.
References m_synthesizeTarget.
|
protectedinherited |
Initialises the properties used (as inputs or outputs) by the calculation.
Definition at line 32 of file transline_calculation_base.cpp.
References m_parameters.
Referenced by TRANSLINE_CALCULATION_BASE().
|
static |
Returns true when the strip plane offset a is effectively at the centre (a = h/2 within numerical tolerance).
When a <= 0 is treated as unset and maps to centred.
Definition at line 398 of file coupled_stripline.cpp.
Referenced by Analyse(), calcOffsetZeroThicknessCoupledImpedances(), and PANEL_SETUP_TUNING_PROFILE_INFO::calculateDifferentialStripline().
|
staticprivate |
Returns true when the offset a is far enough from each ground plane that the Reference [1] finite-thickness fringe formula is well defined on both virtual centred striplines produced by the Reference [3] Eq.
3.6.3.22 image split (i.e. t/2 < a < h - t/2).
Definition at line 406 of file coupled_stripline.cpp.
Referenced by Analyse().
|
protectedinherited |
minimizeZ0Error1D
Tries to find a parameter that minimizes the error on Z0. This function only works with a single parameter. Calls Analyse several times until the error is acceptable.
This function does not change Z0 / Angl_L
| aOptimise | Parameter to optimise |
| aMeasure | The parameter to measure / optimise against |
| aRecalculateLength | True if the angular length should be recalculated (not for differential pair usage) |
Definition at line 69 of file transline_calculation_base.cpp.
References Analyse(), ANG_L, TRANSLINE_CALCULATIONS::C0, EPSILON_EFF, FREQUENCY, GetParameter(), GetParameterRef(), m_maxError, M_PI, PHYS_LEN, and SetParameter().
Referenced by COPLANAR::Synthesize(), COUPLED_MICROSTRIP::Synthesize(), COUPLED_STRIPLINE::Synthesize(), MICROSTRIP::Synthesize(), STRIPLINE::Synthesize(), and TWISTEDPAIR::Synthesize().
|
protectedinherited |
minimizeZ0Error2D
Tries to find the parameters that minimizes the error on Z_Diff. This function only works with two parameters. Calls Analyse several times until the error is acceptable. While the error is unacceptable, changes slightly the parameter.
This function does not change Z0 / Angl_L
| aParam1 | First parameter to optimise |
| aParam2 | Secpmd parameter to optimise |
|
private |
Shared body of SetAnalysisResults / SetSynthesisResults.
The status-severity arguments flip between the two callers so that bad mode impedances are an error during analysis but only a warning during synthesis (and vice versa for geometry).
Definition at line 308 of file coupled_stripline.cpp.
References ANALYSIS, ANG_L, ang_l, ATTEN_COND_EVEN, ATTEN_COND_ODD, ATTEN_DILECTRIC_EVEN, ATTEN_DILECTRIC_ODD, COUPLING_K, e_eff_e, e_eff_o, EPSILON_EFF_EVEN, EPSILON_EFF_ODD, TRANSLINE_CALCULATION_BASE::GetParameter(), OK, PHYS_LEN, PHYS_S, PHYS_WIDTH, TRANSLINE_CALCULATION_BASE::SetAnalysisResult(), TRANSLINE_CALCULATION_BASE::SetSynthesisResult(), SKIN_DEPTH, unit_prop_delay_e, UNIT_PROP_DELAY_EVEN, unit_prop_delay_o, UNIT_PROP_DELAY_ODD, Z0_E, Z0_O, Z_COMM, and Z_DIFF.
Referenced by SetAnalysisResults(), and SetSynthesisResults().
|
inlinestaticprotectedinherited |
Calculates sech of the given argument.
Definition at line 331 of file transline_calculation_base.h.
Referenced by COUPLED_STRIPLINE::calcSingleStripImpedances().
|
protectedinherited |
Sets an analysis result.
Definition at line 55 of file transline_calculation_base.cpp.
References m_analysisStatus.
Referenced by COUPLED_STRIPLINE::publishResults(), COAX::SetAnalysisResults(), COPLANAR::SetAnalysisResults(), COUPLED_MICROSTRIP::SetAnalysisResults(), MICROSTRIP::SetAnalysisResults(), RECTWAVEGUIDE::SetAnalysisResults(), STRIPLINE::SetAnalysisResults(), and TWISTEDPAIR::SetAnalysisResults().
|
overrideprivatevirtual |
Sets the output values and status following analysis.
Implements TRANSLINE_CALCULATION_BASE.
Definition at line 354 of file coupled_stripline.cpp.
References ANALYSIS, publishResults(), TS_ERROR, and WARNING.
|
inlineinherited |
Sets the given calculation property.
Definition at line 162 of file transline_calculation_base.h.
References m_parameters.
Referenced by COAX::Analyse(), COPLANAR::Analyse(), COUPLED_MICROSTRIP::Analyse(), COUPLED_STRIPLINE::Analyse(), MICROSTRIP::Analyse(), RECTWAVEGUIDE::Analyse(), STRIPLINE::Analyse(), TWISTEDPAIR::Analyse(), COUPLED_MICROSTRIP::attenuation(), MICROSTRIP::attenuation(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), COUPLED_STRIPLINE::calcLosses(), COUPLED_STRIPLINE::calcOffsetVirtualBranch(), COUPLED_STRIPLINE::calcZ0EvenMode(), COUPLED_STRIPLINE::calcZ0OddMode(), MICROSTRIP::dispersion(), MICROSTRIP::line_angle(), MICROSTRIP::microstrip_Z0(), MinimiseZ0Error1D(), TRANSLINE::pushSoldermaskParameters(), COUPLED_MICROSTRIP::syn_fun(), COUPLED_MICROSTRIP::synth_width(), COAX::Synthesize(), COUPLED_MICROSTRIP::Synthesize(), COUPLED_STRIPLINE::Synthesize(), MICROSTRIP::Synthesize(), RECTWAVEGUIDE::Synthesize(), COAX::UpdateModeCutoffs(), and COUPLED_MICROSTRIP::Z0_dispersion().
|
protectedinherited |
Sets a synthesis result.
Definition at line 62 of file transline_calculation_base.cpp.
References m_synthesisStatus.
Referenced by COUPLED_STRIPLINE::publishResults(), COAX::SetSynthesisResults(), COPLANAR::SetSynthesisResults(), COUPLED_MICROSTRIP::SetSynthesisResults(), MICROSTRIP::SetSynthesisResults(), RECTWAVEGUIDE::SetSynthesisResults(), STRIPLINE::SetSynthesisResults(), and TWISTEDPAIR::SetSynthesisResults().
|
overrideprivatevirtual |
Sets the output values and status following synthesis.
Implements TRANSLINE_CALCULATION_BASE.
Definition at line 363 of file coupled_stripline.cpp.
References publishResults(), SYNTHESIS, TS_ERROR, and WARNING.
|
inlinevirtualinherited |
Hint from UI picking which geometry parameter is the unknown when Synthesize is called.
Coax picks Din or Dout; coupled stripline picks W or S; rectangular waveguide picks width or height, etc. Subclasses may override to reject unsupported targets; the default implementation simply stores the value.
Reimplemented in COAX, COPLANAR, RECTWAVEGUIDE, and TWISTEDPAIR.
Definition at line 189 of file transline_calculation_base.h.
References m_synthesizeTarget.
|
protectedinherited |
Calculate skin depth.

Definition at line 151 of file transline_calculation_base.cpp.
References FREQUENCY, GetParameter(), M_PI, TRANSLINE_CALCULATIONS::MU0, MURC, and SIGMA.
Referenced by COAX::Analyse(), COPLANAR::Analyse(), COUPLED_STRIPLINE::Analyse(), RECTWAVEGUIDE::Analyse(), STRIPLINE::Analyse(), TWISTEDPAIR::Analyse(), COUPLED_MICROSTRIP::attenuation(), MICROSTRIP::attenuation(), and RECTWAVEGUIDE::Synthesize().
|
overridevirtual |
Synthesis track geometry parameters to match given Z0.
Implements TRANSLINE_CALCULATION_BASE.
Definition at line 152 of file coupled_stripline.cpp.
References Analyse(), AW, delta, EPSILONR, FIX_SPACING, FIX_WIDTH, FROM_ZDIFF_ZCOMM, TRANSLINE_CALCULATION_BASE::GetParameter(), H, TRANSLINE_CALCULATION_BASE::MinimiseZ0Error1D(), PHYS_S, PHYS_WIDTH, TRANSLINE_CALCULATION_BASE::SetParameter(), TRANSLINE_CALCULATIONS::UNIT_MIL, Z0_E, Z0_O, Z_COMM, and Z_DIFF.
Referenced by BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), and BOOST_AUTO_TEST_CASE().
|
staticprotectedinherited |
Calculates the unit propagation delay (ps/cm) for the given effective permittivity.
@aEpsilonEff is the effective permittivity of the material
Definition at line 160 of file transline_calculation_base.cpp.
Referenced by COPLANAR::Analyse(), STRIPLINE::Analyse(), TWISTEDPAIR::Analyse(), COUPLED_STRIPLINE::calcDielectrics(), MICROSTRIP::dispersion(), and COUPLED_MICROSTRIP::er_eff_freq().
|
inherited |
Refit the Djordjevic-Sarkar model from the current parameter map.
Clears the fitted model when DIELECTRIC_MODEL_SEL is CONSTANT or the spec frequency is non-positive so the accessors fall through to the raw EPSILONR / TAND values.
Definition at line 166 of file transline_calculation_base.cpp.
References DIELECTRIC_MODEL_SEL, DJORDJEVIC_SARKAR, EPSILONR, EPSILONR_SPEC_FREQ, DIELECTRIC_DJORDJEVIC_SARKAR::Fit(), GetParameter(), m_dsModel, and TAND.
Referenced by COAX::Analyse(), COPLANAR::Analyse(), COUPLED_MICROSTRIP::Analyse(), COUPLED_STRIPLINE::Analyse(), MICROSTRIP::Analyse(), RECTWAVEGUIDE::Analyse(), STRIPLINE::Analyse(), TWISTEDPAIR::Analyse(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), COAX::Synthesize(), and RECTWAVEGUIDE::Synthesize().
|
staticinherited |
Wan-Hoorfar 2000 eq.
(12) / (13): filling factor q_2 for the second dielectric layer of a multilayer microstrip with normalised strip width aU = w/h and normalised cumulative layer boundary aHBarTop = h_2/h (so aHBarTop = 1 corresponds to the top of the substrate and aHBarTop > 1 means a mask of thickness (aHBarTop - 1) * h sits on top). This is the corrected form valid for any number of layers, replacing Svacina's original eq (3) / (7) which is only correct for two-layer structures.
Definition at line 218 of file transline_calculation_base.cpp.
References correction, and M_PI.
Referenced by BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), COPLANAR::GetSoldermaskDeltaQ(), COUPLED_MICROSTRIP::GetSoldermaskDeltaQ(), and MICROSTRIP::GetSoldermaskDeltaQ().
|
private |
Angular length (rad)
Definition at line 148 of file coupled_stripline.h.
Referenced by calcDielectrics(), and publishResults().
|
private |
Fringing capacitance from one edge to ground of zero thickness strip.
Definition at line 138 of file coupled_stripline.h.
Referenced by calcFringeCapacitances(), calcZ0EvenMode(), and calcZ0OddMode().
|
private |
Fringing capacitance of single strip of finite width.
Definition at line 139 of file coupled_stripline.h.
Referenced by calcFringeCapacitances(), calcZ0EvenMode(), and calcZ0OddMode().
|
private |
Even mode effective dielectric constant.
Definition at line 146 of file coupled_stripline.h.
Referenced by calcDielectrics(), and publishResults().
|
private |
Odd mode effective dielectric constant.
Definition at line 147 of file coupled_stripline.h.
Referenced by calcDielectrics(), and publishResults().
|
protectedinherited |
Analysis results.
Definition at line 337 of file transline_calculation_base.h.
Referenced by GetAnalysisResults(), and SetAnalysisResult().
|
protectedinherited |
Fitted Djordjevic-Sarkar model. Empty unless DIELECTRIC_MODEL_SEL selects it.
Definition at line 349 of file transline_calculation_base.h.
Referenced by GetDispersedEpsilonR(), GetDispersedTanDelta(), and UpdateDielectricModel().
|
staticconstexprprotectedinherited |
The maximum error for Z0 optimisations.
Definition at line 343 of file transline_calculation_base.h.
Referenced by MinimiseZ0Error1D().
|
protectedinherited |
All input and output properties used by the calculation.
Definition at line 334 of file transline_calculation_base.h.
Referenced by GetParameter(), GetParameterRef(), InitProperties(), and SetParameter().
|
private |
Calculator used to determine single stripline values.
Definition at line 153 of file coupled_stripline.h.
Referenced by calcLosses(), and calcZ0SymmetricStripline().
|
protectedinherited |
Synthesis results.
Definition at line 340 of file transline_calculation_base.h.
Referenced by GetSynthesisResults(), and SetSynthesisResult().
|
protectedinherited |
Which geometry parameter is the unknown during synthesis (set by the UI)
Definition at line 346 of file transline_calculation_base.h.
Referenced by GetSynthesizeTarget(), COAX::SetSynthesisResults(), COPLANAR::SetSynthesisResults(), RECTWAVEGUIDE::SetSynthesisResults(), TWISTEDPAIR::SetSynthesisResults(), COAX::SetSynthesizeTarget(), COPLANAR::SetSynthesizeTarget(), RECTWAVEGUIDE::SetSynthesizeTarget(), SetSynthesizeTarget(), TWISTEDPAIR::SetSynthesizeTarget(), COAX::Synthesize(), COPLANAR::Synthesize(), and TWISTEDPAIR::Synthesize().
|
private |
Even mode unit propagation delay (ps/cm)
Definition at line 149 of file coupled_stripline.h.
Referenced by calcDielectrics(), and publishResults().
|
private |
Odd mode unit propagation delay (ps/cm)
Definition at line 150 of file coupled_stripline.h.
Referenced by calcDielectrics(), and publishResults().
|
private |
Even mode impedance of coupled zero thickness strips.
Definition at line 143 of file coupled_stripline.h.
Referenced by Analyse(), calcOffsetZeroThicknessCoupledImpedances(), calcZ0EvenMode(), and calcZeroThicknessCoupledImpedances().
|
private |
Odd mode impedance of coupled zero thickness strips.
Definition at line 144 of file coupled_stripline.h.
Referenced by Analyse(), calcOffsetZeroThicknessCoupledImpedances(), calcZ0OddMode(), and calcZeroThicknessCoupledImpedances().
|
private |
Impedance of single strip of zero thickness.
Definition at line 141 of file coupled_stripline.h.
Referenced by calcSingleStripImpedances(), calcZ0EvenMode(), and calcZ0OddMode().
|
private |
Impedance of single strip of finite thickness.
Definition at line 142 of file coupled_stripline.h.
Referenced by calcSingleStripImpedances(), calcZ0EvenMode(), and calcZ0OddMode().