Skip to content

1.0.0-beta.7 Public Beta

Pre-release
Pre-release

Choose a tag to compare

@potatobeanradio potatobeanradio released this 01 Sep 03:44
· 141 commits to main since this release

Seventh public beta.

This release is mostly about designing a level above the circuit — a palette of ideal system
blocks you can wire into a block diagram and simulate before any of the real parts exist — plus a
three-port ideal mixer, two new lumped parts, and a search box on every page of the documentation.

System Block Components

A new System components. Each one is placed and wired like
any other component and runs in both S-parameters and harmonic balance:

  • Mixer and Differential Mixer — described below.
  • Filter — five prototype families in three forms, described below.
  • Amplifier — gain, return loss, one third-order intercept, an optional reverse path.
  • Attenuator — a fixed pad, and the supported way to give anything a passive-intermod figure.
  • Balun — single-ended to differential, with amplitude and phase imbalance.
  • Circulator — forward path, reverse isolation, and a real part's finite match.
  • Directional Coupler — coupling and directivity, with the through loss that follows from them.
  • Duplexer — two arms off one antenna port, each with its own band.
  • 90° and 180° Hybrid — an equal split with the phase relationship in the title.
  • Switch and Transfer Switch — position is a parameter, not a wire you move.

Together they answer the questions a block diagram exists for: level plans, cascaded gain and
cascaded intercept
(a harmonic-balance run cascades them for you instead of a spreadsheet
formula), image and spurious paths, band plans and isolation budgets, and switch-state
coverage
— every position of every switch in one run, because the switch state is a swept
parameter rather than a wire you rearrange.

They are ideal by construction, and the documentation says where each one will disagree with a
real part.
The circulator, coupler, hybrid, balun, switch, attenuator and amplifier hold every
number you typed at every frequency, from DC upwards. A new System Components reference page
covers the whole class — what it can answer, what it cannot, and what to reach for instead.

An Ideal Mixer

A three-port ideal mixer, placed as Mixer or as MixerD — the same component with all six of
its nets brought out as pins, for when a port's return is not ground. What comes out of the IF port
is the product of what goes into the RF and LO ports.

  • You never type the multiplier constant. State a conversion gain and the LO drive it holds at —
    ConvGain = -7 dB at Plo = +7 dBm, straight off a datasheet — and circuitRF derives the rest
    from the port impedances. ConvGain is a single-sideband power gain; negative is a loss.
  • Both sidebands come out. A product of two cosines is half the sum plus half the difference, so
    2 GHz against a 1.8 GHz LO puts equal power at 200 MHz and 3.8 GHz. A single-sideband result
    comes from filtering the IF, or from an image-reject network — exactly as it does in hardware.
  • Conversion gain tracks LO amplitude, which is what a multiplier does and why the gain is
    quoted together with Plo. Drive the LO 3 dB harder and the conversion gain rises 3 dB. If the LO
    in your test bench is not delivering Plo, the mixer is not running at the gain you typed.
  • A freshly-placed mixer is ideal. The three isolations default to 200 dB and IIP3 to 100 dBm,
    meaning none and never compresses; type a real number into any of them to turn it on. LO-to-RF,
    LO-to-IF and RF-to-IF leakage and the three port impedances are all separately settable.
  • The compression law is a tanh rather than the textbook cubic. A bare cubic turns over and goes
    negative past its peak, and harmonic balance then converges cleanly onto that wrong answer.

Filter

Response picks the family — Butterworth, Chebyshev, InvChebyshev, Bessel or
Elliptic — and Form picks Lowpass, Bandpass or Highpass. A parameter the chosen family does
not read is ignored rather than refused, so changing family never means clearing a field first.

  • Order is the prototype order. The bandpass transformation doubles the degree, so Order = 3
    as a bandpass is a 6th-degree network. Both conventions exist in the wild; this one is stated.
  • For the three all-pole families the far stopband falls at 20 × Order dB per decade.
    InvChebyshev and Elliptic put transmission zeros on the jω axis instead, which buys their sharp
    transition and is why their stopbands level off at Astop rather than continuing to fall.
  • Zin and Zout are independent, so an unequal pair makes the filter a lossless impedance
    transformer as well as a filter — matched at both ports in its passband.
  • IL lays a flat loss on top and dissipates: it multiplies S21 and leaves S11 alone, the way
    a real filter's loss does.
  • The Filter and the Match network share one glyph, on purpose — impedance matching is a form of
    filtering. Tell them apart by the type label and instance name.

Amplifier

  • IP3Ref says whether the intercept you typed is input- or output-referred, defaulting to
    Output because that is the form a power amplifier's datasheet quotes. There is deliberately one
    field rather than two that could contradict each other.
  • P1dB is not a separate knob. One nonlinearity sets compression and intermodulation together,
    so the 1 dB compression point follows from the intercept and lands at IIP3 − 8.96 dB
    input-referred — the soft limiter's own value, two-thirds of a decibel off the textbook cubic's.
  • It is unilateral unless you turn S12 on. With no reverse path there is no feedback loop,
    which is what makes an ideal amplifier unconditionally stable at every frequency and every
    termination; setting S12 is what makes stability a question at all.
  • Mismatching a port does not quietly re-scale the gain. A datasheet states gain and return loss
    as independent measurements, and so does this block.
  • It has no supply, no bias pins, no efficiency, no PAE and no thermal node, by design. If those
    are the question, the answer is a real device model and a harmonic-balance loadpull.

Passive Intermodulation

Five blocks can carry a PIM specification — the Attenuator, the Circulator, the Directional Coupler
and both Hybrids. It is off by default, and a block stays linear at no cost in a harmonic-balance
run until you switch it on.

  • It is one specification in two fields. PIM is the absolute level of the third-order product
    in dBm, and PIMPc is the power per carrier it was measured at. Both, always — a product level
    means nothing without the carriers it was measured against.
  • Suppliers quote it both ways, and the conversion is product (dBm) = carrier (dBm) − product (dBc). A part specified at −153 dBc with two +43 dBm carriers is PIM = -110 dBm,
    PIMPc = 43 dBm.
  • Away from PIMPc the product rides the third power of drive — 10 dB less carrier is 30 dB
    less product — which is the whole reason the carrier power travels with the specification.
  • It is deterministic and memoryless, not noise-like: the same product level every run. It is
    generated on the wave incident at each port and then routed by the block's own S-matrix, so on
    a circulator the product appears where the carriers go and is suppressed at the isolated port by
    the block's own isolation.
  • An attenuator with a small loss and a PIM figure is a standalone PIM generator, which is the
    supported way to give a filter, a duplexer or anything else a passive-intermod contribution.

An S-parameter run reports the port matches and the three leakages and no conversion at all — and
that is the right answer rather than a missing one.
S-parameters are a single-frequency
measurement, and conversion is the business of moving energy between frequencies. Conversion gain
comes from harmonic balance: drive RF and LO as two tones and read the IF power at the product you
want. For conversion gain versus frequency, wrap that in a parametric sweep of the RF frequency.

Series and Parallel RLC Components

Two new lumped parts, SRLC and PRLC, each carrying R, L and C in one component.

  • SRLC puts the three in series — the shape a real capacitor takes above a few hundred
    megahertz. A ceramic capacitor's datasheet ESR and ESL go straight into R and L. It is
    series-resonant at 1/(2π√(LC)), where its impedance falls to R: a capacitor below that
    frequency, an inductor above it.
  • PRLC puts them across the same two nodes — a tank. At resonance the reactances cancel and the
    part is purely resistive at R, which makes it the natural way to enter a measured resonance.
  • Their pins land exactly where a plain R, L or C's do, so you can swap one in for another
    without moving a wire.
  • A Mutual may now name an L, an SRLC or a PRLC. All three carry an inductor the coupling can
    act on, and naming anything else is now reported with the kinds that do work.

Searchable Documentation

  • Every page now has a search box at the right of its header, and the landing page a wide one
    between the guide cards and the prose.
  • A section is the unit, not a page. Every heading with an anchor is its own record, so a result
    deep-links into a thirty-screen Reference page rather than dropping you at the top of it. 458
    records; results come back in a fraction of a millisecond.
  • It works all three ways the documentation is read — over the local server the Help menu
    starts, from a web host, and by opening a page straight off disk.
  • Hierarchy is now documented as a procedure. The Schematic Editor's section is six numbered
    steps, because the two things that stop people were unstated: hierarchy needs a cell, and the cell
    goes into a different schematic. The Layout Editor's section sends you there and then covers
    only what is the layout's own.

Data Display

  • A marker on a complex-impedance port now reads the impedance the port actually looks into. A
    Term at Z = 5+j100 driving 5-j100 is a perfect power-wave match, so its S(1,1) plots at the
    Smith chart centre — but the marker read 50+j0. The plot was always right; only the readout was
    wrong, and it healed the moment you touched the trace picker, which is what made it look arbitrary.
  • A saved display that had stored a stale 50 Ω reloaded wrong, and could renormalize to a
    reference you never typed. It now re-seeds from the data itself when the file is opened.

Smaller Fixes

  • A malformed data cube now fails where it is built, with a message naming the shape, instead of
    surfacing much later as an index error while something reads it.