KiCad PCB EDA Suite
Loading...
Searching...
No Matches
COUPLED_MICROSTRIP Class Reference

#include <coupled_microstrip.h>

Inheritance diagram for COUPLED_MICROSTRIP:
TRANSLINE_CALCULATION_BASE

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_SARKARm_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 }
 

Detailed Description

Definition at line 32 of file coupled_microstrip.h.

Member Typedef Documentation

◆ TCP

Definition at line 34 of file coupled_microstrip.h.

Constructor & Destructor Documentation

◆ COUPLED_MICROSTRIP()

Member Function Documentation

◆ Analyse()

◆ ApplySoldermaskCorrection()

std::pair< double, double > TRANSLINE_CALCULATION_BASE::ApplySoldermaskCorrection ( double aEpsEffUncoated,
double aTanDeltaSubstrate,
double aEpsRSubstrate,
double aWOverH,
double aF ) const
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().

◆ attenuation()

void COUPLED_MICROSTRIP::attenuation ( )
private

◆ compute_single_line()

void COUPLED_MICROSTRIP::compute_single_line ( )
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().

◆ conductor_losses()

void COUPLED_MICROSTRIP::conductor_losses ( )
private

◆ coth()

static double TRANSLINE_CALCULATION_BASE::coth ( const double x)
inlinestaticprotectedinherited

Calculates cosh of the given argument.

Definition at line 328 of file transline_calculation_base.h.

Referenced by COUPLED_STRIPLINE::calcZeroThicknessCoupledImpedances().

◆ delta_q_cover_even()

double COUPLED_MICROSTRIP::delta_q_cover_even ( double h2h)
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().

◆ delta_q_cover_odd()

double COUPLED_MICROSTRIP::delta_q_cover_odd ( double h2h)
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().

◆ delta_u_thickness()

void COUPLED_MICROSTRIP::delta_u_thickness ( )
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().

◆ delta_u_thickness_single()

double COUPLED_MICROSTRIP::delta_u_thickness_single ( double u,
double t_h )
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().

◆ delta_Z0_even_cover()

double COUPLED_MICROSTRIP::delta_Z0_even_cover ( double g,
double u,
double h2h )
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().

◆ delta_Z0_odd_cover()

double COUPLED_MICROSTRIP::delta_Z0_odd_cover ( double g,
double u,
double h2h )
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.

References G, and L.

Referenced by Z0_even_odd().

◆ dielectric_losses()

void COUPLED_MICROSTRIP::dielectric_losses ( )
private

◆ diff_impedance()

void COUPLED_MICROSTRIP::diff_impedance ( )
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().

◆ EllipticIntegral()

std::pair< double, double > TRANSLINE_CALCULATION_BASE::EllipticIntegral ( double arg)
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.

Returns
std::pair<K, E> where K = first kind integral, E = second kind integral

Definition at line 340 of file transline_calculation_base.cpp.

Referenced by COPLANAR::Analyse(), COUPLED_STRIPLINE::calcSingleStripImpedances(), and COUPLED_STRIPLINE::calcZeroThicknessCoupledImpedances().

◆ er_eff_freq()

void COUPLED_MICROSTRIP::er_eff_freq ( )
private

◆ er_eff_static()

void COUPLED_MICROSTRIP::er_eff_static ( )
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().

◆ filling_factor_even()

double COUPLED_MICROSTRIP::filling_factor_even ( double u,
double g,
double e_r )
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.

References v3, and v4.

Referenced by er_eff_static().

◆ filling_factor_odd()

double COUPLED_MICROSTRIP::filling_factor_odd ( double u,
double g,
double e_r )
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().

◆ GetAnalysisResults()

◆ GetDispersedEpsilonR()

double TRANSLINE_CALCULATION_BASE::GetDispersedEpsilonR ( double aF) const
inherited

◆ GetDispersedTanDelta()

double TRANSLINE_CALCULATION_BASE::GetDispersedTanDelta ( double aF) const
inherited

◆ GetParameter()

double TRANSLINE_CALCULATION_BASE::GetParameter ( const TRANSLINE_PARAMETERS aParam) const
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().

◆ GetParameterRef()

double & TRANSLINE_CALCULATION_BASE::GetParameterRef ( const TRANSLINE_PARAMETERS aParam)
inlineinherited

Adds a constant to the given parameter.

Definition at line 168 of file transline_calculation_base.h.

References m_parameters.

Referenced by MinimiseZ0Error1D().

◆ GetSoldermaskDeltaQ()

double COUPLED_MICROSTRIP::GetSoldermaskDeltaQ ( double aWOverH,
double aCOverH ) const
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().

◆ GetSynthesisResults()

std::unordered_map< TRANSLINE_PARAMETERS, std::pair< double, TRANSLINE_STATUS > > & TRANSLINE_CALCULATION_BASE::GetSynthesisResults ( )
inherited

Gets the output parameters following synthesis.

Definition at line 48 of file transline_calculation_base.cpp.

References m_synthesisStatus, and SetSynthesisResults().

◆ GetSynthesizeTarget()

TRANSLINE_PARAMETERS TRANSLINE_CALCULATION_BASE::GetSynthesizeTarget ( ) const
inlineinherited

Returns the parameter that will be solved for during synthesis.

Definition at line 192 of file transline_calculation_base.h.

References m_synthesizeTarget.

◆ InitProperties()

void TRANSLINE_CALCULATION_BASE::InitProperties ( const std::initializer_list< TRANSLINE_PARAMETERS > & aParams)
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().

◆ line_angle()

void COUPLED_MICROSTRIP::line_angle ( )
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().

◆ MinimiseZ0Error1D()

bool TRANSLINE_CALCULATION_BASE::MinimiseZ0Error1D ( TRANSLINE_PARAMETERS aOptimise,
TRANSLINE_PARAMETERS aMeasure,
bool aRecalculateLength = false )
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

Parameters
aOptimiseParameter to optimise
aMeasureThe parameter to measure / optimise against
aRecalculateLengthTrue if the angular length should be recalculated (not for differential pair usage)
Returns
true if error < MAX_ERROR, otherwise false

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().

◆ MinimiseZ0Error2D()

bool TRANSLINE_CALCULATION_BASE::MinimiseZ0Error2D ( TRANSLINE_PARAMETERS aParam1,
TRANSLINE_PARAMETERS aParam2 )
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

Parameters
aParam1First parameter to optimise
aParam2Secpmd parameter to optimise
Returns
true if error < MAX_ERROR, otherwise false

◆ sech()

static double TRANSLINE_CALCULATION_BASE::sech ( const double x)
inlinestaticprotectedinherited

Calculates sech of the given argument.

Definition at line 331 of file transline_calculation_base.h.

Referenced by COUPLED_STRIPLINE::calcSingleStripImpedances().

◆ SetAnalysisResult()

◆ SetAnalysisResults()

◆ SetParameter()

void TRANSLINE_CALCULATION_BASE::SetParameter ( const TRANSLINE_PARAMETERS aParam,
const double aValue )
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().

◆ SetSynthesisResult()

◆ SetSynthesisResults()

◆ SetSynthesizeTarget()

virtual void TRANSLINE_CALCULATION_BASE::SetSynthesizeTarget ( TRANSLINE_PARAMETERS aTarget)
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.

◆ SkinDepth()

◆ syn_err_fun()

void COUPLED_MICROSTRIP::syn_err_fun ( double * f1,
double * f2,
double s_h,
double w_h,
double e_r,
double w_h_se,
double w_h_so )
private

Error function to minimise when synthesising trace geometry.

Definition at line 779 of file coupled_microstrip.cpp.

References acosh(), and M_PI.

Referenced by synth_width().

◆ syn_fun()

void COUPLED_MICROSTRIP::syn_fun ( double * f1,
double * f2,
double s_h,
double w_h,
double Z0_e,
double Z0_o )
private

◆ synth_width()

void COUPLED_MICROSTRIP::synth_width ( )
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().

◆ Synthesize()

◆ UnitPropagationDelay()

double TRANSLINE_CALCULATION_BASE::UnitPropagationDelay ( double aEpsilonEff)
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().

◆ UpdateDielectricModel()

void TRANSLINE_CALCULATION_BASE::UpdateDielectricModel ( )
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().

◆ WanHoorfarQ2()

double TRANSLINE_CALCULATION_BASE::WanHoorfarQ2 ( double aU,
double aHBarTop )
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().

◆ Z0_dispersion()

void COUPLED_MICROSTRIP::Z0_dispersion ( )
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().

◆ Z0_even_odd()

void COUPLED_MICROSTRIP::Z0_even_odd ( )
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().

Member Data Documentation

◆ ang_l_e

double COUPLED_MICROSTRIP::ang_l_e { 0.0 }
private

◆ ang_l_o

double COUPLED_MICROSTRIP::ang_l_o { 0.0 }
private

◆ atten_cond_e

double COUPLED_MICROSTRIP::atten_cond_e { 0.0 }
private

Definition at line 214 of file coupled_microstrip.h.

Referenced by conductor_losses(), SetAnalysisResults(), and SetSynthesisResults().

◆ atten_cond_o

double COUPLED_MICROSTRIP::atten_cond_o { 0.0 }
private

Definition at line 215 of file coupled_microstrip.h.

Referenced by conductor_losses(), SetAnalysisResults(), and SetSynthesisResults().

◆ atten_dielectric_e

double COUPLED_MICROSTRIP::atten_dielectric_e { 0.0 }
private

◆ atten_dielectric_o

double COUPLED_MICROSTRIP::atten_dielectric_o { 0.0 }
private

◆ er_eff_e

double COUPLED_MICROSTRIP::er_eff_e { 0.0 }
private

◆ er_eff_e_0

double COUPLED_MICROSTRIP::er_eff_e_0 { 0.0 }
private

◆ er_eff_o

double COUPLED_MICROSTRIP::er_eff_o { 0.0 }
private

◆ er_eff_o_0

double COUPLED_MICROSTRIP::er_eff_o_0 { 0.0 }
private

◆ m_analysisStatus

std::unordered_map<TRANSLINE_PARAMETERS, std::pair<double, TRANSLINE_STATUS> > TRANSLINE_CALCULATION_BASE::m_analysisStatus
protectedinherited

Analysis results.

Definition at line 337 of file transline_calculation_base.h.

Referenced by GetAnalysisResults(), and SetAnalysisResult().

◆ m_aux_microstrip

MICROSTRIP COUPLED_MICROSTRIP::m_aux_microstrip
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().

◆ m_dsModel

std::optional<DIELECTRIC_DJORDJEVIC_SARKAR> TRANSLINE_CALCULATION_BASE::m_dsModel
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().

◆ m_maxError

double TRANSLINE_CALCULATION_BASE::m_maxError { 0.000001 }
staticconstexprprotectedinherited

The maximum error for Z0 optimisations.

Definition at line 343 of file transline_calculation_base.h.

Referenced by MinimiseZ0Error1D().

◆ m_parameters

std::unordered_map<TRANSLINE_PARAMETERS, double> TRANSLINE_CALCULATION_BASE::m_parameters
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().

◆ m_synthesisStatus

std::unordered_map<TRANSLINE_PARAMETERS, std::pair<double, TRANSLINE_STATUS> > TRANSLINE_CALCULATION_BASE::m_synthesisStatus
protectedinherited

Synthesis results.

Definition at line 340 of file transline_calculation_base.h.

Referenced by GetSynthesisResults(), and SetSynthesisResult().

◆ m_synthesizeTarget

◆ prop_delay_e

double COUPLED_MICROSTRIP::prop_delay_e { 0.0 }
private

Definition at line 212 of file coupled_microstrip.h.

Referenced by er_eff_freq(), SetAnalysisResults(), and SetSynthesisResults().

◆ prop_delay_o

double COUPLED_MICROSTRIP::prop_delay_o { 0.0 }
private

Definition at line 213 of file coupled_microstrip.h.

Referenced by er_eff_freq(), SetAnalysisResults(), and SetSynthesisResults().

◆ w_t_e

double COUPLED_MICROSTRIP::w_t_e { 0.0 }
private

Definition at line 204 of file coupled_microstrip.h.

Referenced by delta_u_thickness(), er_eff_static(), and Z0_even_odd().

◆ w_t_o

double COUPLED_MICROSTRIP::w_t_o { 0.0 }
private

Definition at line 205 of file coupled_microstrip.h.

Referenced by delta_u_thickness(), er_eff_static(), and Z0_even_odd().

◆ Z0_e_0

double COUPLED_MICROSTRIP::Z0_e_0 { 0.0 }
private

Definition at line 208 of file coupled_microstrip.h.

Referenced by Analyse(), conductor_losses(), Z0_dispersion(), and Z0_even_odd().

◆ Z0_o_0

double COUPLED_MICROSTRIP::Z0_o_0 { 0.0 }
private

Definition at line 209 of file coupled_microstrip.h.

Referenced by Analyse(), conductor_losses(), Z0_dispersion(), and Z0_even_odd().

◆ Zdiff

double COUPLED_MICROSTRIP::Zdiff { 0.0 }
private

Definition at line 220 of file coupled_microstrip.h.

Referenced by diff_impedance(), SetAnalysisResults(), and SetSynthesisResults().


The documentation for this class was generated from the following files: