// Setup constant S-parameter entries. void digital::initSP (void) { allocMatrixS (); setS (NODE_OUT, NODE_OUT, -1); for (i = 0; i < getSize () - 1; i++) { setS (NODE_IN1 + i, NODE_IN1 + i, +1); } }
void pac::calcSP (nr_double_t) { nr_double_t z = getPropertyDouble ("Z") / z0; setS (NODE_1, NODE_1, z / (z + 2)); setS (NODE_2, NODE_2, z / (z + 2)); setS (NODE_1, NODE_2, 2 / (z + 2)); setS (NODE_2, NODE_1, 2 / (z + 2)); }
void iinoise::initSP (void) { allocMatrixS (); setS (NODE_I1P, NODE_I1P, 1.0); setS (NODE_I1N, NODE_I1N, 1.0); setS (NODE_I2P, NODE_I2P, 1.0); setS (NODE_I2N, NODE_I2N, 1.0); }
void iac::initSP (void) { allocMatrixS (); setS (NODE_1, NODE_1, 1.0); setS (NODE_1, NODE_2, 0.0); setS (NODE_2, NODE_1, 0.0); setS (NODE_2, NODE_2, 1.0); }
/*!\brief Compute S parameters \f$S\f$ parameter are computed from admitance, therefore \f$S\f$ matrix of a capacitor of capacitance \f$C\f$ is: \f[ S=\begin{pmatrix} \frac{1}{1+4j\pi fCZ_0} & \frac{4j\pi fCZ_0}{1+4j\pi fCZ_0} \\ \frac{4j\pi fCZ_0}{1+4j\pi fCZ_0} & \frac{1}{1+4j\pi fCZ_0} \end{pmatrix} \f] \param[in] frequency frequency for S parameters simulation */ void capacitor::calcSP (nr_double_t frequency) { nr_double_t c = getPropertyDouble ("C") * z0; nr_complex_t y = 2.0 * rect (0, 2.0 * M_PI * frequency * c); setS (NODE_1, NODE_1, 1.0 / (1.0 + y)); setS (NODE_2, NODE_2, 1.0 / (1.0 + y)); setS (NODE_1, NODE_2, y / (1.0 + y)); setS (NODE_2, NODE_1, y / (1.0 + y)); }
void inductor::calcSP (nr_double_t frequency) { nr_double_t l = getPropertyDouble ("L") / z0; nr_complex_t z = rect (0, 2.0 * M_PI * frequency * l); setS (NODE_1, NODE_1, z / (z + 2.0)); setS (NODE_2, NODE_2, z / (z + 2.0)); setS (NODE_1, NODE_2, 2.0 / (z + 2.0)); setS (NODE_2, NODE_1, 2.0 / (z + 2.0)); }
void resistor::calcSP (nr_double_t) { // calculate S-parameters nr_double_t z = getScaledProperty ("R") / z0; setS (NODE_1, NODE_1, z / (z + 2)); setS (NODE_2, NODE_2, z / (z + 2)); setS (NODE_1, NODE_2, 2 / (z + 2)); setS (NODE_2, NODE_1, 2 / (z + 2)); }
void cpwstep::calcSP (nr_double_t frequency) { nr_complex_t z = 2.0 / calcY (frequency) / z0; nr_complex_t s11 = -1.0 / (z + 1.0); nr_complex_t s21 = +z / (z + 1.0); setS (NODE_1, NODE_1, s11); setS (NODE_2, NODE_2, s11); setS (NODE_1, NODE_2, s21); setS (NODE_2, NODE_1, s21); }
void msvia::calcSP (nr_double_t frequency) { // calculate s-parameters Z = calcImpedance (frequency); nr_complex_t z = Z / z0; setS (NODE_1, NODE_1, z / (z + 2.0)); setS (NODE_2, NODE_2, z / (z + 2.0)); setS (NODE_1, NODE_2, 2.0 / (z + 2.0)); setS (NODE_2, NODE_1, 2.0 / (z + 2.0)); }
void isolator::initSP (void) { nr_double_t z1 = getPropertyDouble ("Z1"); nr_double_t z2 = getPropertyDouble ("Z2"); nr_double_t s1 = (z1 - z0) / (z1 + z0); nr_double_t s2 = (z2 - z0) / (z2 + z0); allocMatrixS (); setS (NODE_1, NODE_1, s1); setS (NODE_2, NODE_2, s2); setS (NODE_1, NODE_2, 0); setS (NODE_2, NODE_1, sqrt (1 - s1 * s1) * sqrt (1 - s2 * s2)); }
/*! Initialize S-parameter simulation. An ideal amplifier is characterized by the following S-matrix \f[ S=\begin{pmatrix} \dfrac{Z_1-Z_0}{Z_1+Z_0} & 0 \\ \dfrac{4\cdot Z_0\cdot\sqrt{Z_1\cdot Z_2}\cdot G}{(Z_1+Z_0)\cdot(Z_2+Z_0)} & \dfrac{Z_2-Z_0}{Z_2+Z_0} \end{pmatrix} \f] With \f$Z_1\f$ and \f$Z_2\f$ the impedance of the port 1 and 2 and \f$G\f$ the gain. */ void amplifier::initSP (void) { nr_double_t g = getPropertyDouble ("G"); nr_double_t z1 = getPropertyDouble ("Z1"); nr_double_t z2 = getPropertyDouble ("Z2"); allocMatrixS (); setS (NODE_1, NODE_1, (z1 - z0) / (z1 + z0)); setS (NODE_1, NODE_2, 0); setS (NODE_2, NODE_2, (z2 - z0) / (z2 + z0)); setS (NODE_2, NODE_1, 4 * z0 * sqrt (z1 * z2) * g / (z1 + z0) / (z2 + z0)); }
void phaseshifter::initSP (void) { nr_double_t p = rad (getPropertyDouble ("phi")); nr_double_t z = getPropertyDouble ("Zref"); nr_double_t r = (z0 - z) / (z0 + z); nr_complex_t d = 1.0 - polar (r * r, 2 * p); nr_complex_t s11 = r * (polar (1.0, 2 * p) - 1.0) / d; nr_complex_t s21 = (1.0 - r * r) * polar (1.0, p) / d; allocMatrixS (); setS (NODE_1, NODE_1, s11); setS (NODE_2, NODE_2, s11); setS (NODE_1, NODE_2, s21); setS (NODE_2, NODE_1, s21); }
void tline::calcSP (nr_double_t frequency) { nr_double_t l = getPropertyDouble ("L"); nr_double_t z = getPropertyDouble ("Z"); nr_double_t a = getPropertyDouble ("Alpha"); nr_double_t r = (z - z0) / (z + z0); nr_double_t b = 2 * M_PI * frequency / C0; a = log (a) / 2; nr_complex_t p = exp (-l * rect (a, b)); nr_complex_t s11 = r * (1.0 - p * p) / (1.0 - p * p * r * r); nr_complex_t s21 = p * (1.0 - r * r) / (1.0 - p * p * r * r); setS (NODE_1, NODE_1, s11); setS (NODE_2, NODE_2, s11); setS (NODE_1, NODE_2, s21); setS (NODE_2, NODE_1, s21); }
void biastee::initSP (void) { allocMatrixS (); setS (NODE_1, NODE_1, 0.0); setS (NODE_1, NODE_2, 1.0); setS (NODE_1, NODE_3, 0.0); setS (NODE_2, NODE_1, 1.0); setS (NODE_2, NODE_2, 0.0); setS (NODE_2, NODE_3, 0.0); setS (NODE_3, NODE_1, 0.0); setS (NODE_3, NODE_2, 0.0); setS (NODE_3, NODE_3, 1.0); }
void opamp::initSP (void) { allocMatrixS (); setS (NODE_INP, NODE_INP, 1); setS (NODE_INP, NODE_OUT, 0); setS (NODE_INP, NODE_INM, 0); setS (NODE_INM, NODE_INP, 0); setS (NODE_INM, NODE_OUT, 0); setS (NODE_INM, NODE_INM, 1); setS (NODE_OUT, NODE_INP, +4 * gv); setS (NODE_OUT, NODE_OUT, -1); setS (NODE_OUT, NODE_INM, -4 * gv); }
Entity Block::getBlock() { // set position auto pos = new CPosition; pos->setX(32); pos->setY(32); E.addComponent(std::type_index(typeid(CPosition)), pos); // set sprite from a spritesheet auto spr = new CSprite; spr->setSize(32); spr->setSprite(this->getSprite(0, 0)); // coordinates in spritesheet E.addComponent(std::type_index(typeid(CSprite)), spr); // set state (0 = moveable) auto sta = new CState; sta->setS(0); E.addComponent(std::type_index(typeid(CState)), sta); // set velocity auto vel = new CVelocity; vel->setVelX(32); vel->setVelY(32); E.addComponent(std::type_index(typeid(CVelocity)), vel); return E; }
// Setup frequency dependent S-parameter entries. void digital::calcSP (nr_double_t frequency) { nr_double_t t = getPropertyDouble ("t"); for (i = 0; i < getSize () - 1; i++) { setS (NODE_OUT, NODE_IN1 + i, 4.0 * polar (g[i], - 2.0 * M_PI * frequency * t)); } }
void coaxline::calcSP (nr_double_t frequency) { nr_double_t l = getPropertyDouble ("L"); // calculate propagation constants calcPropagation (frequency); // calculate S-parameters nr_double_t z = zl / z0; nr_double_t y = 1 / z; nr_complex_t g = rect (alpha, beta); nr_complex_t n = 2.0 * cosh (g * l) + (z + y) * sinh (g * l); nr_complex_t s11 = (z - y) * sinh (g * l) / n; nr_complex_t s21 = 2.0 / n; setS (NODE_1, NODE_1, s11); setS (NODE_2, NODE_2, s11); setS (NODE_1, NODE_2, s21); setS (NODE_2, NODE_1, s21); }
void itrafo::initSP (void) { allocMatrixS (); nr_double_t z = getPropertyDouble ("Z"); nr_double_t n = 2 * z0 + z; setS (NODE_1, NODE_1, (2.0 * z0 - z) / n); setS (NODE_1, NODE_2, (2.0 * sqrt (z0 * z)) / n); setS (NODE_1, NODE_3, -(2.0 * sqrt (z0 * z)) / n); setS (NODE_2, NODE_1, (2.0 * sqrt (z0 * z)) / n); setS (NODE_2, NODE_2, (z) / n); setS (NODE_2, NODE_3, (2.0 * z0) / n); setS (NODE_3, NODE_1, -(2.0 * sqrt (z0 * z)) / n); setS (NODE_3, NODE_2, (2.0 * z0) / n); setS (NODE_3, NODE_3, (z) / n); }
void circulator::calcSP (nr_double_t) { nr_double_t z1 = getPropertyDouble ("Z1"); nr_double_t z2 = getPropertyDouble ("Z2"); nr_double_t z3 = getPropertyDouble ("Z3"); nr_double_t r1 = (z0 - z1) / (z0 + z1); nr_double_t r2 = (z0 - z2) / (z0 + z2); nr_double_t r3 = (z0 - z3) / (z0 + z3); nr_double_t d = 1 - r1 * r2 * r3; setS (NODE_1, NODE_1, (r2 * r3 - r1) / d); setS (NODE_2, NODE_2, (r1 * r3 - r2) / d); setS (NODE_3, NODE_3, (r1 * r2 - r3) / d); setS (NODE_1, NODE_2, sqrt (z2 / z1) * (z1 + z0) / (z2 + z0) * r3 * (1 - r1 * r1) / d); setS (NODE_2, NODE_3, sqrt (z3 / z2) * (z2 + z0) / (z3 + z0) * r1 * (1 - r2 * r2) / d); setS (NODE_3, NODE_1, sqrt (z1 / z3) * (z3 + z0) / (z1 + z0) * r2 * (1 - r3 * r3) / d); setS (NODE_2, NODE_1, sqrt (z1 / z2) * (z2 + z0) / (z1 + z0) * (1 - r2 * r2) / d); setS (NODE_1, NODE_3, sqrt (z3 / z1) * (z1 + z0) / (z3 + z0) * (1 - r1 * r1) / d); setS (NODE_3, NODE_2, sqrt (z2 / z3) * (z3 + z0) / (z2 + z0) * (1 - r3 * r3) / d); }
void tline4p::calcSP (nr_double_t frequency) { nr_double_t l = getPropertyDouble ("L"); nr_double_t z = getPropertyDouble ("Z"); nr_double_t a = getPropertyDouble ("Alpha"); nr_double_t b = 2 * M_PI * frequency / C0; a = log (a) / 2; nr_complex_t g = rect (a, b); nr_double_t p = 2 * z0 + z; nr_double_t n = 2 * z0 - z; nr_complex_t e = exp (2.0 * g * l); nr_complex_t d = p * p * e - n * n; nr_complex_t s11 = z * (p * e + n) / d; nr_complex_t s14 = 1.0 - s11; nr_complex_t s12 = 4.0 * z * z0 * exp (g * l) / d; setS (NODE_1, NODE_1, +s11); setS (NODE_2, NODE_2, +s11); setS (NODE_3, NODE_3, +s11); setS (NODE_4, NODE_4, +s11); setS (NODE_1, NODE_4, +s14); setS (NODE_4, NODE_1, +s14); setS (NODE_2, NODE_3, +s14); setS (NODE_3, NODE_2, +s14); setS (NODE_1, NODE_2, +s12); setS (NODE_2, NODE_1, +s12); setS (NODE_3, NODE_4, +s12); setS (NODE_4, NODE_3, +s12); setS (NODE_1, NODE_3, -s12); setS (NODE_3, NODE_1, -s12); setS (NODE_2, NODE_4, -s12); setS (NODE_4, NODE_2, -s12); }
void digisource::initSP (void) { allocMatrixS (); setS (NODE_1, NODE_1, -1.0); }
void vcvs::calcSP (nr_double_t frequency) { nr_double_t g = getPropertyDouble ("G"); nr_double_t t = getPropertyDouble ("T"); nr_complex_t z1 = polar (g, M_PI - 2.0 * M_PI * frequency * t); nr_complex_t z2 = polar (g, - 2.0 * M_PI * frequency * t); setS (NODE_1, NODE_1, 1.0); setS (NODE_1, NODE_2, 0.0); setS (NODE_1, NODE_3, 0.0); setS (NODE_1, NODE_4, 0.0); setS (NODE_2, NODE_1, z2); setS (NODE_2, NODE_2, 0.0); setS (NODE_2, NODE_3, 1.0); setS (NODE_2, NODE_4, z1); setS (NODE_3, NODE_1, z1); setS (NODE_3, NODE_2, 1.0); setS (NODE_3, NODE_3, 0.0); setS (NODE_3, NODE_4, z2); setS (NODE_4, NODE_1, 0.0); setS (NODE_4, NODE_2, 0.0); setS (NODE_4, NODE_3, 0.0); setS (NODE_4, NODE_4, 1.0); }
void strafo::initSP (void) { nr_double_t t1 = getPropertyDouble ("T1"); nr_double_t t2 = getPropertyDouble ("T2"); nr_double_t d = t1 * t1 + t2 * t2 + 1.0; nr_double_t z1 = t1 * t1 / d; nr_double_t z2 = t2 * t2 / d; nr_double_t z3 = 1.0 / d; nr_double_t z4 = t1 / d; nr_double_t z5 = t2 / d; nr_double_t z6 = t1 * t2 / d; allocMatrixS (); setS (NODE_1, NODE_1, z1); setS (NODE_1, NODE_2, z4); setS (NODE_1, NODE_3, -z4); setS (NODE_1, NODE_4, -z6); setS (NODE_1, NODE_5, z6); setS (NODE_1, NODE_6, 1 - z1); setS (NODE_2, NODE_1, z4); setS (NODE_2, NODE_2, z3); setS (NODE_2, NODE_3, 1 - z3); setS (NODE_2, NODE_4, -z5); setS (NODE_2, NODE_5, z5); setS (NODE_2, NODE_6, -z4); setS (NODE_3, NODE_1, -z4); setS (NODE_3, NODE_2, 1 - z3); setS (NODE_3, NODE_3, z3); setS (NODE_3, NODE_4, z5); setS (NODE_3, NODE_5, -z5); setS (NODE_3, NODE_6, z4); setS (NODE_4, NODE_1, -z6); setS (NODE_4, NODE_2, -z5); setS (NODE_4, NODE_3, z5); setS (NODE_4, NODE_4, z2); setS (NODE_4, NODE_5, 1 - z2); setS (NODE_4, NODE_6, z6); setS (NODE_5, NODE_1, z6); setS (NODE_5, NODE_2, z5); setS (NODE_5, NODE_3, -z5); setS (NODE_5, NODE_4, 1 - z2); setS (NODE_5, NODE_5, z2); setS (NODE_5, NODE_6, -z6); setS (NODE_6, NODE_1, 1 - z1); setS (NODE_6, NODE_2, -z4); setS (NODE_6, NODE_3, z4); setS (NODE_6, NODE_4, z6); setS (NODE_6, NODE_5, -z6); setS (NODE_6, NODE_6, z1); }
void twistedpair::calcSP (nr_double_t frequency) { calcPropagation (frequency); nr_complex_t g = rect (alpha, beta); nr_double_t p = 2 * z0 + zl; nr_double_t n = 2 * z0 - zl; nr_complex_t e = exp (2.0 * g * len); nr_complex_t d = p * p * e - n * n; nr_complex_t s11 = zl * (p * e + n) / d; nr_complex_t s14 = 1.0 - s11; nr_complex_t s12 = 4.0 * zl * z0 * exp (g * len) / d; setS (NODE_1, NODE_1, +s11); setS (NODE_2, NODE_2, +s11); setS (NODE_3, NODE_3, +s11); setS (NODE_4, NODE_4, +s11); setS (NODE_1, NODE_4, +s14); setS (NODE_4, NODE_1, +s14); setS (NODE_2, NODE_3, +s14); setS (NODE_3, NODE_2, +s14); setS (NODE_1, NODE_2, +s12); setS (NODE_2, NODE_1, +s12); setS (NODE_3, NODE_4, +s12); setS (NODE_4, NODE_3, +s12); setS (NODE_1, NODE_3, -s12); setS (NODE_3, NODE_1, -s12); setS (NODE_2, NODE_4, -s12); setS (NODE_4, NODE_2, -s12); }
void msopen::calcSP (nr_double_t frequency) { setS (NODE_1, NODE_1, ztor (1.0 / calcY (frequency))); }
void ctline::calcSP (nr_double_t frequency) { nr_double_t l = getPropertyDouble ("L"); nr_double_t ze = getPropertyDouble ("Ze"); nr_double_t zo = getPropertyDouble ("Zo"); nr_double_t ere = getPropertyDouble ("Ere"); nr_double_t ero = getPropertyDouble ("Ero"); nr_double_t ae = getPropertyDouble ("Ae"); nr_double_t ao = getPropertyDouble ("Ao"); nr_double_t o = 2.0 * M_PI * frequency; nr_complex_t ge = rect (log (ae) / 2, o / C0 * sqrt (ere)) * l; nr_complex_t go = rect (log (ao) / 2, o / C0 * sqrt (ero)) * l; nr_complex_t xe = 2.0 * ze * z0 * cosh (ge) + (ze*ze + z0*z0) * sinh (ge); nr_complex_t xo = 2.0 * zo * z0 * cosh (go) + (zo*zo + z0*z0) * sinh (go); nr_complex_t ye = ze * z0 / xe; nr_complex_t yo = zo * z0 / xo; xe = (ze*ze - z0*z0) * sinh (ge) / 2.0 / xe; xo = (zo*zo - z0*z0) * sinh (go) / 2.0 / xo; setS (NODE_1, NODE_1, xe+xo); setS (NODE_2, NODE_2, xe+xo); setS (NODE_3, NODE_3, xe+xo); setS (NODE_4, NODE_4, xe+xo); setS (NODE_1, NODE_4, xe-xo); setS (NODE_4, NODE_1, xe-xo); setS (NODE_2, NODE_3, xe-xo); setS (NODE_3, NODE_2, xe-xo); setS (NODE_1, NODE_2, ye+yo); setS (NODE_2, NODE_1, ye+yo); setS (NODE_3, NODE_4, ye+yo); setS (NODE_4, NODE_3, ye+yo); setS (NODE_1, NODE_3, ye-yo); setS (NODE_3, NODE_1, ye-yo); setS (NODE_2, NODE_4, ye-yo); setS (NODE_4, NODE_2, ye-yo); }
void hybrid::initSP (void) { nr_complex_t p = polar (1.0, rad (getPropertyDouble ("phi"))); nr_double_t k = M_SQRT2; allocMatrixS (); setS (NODE_1, NODE_1, 0.0); setS (NODE_2, NODE_2, 0.0); setS (NODE_3, NODE_3, 0.0); setS (NODE_4, NODE_4, 0.0); setS (NODE_1, NODE_2, 0.0); setS (NODE_2, NODE_1, 0.0); setS (NODE_3, NODE_4, 0.0); setS (NODE_4, NODE_3, 0.0); setS (NODE_1, NODE_3, k); setS (NODE_3, NODE_1, k); setS (NODE_1, NODE_4, k); setS (NODE_4, NODE_1, k); setS (NODE_2, NODE_3, k); setS (NODE_3, NODE_2, k); setS (NODE_2, NODE_4, k * p); setS (NODE_4, NODE_2, k * p); }
void vam::initSP (void) { allocMatrixS (); setS (NODE_1, NODE_2, 1.0); setS (NODE_2, NODE_1, 1.0); setS (NODE_3, NODE_3, 1.0); }
void mutual::calcSP (nr_double_t frequency) { #if 0 setMatrixS (ytos (calcMatrixY (frequency))); #else nr_double_t l1 = getPropertyDouble ("L1"); nr_double_t l2 = getPropertyDouble ("L2"); nr_double_t k = getPropertyDouble ("k"); nr_double_t o = 2 * M_PI * frequency; nr_double_t a = k * k - 1; nr_complex_t d = rect (o * o * l1 * l2 * a / 2 / z0 + 2 * z0, o * (l1 + l2)); nr_complex_t r; r = rect (2 * z0, o * l2) / d; setS (NODE_1, NODE_4, r); setS (NODE_4, NODE_1, r); r = 1.0 - r; setS (NODE_1, NODE_1, r); setS (NODE_4, NODE_4, r); r = rect (2 * z0, o * l1) / d; setS (NODE_2, NODE_3, r); setS (NODE_3, NODE_2, r); r = 1.0 - r; setS (NODE_2, NODE_2, r); setS (NODE_3, NODE_3, r); r = rect (0, o * k * sqrt (l1 * l2)) / d; setS (NODE_1, NODE_2, r); setS (NODE_2, NODE_1, r); setS (NODE_3, NODE_4, r); setS (NODE_4, NODE_3, r); r = -r; setS (NODE_1, NODE_3, r); setS (NODE_3, NODE_1, r); setS (NODE_2, NODE_4, r); setS (NODE_4, NODE_2, r); #endif }