|
KiCad PCB EDA Suite
|
#include <coupled_microstrip.h>
Public Member Functions | |
| COUPLED_MICROSTRIP () | |
| double | GetSoldermaskDeltaQ (double aWOverH, double aCOverH) const override |
| Coupled microstrip shares the microstrip incremental filling factor. | |
| 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. | |
| 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 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 | |
| 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. | |
| double | delta_u_thickness_single (double, double) |
| Computes the thickness effect on normalized width for a single microstrip line. | |
| void | delta_u_thickness () |
| Compute the thickness effect on normalized width for coupled microstrips. | |
| void | compute_single_line () |
| Computes initial parameters for a single microstrip. | |
| double | filling_factor_even (double, double, double) |
| Compute the filling factor for the coupled microstrip even mode without cover and zero conductor thickness. | |
| double | filling_factor_odd (double, double, double) |
| Compute the filling factor for the coupled microstrip odd mode without cover and zero conductor thickness. | |
| double | delta_q_cover_even (double) |
| Compute the cover effect on filling factor for the even mode. | |
| double | delta_q_cover_odd (double) |
| Compute the cover effect on filling factor for the odd mode. | |
| void | er_eff_static () |
| Compute the static effective dielectric constants. | |
| double | delta_Z0_even_cover (double, double, double) |
| Compute the even mode impedance correction for a homogeneous microstrip due to the cover. | |
| double | delta_Z0_odd_cover (double, double, double) |
| Compute the odd mode impedance correction for a homogeneous microstrip due to the cover. | |
| void | Z0_even_odd () |
| Compute the static even- and odd-mode static impedances. | |
| void | er_eff_freq () |
| Compute er_eff as a function of frequency. | |
| void | conductor_losses () |
| Compute conductor losses per unit length. | |
| void | dielectric_losses () |
| Compute dielectric losses per unit length. | |
| void | attenuation () |
| Compute attenuation. | |
| void | line_angle () |
| Compute electrical length in radians. | |
| void | diff_impedance () |
| Calculate the differential impedance of the coupled microstrips. | |
| void | Z0_dispersion () |
| Calculate frequency dependency of characteristic impedances. | |
| void | syn_err_fun (double *, double *, double, double, double, double, double) |
| Error function to minimise when synthesising trace geometry. | |
| void | synth_width () |
| Calculate widths given Z0 and e_r. | |
| void | syn_fun (double *, double *, double, double, double, double) |
Private Attributes | |
| MICROSTRIP | m_aux_microstrip |
| Runs intermediate single-track calculations. | |
| double | w_t_e { 0.0 } |
| double | w_t_o { 0.0 } |
| double | er_eff_e_0 { 0.0 } |
| double | er_eff_o_0 { 0.0 } |
| double | Z0_e_0 { 0.0 } |
| double | Z0_o_0 { 0.0 } |
| double | er_eff_e { 0.0 } |
| double | er_eff_o { 0.0 } |
| double | prop_delay_e { 0.0 } |
| double | prop_delay_o { 0.0 } |
| double | atten_cond_e { 0.0 } |
| double | atten_cond_o { 0.0 } |
| double | atten_dielectric_e { 0.0 } |
| double | atten_dielectric_o { 0.0 } |
| double | ang_l_e { 0.0 } |
| double | ang_l_o { 0.0 } |
| double | Zdiff { 0.0 } |
Definition at line 32 of file coupled_microstrip.h.
|
private |
Definition at line 34 of file coupled_microstrip.h.
|
inline |
Definition at line 37 of file coupled_microstrip.h.
References ANG_L, ATTEN_COND_EVEN, ATTEN_COND_ODD, ATTEN_DILECTRIC_EVEN, ATTEN_DILECTRIC_ODD, DIELECTRIC_MODEL_SEL, EPSILON_EFF_EVEN, EPSILON_EFF_ODD, EPSILONR, EPSILONR_SPEC_FREQ, FREQUENCY, H, H_T, MURC, PHYS_LEN, PHYS_S, PHYS_WIDTH, ROUGH, SIGMA, SKIN_DEPTH, SOLDERMASK_EPSILONR, SOLDERMASK_PRESENT, SOLDERMASK_TAND, SOLDERMASK_THICKNESS, T, TAND, TRANSLINE_CALCULATION_BASE::TRANSLINE_CALCULATION_BASE(), UNIT_PROP_DELAY_EVEN, UNIT_PROP_DELAY_ODD, Z0_E, Z0_O, and Z_DIFF.
|
overridevirtual |
Analyse track geometry parameters to output Z0 and Ang_L.
Implements TRANSLINE_CALCULATION_BASE.
Definition at line 32 of file coupled_microstrip.cpp.
References TRANSLINE_CALCULATION_BASE::ApplySoldermaskCorrection(), attenuation(), delta_u_thickness(), diff_impedance(), EPSILONR, er_eff_e_0, er_eff_freq(), er_eff_o_0, er_eff_static(), FREQUENCY, TRANSLINE_CALCULATION_BASE::GetDispersedEpsilonR(), TRANSLINE_CALCULATION_BASE::GetDispersedTanDelta(), TRANSLINE_CALCULATION_BASE::GetParameter(), H, line_angle(), PHYS_WIDTH, TRANSLINE_CALCULATION_BASE::SetParameter(), TAND, TRANSLINE_CALCULATION_BASE::UpdateDielectricModel(), Z0_dispersion(), Z0_e_0, Z0_even_odd(), and Z0_o_0.
Referenced by BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), syn_fun(), and Synthesize().
|
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 |
Compute attenuation.
Definition at line 641 of file coupled_microstrip.cpp.
References conductor_losses(), dielectric_losses(), TRANSLINE_CALCULATION_BASE::SetParameter(), SKIN_DEPTH, and TRANSLINE_CALCULATION_BASE::SkinDepth().
Referenced by Analyse().
|
private |
Computes initial parameters for a single microstrip.
Definition at line 313 of file coupled_microstrip.cpp.
References EPSILONR, FREQUENCY, TRANSLINE_CALCULATION_BASE::GetParameter(), H, H_T, m_aux_microstrip, MURC, PHYS_WIDTH, and T.
Referenced by er_eff_static().
|
private |
Compute conductor losses per unit length.
Definition at line 578 of file coupled_microstrip.cpp.
References atten_cond_e, atten_cond_o, TRANSLINE_CALCULATIONS::C0, delta, er_eff_e_0, er_eff_o_0, FREQUENCY, TRANSLINE_CALCULATION_BASE::GetParameter(), M_PI, PHYS_LEN, PHYS_WIDTH, ROUGH, SIGMA, SKIN_DEPTH, Z0_e_0, Z0_o_0, and TRANSLINE_CALCULATIONS::ZF0.
Referenced by attenuation().
|
inlinestaticprotectedinherited |
Calculates cosh of the given argument.
Definition at line 328 of file transline_calculation_base.h.
Referenced by COUPLED_STRIPLINE::calcZeroThicknessCoupledImpedances().
|
private |
Compute the cover effect on filling factor for the even mode.
Definition at line 360 of file coupled_microstrip.cpp.
Referenced by er_eff_static().
|
private |
Compute the cover effect on filling factor for the odd mode.
Definition at line 373 of file coupled_microstrip.cpp.
Referenced by er_eff_static().
|
private |
Compute the thickness effect on normalized width for coupled microstrips.
References: Rolf Jansen, "High-Speed Computation of Single and Coupled Microstrip Parameters Including Dispersion, High-Order Modes, Loss and Finite Strip Thickness", IEEE Trans. MTT, vol. 26, no. 2, pp. 75-82, Feb. 1978
Definition at line 284 of file coupled_microstrip.cpp.
References delta_u_thickness_single(), EPSILONR, TRANSLINE_CALCULATION_BASE::GetParameter(), H, PHYS_S, PHYS_WIDTH, T, w_t_e, and w_t_o.
Referenced by Analyse().
|
private |
Computes the thickness effect on normalized width for a single microstrip line.
References: H. A. Atwater, "Simplified Design Equations for Microstrip Line Parameters", Microwave Journal, pp. 109-115,November 1989.
Definition at line 256 of file coupled_microstrip.cpp.
References M_PI.
Referenced by delta_u_thickness().
|
private |
Compute the even mode impedance correction for a homogeneous microstrip due to the cover.
References: S. March, "Microstrip Packaging: Watch the Last Step", Microwaves, vol. 20, no. 13, pp. 83.94, Dec. 1981.
Definition at line 433 of file coupled_microstrip.cpp.
References atanh(), D, F, and M_PI.
Referenced by Z0_even_odd().
|
private |
Compute the odd mode impedance correction for a homogeneous microstrip due to the cover.
References: S. March, "Microstrip Packaging: Watch the Last Step", Microwaves, vol. 20, no. 13, pp. 83.94, Dec. 1981.
Definition at line 456 of file coupled_microstrip.cpp.
Referenced by Z0_even_odd().
|
private |
Compute dielectric losses per unit length.
Definition at line 622 of file coupled_microstrip.cpp.
References atten_dielectric_e, atten_dielectric_o, TRANSLINE_CALCULATIONS::C0, EPSILONR, er_eff_e_0, er_eff_o_0, FREQUENCY, TRANSLINE_CALCULATION_BASE::GetParameter(), M_PI, PHYS_LEN, and TAND.
Referenced by attenuation().
|
private |
Calculate the differential impedance of the coupled microstrips.
Definition at line 671 of file coupled_microstrip.cpp.
References TRANSLINE_CALCULATION_BASE::GetParameter(), Z0_O, and Zdiff.
Referenced by Analyse().
|
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().
|
private |
Compute er_eff as a function of frequency.
Definition at line 532 of file coupled_microstrip.cpp.
References EPSILONR, er_eff_e, er_eff_e_0, er_eff_o, er_eff_o_0, FREQUENCY, TRANSLINE_CALCULATION_BASE::GetParameter(), H, PHYS_S, PHYS_WIDTH, prop_delay_e, prop_delay_o, and TRANSLINE_CALCULATION_BASE::UnitPropagationDelay().
Referenced by Analyse().
|
private |
Compute the static effective dielectric constants.
References: Manfred Kirschning and Rolf Jansen, "Accurate Wide-Range Design Equations for the Frequency-Dependent Characteristic of Parallel Coupled Microstrip Lines", IEEE Trans. MTT, vol. 32, no. 1, Jan. 1984
Definition at line 386 of file coupled_microstrip.cpp.
References compute_single_line(), delta_q_cover_even(), delta_q_cover_odd(), EPSILONR, er_eff_e_0, er_eff_o_0, filling_factor_even(), filling_factor_odd(), TRANSLINE_CALCULATION_BASE::GetParameter(), H, H_T, m_aux_microstrip, PHYS_S, T, w_t_e, and w_t_o.
Referenced by Analyse().
|
private |
Compute the filling factor for the coupled microstrip even mode without cover and zero conductor thickness.
Definition at line 330 of file coupled_microstrip.cpp.
Referenced by er_eff_static().
|
private |
Compute the filling factor for the coupled microstrip odd mode without cover and zero conductor thickness.
Definition at line 347 of file coupled_microstrip.cpp.
Referenced by er_eff_static().
|
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().
|
inlineoverridevirtual |
Coupled microstrip shares the microstrip incremental filling factor.
Both modes see the same over-substrate cover geometry; the even- and odd-mode differences are handled by applying the correction separately to er_eff_e and er_eff_o. Ignores the inter-trace gap contribution (a second-order refinement that would require extending Wan-Hoorfar 2000 to the even/odd modal decomposition of Kirschning-Jansen 1984).
Reimplemented from TRANSLINE_CALCULATION_BASE.
Definition at line 78 of file coupled_microstrip.h.
References TRANSLINE_CALCULATION_BASE::WanHoorfarQ2().
|
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().
|
private |
Compute electrical length in radians.
Definition at line 649 of file coupled_microstrip.cpp.
References ang_l_e, ang_l_o, TRANSLINE_CALCULATIONS::C0, er_eff_e, er_eff_o, FREQUENCY, TRANSLINE_CALCULATION_BASE::GetParameter(), M_PI, and PHYS_LEN.
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 |
|
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 184 of file coupled_microstrip.cpp.
References ANG_L, ang_l_e, ang_l_o, atten_cond_e, ATTEN_COND_EVEN, atten_cond_o, ATTEN_COND_ODD, atten_dielectric_e, atten_dielectric_o, ATTEN_DILECTRIC_EVEN, ATTEN_DILECTRIC_ODD, EPSILON_EFF_EVEN, EPSILON_EFF_ODD, er_eff_e, er_eff_o, TRANSLINE_CALCULATION_BASE::GetParameter(), L, OK, PHYS_LEN, PHYS_S, PHYS_WIDTH, prop_delay_e, prop_delay_o, S, TRANSLINE_CALCULATION_BASE::SetAnalysisResult(), SKIN_DEPTH, TS_ERROR, UNIT_PROP_DELAY_EVEN, UNIT_PROP_DELAY_ODD, WARNING, Z0_E, Z0_O, Z_DIFF, and Zdiff.
|
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 220 of file coupled_microstrip.cpp.
References ANG_L, ang_l_e, ang_l_o, atten_cond_e, ATTEN_COND_EVEN, atten_cond_o, ATTEN_COND_ODD, atten_dielectric_e, atten_dielectric_o, ATTEN_DILECTRIC_EVEN, ATTEN_DILECTRIC_ODD, EPSILON_EFF_EVEN, EPSILON_EFF_ODD, er_eff_e, er_eff_o, TRANSLINE_CALCULATION_BASE::GetParameter(), L, OK, PHYS_LEN, PHYS_S, PHYS_WIDTH, prop_delay_e, prop_delay_o, S, TRANSLINE_CALCULATION_BASE::SetSynthesisResult(), SKIN_DEPTH, TS_ERROR, UNIT_PROP_DELAY_EVEN, UNIT_PROP_DELAY_ODD, WARNING, Z0_E, Z0_O, Z_DIFF, and Zdiff.
|
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().
|
private |
Error function to minimise when synthesising trace geometry.
Definition at line 779 of file coupled_microstrip.cpp.
Referenced by synth_width().
|
private |
Definition at line 868 of file coupled_microstrip.cpp.
References Analyse(), TRANSLINE_CALCULATION_BASE::GetParameter(), H, PHYS_S, PHYS_WIDTH, TRANSLINE_CALCULATION_BASE::SetParameter(), Z0_E, and Z0_O.
Referenced by Synthesize().
|
private |
Calculate widths given Z0 and e_r.
From Akhtarzad S. et al., "The design of coupled microstrip lines", IEEE Trans. MTT-23, June 1975 and Hinton, J.H., "On design of coupled microstrip lines", IEEE Trans. MTT-28, March 1980
Definition at line 800 of file coupled_microstrip.cpp.
References acosh(), EPSILONR, TRANSLINE_CALCULATION_BASE::GetParameter(), H, M_PI, PHYS_S, PHYS_WIDTH, TRANSLINE_CALCULATION_BASE::SetParameter(), syn_err_fun(), Z0, Z0_E, and Z0_O.
Referenced by Synthesize().
|
overridevirtual |
Synthesis track geometry parameters to match given Z0.
Implements TRANSLINE_CALCULATION_BASE.
Definition at line 106 of file coupled_microstrip.cpp.
References Analyse(), ANG_L, ang_l_e, ang_l_o, TRANSLINE_CALCULATIONS::C0, er_eff_e, er_eff_o, FIX_SPACING, FIX_WIDTH, FREQUENCY, TRANSLINE_CALCULATION_BASE::GetParameter(), H, M_PI, TRANSLINE_CALCULATION_BASE::MinimiseZ0Error1D(), PHYS_LEN, PHYS_S, PHYS_WIDTH, TRANSLINE_CALCULATION_BASE::SetParameter(), syn_fun(), synth_width(), Z0_E, and Z0_O.
Referenced by 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 |
Calculate frequency dependency of characteristic impedances.
Definition at line 694 of file coupled_microstrip.cpp.
References EPSILON_EFF, EPSILONR, er_eff_o, er_eff_o_0, FREQUENCY, TRANSLINE_CALCULATION_BASE::GetParameter(), H, m_aux_microstrip, PHYS_S, PHYS_WIDTH, TRANSLINE_CALCULATION_BASE::SetParameter(), Z0, Z0_E, Z0_e_0, Z0_O, and Z0_o_0.
Referenced by Analyse().
|
private |
Compute the static even- and odd-mode static impedances.
References: Manfred Kirschning and Rolf Jansen, "Accurate Wide-Range Design Equations for the Frequency-Dependent Characteristic of Parallel Coupled Microstrip Lines", IEEE Trans. MTT, vol. 32, no. 1, Jan. 1984
Definition at line 484 of file coupled_microstrip.cpp.
References delta_Z0_even_cover(), delta_Z0_odd_cover(), er_eff_e_0, er_eff_o_0, TRANSLINE_CALCULATION_BASE::GetParameter(), H, H_T, m_aux_microstrip, PHYS_S, w_t_e, w_t_o, Z0_e_0, Z0_o_0, and TRANSLINE_CALCULATIONS::ZF0.
Referenced by Analyse().
|
private |
Definition at line 218 of file coupled_microstrip.h.
Referenced by line_angle(), SetAnalysisResults(), SetSynthesisResults(), and Synthesize().
|
private |
Definition at line 219 of file coupled_microstrip.h.
Referenced by line_angle(), SetAnalysisResults(), SetSynthesisResults(), and Synthesize().
|
private |
Definition at line 214 of file coupled_microstrip.h.
Referenced by conductor_losses(), SetAnalysisResults(), and SetSynthesisResults().
|
private |
Definition at line 215 of file coupled_microstrip.h.
Referenced by conductor_losses(), SetAnalysisResults(), and SetSynthesisResults().
|
private |
Definition at line 216 of file coupled_microstrip.h.
Referenced by dielectric_losses(), SetAnalysisResults(), and SetSynthesisResults().
|
private |
Definition at line 217 of file coupled_microstrip.h.
Referenced by dielectric_losses(), SetAnalysisResults(), and SetSynthesisResults().
|
private |
Definition at line 210 of file coupled_microstrip.h.
Referenced by er_eff_freq(), line_angle(), SetAnalysisResults(), SetSynthesisResults(), and Synthesize().
|
private |
Definition at line 206 of file coupled_microstrip.h.
Referenced by Analyse(), conductor_losses(), dielectric_losses(), er_eff_freq(), er_eff_static(), and Z0_even_odd().
|
private |
Definition at line 211 of file coupled_microstrip.h.
Referenced by er_eff_freq(), line_angle(), SetAnalysisResults(), SetSynthesisResults(), Synthesize(), and Z0_dispersion().
|
private |
Definition at line 207 of file coupled_microstrip.h.
Referenced by Analyse(), conductor_losses(), dielectric_losses(), er_eff_freq(), er_eff_static(), Z0_dispersion(), and Z0_even_odd().
|
protectedinherited |
Analysis results.
Definition at line 337 of file transline_calculation_base.h.
Referenced by GetAnalysisResults(), and SetAnalysisResult().
|
private |
Runs intermediate single-track calculations.
Definition at line 202 of file coupled_microstrip.h.
Referenced by compute_single_line(), er_eff_static(), Z0_dispersion(), and Z0_even_odd().
|
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().
|
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 |
Definition at line 212 of file coupled_microstrip.h.
Referenced by er_eff_freq(), SetAnalysisResults(), and SetSynthesisResults().
|
private |
Definition at line 213 of file coupled_microstrip.h.
Referenced by er_eff_freq(), SetAnalysisResults(), and SetSynthesisResults().
|
private |
Definition at line 204 of file coupled_microstrip.h.
Referenced by delta_u_thickness(), er_eff_static(), and Z0_even_odd().
|
private |
Definition at line 205 of file coupled_microstrip.h.
Referenced by delta_u_thickness(), er_eff_static(), and Z0_even_odd().
|
private |
Definition at line 208 of file coupled_microstrip.h.
Referenced by Analyse(), conductor_losses(), Z0_dispersion(), and Z0_even_odd().
|
private |
Definition at line 209 of file coupled_microstrip.h.
Referenced by Analyse(), conductor_losses(), Z0_dispersion(), and Z0_even_odd().
|
private |
Definition at line 220 of file coupled_microstrip.h.
Referenced by diff_impedance(), SetAnalysisResults(), and SetSynthesisResults().