KiCad PCB EDA Suite
RECTWAVEGUIDE Class Reference

#include <rectwaveguide.h>

Inheritance diagram for RECTWAVEGUIDE:
TRANSLINE

Public Member Functions

 RECTWAVEGUIDE ()
 
void setProperty (enum PRMS_ID aPrmId, double aValue)
 
double getProperty (enum PRMS_ID aPrmId)
 
void getProperties ()
 @function getProperties More...
 
void checkProperties ()
 @function checkProperties More...
 
void setResult (int, const wxString &)
 
void setResult (int, double, const wxString &)
 
bool isSelected (enum PRMS_ID aPrmId)
 
void Init ()
 
virtual void synthesize ()
 
virtual void calc ()
 
void analyze ()
 

Public Attributes

const char * m_Name
 
KIGFX::COLOR4D errCol = KIGFX::COLOR4D( 1, 0.63, 0.63, 1 )
 
KIGFX::COLOR4D warnCol = KIGFX::COLOR4D( 1, 1, 0.57, 1 )
 
KIGFX::COLOR4D okCol = KIGFX::COLOR4D( 1, 1, 1, 1 )
 

Protected Member Functions

bool minimizeZ0Error1D (double *)
 @function minimizeZ0Error1D More...
 
double skin_depth ()
 @function skin_depth calculate skin depth More...
 
void ellipke (double, double &, double &)
 
double ellipk (double)
 
void setErrorLevel (PRMS_ID, char)
 @function setErrorLevel More...
 

Protected Attributes

double m_parameters [EXTRA_PRMS_COUNT]
 
double len
 
double er_eff
 
double ang_l
 

Private Member Functions

double kval_square ()
 
double kc_square (int, int)
 
double fc (int, int)
 
double alphac ()
 
double alphac_cutoff ()
 
double alphad ()
 
void get_rectwaveguide_sub ()
 
void get_rectwaveguide_comp ()
 
void get_rectwaveguide_phys ()
 
void get_rectwaveguide_elec ()
 
void show_results () override
 Shows results. More...
 
void calcAnalyze () override
 Computation for analysis. More...
 
void calcSynthesize () override
 Computation for synthesis. More...
 
void showAnalyze () override
 Shows synthesis results and checks for errors / warnings. More...
 
void showSynthesize () override
 Shows analysis results and checks for errors / warnings. More...
 

Private Attributes

double mur
 
double a
 
double b
 
double l
 
double Z0
 
double Z0EH
 
double mur_eff
 
double atten_dielectric
 
double atten_cond
 
double fc10
 

Detailed Description

Definition at line 33 of file rectwaveguide.h.

Constructor & Destructor Documentation

◆ RECTWAVEGUIDE()

RECTWAVEGUIDE::RECTWAVEGUIDE ( )

Definition at line 31 of file rectwaveguide.cpp.

31  : TRANSLINE(),
32  mur( 0.0 ), // magnetic permeability of substrate
33  a( 0.0 ), // width of waveguide
34  b( 0.0 ), // height of waveguide
35  l( 0.0 ), // length of waveguide
36  Z0( 0.0 ), // characteristic impedance
37  Z0EH( 0.0 ), // characteristic impedance of field quantities*/
38  mur_eff( 0.0 ), // Effective mag. permeability
39  atten_dielectric( 0.0 ), // Loss in dielectric (dB)
40  atten_cond( 0.0 ), // Loss in conductors (dB)
41  fc10( 1.0 ) // Cutoff frequency for TE10 mode
42 {
43  m_Name = "RectWaveGuide";
44  Init();
45 }
double atten_cond
Definition: rectwaveguide.h:50
void Init()
Definition: transline.cpp:98
const char * m_Name
Definition: transline.h:84
double atten_dielectric
Definition: rectwaveguide.h:49

References TRANSLINE::Init(), and TRANSLINE::m_Name.

Member Function Documentation

◆ alphac()

double RECTWAVEGUIDE::alphac ( )
private

Definition at line 88 of file rectwaveguide.cpp.

89 {
90  double Rs, f_c;
91  double ac;
92  short m, n, mmax, nmax;
93  double* a = &m_parameters[PHYS_A_PRM];
94  double* b = &m_parameters[PHYS_B_PRM];
95  double* f = &m_parameters[FREQUENCY_PRM];
96  double* murc = &m_parameters[MURC_PRM];
97  double* sigma = &m_parameters[SIGMA_PRM];
98 
99  Rs = sqrt( M_PI * *f * *murc * MU0 / *sigma );
100  ac = 0.0;
101  mmax = (int) floor( *f / fc( 1, 0 ) );
102  nmax = mmax;
103 
104  /* below from Ramo, Whinnery & Van Duzer */
105 
106  /* TE(m,n) modes */
107  for( n = 0; n <= nmax; n++ )
108  {
109  for( m = 1; m <= mmax; m++ )
110  {
111  f_c = fc( m, n );
112 
113  if( *f > f_c )
114  {
115  switch( n )
116  {
117  case 0:
118  ac += ( Rs / ( *b * ZF0 * sqrt( 1.0 - pow( ( f_c / *f ), 2.0 ) ) ) )
119  * ( 1.0 + ( ( 2 * *b / *a ) * pow( ( f_c / *f ), 2.0 ) ) );
120  break;
121 
122  default:
123  ac += ( ( 2. * Rs ) / ( *b * ZF0 * sqrt( 1.0 - pow( ( f_c / *f ), 2.0 ) ) ) )
124  * ( ( ( 1. + ( *b / *a ) ) * pow( ( f_c / *f ), 2.0 ) )
125  + ( ( 1. - pow( ( f_c / *f ), 2.0 ) )
126  * ( ( ( *b / *a )
127  * ( ( ( *b / *a ) * pow( m, 2. ) )
128  + pow( n, 2. ) ) )
129  / ( pow( ( *b * m / *a ), 2.0 )
130  + pow( n, 2.0 ) ) ) ) );
131  break;
132  }
133  }
134  }
135  }
136 
137  /* TM(m,n) modes */
138  for( n = 1; n <= nmax; n++ )
139  {
140  for( m = 1; m <= mmax; m++ )
141  {
142  f_c = fc( m, n );
143 
144  if( *f > f_c )
145  {
146  ac += ( ( 2. * Rs ) / ( *b * ZF0 * sqrt( 1.0 - pow( ( f_c / *f ), 2.0 ) ) ) )
147  * ( ( ( pow( m, 2.0 ) * pow( ( *b / *a ), 3.0 ) ) + pow( n, 2. ) )
148  / ( ( pow( ( m * *b / *a ), 2. ) ) + pow( n, 2.0 ) ) );
149  }
150  }
151  }
152 
153  ac = ac * 20.0 * log10( exp( 1. ) ); /* convert from Np/m to db/m */
154  return ac;
155 }
#define MU0
Definition: units.h:60
#define PHYS_B_PRM
Definition: rectwaveguide.h:31
#define ZF0
Definition: units.h:62
double m_parameters[EXTRA_PRMS_COUNT]
Definition: transline.h:131
double fc(int, int)
#define PHYS_A_PRM
Definition: rectwaveguide.h:30

References a, b, fc(), FREQUENCY_PRM, TRANSLINE::m_parameters, MU0, MURC_PRM, PHYS_A_PRM, PHYS_B_PRM, SIGMA_PRM, and ZF0.

Referenced by calcAnalyze(), and calcSynthesize().

◆ alphac_cutoff()

double RECTWAVEGUIDE::alphac_cutoff ( )
private

Definition at line 161 of file rectwaveguide.cpp.

162 {
163  double acc;
164 
165  acc = sqrt( kc_square( 1, 0 ) - kval_square() );
166  acc = 20 * log10( exp( 1.0 ) ) * acc;
167  return acc;
168 }
double kval_square()
double kc_square(int, int)

References kc_square(), and kval_square().

Referenced by calcAnalyze(), and calcSynthesize().

◆ alphad()

double RECTWAVEGUIDE::alphad ( )
private

Definition at line 174 of file rectwaveguide.cpp.

175 {
176  double k_square, beta;
177  double ad;
178 
179  k_square = kval_square();
180  beta = sqrt( k_square - kc_square( 1, 0 ) );
181 
182  ad = ( k_square * m_parameters[TAND_PRM] ) / ( 2.0 * beta );
183  ad = ad * 20.0 * log10( exp( 1. ) ); /* convert from Np/m to db/m */
184  return ad;
185 }
double kval_square()
double m_parameters[EXTRA_PRMS_COUNT]
Definition: transline.h:131
double kc_square(int, int)

References kc_square(), kval_square(), TRANSLINE::m_parameters, and TAND_PRM.

Referenced by calcAnalyze(), and calcSynthesize().

◆ analyze()

void TRANSLINE::analyze ( )
inherited

Definition at line 219 of file transline.cpp.

220 {
221  getProperties();
222  checkProperties();
223  calcAnalyze();
224  showAnalyze();
225  show_results();
226 }
virtual void calcAnalyze()
Computation for analysis.
Definition: transline.h:102
virtual void show_results()
Shows results.
Definition: transline.h:122
void checkProperties()
@function checkProperties
Definition: transline.cpp:177
void getProperties()
@function getProperties
Definition: transline.cpp:158
virtual void showAnalyze()
Shows synthesis results and checks for errors / warnings.
Definition: transline.h:112

References TRANSLINE::calcAnalyze(), TRANSLINE::checkProperties(), TRANSLINE::getProperties(), TRANSLINE::show_results(), and TRANSLINE::showAnalyze().

Referenced by PANEL_TRANSLINE::OnTranslineAnalyse().

◆ calc()

virtual void TRANSLINE::calc ( )
inlinevirtualinherited

Definition at line 97 of file transline.h.

97 {}

◆ calcAnalyze()

void RECTWAVEGUIDE::calcAnalyze ( )
overrideprivatevirtual

Computation for analysis.

Reimplemented from TRANSLINE.

Definition at line 243 of file rectwaveguide.cpp.

244 {
245  double lambda_g;
246  double k_square;
247 
248  k_square = kval_square();
249 
250  if( kc_square( 1, 0 ) <= k_square )
251  {
252  /* propagating modes */
253 
254  // Z0 definition using fictive voltages and currents
257  / sqrt( 1.0 - pow( ( fc( 1, 0 ) / m_parameters[FREQUENCY_PRM] ), 2.0 ) );
258 
259  /* calculate electrical angle */
260  lambda_g = 2.0 * M_PI / sqrt( k_square - kc_square( 1, 0 ) );
262  2.0 * M_PI * m_parameters[PHYS_LEN_PRM] / lambda_g; /* in radians */
266  ( 1.0 - pow( fc( 1, 0 ) / m_parameters[FREQUENCY_PRM], 2.0 ) );
267  }
268  else
269  {
270  /* evanascent modes */
271  m_parameters[Z0_PRM] = 0;
272  m_parameters[ANG_L_PRM] = 0;
276  }
277 }
double kval_square()
double alphac_cutoff()
#define ZF0
Definition: units.h:62
double m_parameters[EXTRA_PRMS_COUNT]
Definition: transline.h:131
double fc(int, int)
double kc_square(int, int)

References alphac(), alphac_cutoff(), alphad(), ANG_L_PRM, EPSILON_EFF_PRM, EPSILONR_PRM, fc(), FREQUENCY_PRM, kc_square(), kval_square(), LOSS_CONDUCTOR_PRM, LOSS_DIELECTRIC_PRM, TRANSLINE::m_parameters, MUR_PRM, PHYS_LEN_PRM, Z0_PRM, and ZF0.

◆ calcSynthesize()

void RECTWAVEGUIDE::calcSynthesize ( )
overrideprivatevirtual

Computation for synthesis.

Reimplemented from TRANSLINE.

Definition at line 286 of file rectwaveguide.cpp.

287 {
288  double lambda_g, k_square, beta;
289  /* solve for a */
291  C0
292  / ( sqrt( ( m_parameters[MUR_PRM] * m_parameters[EPSILONR_PRM] ) ) * 2
293  * m_parameters[FREQUENCY_PRM] * sqrt( 1
294  - pow( ( ZF0 * sqrt( m_parameters[MUR_PRM]
297  ,2.0 ) ) );
298 
299  k_square = kval_square();
300  beta = sqrt( k_square - kc_square( 1, 0 ) );
301  lambda_g = 2.0 * M_PI / beta;
302  m_parameters[PHYS_LEN_PRM] = ( m_parameters[ANG_L_PRM] * lambda_g ) / ( 2.0 * M_PI ); /* in m */
303 
304  if( kc_square( 1, 0 ) <= k_square )
305  {
306  /*propagating modes */
307  beta = sqrt( k_square - kc_square( 1, 0 ) );
308  lambda_g = 2.0 * M_PI / beta;
312  ( 1.0 - pow( ( fc( 1, 0 ) / m_parameters[FREQUENCY_PRM] ), 2.0 ) );
313  }
314  else
315  {
316  /*evanascent modes */
317  m_parameters[Z0_PRM] = 0;
318  m_parameters[ANG_L_PRM] = 0;
322  }
323 }
double kval_square()
double alphac_cutoff()
#define ZF0
Definition: units.h:62
double m_parameters[EXTRA_PRMS_COUNT]
Definition: transline.h:131
#define C0
Definition: units.h:61
double fc(int, int)
double kc_square(int, int)
#define PHYS_A_PRM
Definition: rectwaveguide.h:30

References alphac(), alphac_cutoff(), alphad(), ANG_L_PRM, C0, EPSILON_EFF_PRM, EPSILONR_PRM, fc(), FREQUENCY_PRM, kc_square(), kval_square(), LOSS_CONDUCTOR_PRM, LOSS_DIELECTRIC_PRM, TRANSLINE::m_parameters, MUR_PRM, PHYS_A_PRM, PHYS_LEN_PRM, Z0_PRM, and ZF0.

◆ checkProperties()

void TRANSLINE::checkProperties ( )
inherited

@function checkProperties

Checks the input parameters (ie: negative length). Does not check for incompatibility between values as this depends on the line shape.

Definition at line 177 of file transline.cpp.

178 {
179  // Do not check for values that are results of analyzing / synthesizing
180  // Do not check for transline specific incompatibilities ( like " conductor height should be lesser than dielectric height")
181  if( !std::isfinite( m_parameters[EPSILONR_PRM] ) || m_parameters[EPSILONR_PRM] <= 0 )
183 
184  if( !std::isfinite( m_parameters[TAND_PRM] ) || m_parameters[TAND_PRM] < 0 )
186 
187  if( !std::isfinite( m_parameters[RHO_PRM] ) || m_parameters[RHO_PRM] < 0 )
189 
190  if( !std::isfinite( m_parameters[H_PRM] ) || m_parameters[H_PRM] < 0 )
192 
193  if( !std::isfinite( m_parameters[TWISTEDPAIR_TWIST_PRM] )
196 
197  if( !std::isfinite( m_parameters[STRIPLINE_A_PRM] ) || m_parameters[STRIPLINE_A_PRM] <= 0 )
199 
200  if( !std::isfinite( m_parameters[H_T_PRM] ) || m_parameters[H_T_PRM] <= 0 )
202 
203  // How can we check ROUGH_PRM ?
204 
205  if( !std::isfinite( m_parameters[MUR_PRM] ) || m_parameters[MUR_PRM] < 0 )
207 
208  if( !std::isfinite( m_parameters[TWISTEDPAIR_EPSILONR_ENV_PRM] )
211 
212  if( !std::isfinite( m_parameters[MURC_PRM] ) || m_parameters[MURC_PRM] < 0 )
214 
215  if( !std::isfinite( m_parameters[FREQUENCY_PRM] ) || m_parameters[FREQUENCY_PRM] <= 0 )
217 }
double m_parameters[EXTRA_PRMS_COUNT]
Definition: transline.h:131
#define TRANSLINE_WARNING
Definition: transline.h:30
void setErrorLevel(PRMS_ID, char)
@function setErrorLevel
Definition: transline.cpp:443

References EPSILONR_PRM, FREQUENCY_PRM, H_PRM, H_T_PRM, TRANSLINE::m_parameters, MUR_PRM, MURC_PRM, RHO_PRM, TRANSLINE::setErrorLevel(), STRIPLINE_A_PRM, TAND_PRM, TRANSLINE_WARNING, TWISTEDPAIR_EPSILONR_ENV_PRM, and TWISTEDPAIR_TWIST_PRM.

Referenced by TRANSLINE::analyze(), and TRANSLINE::synthesize().

◆ ellipk()

double TRANSLINE::ellipk ( double  k)
protectedinherited

Definition at line 332 of file transline.cpp.

333 {
334  double r, lost;
335 
336  ellipke( k, r, lost );
337  return r;
338 }
E_SERIE r
Definition: eserie.cpp:41
void ellipke(double, double &, double &)
Definition: transline.cpp:267

References TRANSLINE::ellipke(), and r.

Referenced by COPLANAR::calcAnalyze().

◆ ellipke()

void TRANSLINE::ellipke ( double  arg,
double &  k,
double &  e 
)
protectedinherited

Definition at line 267 of file transline.cpp.

268 {
269  int iMax = 16;
270 
271  if( arg == 1.0 )
272  {
273  k = INFINITY; // infinite
274  e = 0;
275  }
276  else if( std::isinf( arg ) && arg < 0 )
277  {
278  k = 0;
279  e = INFINITY; // infinite
280  }
281  else
282  {
283  double a, b, c, fr, s, fk = 1, fe = 1, t, da = arg;
284  int i;
285 
286  if( arg < 0 )
287  {
288  fk = 1 / sqrt( 1 - arg );
289  fe = sqrt( 1 - arg );
290  da = -arg / ( 1 - arg );
291  }
292 
293  a = 1;
294  b = sqrt( 1 - da );
295  c = sqrt( da );
296  fr = 0.5;
297  s = fr * c * c;
298 
299  for( i = 0; i < iMax; i++ )
300  {
301  t = ( a + b ) / 2;
302  c = ( a - b ) / 2;
303  b = sqrt( a * b );
304  a = t;
305  fr *= 2;
306  s += fr * c * c;
307 
308  if( c / a < NR_EPSI )
309  break;
310  }
311 
312  if( i >= iMax )
313  {
314  k = 0;
315  e = 0;
316  }
317  else
318  {
319  k = M_PI_2 / a;
320  e = M_PI_2 * ( 1 - s ) / a;
321  if( arg < 0 )
322  {
323  k *= fk;
324  e *= fe;
325  }
326  }
327  }
328 }
#define M_PI_2
Definition: transline.cpp:40
#define NR_EPSI
Definition: transline.cpp:261
#define INFINITY
Definition: transline.cpp:35

References INFINITY, M_PI_2, and NR_EPSI.

Referenced by TRANSLINE::ellipk().

◆ fc()

double RECTWAVEGUIDE::fc ( int  m,
int  n 
)
private

Definition at line 77 of file rectwaveguide.cpp.

78 {
79  return sqrt( kc_square( m, n ) / m_parameters[MUR_PRM] / m_parameters[EPSILONR_PRM] ) * C0 / 2.0
80  / M_PI;
81 }
double m_parameters[EXTRA_PRMS_COUNT]
Definition: transline.h:131
#define C0
Definition: units.h:61
double kc_square(int, int)

References C0, EPSILONR_PRM, kc_square(), TRANSLINE::m_parameters, and MUR_PRM.

Referenced by alphac(), calcAnalyze(), calcSynthesize(), and show_results().

◆ get_rectwaveguide_comp()

void RECTWAVEGUIDE::get_rectwaveguide_comp ( )
private

Definition at line 208 of file rectwaveguide.cpp.

209 {
211 }
double m_parameters[EXTRA_PRMS_COUNT]
Definition: transline.h:131
double getProperty(enum PRMS_ID aPrmId)
Definition: transline.cpp:148

References FREQUENCY_PRM, TRANSLINE::getProperty(), and TRANSLINE::m_parameters.

◆ get_rectwaveguide_elec()

void RECTWAVEGUIDE::get_rectwaveguide_elec ( )
private

Definition at line 219 of file rectwaveguide.cpp.

220 {
223 }
double m_parameters[EXTRA_PRMS_COUNT]
Definition: transline.h:131
double getProperty(enum PRMS_ID aPrmId)
Definition: transline.cpp:148

References ANG_L_PRM, TRANSLINE::getProperty(), TRANSLINE::m_parameters, and Z0_PRM.

◆ get_rectwaveguide_phys()

void RECTWAVEGUIDE::get_rectwaveguide_phys ( )
private

Definition at line 231 of file rectwaveguide.cpp.

232 {
236 }
#define PHYS_B_PRM
Definition: rectwaveguide.h:31
double m_parameters[EXTRA_PRMS_COUNT]
Definition: transline.h:131
double getProperty(enum PRMS_ID aPrmId)
Definition: transline.cpp:148
#define PHYS_A_PRM
Definition: rectwaveguide.h:30

References TRANSLINE::getProperty(), TRANSLINE::m_parameters, PHYS_A_PRM, PHYS_B_PRM, and PHYS_LEN_PRM.

◆ get_rectwaveguide_sub()

void RECTWAVEGUIDE::get_rectwaveguide_sub ( )
private

◆ getProperties()

void TRANSLINE::getProperties ( )
inherited

@function getProperties

Get all properties from the UI. Computes some extra ones.

Definition at line 158 of file transline.cpp.

159 {
160  for( int i = 0; i < DUMMY_PRM; ++i )
161  {
162  m_parameters[i] = getProperty( (PRMS_ID) i );
164  }
165 
169 }
double m_parameters[EXTRA_PRMS_COUNT]
Definition: transline.h:131
PRMS_ID
Definition: transline.h:36
double getProperty(enum PRMS_ID aPrmId)
Definition: transline.cpp:148
#define TRANSLINE_OK
Definition: transline.h:29
double skin_depth()
@function skin_depth calculate skin depth
Definition: transline.cpp:245
void setErrorLevel(PRMS_ID, char)
@function setErrorLevel
Definition: transline.cpp:443

References DUMMY_PRM, EPSILON_EFF_PRM, TRANSLINE::getProperty(), TRANSLINE::m_parameters, RHO_PRM, TRANSLINE::setErrorLevel(), SIGMA_PRM, TRANSLINE::skin_depth(), SKIN_DEPTH_PRM, and TRANSLINE_OK.

Referenced by TRANSLINE::analyze(), and TRANSLINE::synthesize().

◆ getProperty()

double TRANSLINE::getProperty ( enum PRMS_ID  aPrmId)
inherited

Definition at line 148 of file transline.cpp.

149 {
150  return GetPropertyInDialog( aPrmId );
151 }
double GetPropertyInDialog(enum PRMS_ID aPrmId)

References GetPropertyInDialog().

Referenced by get_rectwaveguide_comp(), get_rectwaveguide_elec(), get_rectwaveguide_phys(), get_rectwaveguide_sub(), and TRANSLINE::getProperties().

◆ Init()

void TRANSLINE::Init ( )
inherited

Definition at line 98 of file transline.cpp.

99 {
100  wxColour wxcol = wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW );
101  okCol = KIGFX::COLOR4D( wxcol );
102  okCol.r = wxcol.Red() / 255.0;
103  okCol.g = wxcol.Green() / 255.0;
104  okCol.b = wxcol.Blue() / 255.0;
105  int i;
106  // Initialize these variables mainly to avoid warnings from a static analyzer
107  for( i = 0; i < EXTRA_PRMS_COUNT; ++i )
108  {
109  m_parameters[i] = 0;
110  }
111 }
double g
Green component.
Definition: color4d.h:385
double b
Blue component.
Definition: color4d.h:386
double m_parameters[EXTRA_PRMS_COUNT]
Definition: transline.h:131
KIGFX::COLOR4D okCol
Definition: transline.h:128
double r
Red component.
Definition: color4d.h:384
A color representation with 4 components: red, green, blue, alpha.
Definition: color4d.h:103

References KIGFX::COLOR4D::b, EXTRA_PRMS_COUNT, KIGFX::COLOR4D::g, TRANSLINE::m_parameters, TRANSLINE::okCol, and KIGFX::COLOR4D::r.

Referenced by C_MICROSTRIP::C_MICROSTRIP(), COAX::COAX(), COPLANAR::COPLANAR(), MICROSTRIP::MICROSTRIP(), RECTWAVEGUIDE(), STRIPLINE::STRIPLINE(), TRANSLINE::TRANSLINE(), and TWISTEDPAIR::TWISTEDPAIR().

◆ isSelected()

bool TRANSLINE::isSelected ( enum PRMS_ID  aPrmId)
inherited

◆ kc_square()

double RECTWAVEGUIDE::kc_square ( int  m,
int  n 
)
private

Definition at line 66 of file rectwaveguide.cpp.

67 {
68  return pow( ( m * M_PI / m_parameters[PHYS_A_PRM] ), 2.0 )
69  + pow( ( n * M_PI / m_parameters[PHYS_B_PRM] ), 2.0 );
70 }
#define PHYS_B_PRM
Definition: rectwaveguide.h:31
double m_parameters[EXTRA_PRMS_COUNT]
Definition: transline.h:131
#define PHYS_A_PRM
Definition: rectwaveguide.h:30

References TRANSLINE::m_parameters, PHYS_A_PRM, and PHYS_B_PRM.

Referenced by alphac_cutoff(), alphad(), calcAnalyze(), calcSynthesize(), fc(), and show_results().

◆ kval_square()

double RECTWAVEGUIDE::kval_square ( )
private

Definition at line 51 of file rectwaveguide.cpp.

52 {
53  double kval;
54 
55  kval = 2.0 * M_PI * m_parameters[FREQUENCY_PRM]
57 
58  return kval * kval;
59 }
double m_parameters[EXTRA_PRMS_COUNT]
Definition: transline.h:131
#define C0
Definition: units.h:61

References C0, EPSILONR_PRM, FREQUENCY_PRM, TRANSLINE::m_parameters, and MUR_PRM.

Referenced by alphac_cutoff(), alphad(), calcAnalyze(), calcSynthesize(), and show_results().

◆ minimizeZ0Error1D()

bool TRANSLINE::minimizeZ0Error1D ( double *  aVar)
protectedinherited

@function minimizeZ0Error1D

Tries to find a parameter that minimizes the error ( on Z0 ). This function only works with a single parameter. Calls calcAnalyze several times until the error is acceptable. While the error is unnacceptable, changes slightly the parameter.

This function does not change Z0 / Angl_L.

Parameters
avarParameter to synthesize
Returns
'true' if error < MAX_ERROR, else 'false'

Definition at line 357 of file transline.cpp.

358 {
359  double Z0_dest, Z0_current, Z0_result, angl_l_dest, increment, slope, error;
360  int iteration;
361 
362  if( !std::isfinite( m_parameters[Z0_PRM] ) )
363  {
364  *aVar = NAN;
365  return false;
366  }
367 
368  if( ( !std::isfinite( *aVar ) ) || ( *aVar == 0 ) )
369  *aVar = 0.001;
370 
371  /* required value of Z0 */
372  Z0_dest = m_parameters[Z0_PRM];
373 
374  /* required value of angl_l */
375  angl_l_dest = m_parameters[ANG_L_PRM];
376 
377  /* Newton's method */
378  iteration = 0;
379 
380  /* compute parameters */
381  calcAnalyze();
382  Z0_current = m_parameters[Z0_PRM];
383 
384  error = fabs( Z0_dest - Z0_current );
385 
386  while( error > MAX_ERROR )
387  {
388  iteration++;
389  increment = *aVar / 100.0;
390  *aVar += increment;
391  /* compute parameters */
392  calcAnalyze();
393  Z0_result = m_parameters[Z0_PRM];
394  /* f(w(n)) = Z0 - Z0(w(n)) */
395  /* f'(w(n)) = -f'(Z0(w(n))) */
396  /* f'(Z0(w(n))) = (Z0(w(n)) - Z0(w(n+delw))/delw */
397  /* w(n+1) = w(n) - f(w(n))/f'(w(n)) */
398  slope = ( Z0_result - Z0_current ) / increment;
399  slope = ( Z0_dest - Z0_current ) / slope - increment;
400  *aVar += slope;
401 
402  if( *aVar <= 0.0 )
403  *aVar = increment;
404 
405  /* find new error */
406  /* compute parameters */
407  calcAnalyze();
408  Z0_current = m_parameters[Z0_PRM];
409  error = fabs( Z0_dest - Z0_current );
410 
411  if( iteration > 100 )
412  break;
413  }
414 
415  /* Compute one last time, but with correct length */
416  m_parameters[Z0_PRM] = Z0_dest;
417  m_parameters[ANG_L_PRM] = angl_l_dest;
420  / 2.0 / M_PI; /* in m */
421  calcAnalyze();
422 
423  /* Restore parameters */
424  m_parameters[Z0_PRM] = Z0_dest;
425  m_parameters[ANG_L_PRM] = angl_l_dest;
428  / 2.0 / M_PI; /* in m */
429  return error <= MAX_ERROR;
430 }
virtual void calcAnalyze()
Computation for analysis.
Definition: transline.h:102
#define MAX_ERROR
Definition: transline.cpp:340
double m_parameters[EXTRA_PRMS_COUNT]
Definition: transline.h:131
#define C0
Definition: units.h:61

References ANG_L_PRM, C0, TRANSLINE::calcAnalyze(), EPSILON_EFF_PRM, FREQUENCY_PRM, TRANSLINE::m_parameters, MAX_ERROR, PHYS_LEN_PRM, and Z0_PRM.

Referenced by COPLANAR::calcSynthesize(), TWISTEDPAIR::calcSynthesize(), STRIPLINE::calcSynthesize(), and MICROSTRIP::calcSynthesize().

◆ setErrorLevel()

void TRANSLINE::setErrorLevel ( PRMS_ID  aP,
char  aErrorLevel 
)
protectedinherited

@function setErrorLevel

set an error / warning level for a given parameter.

See also
TRANSLINE_OK
TRANSLINE_WARNING
TRANSLINE_ERROR
Parameters
aPparameter
aErrorLevelError level

Definition at line 443 of file transline.cpp.

444 {
445  switch( aErrorLevel )
446  {
449  default: SetPropertyBgColorInDialog( aP, &okCol ); break;
450  }
451 }
void SetPropertyBgColorInDialog(enum PRMS_ID aPrmId, const KIGFX::COLOR4D *aCol)
Function SetPropertyBgColorInDialog Set the background color of a parameter.
KIGFX::COLOR4D okCol
Definition: transline.h:128
KIGFX::COLOR4D errCol
Definition: transline.h:126
#define TRANSLINE_ERROR
Definition: transline.h:31
KIGFX::COLOR4D warnCol
Definition: transline.h:127
#define TRANSLINE_WARNING
Definition: transline.h:30

References TRANSLINE::errCol, TRANSLINE::okCol, SetPropertyBgColorInDialog(), TRANSLINE_ERROR, TRANSLINE_WARNING, and TRANSLINE::warnCol.

Referenced by TRANSLINE::checkProperties(), TRANSLINE::getProperties(), TWISTEDPAIR::showAnalyze(), COAX::showAnalyze(), STRIPLINE::showAnalyze(), COPLANAR::showAnalyze(), showAnalyze(), MICROSTRIP::showAnalyze(), C_MICROSTRIP::showAnalyze(), TWISTEDPAIR::showSynthesize(), STRIPLINE::showSynthesize(), COAX::showSynthesize(), COPLANAR::showSynthesize(), showSynthesize(), MICROSTRIP::showSynthesize(), and C_MICROSTRIP::showSynthesize().

◆ setProperty()

◆ setResult() [1/2]

void TRANSLINE::setResult ( int  line,
const wxString &  text 
)
inherited

◆ setResult() [2/2]

void TRANSLINE::setResult ( int  line,
double  value,
const wxString &  text 
)
inherited

Definition at line 141 of file transline.cpp.

142 {
143  SetResultInDialog( line, value, text );
144 }
void SetResultInDialog(int line, const char *text)

References SetResultInDialog(), and text.

◆ show_results()

void RECTWAVEGUIDE::show_results ( )
overrideprivatevirtual

Shows results.

Reimplemented from TRANSLINE.

Definition at line 372 of file rectwaveguide.cpp.

373 {
374  int m, n, max = 6;
375  wxString text;
376 
377  // Z0EH = Ey / Hx (definition with field quantities)
378  Z0EH = ZF0 * sqrt( kval_square() / ( kval_square() - kc_square( 1, 0 ) ) );
379  setResult( 0, Z0EH, wxT( "Ohm" ) );
380 
382  setResult( 2, m_parameters[LOSS_CONDUCTOR_PRM], wxT( "dB" ) );
383  setResult( 3, m_parameters[LOSS_DIELECTRIC_PRM], wxT( "dB" ) );
384 
385  // show possible TE modes (H modes)
386  if( m_parameters[FREQUENCY_PRM] < fc( 1, 0 ) )
387  {
388  text = wxT( "none" );
389  }
390  else
391  {
392  for( m = 0; m <= max; m++ )
393  {
394  for( n = 0; n <= max; n++ )
395  {
396  if( ( m == 0 ) && ( n == 0 ) )
397  continue;
398 
399  if( m_parameters[FREQUENCY_PRM] >= ( fc( m, n ) ) )
400  text << wxString::Format( wxT( "H(%d,%d) " ), m, n );
401  }
402  }
403  }
404  setResult( 4, text );
405 
406  // show possible TM modes (E modes)
407  if( m_parameters[FREQUENCY_PRM] < fc( 1, 1 ) )
408  {
409  text = wxT( "none" );
410  }
411  else
412  {
413  text.Clear();
414 
415  for( m = 1; m <= max; m++ )
416  {
417  for( n = 1; n <= max; n++ )
418  {
419  if( m_parameters[FREQUENCY_PRM] >= fc( m, n ) )
420  text << wxString::Format( wxT( "E(%d,%d) " ), m, n );
421  }
422  }
423  }
424 
425  setResult( 5, text );
426 }
void setResult(int, const wxString &)
Definition: transline.cpp:135
double kval_square()
#define ZF0
Definition: units.h:62
double m_parameters[EXTRA_PRMS_COUNT]
Definition: transline.h:131
void Format(OUTPUTFORMATTER *out, int aNestLevel, int aCtl, const CPTREE &aTree)
Output a PTREE into s-expression format via an OUTPUTFORMATTER derivative.
Definition: ptree.cpp:200
double fc(int, int)
double kc_square(int, int)

References EPSILON_EFF_PRM, fc(), Format(), FREQUENCY_PRM, kc_square(), kval_square(), LOSS_CONDUCTOR_PRM, LOSS_DIELECTRIC_PRM, TRANSLINE::m_parameters, TRANSLINE::setResult(), text, Z0EH, and ZF0.

◆ showAnalyze()

void RECTWAVEGUIDE::showAnalyze ( )
overrideprivatevirtual

Shows synthesis results and checks for errors / warnings.

Reimplemented from TRANSLINE.

Definition at line 351 of file rectwaveguide.cpp.

352 {
355 
356  // Check for errors
357  if( !std::isfinite( m_parameters[Z0_PRM] ) || m_parameters[Z0_PRM] < 0 )
359 
360  if( !std::isfinite( m_parameters[ANG_L_PRM] ) || m_parameters[ANG_L_PRM] < 0 )
362 
363  // Check for warnings
364  if( !std::isfinite( m_parameters[PHYS_A_PRM] ) || m_parameters[PHYS_A_PRM] <= 0 )
366 
367  if( !std::isfinite( m_parameters[PHYS_B_PRM] ) || m_parameters[PHYS_B_PRM] <= 00 )
369 }
void setProperty(enum PRMS_ID aPrmId, double aValue)
Definition: transline.cpp:117
#define PHYS_B_PRM
Definition: rectwaveguide.h:31
double m_parameters[EXTRA_PRMS_COUNT]
Definition: transline.h:131
#define TRANSLINE_ERROR
Definition: transline.h:31
#define PHYS_A_PRM
Definition: rectwaveguide.h:30
#define TRANSLINE_WARNING
Definition: transline.h:30
void setErrorLevel(PRMS_ID, char)
@function setErrorLevel
Definition: transline.cpp:443

References ANG_L_PRM, TRANSLINE::m_parameters, PHYS_A_PRM, PHYS_B_PRM, TRANSLINE::setErrorLevel(), TRANSLINE::setProperty(), TRANSLINE_ERROR, TRANSLINE_WARNING, and Z0_PRM.

◆ showSynthesize()

void RECTWAVEGUIDE::showSynthesize ( )
overrideprivatevirtual

Shows analysis results and checks for errors / warnings.

Reimplemented from TRANSLINE.

Definition at line 325 of file rectwaveguide.cpp.

326 {
327  if( isSelected( PHYS_A_PRM ) )
329 
330  if( isSelected( PHYS_B_PRM ) )
332 
334 
335  // Check for errors
336  if( !std::isfinite( m_parameters[PHYS_A_PRM] ) || m_parameters[PHYS_A_PRM] <= 0 )
338 
339  if( !std::isfinite( m_parameters[PHYS_B_PRM] ) || m_parameters[PHYS_B_PRM] <= 00 )
341 
342  // Check for warnings
343  if( !std::isfinite( m_parameters[Z0_PRM] ) || m_parameters[Z0_PRM] < 0 )
345 
346  if( !std::isfinite( m_parameters[ANG_L_PRM] ) || m_parameters[ANG_L_PRM] < 0 )
348 }
bool isSelected(enum PRMS_ID aPrmId)
Definition: transline.cpp:127
void setProperty(enum PRMS_ID aPrmId, double aValue)
Definition: transline.cpp:117
#define PHYS_B_PRM
Definition: rectwaveguide.h:31
double m_parameters[EXTRA_PRMS_COUNT]
Definition: transline.h:131
#define TRANSLINE_ERROR
Definition: transline.h:31
#define PHYS_A_PRM
Definition: rectwaveguide.h:30
#define TRANSLINE_WARNING
Definition: transline.h:30
void setErrorLevel(PRMS_ID, char)
@function setErrorLevel
Definition: transline.cpp:443

References ANG_L_PRM, TRANSLINE::isSelected(), TRANSLINE::m_parameters, PHYS_A_PRM, PHYS_B_PRM, PHYS_LEN_PRM, TRANSLINE::setErrorLevel(), TRANSLINE::setProperty(), TRANSLINE_ERROR, TRANSLINE_WARNING, and Z0_PRM.

◆ skin_depth()

double TRANSLINE::skin_depth ( )
protectedinherited

@function skin_depth calculate skin depth

$ \frac{1}{\sqrt{ \pi \cdot f \cdot \mu \cdot \sigma }} $

Definition at line 245 of file transline.cpp.

246 {
247  double depth;
248  depth = 1.0
249  / sqrt( M_PI * m_parameters[FREQUENCY_PRM] * m_parameters[MURC_PRM] * MU0
250  * m_parameters[SIGMA_PRM] );
251  return depth;
252 }
#define MU0
Definition: units.h:60
double m_parameters[EXTRA_PRMS_COUNT]
Definition: transline.h:131

References FREQUENCY_PRM, TRANSLINE::m_parameters, MU0, MURC_PRM, and SIGMA_PRM.

Referenced by MICROSTRIP::attenuation(), C_MICROSTRIP::attenuation(), STRIPLINE::calcAnalyze(), COPLANAR::calcAnalyze(), and TRANSLINE::getProperties().

◆ synthesize()

void TRANSLINE::synthesize ( )
virtualinherited

Definition at line 228 of file transline.cpp.

229 {
230  getProperties();
231  checkProperties();
232  calcSynthesize();
233  showSynthesize();
234  show_results();
235 }
virtual void calcSynthesize()
Computation for synthesis.
Definition: transline.h:107
virtual void showSynthesize()
Shows analysis results and checks for errors / warnings.
Definition: transline.h:117
virtual void show_results()
Shows results.
Definition: transline.h:122
void checkProperties()
@function checkProperties
Definition: transline.cpp:177
void getProperties()
@function getProperties
Definition: transline.cpp:158

References TRANSLINE::calcSynthesize(), TRANSLINE::checkProperties(), TRANSLINE::getProperties(), TRANSLINE::show_results(), and TRANSLINE::showSynthesize().

Referenced by PANEL_TRANSLINE::OnTranslineSynthetize().

Member Data Documentation

◆ a

double RECTWAVEGUIDE::a
private

Definition at line 41 of file rectwaveguide.h.

Referenced by alphac().

◆ ang_l

double TRANSLINE::ang_l
protectedinherited

Definition at line 134 of file transline.h.

Referenced by TRANSLINE::TRANSLINE().

◆ atten_cond

double RECTWAVEGUIDE::atten_cond
private

Definition at line 50 of file rectwaveguide.h.

◆ atten_dielectric

double RECTWAVEGUIDE::atten_dielectric
private

Definition at line 49 of file rectwaveguide.h.

◆ b

double RECTWAVEGUIDE::b
private

Definition at line 42 of file rectwaveguide.h.

Referenced by alphac().

◆ er_eff

◆ errCol

KIGFX::COLOR4D TRANSLINE::errCol = KIGFX::COLOR4D( 1, 0.63, 0.63, 1 )
inherited

Definition at line 126 of file transline.h.

Referenced by TRANSLINE::setErrorLevel().

◆ fc10

double RECTWAVEGUIDE::fc10
private

Definition at line 51 of file rectwaveguide.h.

◆ l

double RECTWAVEGUIDE::l
private

Definition at line 43 of file rectwaveguide.h.

◆ len

double TRANSLINE::len
protectedinherited

Definition at line 132 of file transline.h.

Referenced by TRANSLINE::TRANSLINE().

◆ m_Name

◆ m_parameters

double TRANSLINE::m_parameters[EXTRA_PRMS_COUNT]
protectedinherited

Definition at line 131 of file transline.h.

Referenced by alphac(), COAX::alphac_coax(), alphad(), COAX::alphad_coax(), MICROSTRIP::attenuation(), C_MICROSTRIP::attenuation(), TWISTEDPAIR::calcAnalyze(), COAX::calcAnalyze(), STRIPLINE::calcAnalyze(), COPLANAR::calcAnalyze(), calcAnalyze(), TWISTEDPAIR::calcSynthesize(), COPLANAR::calcSynthesize(), COAX::calcSynthesize(), STRIPLINE::calcSynthesize(), calcSynthesize(), MICROSTRIP::calcSynthesize(), C_MICROSTRIP::calcSynthesize(), TRANSLINE::checkProperties(), C_MICROSTRIP::compute_single_line(), MICROSTRIP::conductor_losses(), C_MICROSTRIP::conductor_losses(), C_MICROSTRIP::delta_u_thickness(), MICROSTRIP::dielectric_losses(), C_MICROSTRIP::dielectric_losses(), MICROSTRIP::dispersion(), C_MICROSTRIP::er_eff_freq(), C_MICROSTRIP::er_eff_static(), fc(), get_rectwaveguide_comp(), get_rectwaveguide_elec(), get_rectwaveguide_phys(), get_rectwaveguide_sub(), TRANSLINE::getProperties(), TRANSLINE::Init(), kc_square(), kval_square(), MICROSTRIP::line_angle(), C_MICROSTRIP::line_angle(), STRIPLINE::lineImpedance(), MICROSTRIP::microstrip_Z0(), TRANSLINE::minimizeZ0Error1D(), MICROSTRIP::mur_eff_ms(), TWISTEDPAIR::show_results(), STRIPLINE::show_results(), COAX::show_results(), COPLANAR::show_results(), show_results(), MICROSTRIP::show_results(), C_MICROSTRIP::show_results(), TWISTEDPAIR::showAnalyze(), COAX::showAnalyze(), STRIPLINE::showAnalyze(), COPLANAR::showAnalyze(), showAnalyze(), MICROSTRIP::showAnalyze(), C_MICROSTRIP::showAnalyze(), STRIPLINE::showSynthesize(), TWISTEDPAIR::showSynthesize(), COAX::showSynthesize(), COPLANAR::showSynthesize(), showSynthesize(), MICROSTRIP::showSynthesize(), C_MICROSTRIP::showSynthesize(), TRANSLINE::skin_depth(), C_MICROSTRIP::syn_fun(), MICROSTRIP::synth_width(), C_MICROSTRIP::synth_width(), TRANSLINE::TRANSLINE(), C_MICROSTRIP::Z0_dispersion(), and C_MICROSTRIP::Z0_even_odd().

◆ mur

double RECTWAVEGUIDE::mur
private

Definition at line 40 of file rectwaveguide.h.

◆ mur_eff

double RECTWAVEGUIDE::mur_eff
private

Definition at line 48 of file rectwaveguide.h.

◆ okCol

KIGFX::COLOR4D TRANSLINE::okCol = KIGFX::COLOR4D( 1, 1, 1, 1 )
inherited

Definition at line 128 of file transline.h.

Referenced by TRANSLINE::Init(), and TRANSLINE::setErrorLevel().

◆ warnCol

KIGFX::COLOR4D TRANSLINE::warnCol = KIGFX::COLOR4D( 1, 1, 0.57, 1 )
inherited

Definition at line 127 of file transline.h.

Referenced by TRANSLINE::setErrorLevel().

◆ Z0

double RECTWAVEGUIDE::Z0
private

Definition at line 44 of file rectwaveguide.h.

◆ Z0EH

double RECTWAVEGUIDE::Z0EH
private

Definition at line 45 of file rectwaveguide.h.

Referenced by show_results().


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