circuitRF Reference Guide

RF Chain Budget

A receive chain stage by stage, each stage a System block with its own parameters - gain, noise figure, intercepts, compression, sensitivity and dynamic range in closed form, an N-way array included - and one action that writes the chain as test benches whose simulations put a number beside every one of them.

What it is

A chain budget is the spreadsheet every receiver starts as: an ordered list of stages, each with a gain, a noise figure and an intercept, and the cascade worked out stage by stage. The RF Chain Budget is that table, with two differences that matter here:

Opening it

RF Chain Budget — Array.cchain New Open… Save Save As… Amplifier Add Stage Remove Up Down Transfer to Schematic… with a modulated-signal demo Help Frequency, GHz 2.45 Bandwidth, MHz 4.5 Input power, dBm -80 Source temperature, K 290 Required SNR, dB 10 Blockers offset MHz, level dBm; … Chain Gain 26.02 dB NF 4.09 dB (Te 454.2 K) IIP3 -12.00 dBm OIP3 14.02 dBm IP1dB -20.97 dBm OP1dB 4.05 dBm Pout -53.98 dBm Thermal floor -107.44 dBm Output noise -83.35 dBm MDS -109.37 dBm Sensitivity -99.37 dBm SNR 29.37 dB SFDR 64.91 dB Array gain 6.02 dB Output at 350 MHz Blocks Schematic IN ⟶ LNA × 4 G 18.00 NF 1.20 IIP3 -8.00 P1 -16.96 Σ G 18.00 NF 1.20 Σ IIP3 -8.00 SNR 26.24 ⟶ PS × 4 φ 0° G -5.00 NF 5.00 IIP3 15.00 P1 6.04 Σ G 13.00 NF 1.31 Σ IIP3 -9.19 SNR 26.13 ⟶ CMB S 1 2 4:1 Direct 4:1, passive, steer 45° G 5.52 NF 0.50 linear Σ G 18.52 NF 1.33 Σ IIP3 -9.19 SNR 32.13 ⟶ RFBPF G -1.50 NF 1.50 linear Σ G 17.02 NF 1.40 Σ IIP3 -9.19 SNR 32.06 ⟶ MIX RF IF LO LO 2100 MHz G -7.00 NF 7.00 IIP3 10.00 P1 1.04 Σ G 10.02 NF 2.31 Σ IIP3 -11.25 SNR 31.16 ⟶ IFBPF G -1.00 NF 1.00 linear Σ G 9.02 NF 2.56 Σ IIP3 -11.25 SNR 30.90 ⟶ IFA G 20.00 NF 4.00 IIP3 5.00 P1 -3.96 Σ G 29.02 NF 4.08 Σ IIP3 -12.00 SNR 29.38 ⟶ G -3.00 NF 3.00 Σ G 26.02 NF 4.09 Σ IIP3 -12.00 SNR 29.37 Stages, input to output PS Phase shifter (composed) Phase 0 deg IL 5 dB NF 5 dB IIP3 15 dBm On its own: G -5.00 dB · NF 5.00 dB · IIP3 15.00 dBm · IP1dB 6.04 dBm CMB N-way array combiner N 4 Topology Direct Kind Passive IL 0.5 dB PathIL blank dB Gain 10 dB NF 2 dB IIP3 10 dBm Steer 45 deg On its own: G 5.52 dB · NF 0.50 dB · IIP3 none (linear) · IP1dB none (linear) Cascade Levels stage G, dB NF, dB IIP3, dBm OIP3, dBm IP1dB, dBm OP1dB, dBm Pout, dBm SNR, dB share … − 1, % LNA 18.00 1.20 -8.00 10.00 -16.96 0.04 -62.00 26.24 20.32 PS 13.00 1.31 -9.19 3.81 -18.16 -6.16 -67.00 26.13 2.19 CMB 18.52 1.33 -9.19 9.33 -18.16 -0.64 -61.48 32.13 0.39 RFBPF 17.02 1.40 -9.19 7.83 -18.16 -2.14 -62.98 32.06 1.48 MIX 10.02 2.31 -11.25 -1.23 -20.21 -11.19 -69.98 31.16 20.35 IFBPF 9.02 2.56 -11.25 -2.23 -20.21 -12.19 -70.98 30.90 6.58 IFA 29.02 4.08 -12.00 17.02 -20.97 7.05 -50.98 29.38 48.38 ATT 26.02 4.09 -12.00 14.02 -20.97 4.05 -53.98 29.37 0.32 RF Chain Budget — Array.cchain New Open… Save Save As… Amplifier Add Stage Remove Up Down Transfer to Schematic… with a modulated-signal demo Help Frequency, GHz 2.45 Bandwidth, MHz 4.5 Input power, dBm -80 Source temperature, K 290 Required SNR, dB 10 Blockers offset MHz, level dBm; … Chain Gain 26.02 dB NF 4.09 dB (Te 454.2 K) IIP3 -12.00 dBm OIP3 14.02 dBm IP1dB -20.97 dBm OP1dB 4.05 dBm Pout -53.98 dBm Thermal floor -107.44 dBm Output noise -83.35 dBm MDS -109.37 dBm Sensitivity -99.37 dBm SNR 29.37 dB SFDR 64.91 dB Array gain 6.02 dB Output at 350 MHz Blocks Schematic IN ⟶ LNA × 4 G 18.00 NF 1.20 IIP3 -8.00 P1 -16.96 Σ G 18.00 NF 1.20 Σ IIP3 -8.00 SNR 26.24 ⟶ PS × 4 φ 0° G -5.00 NF 5.00 IIP3 15.00 P1 6.04 Σ G 13.00 NF 1.31 Σ IIP3 -9.19 SNR 26.13 ⟶ CMB S 1 2 4:1 Direct 4:1, passive, steer 45° G 5.52 NF 0.50 linear Σ G 18.52 NF 1.33 Σ IIP3 -9.19 SNR 32.13 ⟶ RFBPF G -1.50 NF 1.50 linear Σ G 17.02 NF 1.40 Σ IIP3 -9.19 SNR 32.06 ⟶ MIX RF IF LO LO 2100 MHz G -7.00 NF 7.00 IIP3 10.00 P1 1.04 Σ G 10.02 NF 2.31 Σ IIP3 -11.25 SNR 31.16 ⟶ IFBPF G -1.00 NF 1.00 linear Σ G 9.02 NF 2.56 Σ IIP3 -11.25 SNR 30.90 ⟶ IFA G 20.00 NF 4.00 IIP3 5.00 P1 -3.96 Σ G 29.02 NF 4.08 Σ IIP3 -12.00 SNR 29.38 ⟶ G -3.00 NF 3.00 Σ G 26.02 NF 4.09 Σ IIP3 -12.00 SNR 29.37 Stages, input to output PS Phase shifter (composed) Phase 0 deg IL 5 dB NF 5 dB IIP3 15 dBm On its own: G -5.00 dB · NF 5.00 dB · IIP3 15.00 dBm · IP1dB 6.04 dBm CMB N-way array combiner N 4 Topology Direct Kind Passive IL 0.5 dB PathIL blank dB Gain 10 dB NF 2 dB IIP3 10 dBm Steer 45 deg On its own: G 5.52 dB · NF 0.50 dB · IIP3 none (linear) · IP1dB none (linear) Cascade Levels stage G, dB NF, dB IIP3, dBm OIP3, dBm IP1dB, dBm OP1dB, dBm Pout, dBm SNR, dB share … − 1, % LNA 18.00 1.20 -8.00 10.00 -16.96 0.04 -62.00 26.24 20.32 PS 13.00 1.31 -9.19 3.81 -18.16 -6.16 -67.00 26.13 2.19 CMB 18.52 1.33 -9.19 9.33 -18.16 -0.64 -61.48 32.13 0.39 RFBPF 17.02 1.40 -9.19 7.83 -18.16 -2.14 -62.98 32.06 1.48 MIX 10.02 2.31 -11.25 -1.23 -20.21 -11.19 -69.98 31.16 20.35 IFBPF 9.02 2.56 -11.25 -2.23 -20.21 -12.19 -70.98 30.90 6.58 IFA 29.02 4.08 -12.00 17.02 -20.97 7.05 -50.98 29.38 48.38 ATT 26.02 4.09 -12.00 14.02 -20.97 4.05 -53.98 29.37 0.32
The RF Chain Budget on the example's four-element array: the chain as idealised blocks, the element's branch once and marked × 4 into one combiner block, each stage's own and cascaded numbers under it, the combiner selected here and in the stage list (the Schematic tab draws the same chain as it transfers); each stage's parameters; and the cascade as a Data Display table, one row per stage.

The window has three parts, and every edit recomputes all of them at once:

Drag the gap between two of the three parts to give one more height.

Undo and Redo (the toolbar, or Ctrl+Z and Ctrl+Shift+Z, ⌘ on a Mac) step through every edit: an input, a stage's name, part or parameter, and every stage added, removed or moved. A value typed into a box is one step. Undoing back to the chain as it was opened or last saved leaves it unchanged, with nothing to save.

A value the budget cannot use is never taken. While you type one, its box is outlined in red, the reason is under the chain's totals, and everything else keeps showing the last chain that worked; leave the box (or press Enter) with the value still refused and it goes back to the last one that worked. A choice from a list that the budget refuses, such as a tree combiner whose N is not a power of 2, is not made, and the reason is shown.

The system inputs

Input Meaning
Frequency The input (RF) frequency, in the frequency unit set in Settings ▸ General ▸ Units (GHz when that is Automatic). After a mixer the chain is at the difference frequency.
Bandwidth The noise bandwidth B the noise floor, the MDS and the SNR are read in.
Input power The signal at the input. In an array, at each element.
Source temperature The noise temperature of what drives the input, an antenna's for instance. 290 K is T0.
Required SNR What the demodulator needs: sensitivity is the MDS plus this.
Blockers Carriers at the input besides the signal: an offset from the frequency (MHz when bare) and a level, dBm, each pair separated by ; (150 MHz, -40; 20 MHz, -50). See Levels.

Transfer to Schematic's drop-down has include a modulated-signal demo, which adds the demo bench to what it writes.

The stages, and the parts a stage can be

A stage has a name (its instance name on the schematic), a part, and that part's parameters. Nine parts are System blocks — the splitter and the array combiner are the library's Combiner, an active combiner that block with an Amplifier after each — and the library has no phase shifter, limiter or canceller, so three more are composed of parts it does have. Transfer places exactly that composition. One more is data: an S-parameter data stage is a Touchstone file.

Part What it is Budget
Amplifier (Amp) The System Amplifier. Any gain, negative included: a block with a gain, an NF and an intercept is one. G = Gain, NF = NF (blank: noiseless), IIP3 from IP3 and IP3Ref, IP1dB = IIP3 − 8.96 dB
Mixer The System Mixer, down-converting to |f − Flo|. Flo is the LO the bench drives it with, at Plo. G = ConvGain, NF = NF single-sideband (a DSB figure + 3.01 dB), IIP3 = IIP3, IP1dB = IIP3 − 8.96 dB
Attenuator (Atten) A matched pad. G = −Loss, NF = Loss
Filter The synthesised Filter, in its passband. G = −IL, NF = IL; a Chebyshev's ripple is not in the budget
Switch A closed SPST switch. G = −IL, NF = IL
Isolator (Circulator) A circulator with its third port terminated. G = −IL, NF = IL
Directional coupler (Coupler) Its through arm, the coupled and isolated ports terminated. G = 10·log10(1 − 10^(−Coupling/10)) − IL, NF = −G
Phase shifter (composed) An Amplifier of gain −IL with NF and IIP3, and a TLIN of electrical length Phase. G = −IL, NF = NF (blank: IL), IIP3 = IIP3 (blank: linear)
Limiter (composed) An Amplifier of gain −IL, NF = IL, whose intercept puts its input 1 dB compression point at P1dB. G = −IL, NF = IL, IP1dB = P1dB
Canceller (composed) A Directional Coupler whose isolated port takes a reference path that subtracts a copy of an interference from the main path. See The canceller. G = −(IL − 10·log10(1 − c)), NF from the reference path's noise
N-way splitter The Combiner from its common port, one output followed and the others terminated. G = −(10·log10 N + IL), NF = −G
S-parameter data (SnP) A Touchstone file on the SnP block, read from port In to port Out. See S-parameter data. G = |S(Out,In)|² at the stage's frequency; NF from the file's noise data, or its own loss when passive; NF and IIP3 when stated
N-way array combiner The Combiner, every input an element's branch: one N:1, or a tree of 2:1s, passive or active. See Arrays and the variants. Direct, passive: signal +10·log10 N − IL, noise −IL, NF = IL

P1dB follows from the intercept for every part that compresses, because an ideal Amplifier and Mixer have one nonlinearity, a tanh limiter, whose 1 dB compression point is IIP3 − 8.9625 dB. The budget uses the part's own law, so the simulation it is checked against compresses where the budget says.

S-parameter data

An S-parameter data stage puts a measured or simulated part into the chain as its Touchstone file: a filter, an LNA, a cable, a board. Pick the file with … beside File; a file inside the workspace is written relative to it, so the chain and its benches move with the workspace. Choosing the part asks for the file at once.

The file is interpolated to the frequency the stage sees — the chain's, or after a mixer the IF — exactly as the SnP block interpolates it in a simulation, and renormalised to 50 Ω if it is referenced to another impedance. A file with more than two ports is read from In to Out, every other port terminated in 50 Ω.

Quantity From the file
Gain |S(Out,In)|², between 50 Ω terminations
NF, from noise data A two-port read 1 → 2 with a noise block: its Fmin, Γopt and Rn at the stage's frequency (linear between rows, as the block takes them), at a 50 Ω source
NF, passive, no noise data Its own thermal noise: F = (1 − |S(Out,Out)|²) / |S(Out,In)|², its loss when matched
NF, with gain and no noise data Unknown: give NF
IIP3 IIP3; blank, linear

NF stated replaces the file's figure and may not be below it. On the benches a stated NF above the file's own, or a stated IIP3, is an ideal Amplifier of 0 dB after the block that carries the extra noise and the intercept, so the simulation still checks the stage.

The budget does not extrapolate. It refuses the chain, naming the stage, when:

A blocker that reaches the stage outside the file's frequencies is carried at the file's nearest frequency, as the block holds it in a simulation, and the Notes say so.

What the cascade computes

Each row of the cascade is the chain up to and including that stage, referred to the chain's input. With G the available-power gains, T the noise temperatures and T0 = 290 K:

Quantity Formula
Gain G = Π gᵢ
Noise (Friis) Te = Σ Teᵢ / Gᵢ₋₁ with Teᵢ = T0·(Fᵢ − 1); F = 1 + Te/T0; NF = 10·log10 F
Each stage's share (Teᵢ / Gᵢ₋₁) / Te: the same split a noise run's NFpct reports
Intercept 1/IIP3 = Σ Gᵢ₋₁ / IIP3ᵢ (in mW); OIP3 = IIP3 + G
Compression 1/IP1dB = Σ Gᵢ₋₁ / IP1dBᵢ; OP1dB = IP1dB + G − 1 dB
Output power Pout = Pin + G
Thermal noise floor 10·log10(k·Ts·B) + 30 dBm, the source's own noise
Output noise 10·log10(k·(Ts + Te)·B·G) + 30 dBm
MDS 10·log10(k·(Ts + Te)·B) + 30 dBm: the input signal at 0 dB SNR
Sensitivity MDS + required SNR
SNR Pin − MDS
SFDR (2/3)·(IIP3 − MDS)

The intercept sum takes every stage's third-order products in phase, the worst case. For ideal blocks with real gains that is exactly what happens, and the two-tone simulation agrees to 2×10⁻⁴ dB. The compression sum is an approximation of the same form: when two stages compress at similar levels the cascade compresses a little later than it predicts (see agreement).

A mixer's noise figure is its single-sideband one, and an SSB figure is stated with the image sideband terminated at T0. The budget also takes the image as filtered of every earlier stage's noise, which is what a preselector is for.

Arrays: N elements into a combiner

A Combiner stage makes the chain an array. Every stage before it is one element's branch, repeated N times; the stages after it are the one receiver the elements are combined into. Every number is then referred to one element's input, and the input power is per element.

Steer is the phase step of the arriving wave between adjacent elements. Transfer draws the wave's extra path to element k as a line of (k − 1)·Steer in front of it, and sets element k's phase shifter to Phase + (N − k)·Steer, which brings every element to the combiner in phase. Without a phase shifter before the combiner a non-zero Steer misaligns the elements, and the budget says so: its coherent sum assumes they are aligned.

The combiner's four variants

A Combiner stage is one of four, chosen by two parameters:

Kind = Passive Kind = Active
Topology = Direct one N:1 combiner of loss IL the N:1 combiner, then an amplifier of Gain, NF and IIP3
Topology = Tree log2 N levels of 2:1 combiners, each of loss IL each level's 2:1 combiners each followed by an amplifier
Parameter Meaning
N The number of elements. A tree combines in pairs, so its N is a power of 2; any other N is refused, with Direct as the remedy.
Topology Direct or Tree.
Kind Passive or Active.
IL Each combiner's loss above the ideal split, dB. A tree takes one value for every level, or one per level, the first level (next to the elements) first: 0.3, 0.4.
PathIL Passive only: each element path's own extra loss, N values, dB — an amplitude taper, or an imbalance. Blank: none.
Gain, NF, IIP3 Active only: each combiner's amplifier; one value, or one per level. Its 1 dB compression point is its intercept's, IIP3 − 8.96 dB, as every amplifier's here.
Steer The arriving wave's phase step between elements (see above).

Each variant's budget is the cascade of its own levels, and every number is referred to one element's input:

So a passive tree's loss accumulates level by level, and its noise figure is its whole loss; a direct combiner has one loss. An active combiner's noise figure is set by its first level, and its intercept by its last, which sees the most power: in the example's array, the active tree's IIP3 is 7 dB below the direct active combiner's.

The example's array, the same four elements into each variant (IL 0.5 dB, the amplifiers 10 dB, NF 2 dB, IIP3 10 dBm), at the combiner's output and per element:

Variant Gain NF IIP3 OIP3 Array gain
Direct, passive 18.52 dB 1.33 dB −9.19 dBm 9.33 dBm 6.02 dB
Tree, passive 18.02 dB 1.35 dB −9.19 dBm 8.83 dBm 6.02 dB
Direct, active 28.52 dB 1.43 dB −11.88 dBm 16.64 dBm 6.02 dB
Tree, active 38.02 dB 1.45 dB −18.77 dBm 19.26 dBm 6.02 dB

Transfer to Schematic

Transfer to Schematic saves the chain and writes its test-bench cells beside the .cchain, named after it, each with a Data Display of the same name that Simulate opens on the bench's own result. Every chain gets 1-Tone, 2-Tone, Envelope and Levels; a chain with blockers a Blockers bench; a chain with a canceller a Canceller bench; an array whose branch has no mixer Steering (when the branch has a phase shifter) and Combiners; and, when asked, the Demo:

Bench Source Analyses Measures
<chain> 1-Tone a P1Tone per element (port 1 … N), a Port at the output without a mixer, an S-parameter run with Noise=yes; with one, harmonic-balance noise with the LO running. And a harmonic-balance drive sweep at the predicted IP1dB gain, NF, each stage's cumulative NF from the run's own shares, IP1dB, OP1dB
<chain> 2-Tone a PnTone per element, 1 MHz apart, 50 dB below the predicted IIP3 multi-tone harmonic balance gain, IIP3, OIP3, and each stage's gain and OIP3 at its output
<chain> Envelope a MOD_Source per element: an NR carrier, its source noisy at the source temperature envelope with Noise=yes and EvmSplit=yes in-channel SNR, the EVM's noise part, output power and output noise
<chain> Steering a plane wave: one Port into a Combiner used as a splitter, path k delayed by the wave's extra path; the elements and the combiner, a Port at its output an S-parameter run with Noise=yes in a sweep of theta_in (−90° to 90°) within a sweep of theta_steer (−30°, 0°, 30°) the pattern against the arriving angle beside the closed-form array factor; at each beam's peak the gain, the NF and the array gain. See Steering
<chain> Combiners the same elements into each of the four variants, each fed by its own wave at broadside one S-parameter run with Noise=yes each variant's gain and NF, beside its budget, intercepts and array gain
<chain> Levels a PnTone per element, two tones 1 MHz apart, each at the input power multi-tone harmonic balance, on the 2-Tone bench's mixing order the signal and its IM3 at every node. See Levels
<chain> Blockers a PnTone per element with every blocker, an isolator after every stage harmonic balance every blocker at every node
<chain> Canceller the canceller on its own: a wanted signal and an interference from MOD_Sources envelope runs, swept the depth against each error, the wanted signal's EVM, SNR and constellation with and without cancellation. See The canceller
<chain> Demo a MOD_Source of NR 64-QAM and one of DBPSK per element; the LO with a phase-noise mask envelope with Noise=yes and EvmSplit=yes, the input power swept the constellation, the EVM against the input power, its noise and distortion parts. See The demo

The chain's parts are placed as written. Three things are the bench's and not the chain's:

Every bench sets temp = 16.85, which puts every part at 290 K, the temperature a noise figure is stated at. Each row of its MEAS block reads one analysis, so circuitrf hb … -a SW1 evaluates the compression rows on its own. The envelope SNR is measured over the NR carrier's occupied bandwidth (the 15 kHz-spacing channel nearest the chain's bandwidth), and its prediction beside it is computed in that bandwidth.

An array's 1-Tone bench has N + 1 ports. Its gain is |Σₖ S(N+1, k)|², which is the budget's only if every phase shifter removes its element's steering, and its NF is one element's: F = 1 + (F₁ − 1)·|S(N+1, 1)|²/Σₖ|S(N+1, k)|², where F₁ is the noise factor from port 1 with the other elements' terminations noiseless — F = 1 + (F₁ − 1)/N for equal paths.

Steering the beam in simulation

The Steering bench is the array at the combiner, fed by a plane wave and steered from its own VAR block:

Variable Meaning
theta_in The arriving wave's angle from broadside, degrees. The bench sweeps it from −90° to 90° in 1° steps.
theta_steer The angle the phase shifters steer to, degrees. The bench sweeps −30°, 0° and 30°.
d_over_lambda The element spacing in wavelengths, 0.5.
taper An amplitude taper, dB: the two edge elements' paths lose taper more, the others a share in proportion to their distance from the centre. 0.
psi_in, dphi 360°·d/λ·sin θ for the wave and for the steer: the phase step between adjacent elements.

The wave is one Port into a Combiner used as a splitter, whose path k has the phase −(k − 1)·psi_in: element k receives the wave (k − 1) element spacings later. Each element's phase shifter advances it by (k − 1)·dphi (its line is (k − 1)·(360° − dphi) long, the same phase at the bench's frequency and never a negative length), and the taper sits on the combiner's paths. Because the splitter shares the wave's power equally and its own isolation network is noisy at T0, each element sees an equal share of the signal and its own, uncorrelated, thermal noise, as an element of a real array does from its own antenna.

Its display plots the pattern, the simulated gain over the budget's peak gain at the combiner, against theta_in for each steer angle, and beside it the closed-form array factor:

AF(θ_in) = | Σₖ a_k · e^(−j·(k − 1)·(ψ_in − ψ_steer)) | / Σₖ a_k,      ψ = 2π·(d/λ)·sin θ

with a_k each path's amplitude weight (its PathIL and the taper). Each peak sits at its steer angle, and there the table reads the gain, the NF from the wave's port and the array gain, 10·log10 N less what the NF says it costs over one element's own: 6.02 dB for four equal elements, at every steer angle, with the NF unmoved. With a taper the main lobe widens and the sidelobes fall, and both the pattern and the closed form lose the taper's coherent loss at the peak. Change d_over_lambda to 1 and the grating lobes appear at ±90°.

Edit a sweep's values, or delete the sweeps and set theta_in and theta_steer by hand: everything is an ordinary variable.

Levels at every node

The Levels tab and the Levels display follow the chain node by node: node 0 is the input and node k the output of stage k. At every node:

Quantity Budget
Signal Pin + G, per tone of two at the input power
Noise floor 10·log10(k·(Ts + Te)·B·Gn) + 30 dBm, the noise in the bandwidth
NF the cumulative noise figure
IM3 3·P − 2·OIP3, each third-order product of the two tones, absolute
Each blocker its input level plus every stage's gain at its own frequency: a filter's own response there (the model the Filter block simulates with, its IL included), an S-parameter data stage's file there, a mixer moving it to |f − Flo|
A canceller's interference from the canceller's input, where it is stated, and its residual after it
Margin to compression OP1dB − the larger of the signal and the blockers; before anything compresses, the whole chain's IP1dB less the input's
SNR the signal over the noise floor

The simulated points come from three benches: the Levels bench (two tones each at the input power: the signal and the IM3), the Blockers bench (the blockers alone, an isolator after every stage so that each node's voltage is the wave going forward, not a reflection standing on a filter's stopband) and the 1-Tone bench (each stage's cumulative NF, from the noise run's own shares, and the noise floor that NF gives at the node through the budget's noise gain). In the window they appear once those benches have been simulated beside the .cchain; in the display they are its points, the budget its lines. The displays plot against a variable nodeix that each bench sweeps around a trivial DC solve, which is how one number per node becomes one curve.

Add a marker to a trace in the window's Levels plots and its node's stage is selected, in the stage list and in both views; move the marker and the selection follows.

The canceller

A Canceller stage subtracts a weighted copy of an interference from the main path: a reference path from the interference's own source, through an amplitude setting, a phase setting and a delay, into a directional coupler's isolated port, the main path being the coupler's through arm.

Parameter Meaning
Coupling The coupler's coupling, dB. The main path loses 10·log10(1 − c) of it.
IL The coupler's excess loss, dB.
Pint The interference at the canceller's main input, dBm.
Bint The interference's bandwidth.
Pref The reference input: the interference at its source, dBm. The path's gain follows from it.
NFref The reference path's noise figure, dB. Blank: passive, at T0.
AmpErr, PhaseErr, DelayErr The cancellation path's amplitude error (dB), phase error (degrees, an advance) and delay mismatch (the reference path later, seconds: 0.1 ns).

On the wanted signal it is the through arm, a loss L_t = 10^(IL/10)/(1 − c), and the noise the reference path injects. That path needs a gain G_ref with G_ref·P_ref·c = P_int·(1 − c); its output is at T0·F_ref·G_ref, coupled by c/(1 − c) against the through arm, so

F = L_t + (F_ref·G_ref − 1)·c/(1 − c)

A passive path (F_ref·G_ref = 1) adds nothing to the coupler's loss.

On the interference the residual is the fraction R the subtraction leaves. With an amplitude ratio a = 10^(AmpErr/20), a phase error φ and a delay mismatch τ, a carrier of bandwidth B and flat spectrum, centred ν from where the phase was set, leaves the band's average of |1 − a·e^(j(φ − 2πfτ))|²:

R = 1 + a² − 2a·cos(φ − 2πντ)·sinc(πBτ),      sinc x = sin x / x,      depth = −10·log10 R

33.5 dB at 0.1 dB and 1°; with 1 ns of delay mismatch alone, 40.8 dB over 5 MHz, 28.8 dB over 20 MHz and 22.8 dB over 40 MHz. The window's Canceller tab draws the depth against the phase error for five amplitude errors, and against the bandwidth for four delay mismatches. The levels carry the interference and its residual node by node.

The Canceller bench studies it with real signals. Two MOD_Sources, which the Signal Designer edits: the wanted signal, an NR 64-QAM carrier and a QPSK one, and the interference, three NR carriers of 10, 5 and 20 MHz, the first two under the wanted ones. The interference is split: one share leaks into the main path through a line of 1 ns, the other is the reference path — an Amp for the amplitude, one path of a 2-way Combiner for a flat phase, a line for the delay — into the coupler's isolated port. Its VAR block sets the errors, amp_err, phase_err and delay_err, and two switches, canc_on (the reference path) and sig_on (the wanted signal). Its envelope runs:

Open either source in the Signal Designer to change its modulation (LTE, NR, DBPSK, FSK, CSS and the rest it offers) or its bandwidth; the bench measures whatever it sends.

The modulated-signal demo

include a modulated-signal demo, in Transfer to Schematic's drop-down (or --demo, or "Demo": true in the .cchain), adds <chain> Demo: the chain demodulated end to end. Each element is fed an NR 64-QAM carrier and, from a second source beside it, a DBPSK carrier at twice the bandwidth's offset, joined by a 2-way Combiner, each at the input power and noisy at the source temperature. Each mixer's LO carries a phase-noise mask, which an envelope run plays as a random phase. An envelope run with Noise=yes and EvmSplit=yes is swept over the input power in seven steps, from 5 dB of SNR to 5 dB past the input P1dB. Its display:

How closely the simulation agrees

Measured on the example's superhet and array, the budget against the simulation of the benches it writes:

Quantity Superhet 4-element array Why it differs at all
Gain −1.1×10⁻⁴ dB −1.1×10⁻⁴ dB The small-signal drive, 40 dB below IP1dB. An S-parameter bench reads 3×10⁻¹⁰ dB
NF, and each stage's +6.6×10⁻⁵ dB at most +1.0×10⁻⁴ dB at most The harmonic-balance noise run's 1 kHz offset from the IF, and its drive
IIP3 +1.8×10⁻⁴ dB +1.9×10⁻⁴ dB tanh's fifth-order term, 50 dB below the intercept
OIP3, and each stage's gain and OIP3 2.6×10⁻⁴ dB at most 2.6×10⁻⁴ dB at most as above
IP1dB +0.048 dB +0.062 dB The cascaded-P1dB formula is an approximation: the chain compresses a little later
SNR −0.13 dB −0.27 dB One noise record's statistics, about ±0.12 dB from seed to seed

The same array at RF, with no mixer, runs its noise through the S-parameter analysis instead and reads 3×10⁻¹⁰ dB in gain and 10⁻¹¹ dB in NF. The envelope SNR is a measurement of one noise record: four seeds of the array read 29.17 to 29.42 dB against 29.37 dB predicted.

The superhet's Levels bench puts the signal on the budget to 2×10⁻⁵ dB at every node and the IM3 to 8×10⁻⁵ dB; its Blockers bench reads each blocker 0.001 to 0.003 dB below the budget, the blocker's own slight compression at −40 and −50 dBm into the LNA. The front end's 1-Tone bench reads the canceller's noise, its through arm and the reference path's coupled noise, on the formula to 10⁻⁶ dB.

The Canceller bench's depth, at each of the three interference carriers and every swept error, is the closed form's to within 1.4 % of the depth, 0.7 dB at 49.7 dB deep and under 0.3 dB everywhere shallower than 45 dB. With cancellation the 64-QAM carrier's EVM falls from 840 % to 3.2 % and the QPSK one's from 1036 % to 8.6 %.

The superhet's Demo bench reads the SNR 0.20 dB under the budget at its lowest power, where noise dominates, and the EVM's noise part 57.0 % against the budget's 1/√SNR of 56.2 %. Higher up, two floors the budget does not model take over: the LO's phase noise, 1.23 % of EVM in the distortion part, which is the mask integrated over the channel (−38.2 dBc), and a noise part that stops at about 1 % (40 dB of SNR), which the Canceller bench's NR carriers show as well. At 5 dB past the input P1dB the distortion part is 15.5 %.

The array's Steering bench puts its pattern on the closed-form array factor to 3×10⁻⁹ dB within 3 dB of each peak and to 10⁻⁶ dB down to −60 dB, and its gain, NF and array gain at each peak on the budget to 10⁻¹⁴ dB. The Combiners bench reads each variant's gain and NF to 10⁻¹⁴ dB; each variant's intercepts and compression point, transferred on its own, read as the table above does.

The .cchain file

A .cchain is JSON. The system inputs are numbers whose names carry their unit; a stage's parameters are text, exactly as the part's netlist line carries them.

{
  "FormatVersion": 1,
  "FrequencyHz": 2450000000,
  "BandwidthHz": 4500000,
  "InputPowerDbm": -70,
  "TemperatureK": 290,
  "RequiredSnrDb": 10,
  "Stages": [
    { "Name": "LNA", "Part": "Amp", "Parameters": { "Gain": "16", "NF": "1", "IP3": "15", "IP3Ref": "Output" } },
    { "Name": "RFBPF", "Part": "Filter", "Parameters": { "Response": "Butterworth", "F1": "2.35 GHz", "F2": "2.55 GHz", "IL": "1.5" } },
    { "Name": "MIX", "Part": "Mixer", "Parameters": { "ConvGain": "-7", "NF": "7", "IIP3": "10", "Plo": "7", "Flo": "2.1 GHz" } }
  ]
}
Key Meaning
FormatVersion 1. A file from a newer circuitRF is refused, not read in part.
FrequencyHz, BandwidthHz, InputPowerDbm, TemperatureK, RequiredSnrDb The system inputs. Absent: 2.45 GHz, 1 MHz, −70 dBm, 290 K, 10 dB.
Stages In signal order. Name follows the instance-name rule (a letter, then letters, digits and _).
Part Amp, Mixer, Atten, Filter, Switch, Circulator, Coupler, PhaseShifter, Limiter, Canceller, Splitter, SnP or Combiner.
Parameters The part's parameters by their own names. An absent one takes the part's default (a System block's own placement default); one the part does not list is carried onto the schematic unchanged and not read by the budget.
Blockers Optional: [{"OffsetHz": 150000000, "LevelDbm": -40}, …], each an offset from FrequencyHz and a level at the input.
Demo Optional: true to write the demo bench too.

A chain has at most one Combiner. An SnP stage's File is a path; a relative one resolves from the workspace the .cchain belongs to, or its own folder when it belongs to none.

From the command line

circuitrf chain Superhet.cchain                      the cascade, as the window shows it
circuitrf chain Superhet.cchain -o budget.npy        the budget as a DataSet: per-stage cubes over a stage axis
circuitrf chain Superhet.cchain --to-schematic       the benches and their displays, beside the .cchain
circuitrf hb "Superhet 2-Tone/schematic/Superhet 2-Tone.csch"

--to-schematic [dir] writes into another folder, --name names the benches, --demo adds the demo bench, and an existing bench is a refusal unless --replace is given. circuitrf check reads a .cchain through the same budget and reports its refusals. Over the MCP server the verb is run analysis=chain.

See also: System Components · Simulations ▸ Noise · Measurements · Data Display.