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

#include <coupled_stripline.h>

Inheritance diagram for COUPLED_STRIPLINE:
TRANSLINE_CALCULATION_BASE

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.
 

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

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

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.
 

Detailed Description

Definition at line 36 of file coupled_stripline.h.

Member Typedef Documentation

◆ TCP

Definition at line 38 of file coupled_stripline.h.

Constructor & Destructor Documentation

◆ COUPLED_STRIPLINE()

COUPLED_STRIPLINE::COUPLED_STRIPLINE ( )
inline

Definition at line 41 of file coupled_stripline.h.

Member Function Documentation

◆ Analyse()

◆ calcDielectrics()

void COUPLED_STRIPLINE::calcDielectrics ( )
private

◆ calcFringeCapacitances()

void COUPLED_STRIPLINE::calcFringeCapacitances ( double  h,
double  t,
double  er 
)
private

Calculate the coupling fringe capacitances.

Definition at line 277 of file coupled_stripline.cpp.

References C_f_0, C_f_t_h, and TRANSLINE_CALCULATIONS::E0.

Referenced by Analyse().

◆ calcLosses()

void COUPLED_STRIPLINE::calcLosses ( )
private

Calculates conductor and dielectric losses.

Definition at line 350 of file coupled_stripline.cpp.

Referenced by Analyse().

◆ calcSingleStripImpedances()

void COUPLED_STRIPLINE::calcSingleStripImpedances ( )
private

◆ calcZ0EvenMode()

void COUPLED_STRIPLINE::calcZ0EvenMode ( )
private

Calculates even mode Z0.

Definition at line 322 of file coupled_stripline.cpp.

References C_f_0, C_f_t_h, TRANSLINE_CALCULATION_BASE::SetParameter(), Z0_e_w_h_0_s_h, Z0_w_h_0, and Z0_w_h_t_h.

Referenced by Analyse().

◆ calcZ0OddMode()

void COUPLED_STRIPLINE::calcZ0OddMode ( double  t,
double  s 
)
private

◆ calcZ0SymmetricStripline()

double COUPLED_STRIPLINE::calcZ0SymmetricStripline ( )
private

Calculates the impedance of a finite-width single strip.

Definition at line 377 of file coupled_stripline.cpp.

References STRIPLINE::Analyse(), TRANSLINE_CALCULATION_BASE::GetParameter(), m_striplineCalc, and TRANSLINE_CALCULATION_BASE::SetParameter().

Referenced by calcSingleStripImpedances().

◆ calcZeroThicknessCoupledImpedances()

void COUPLED_STRIPLINE::calcZeroThicknessCoupledImpedances ( double  h,
double  w,
double  s,
double  er 
)
private

Calculates zero-thickness coupled strip impedances.

Definition at line 289 of file coupled_stripline.cpp.

References TRANSLINE_CALCULATION_BASE::coth(), TRANSLINE_CALCULATION_BASE::EllipticIntegral(), Z0_e_w_h_0_s_h, Z0_o_w_h_0_s_h, and TRANSLINE_CALCULATIONS::ZF0.

Referenced by Analyse().

◆ coth()

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

Calculates cosh of the given argument.

Definition at line 211 of file transline_calculation_base.h.

Referenced by calcZeroThicknessCoupledImpedances().

◆ 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 159 of file transline_calculation_base.cpp.

References INFINITY, M_PI_2, and NR_EPSI.

Referenced by calcSingleStripImpedances(), and calcZeroThicknessCoupledImpedances().

◆ GetAnalysisResults()

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

◆ GetParameter()

◆ GetParameterRef()

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

Adds a constant to the given parameter.

Definition at line 124 of file transline_calculation_base.h.

References TRANSLINE_CALCULATION_BASE::m_parameters.

Referenced by TRANSLINE_CALCULATION_BASE::MinimiseZ0Error1D().

◆ GetSynthesisResults()

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

◆ 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 28 of file transline_calculation_base.cpp.

References TRANSLINE_CALCULATION_BASE::m_parameters.

Referenced by TRANSLINE_CALCULATION_BASE::TRANSLINE_CALCULATION_BASE().

◆ MinimiseZ0Error1D()

bool TRANSLINE_CALCULATION_BASE::MinimiseZ0Error1D ( TRANSLINE_PARAMETERS  aOptimise,
TRANSLINE_PARAMETERS  aMeasure 
)
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
Returns
true if error < MAX_ERROR, otherwise false

Definition at line 65 of file transline_calculation_base.cpp.

References TRANSLINE_CALCULATION_BASE::Analyse(), TRANSLINE_CALCULATIONS::C0, TRANSLINE_CALCULATION_BASE::GetParameter(), TRANSLINE_CALCULATION_BASE::GetParameterRef(), TRANSLINE_CALCULATION_BASE::m_maxError, and TRANSLINE_CALCULATION_BASE::SetParameter().

Referenced by COUPLED_MICROSTRIP::Synthesize(), Synthesize(), MICROSTRIP::Synthesize(), and STRIPLINE::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 214 of file transline_calculation_base.h.

Referenced by calcSingleStripImpedances().

◆ SetAnalysisResult()

void TRANSLINE_CALCULATION_BASE::SetAnalysisResult ( TRANSLINE_PARAMETERS  aParam,
const double  aValue,
const TRANSLINE_STATUS  aStatus = TRANSLINE_STATUS::OK 
)
protectedinherited

◆ SetAnalysisResults()

void COUPLED_STRIPLINE::SetAnalysisResults ( )
overrideprivatevirtual

◆ SetParameter()

◆ SetSynthesisResult()

void TRANSLINE_CALCULATION_BASE::SetSynthesisResult ( TRANSLINE_PARAMETERS  aParam,
const double  aValue,
const TRANSLINE_STATUS  aStatus = TRANSLINE_STATUS::OK 
)
protectedinherited

◆ SetSynthesisResults()

void COUPLED_STRIPLINE::SetSynthesisResults ( )
overrideprivatevirtual

◆ SkinDepth()

double TRANSLINE_CALCULATION_BASE::SkinDepth ( ) const
protectedinherited

◆ Synthesize()

bool COUPLED_STRIPLINE::Synthesize ( SYNTHESIZE_OPTS  aOpts)
overridevirtual

◆ 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 153 of file transline_calculation_base.cpp.

Referenced by STRIPLINE::Analyse(), calcDielectrics(), MICROSTRIP::dispersion(), and COUPLED_MICROSTRIP::er_eff_freq().

Member Data Documentation

◆ ang_l

double COUPLED_STRIPLINE::ang_l { 0.0 }
private

Angular length (rad)

Definition at line 95 of file coupled_stripline.h.

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

◆ C_f_0

double COUPLED_STRIPLINE::C_f_0 { 0.0 }
private

Fringing capacitance from one edge to ground of zero thickness strip.

Definition at line 85 of file coupled_stripline.h.

Referenced by calcFringeCapacitances(), calcZ0EvenMode(), and calcZ0OddMode().

◆ C_f_t_h

double COUPLED_STRIPLINE::C_f_t_h { 0.0 }
private

Fringing capacitance of single strip of finite width.

Definition at line 86 of file coupled_stripline.h.

Referenced by calcFringeCapacitances(), calcZ0EvenMode(), and calcZ0OddMode().

◆ e_eff_e

double COUPLED_STRIPLINE::e_eff_e { 0.0 }
private

Even mode effective dielectric constant.

Definition at line 93 of file coupled_stripline.h.

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

◆ e_eff_o

double COUPLED_STRIPLINE::e_eff_o { 0.0 }
private

Odd mode effective dielectric constant.

Definition at line 94 of file coupled_stripline.h.

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

◆ m_analysisStatus

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

◆ m_maxError

constexpr double TRANSLINE_CALCULATION_BASE::m_maxError { 0.000001 }
staticconstexprprotectedinherited

The maximum error for Z0 optimisations.

Definition at line 226 of file transline_calculation_base.h.

Referenced by TRANSLINE_CALCULATION_BASE::MinimiseZ0Error1D().

◆ m_parameters

std::unordered_map<TRANSLINE_PARAMETERS, double> TRANSLINE_CALCULATION_BASE::m_parameters
protectedinherited

◆ m_striplineCalc

STRIPLINE COUPLED_STRIPLINE::m_striplineCalc
private

Calculator used to determine single stripline values.

Definition at line 100 of file coupled_stripline.h.

Referenced by calcZ0SymmetricStripline().

◆ m_synthesisStatus

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

◆ unit_prop_delay_e

double COUPLED_STRIPLINE::unit_prop_delay_e { 0.0 }
private

Even mode unit propagation delay (ps/cm)

Definition at line 96 of file coupled_stripline.h.

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

◆ unit_prop_delay_o

double COUPLED_STRIPLINE::unit_prop_delay_o { 0.0 }
private

Odd mode unit propagation delay (ps/cm)

Definition at line 97 of file coupled_stripline.h.

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

◆ Z0_e_w_h_0_s_h

double COUPLED_STRIPLINE::Z0_e_w_h_0_s_h { 0.0 }
private

Even mode impedance of coupled zero thickness strips.

Definition at line 90 of file coupled_stripline.h.

Referenced by Analyse(), calcZ0EvenMode(), and calcZeroThicknessCoupledImpedances().

◆ Z0_o_w_h_0_s_h

double COUPLED_STRIPLINE::Z0_o_w_h_0_s_h { 0.0 }
private

Odd mode impedance of coupled zero thickness strips.

Definition at line 91 of file coupled_stripline.h.

Referenced by Analyse(), calcZ0OddMode(), and calcZeroThicknessCoupledImpedances().

◆ Z0_w_h_0

double COUPLED_STRIPLINE::Z0_w_h_0 { 0.0 }
private

Impedance of single strip of zero thickness.

Definition at line 88 of file coupled_stripline.h.

Referenced by calcSingleStripImpedances(), calcZ0EvenMode(), and calcZ0OddMode().

◆ Z0_w_h_t_h

double COUPLED_STRIPLINE::Z0_w_h_t_h { 0.0 }
private

Impedance of single strip of finite thickness.

Definition at line 89 of file coupled_stripline.h.

Referenced by calcSingleStripImpedances(), calcZ0EvenMode(), and calcZ0OddMode().


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