Report an errorErrata
Part III · Module 20

Front-end electronics and system architecture

Every number in an ultrasound image passes through a pulser, a T/R switch, a cable, a low-noise amplifier, a time-gain amplifier, an anti-aliasing filter and an ADC before any beamformer sees it. This module puts a number on each stage and chains them into one link budget, from the transmit voltage to the ADC least significant bit and on to the beamformed SNR and penetration depth.

You will be able to

  • Compare unipolar, bipolar, 3-level, 5-level and linear pulsers by harmonic content, slew rate and suitability for harmonic and pulse-inversion imaging
  • Compute the element, cable and LNA noise at the amplifier input, the noise figure, and the SNR cost of a cable
  • Set a TGC slope from attenuation, size the VGA range, and decide how many ADC bits and how little jitter a channel needs
  • Size channel-data rates for conventional and ultrafast systems and place beamformer architectures on that scale
  • Build a link budget from drive voltage to beamformed SNR and predict the noise-limited penetration

Assumes

  • Module 16 (element electrical impedance, \(C_0\), \(k_t\)) and Module 19 (array channel counts)
  • Module 04 (Sampling, Fourier, LTI) and Module 08 (Analytic signal & IQ) for aliasing and IQ decimation
  • Module 10 (Matched filtering) for the SNR budget, and Module 22 (Acoustic output & safety) for MI, TI and \(I_{\mathrm{SPTA}}\)
  • dB bookkeeping: \(20 \log_{10}\) for voltage, \(10 \log_{10}\) for power
Exact formulaclosed form plotted as is (Fourier coefficients, noise formulas, data-rate arithmetic)Simulationnumerical computation run in this page (JS) or in the Octave scripts: sampled pulser waveforms and their FFT, Monte Carlo ADC capturesApprox. modellumped physics: BVD element and cable, constant-current slew, the link budget; assumptions under the badgeSchematichardware drawings for intuition, not to scale, not computed

20.1The signal chain and where each number lives

A diagnostic system is two chains that meet at the element. The transmit chain converts a timing pattern into a high-voltage waveform on each element. The receive chain converts microvolt echoes into digital samples without adding much noise, and without clipping echoes that are 100 dB larger. The T/R switch is the junction: it must pass ±100 V outward and then, a fraction of a microsecond later, pass microvolts inward to an amplifier that would be destroyed by the transmit pulse.

Schematic Figure 20.1 · Full system, one channel shown in the analog sections and all channels in the digital ones. Typical numbers for a 128-channel, 40 MS/s, 12-bit linear-array system; research platforms reach 256 channels at 78 MS/s (ULA-OP 256) and 1024 channels (SARUS). Not to scale.
TRANSMIT (per channel) RECEIVE, analog (per channel) DIGITAL (all channels) Probe 64–256 el. (1D) C₀ ≈ 30 pF 2D: ≈ 1 pF, µBF in handle element face Cable 1.5–2.5 m, ≈ 100 pF/m, 1 coax per ch HV supply±1…100 V, reservoir Pulser2/3/5-level or linear2–4 A, ns edges ±V into C₀ + cable Tx beamformerdelays (ns steps),waveform, apodization T/R switch+ limiter≈10–20 Ω on LNA0.6–1.1 nV/√Hz12–24 dB VGA / TGC≈ 40 dB span2αf₀ dB/cm AAF2–5-pole LPFfc 10–30 MHz ADC12–14 bit40–80 MS/s integrated AFE IC: LNA + VGA + AAF + ADC (+ CW mixer), 8–16 ch per package, ≈ 30–150 mW/ch noise floor set here SerializerLVDS / JESD204B≤ 12.5 Gb/s/lane 0.48 Gb/s per ch (40 MS/s × 12 b) 1 FPGA / ASICdelay-and-sum, IQ demodulation,decimation, sequencer 2 Host linkPCIe Gen3–Gen5into host RAM 3 GPU (software BF)compounding, ULM,SoS, adaptive BF 4 Detect + displayenvelope, log, scanconversion, 60 Hz timing, delays, waveforms 5 conventional system: hardware DAS, only beamformed lines leave the FPGA ① ADC → FPGA: 128 ch × 40 MS/s × 12 b = 61.4 Gb/s = 7.68 GB/s, continuous (256 × 62.5 MS/s × 14 b: 224 Gb/s) ② FPGA → host, per transmit event: RF window 128 × 2597 samples × 2 B = 0.665 MB; at 10 kHz (5 cm) 6.65 GB/s; IQ at f₀ = 5 MHz: 1.66 GB/s ③ PCIe, usable after 128b/130b coding: Gen3 ×8 ≈ 7.9 GB/s, Gen4 ×16 ≈ 31.5 GB/s, Gen5 ×16 ≈ 63 GB/s ④ beamformed image 256 × 512 px × 4 B at 1 kHz compounded frames ≈ 0.52 GB/s; the display refreshes at ≈ 60 Hz ⑤ hardware-beamformed lines: tens of MB/s; channel data are not exported

The ranges below are generic for current integrated parts (pulser, T/R switch and AFE ICs) and research platforms. Use your own datasheets for a design; the link budget in 20.8 takes every one of these as an input.

BlockJobTypical range (generic)What it limits
HV supply + pulserDrive each element with a timed waveform±1 to ±100 V, peak current 2–4 A per channel, 2, 3 or 5 levels or a linear amplifier; ns-scale delay resolutionPeak pressure (MI), waveform purity (harmonic imaging), push duration (SWE)
T/R switch / limiterIsolate the LNA during transmit, connect it during receiveOn-resistance of several Ω, switching on the order of 100 ns, clamp to about a voltNear-field dead zone, transmit feed-through
CableConnect probe to systemMicro-coax, on the order of 100 pF/m (low-capacitance types about half), 1.5–2.5 mSignal loss, noise figure for small elements
LNASet the noise floorInput-referred noise ≈ 0.6–1.1 nV/√Hz, gain 12–24 dB, linear input up to 0.25–1 VppPenetration (noise), near-field overload
VGA / TGCCompress depth-dependent amplitude into the ADC window≈ 40 dB attenuation range plus 24–30 dB fixed gainDynamic range mapping
Anti-aliasing filterBand-limit signal and noise before sampling2nd–5th order low-pass, selectable cutoff ≈ 10–30 MHzAliased noise, harmonic band
ADCSample12–14 bit, 40–80 MS/s, SNR ≈ 70–77 dBFSInstantaneous dynamic range
Data link + beamformerMove and combine channel dataSerial LVDS / multi-Gb/s links; FPGA, ASIC or GPU beamformingFrame rate, channel-data access
Integrated AFELNA + VGA + AAF + ADC (often + CW mixer) for 8–16 channels in one packageTens to ≈ 150 mW per channel, traded against noiseChannel count per board, heat

20.2Transmit: pulser types, slew rate and harmonics

A switching pulser connects each element to one of a few supply rails through MOSFETs. A unipolar pulser switches between 0 and +V (or a single spike). A bipolar pulser switches between +V and −V, producing a square-wave burst. A 3-level (return-to-zero) pulser adds a clamp to ground; a 5-level pulser adds two intermediate rails ±V/2. A linear (arbitrary-waveform) transmitter is a high-voltage amplifier driven by a DAC: any shape, at much higher dissipation. Everything about the switching types follows from the Fourier series of their stepped waveforms.

\[ \pm V \text{ square wave:}\quad c_n = \frac{4V}{n\pi},\ \ n \text{ odd} \qquad \left( \frac{c_3}{c_1} = -9.54\ \mathrm{dB},\ \ \frac{c_5}{c_1} = -13.98\ \mathrm{dB} \right) \]
(20.1)
\(c_n\)
amplitude of harmonic n of the drive waveform, V
\(V\)
rail voltage (the waveform swings ±V), V
\(n\)
harmonic number (odd for a symmetric square wave), dimensionless
Half-wave symmetry, \(x(t + T/2) = -x(t)\), removes every even harmonic. A unipolar 50 % duty train has the same odd harmonics at half the amplitude for the same V, plus a DC term the transducer rejects.
\[ \begin{gathered} \text{3-level, conduction angle } \beta \text{ per half cycle:}\quad c_n = \frac{4V}{n\pi} \sin\frac{n\beta}{2} \\ \beta = 120^\circ \;\Rightarrow\; c_3 = 0,\quad c_1 \times 0.866\ \ (-1.25\ \mathrm{dB}) \end{gathered} \]
(20.2)
\(\beta\)
conduction angle: the part of each half cycle held at ±V (the rest sits at 0), degrees
\(c_n,\ V,\ n\)
as in (20.1)
Each half cycle holds ±V for \(\beta\) and sits at 0 for the rest. The zero dwell is a free parameter that places a null on any one odd harmonic.
\[ \begin{gathered} \text{5-level staircase } (0,\ V/2,\ V \text{ at } \theta_1, \theta_2)\text{:}\quad c_n = \frac{2V}{n\pi} \left( \cos n\theta_1 + \cos n\theta_2 \right) \\ \theta_1 = 12^\circ,\ \theta_2 = 48^\circ\text{:}\quad c_3 = c_5 = 0 \end{gathered} \]
(20.3)
\(\theta_1,\ \theta_2\)
switching angles of the V/2 and V steps within the quarter period, degrees
\(c_n,\ V,\ n\)
as in (20.1)
\(\cos\)
cosine; \(n\theta\) in rad
Selective harmonic elimination, borrowed from power electronics. \(\cos 36^\circ + \cos 144^\circ = 0\) and \(\cos 60^\circ + \cos 240^\circ = 0\). The fundamental is \(0.824 \times 4V/\pi\) (−1.69 dB); the first surviving harmonics are the 7th (−21.1 dBc) and 11th (−20.8 dBc).

Even harmonics need broken symmetry. Harmonic imaging receives at \(2f_0\), so the transmit spectrum near \(2f_0\) must be as clean as possible. A ±V square with duty \(D = \tfrac{1}{2} + \varepsilon\) has

\[ \frac{c_2}{c_1} = \lvert \cos \pi D \rvert = \sin(\pi\varepsilon) \approx \pi\varepsilon, \qquad \varepsilon = \frac{\Delta}{T} \]
(20.4)
\(c_1,\ c_2\)
fundamental and second-harmonic amplitudes, V
\(D\)
duty cycle of the positive half, \(D = \tfrac{1}{2} + \varepsilon\), dimensionless
\(\varepsilon\)
duty error, dimensionless
\(\Delta\)
excess length of the positive half cycle, ns
\(T\)
period \(1/f_0\), ns
A positive half-cycle that is \(\Delta = 1\) ns too long at 5 MHz (\(T = 200\) ns, \(\varepsilon = 0.005\)) gives a second harmonic at −36.1 dBc; 2 ns gives −30.1 dBc. A −45 dBc second-harmonic spec at 5 MHz is a duty error below 0.36 ns. Unequal rise and fall times break the symmetry the same way. An amplitude mismatch \(+V \ne -V\) alone does not: it adds a step at the burst envelope, which is low-frequency.

Slew rate. The pulser sources a limited current into a mostly capacitive load (element \(C_0\) plus cable):

\[ \frac{dV}{dt} = \frac{I_{\mathrm{pk}}}{C_{\mathrm{load}}}, \qquad t_{\mathrm{sw}} = \frac{C_{\mathrm{load}}\, \Delta V}{I_{\mathrm{pk}}} \]
(20.5)
\(I_{\mathrm{pk}}\)
peak pulser output current, A
\(C_{\mathrm{load}}\)
element \(C_0\) plus cable capacitance, pF
\(\Delta V\)
voltage swing of one transition, V
\(t_{\mathrm{sw}}\)
transition (edge) time, ns
\(V,\ t\)
output voltage (V) and time (ns)
2 A into 300 pF: 6.7 V/ns; a −100 → +100 V transition takes 30 ns, 30 % of a 5 MHz half period. Linear ramps of duration \(t_r\) multiply harmonic \(n\) by \(\operatorname{sinc}(n f_0 t_r)\): at 5 MHz and 30 ns, −0.32 dB on the fundamental and −3.1 dB on the 3rd.
Schematic Figure 20.2b · Pulser output stages and the waveforms they make. Switches stand for high-voltage MOSFETs with level-shifted gate drivers; real ICs add a damping/clamp switch and, in 5-level parts, the ±HV/2 rails. Waveforms are the ideal level sequences of 20.2 (computed), drawn without slew.
(a) Unipolar 0/+V (b) Bipolar ±V (c) 3- and 5-level (d) Linear (arbitrary) +HV GND P-MOS N-MOS out +HV −HV P-MOS N-MOS out +HV −HV out clamp +HV/2 −HV/2 5-level adds ±HV/2 rails +HV −HV DAC HV Rf class-AB HV output stage out cₙ = 2V/(nπ), odd n, plus DC; half the bipolar amplitude cₙ = 4V/(nπ), odd n: 3rd −9.5 dB, 5th −14.0 even n need asymmetry 3-level β = 120°: c₃ = 0 5-level 12°/48°: c₃ = c₅ = 0 (drawn) any shape and envelope; class-B η = (π/4)·a: 78.5 % at full swing
Demo 20.1

Pulser waveform and spectrum

SimulationSampled drive waveform (0.5 ns step) with a current-limited slew \(I/C\), 16384-point FFT and an exact DFT at \(n f_0\), run in JS. The transducer passband is approximated by a 70 % Gaussian.
drive waveform / spectrumideal (no slew limit, no duty error)after a 70 % Gaussian transducer passbandharmonic markers \(n f_0\)
Try: bipolar with \(\Delta = 0\) still shows a small \(2f_0\) term (−37 dBc at 4 cycles, −43 dBc at 8) from the first and last edges of the slew-limited burst, which start from 0 V; with fast edges (4 A into 50 pF) it falls to −59 dBc (−65 dBc at 8 cycles). Raise \(\Delta\) to 2 ns: the duty-error term \(\sin(\pi\Delta f_0)\) = −30.1 dBc adds to it (readout ≈ −28 dBc at 8 cycles). Switch to 3-level and sweep \(\beta\): the 3rd harmonic nulls at 120°, the 5th at 72° and 144°. 5-level removes both 3rd and 5th. Drop the current to 0.5 A at 600 pF: the edges become ramps and the waveform drifts toward a triangle, losing fundamental.

The harmonic content of an infinitely long burst of each switching type, computed from the coefficients (20.1)–(20.3):

Why multi-level matters for harmonic and contrast imaging

Tissue harmonic imaging and CEUS receive near \(2f_0\) (or at \(f_0\) after pulse inversion). Any transmit energy at \(2f_0\) is indistinguishable from the tissue's own harmonic, so the pulser must be clean there: tight duty symmetry (even harmonics) and a smooth envelope so the \(f_0\) band's spectral skirt does not spill into \(2f_0\). 5-level and linear drivers also allow amplitude shaping (tapered burst envelope, per-element apodization in transmit) and amplitude-modulation sequences, which a 2-level pulser can only approximate by pulse-width tricks. Pulse inversion cancels the fundamental only to the symmetry of the ±pulses: residual \(\approx \sqrt{\delta a^2 + (2\pi f_0 \Delta t)^2}\), so 1 % amplitude mismatch leaves −40 dB and 1 ns timing mismatch at 5 MHz leaves −30 dB.

Pitfall

Quoting a pulser's "second-harmonic suppression" without the load. Slew rate and edge symmetry depend on \(C_{\mathrm{load}}\), so a part that is clean into a test load can be dirtier on a long cable with a large element. Measure the \(2f_0\) content on the real probe, at every drive voltage used.

20.3T/R switch, protection, cable and element loading

T/R switch. During transmit the switch isolates the LNA and a limiter (diode clamp) holds the LNA input near a volt; during receive the switch connects the element through a few ohms. Switching transients, residual ring-down and LNA overload recovery make a short blind interval after each transmit; its depth equivalent is \(z_{\mathrm{dead}} = c\, t_{\mathrm{rec}}/2\) (1 µs → 0.77 mm). Integrated pulser ICs often include the switch; the LNA must also tolerate the leakage through it.

Schematic Figure 20.2a · A classic diode-protected T/R front end. Integrated pulser ICs replace D1/D2 and the T/R switch with MOSFET switches, but the jobs are the same: block the pulser in receive, isolate the LNA in transmit, clamp what leaks through.
Pulser±100 V, 2 A D1/D2 series pair open for |v| < 0.7 V: pulser noise off in Rx element node element C₀ 1–100 pF cable ≈ 150–250 pF Tx: ±100 V out; Rx: µV … 1 V echoes in T/R switch MOSFET pair or diode bridge ≈ 10–20 Ω on; opens during Tx D3/D4 limiter: clamps to ≈ ±0.7 V LNA to VGA survives a few V of feed-through; overload recovery sets the dead zone Timing (not to scale) pulser T/R off (isolated) on: echoes pass to the LNA t(rec) ≈ 0.1–1 µs dead zone z = c·t(rec)/2: 1 µs → 0.77 mm

The element as a source. In receive the element is a voltage source with an internal impedance. Near resonance the Butterworth–Van Dyke (BVD) model is enough: a motional branch (\(R_m\), \(L_m\), \(C_m\)) in parallel with the clamped capacitance \(C_0\).

\[ \begin{aligned} C_0 &= \varepsilon_{33}^{S}\, \varepsilon_0 A / t \\ Z_e &= \left( R_m + j\omega L_m + \frac{1}{j\omega C_m} \right) \parallel \frac{1}{j\omega C_0} \\ k_{\mathrm{eff}}^2 &= \frac{C_m}{C_0 + C_m} \end{aligned} \]
(20.6)
\(C_0\)
clamped capacitance of the element, pF
\(\varepsilon_{33}^{S}\)
clamped relative permittivity, dimensionless
\(\varepsilon_0\)
vacuum permittivity, 8.854 pF/m
\(A,\ t\)
element area (m²) and thickness (m)
\(R_m,\ L_m,\ C_m\)
motional (BVD) resistance Ω, inductance H, capacitance F
\(\omega\)
angular frequency \(2\pi f\), rad/s
\(Z_e\)
element electrical impedance, Ω (∥ = parallel combination)
\(k_{\mathrm{eff}}\)
effective electromechanical coupling, dimensionless
\(j\)
imaginary unit
Linear-array element 0.27 × 5 mm, 0.36 mm thick 1-3 composite with \(\varepsilon^S/\varepsilon_0 \approx 880\): \(C_0 \approx 29\) pF. A phased-array element (0.27 × 13 mm, 0.72 mm): ≈ 38 pF. A 2D-matrix element (0.2 × 0.2 mm, 0.6 mm, PZT-5H \(\varepsilon^S/\varepsilon_0 \approx 1470\)): ≈ 0.9 pF. The model below uses \(C_0 = 30\) pF, \(k_{\mathrm{eff}}^2 = 0.4\) and a loaded \(Q\) of 2 at 5 MHz, giving \(R_m = 796\) Ω and \(\lvert Z_e \rvert = 637\) Ω at −37°. Illustrative, not a specific probe.
\[ \begin{aligned} V_{\mathrm{LNA}} &= V_{\mathrm{oc}} \cdot \frac{Z_L}{Z_e + Z_L} \\ Z_L &= \frac{1}{j\omega (C_{\mathrm{cable}} + C_{\mathrm{in}})} \parallel R_{\mathrm{term}} \parallel j\omega L_{\mathrm{tune}} \end{aligned} \]
(20.7)
\(V_{\mathrm{oc}}\)
open-circuit echo voltage of the element, V
\(V_{\mathrm{LNA}}\)
voltage at the LNA input, V
\(Z_e\)
element impedance (20.6), Ω
\(Z_L\)
load seen by the element, Ω
\(C_{\mathrm{cable}},\ C_{\mathrm{in}}\)
cable and LNA input capacitance, pF
\(R_{\mathrm{term}}\)
termination resistance (if fitted), Ω
\(L_{\mathrm{tune}}\)
shunt tuning inductance (if fitted), H
\(\omega,\ j\)
angular frequency (rad/s) and imaginary unit
\(\parallel\)
parallel combination, as in (20.6)
Purely capacitive limit: \(\lvert H \rvert = C_0/(C_0 + C_{\mathrm{cable}} + C_{\mathrm{in}}) = 30/195\) = −16.3 dB for a 150 pF cable and 15 pF LNA input. At resonance the motional branch lowers the source impedance, and the BVD model gives −12.0 dB. Either way the cable is a large signal loss.

Signal loss is not SNR loss. The element's own thermal noise, \(4kT \operatorname{Re} Z_e\), passes through the same divider as the signal. Only the LNA's noise is added after it. The cable therefore costs SNR only to the extent that it pushes the element's noise down toward the LNA's noise. With an 0.8 nV/√Hz, 1.5 pA/√Hz LNA, the 150 pF cable costs 12.0 dB of signal but only 2.8 dB of SNR (noise figure 0.88 → 3.72 dB). A shunt inductor that resonates the total capacitance, \(L = 1/(\omega_0^2 C_T)\), recovers both at \(f_0\) (\(\lvert H \rvert\) = +0.6 dB, NF 1.28 dB with \(Q_L = 30\)), but only over a narrow band.

Demo 20.2

Element, cable and LNA input: signal transfer and noise figure

Approx. modelButterworth–Van Dyke element (\(C_0\), \(k_{\mathrm{eff}}^2 = 0.4\), loaded \(Q = 2\) at 5 MHz), lumped cable and LNA input capacitance, \(e_n\)–\(i_n\) noise model, \(T = 290\) K. Illustrative element, not a specific probe.
\(\lvert H(f) \rvert = V_{\mathrm{LNA}}/V_{\mathrm{oc}}\)noise figureno cable, high-Z (reference)
Try: drag the cable from 0 to 400 pF and compare the signal loss with the noise-figure rise. Set \(C_0 = 1\) pF (a 2D-matrix element): \(\lvert H \rvert\) falls to about −40 dB, which is why matrix probes put preamplifiers or micro-beamformers in the handle (Module 19). Compare the resistive and active 200 Ω terminations: same damping, about 3 dB less noise figure for the active one.
Intuition

Think of the element's thermal noise as part of the signal: it is "the noise of the acoustic world", and it rides through the cable with the echo. The LNA's job is to add little on top. A long cable only hurts when it shrinks both below the LNA's own floor. That is why the same cable that is harmless for a 30 pF linear-array element is fatal for a 1 pF matrix element.

20.4LNA noise, noise figure and the cascade

Every resistor at temperature \(T\) has an open-circuit noise voltage with a flat one-sided density; an amplifier is modelled as noiseless with an input voltage-noise source \(e_n\) and current-noise source \(i_n\).

\[ v_n = \sqrt{4kTRB} \qquad \left( 50\ \Omega\text{: } 0.895\ \mathrm{nV}/\sqrt{\mathrm{Hz}};\ \ 1\ \mathrm{k\Omega}\text{: } 4.00\ \mathrm{nV}/\sqrt{\mathrm{Hz}} \text{ at } T = 290\ \mathrm{K} \right) \]
(20.8)
\(v_n\)
rms open-circuit noise voltage, V
\(k\)
Boltzmann constant, \(1.380649 \times 10^{-23}\) J/K
\(T\)
absolute temperature, K
\(R\)
resistance, Ω
\(B\)
noise bandwidth, Hz
\(k = 1.380649 \times 10^{-23}\) J/K. Over \(B = 3.5\) MHz, 0.8 nV/√Hz becomes 1.50 µV rms. An LNA at 0.8 nV/√Hz is as quiet as a 40 Ω resistor.
\[ F = 1 + \frac{e_n^2 + i_n^2 \lvert Z_s \rvert^2}{4kT \operatorname{Re} Z_s}, \qquad \mathrm{NF} = 10 \log_{10} F \]
(20.9)
\(e_n\)
LNA input voltage-noise density, nV/√Hz
\(i_n\)
LNA input current-noise density, pA/√Hz
\(Z_s\)
source impedance seen by the LNA (element + cable), Ω
\(k,\ T\)
Boltzmann constant (J/K), temperature (K)
\(F\)
noise factor, dimensionless
\(\mathrm{NF}\)
noise figure, dB
\(\operatorname{Re}\)
real part
\(\lvert\cdot\rvert\)
magnitude
Noise figure is the SNR degradation relative to the source's own thermal noise at \(T_0\) = 290 K. For a resistive source and uncorrelated \(e_n\), \(i_n\), \(F\) is minimum at \(R_{\mathrm{opt}} = e_n/i_n\) with \(F_{\mathrm{min}} = 1 + e_n i_n/(2kT)\). 0.8 nV/√Hz and 1.5 pA/√Hz: \(R_{\mathrm{opt}} = 533\) Ω, \(\mathrm{NF}_{\mathrm{min}} = 0.61\) dB.
\[ \begin{gathered} e_{\mathrm{tot}}^2 = e_1^2 + \frac{e_2^2}{A_1^2} + \frac{e_3^2}{(A_1 A_2)^2} + \dots \\ \Longleftrightarrow\quad F = F_1 + \frac{F_2 - 1}{G_1} + \frac{F_3 - 1}{G_1 G_2} + \dots \end{gathered} \]
(20.10)
\(e_k\)
input-referred noise density of stage k, nV/√Hz
\(e_{\mathrm{tot}}\)
total noise density referred to the chain input, nV/√Hz
\(A_k\)
voltage gain of stage k, linear
\(F_k\)
noise factor of stage k, dimensionless
\(G_k\)
available power gain of stage k, linear
The voltage form (input-referred noise densities, voltage gains \(A\)) suits a chain of high-impedance amplifiers; the Friis power form (Friis, Proc. IRE 1944) assumes available power gains. Same message: the first stage's gain divides every later stage's noise.
Demo 20.3

Noise figure versus source impedance and the cascade

Exact formula\(F(R_s) = 1 + (e_n^2 + i_n^2 R_s^2)/(4kTR_s)\) and the input-referred cascade, for a resistive source and uncorrelated \(e_n\), \(i_n\).
NF vs \(R_s\)source thermal \(\sqrt{4kTR}\)\(e_n\), \(i_n R_s\)cascade NF vs \(A_1\)
Try: the NF curve bottoms at \(R_{\mathrm{opt}} = e_n/i_n\). Raise \(i_n\) to 10 pA/√Hz (a noisier bipolar input) and watch high-impedance sources suffer. In the cascade panel, drop \(A_1\) to 6 dB: a 5 nV/√Hz VGA now dominates the noise.
Pitfall

Power matching (\(R_{\mathrm{in}} = R_s\)) is not noise matching. A resistive termination equal to a 500 Ω element (the power match) halves the signal, and its own thermal noise alone sets \(F \ge 1 + R_s/R_{\mathrm{term}} = 2\) (3 dB) before the LNA adds anything; a 50 Ω termination on the same element divides the signal by 11 and gives \(F \ge 11\) (10.4 dB). When damping or a defined input impedance is needed, active (feedback) termination provides the impedance with a fraction of the noise, because the feedback resistor is \((1 + A)\) times larger.

20.5TGC, anti-aliasing and the ADC

Time-gain compensation. Echoes from equal scatterers fall by the two-way attenuation \(2\alpha f_0 z\) (dB). The VGA gain follows depth so the echo level at the ADC stays roughly constant. Since \(z = ct/2\):

\[ \frac{dG}{dz} = 2\alpha f_0 \ \ [\mathrm{dB/cm}], \qquad \frac{dG}{dt} = \alpha f_0 c \ \ [\mathrm{dB}/\mu\mathrm{s},\ \text{with } c = 0.154\ \mathrm{cm}/\mu\mathrm{s}] \]
(20.11)
\(G\)
TGC (VGA) gain, dB
\(\alpha\)
attenuation coefficient, dB/cm/MHz
\(f_0\)
centre frequency, MHz
\(z\)
depth, cm
\(t\)
time after transmit, µs
\(c\)
sound speed, cm/µs
\(\alpha = 0.5\) dB/cm/MHz at 5 MHz: 5 dB/cm, 0.385 dB/µs. At 20 cm depth that is 100 dB of attenuation, which no single VGA covers; in practice the gain saturates and deep echoes become noise-limited (Module 10 for the SNR-versus-depth view).

Dynamic range. Total input dynamic range spans the strongest near-field echo (up to the LNA's linear range, ≈ 1 Vpp = 0.354 V rms) to the input noise in band (2.06 µV rms with the default element, cable and LNA over 3.5 MHz): 104.7 dB. The ADC's instantaneous range is ≈ 70 dB. TGC maps the first onto the second by spending gain only where the echoes are small.

\[ \mathrm{SNR}_q = 6.02N + 1.76\ \mathrm{dB} \qquad \left( \text{full-scale sine, quantization noise } \mathrm{LSB}^2/12 \text{ over } 0 \ldots f_s/2 \right) \]
(20.12)
\(N\)
ADC resolution, bits
\(\mathrm{LSB}\)
least significant bit (full-scale range / \(2^N\)), V
\(f_s\)
sampling rate, MHz
\(\mathrm{SNR}_q\)
quantization-limited SNR, dB
12 bit: 74.0 dB, 14 bit: 86.0 dB. Real ADCs fall short: \(\mathrm{ENOB} = (\mathrm{SINAD} - 1.76)/6.02\). Band-limiting to \(B\) after sampling adds a processing gain \(10 \log_{10}(f_s/2B)\): \(f_s = 40\) MHz, \(B = 4\) MHz gives 7.0 dB.
\[ \mathrm{SNR}_{\mathrm{jitter}} = -20 \log_{10}\left( 2\pi f_{\mathrm{in}} \sigma_t \right) \]
(20.13)
\(f_{\mathrm{in}}\)
input (signal) frequency, Hz
\(\sigma_t\)
rms sampling-clock jitter, s
\(\mathrm{SNR}_{\mathrm{jitter}}\)
jitter-limited SNR for a full-scale sine, dB
From the slope error of a full-scale sine sampled at a time error \(\sigma_t\) (rms). 1 ps at 10 MHz: 84.0 dB; 1 ps at 15 MHz: 80.5 dB; 5 ps at 10 MHz: 70.1 dB. Noise powers add: \(1/\mathrm{SNR} = 1/\mathrm{SNR}_q + 1/\mathrm{SNR}_j + 1/\mathrm{SNR}_{\mathrm{thermal}}\).

Anti-aliasing filter. Content above \(f_s/2\) folds into the band. For signals this means harmonics and out-of-band interference; for noise it means the LNA's wideband noise folds in too. Without a filter, an LNA noise bandwidth of 70 MHz sampled at 40 MHz raises the in-band noise by \(10 \log_{10}(70/20)\) = 5.4 dB. A 3rd-order Butterworth at 15 MHz attenuates 30 MHz (which aliases to 10 MHz at \(f_s\) = 40 MHz) by only 18.1 dB, which is why the filter order and cutoff are traded against the band you want to keep (\(2f_0\) for harmonic imaging).

Demo 20.4

TGC versus depth: input levels and the ADC window

Approx. modelThe link-budget model of 20.8: narrowband attenuation \(2\alpha f_0 z\), illustrative loop gain (−40 dB) and reflectivity, BVD front end, ideal ADC with 3 dB implementation loss.
speckle echostrong interface (+40 dB)analog noiseADC noise in bandTGC gain
Try: at 100 % slope the speckle sits flat at the TGC target until the VGA runs out of range (VGA span −10 dB to range − 10 dB, after a 20 dB LNA); beyond that depth the trace falls and the analog noise (not the ADC) sets the floor. Set the slope to 0 %: deep speckle drops toward the ADC floor and the ADC starts to cost SNR. Raise the target to −20 dBFS: the strong interface clips at shallow depth. Raise \(f_0\) to 12 MHz to see how fast the usable depth shrinks.
Demo 20.5

ADC quantization and clock jitter

SimulationMonte Carlo capture in JS: 8192 samples of a coherent sine with Gaussian sampling-time jitter, rounded to N bits, FFT; the theory curves are the closed forms.
spectrum (dBFS per bin)jitter limitquantization limitcombined theorymeasured
Try: 16 bits with 1 ps jitter at 10 MHz: the measured SNR stops near 84 dB, not 98 dB, so extra bits buy nothing without a better clock. Drop the input level to −20 dBFS: quantization SNR falls dB for dB, jitter SNR does not (jitter noise scales with the signal). \(f_s\) = 65 MS/s, 8192-point coherent capture.
Ultrasound link

Beamforming relaxes per-channel ADC requirements: N channels add the signal coherently and the uncorrelated quantization and thermal noise incoherently, a gain of \(10 \log_{10} N\) (21.1 dB for 128). This is why 12-bit channels make images with more than 74 dB of displayed dynamic range, and why ultrafast systems with 10-bit channels can still work. Jitter that is common to all channels (a shared clock) is not averaged by the beamformer for a coherent target; per-channel jitter is.

20.6Data rates and beamformer architectures

\[ \begin{aligned} R_{\mathrm{ADC}} &= N_{\mathrm{ch}} \cdot f_s \cdot b \\ 128 \times 40\ \mathrm{MHz} \times 12\ \mathrm{bit} &= 61.4\ \mathrm{Gb/s}\ \ (7.68\ \mathrm{GB/s}) \\ 256 \times 62.5\ \mathrm{MHz} \times 14\ \mathrm{bit} &= 224\ \mathrm{Gb/s} \end{aligned} \]
(20.14)
\(N_{\mathrm{ch}}\)
number of receive channels
\(f_s\)
sampling rate, MHz
\(b\)
ADC resolution, bits per sample
\(R_{\mathrm{ADC}}\)
aggregate rate at the ADC outputs, Gb/s
This is the aggregate at the ADC outputs, continuous. It is what an FPGA or ASIC beamformer next to the ADCs must absorb.
\[ \begin{aligned} \text{bytes per transmit event} &= N_{\mathrm{ch}} \cdot \frac{2 z_{\max}}{c}\, f_s \cdot \left\lceil \frac{b}{8} \right\rceil \\ \text{sustained} &= \text{bytes/event} \times \text{event rate} \end{aligned} \]
(20.15)
\(z_{\max}\)
maximum imaging depth, m
\(c\)
sound speed, m/s
\(\lceil b/8 \rceil\)
whole bytes per sample
\(\text{event rate}\)
transmit events per second, Hz
5 cm, 40 MHz, 128 channels, 16-bit words: 2597 samples, 665 kB per event; at 10 kHz (ultrafast plane-wave) 6.65 GB/s, close to a PCIe Gen3 ×8 link (≈ 7.9 GB/s usable after 128b/130b coding) and a fifth of Gen4 ×16 (≈ 31.5 GB/s). Complex baseband (IQ) at \(f_{\mathrm{IQ}} = f_0\) cuts it by \(f_s/(2 f_{\mathrm{IQ}}) = 4\) at 5 MHz.
ArchitectureWhere the delays are appliedStrengthLimit
Analog beamformingAnalog delay lines or switched-capacitor sample-and-hold before one ADC per beamFew ADCs, low power; survives today inside matrix-probe micro-beamformers (sub-array partial sums)Delay quantization, fixed focusing, no channel data
Digital hardware (FPGA/ASIC)Per-channel ADC, delay-and-sum in programmable logic or custom siliconReal time, dynamic receive focusing, parallel receive beams; the mainstream architectureAlgorithm changes need firmware; channel data rarely exported
Software / GPUAll channel data (RF or IQ) moved to host memory; beamforming in GPU codePlane-wave and diverging-wave compounding, adaptive beamformers, ULM, SoS estimation; any pixel gridLink bandwidth (GB/s) and GPU throughput (channel-pixel interpolations per second)
Research platformsProgrammable transmit, raw channel-data capture, often software beamformingFull control of sequences and access to per-channel data (for example ULA-OP 256, Boni et al. 2016; SARUS, Jensen et al. 2013; commercial programmable systems)Channel count, cost, regulatory status for clinical use
Demo 20.6

Channel-data rate calculator

Exact formulaArithmetic: \(N_{\mathrm{ch}} f_s b\) at the ADCs, window \(2z/c\) per event with whole-byte words; link capacities are usable rates after line coding.
data rateslink capacities (usable)
Try: 1024 channels (a 32 × 32 matrix without micro-beamforming) at 40 MHz and 12 bit is 492 Gb/s at the ADCs, which is the argument for sub-array beamforming in the probe. Lower the event rate to 0.5 kHz (conventional line-by-line) and the host link stops being the bottleneck.
Ultrasound link: ULM and SoS need channel data

Ultrasound localization microscopy needs thousands of compounded frames per second for minutes, and sound-speed estimation and aberration correction need per-channel delays. Both need either software beamforming on exported channel data or hardware that can be reprogrammed with new delay laws. When you read a ULM or SoS paper, check the platform: it determines what was possible (frame rate, ensemble length, whether RF or IQ was stored).

20.7Power, thermal budgets and safety interlocks

Pulser dissipation. A switching pulser charges a capacitance from −V to +V through a switch each half cycle. The supply delivers \(Q \cdot V = 2CV^2\) per transition and the stored energy is unchanged, so \(2CV^2\) is dissipated per transition:

\[ P_{\mathrm{cap}} = 4\, C V^2 \cdot N_{\mathrm{cyc}} \cdot \mathrm{PRF} \qquad \text{per channel (bipolar } \pm V\text{)} \]
(20.16)
\(C\)
load capacitance (element + cable), F
\(V\)
rail voltage, V
\(N_{\mathrm{cyc}}\)
cycles per transmit burst
\(\mathrm{PRF}\)
transmit events per second, Hz
\(P_{\mathrm{cap}}\)
switching dissipation per channel, W
C = 300 pF, V = 50 V, 2 cycles, 10 kHz: 60 mW per channel, 7.7 W for 128 channels. Unipolar 0 → V: \(CV^2\) per cycle. The resistive (acoustic) part of the load adds to this; linear transmitters dissipate far more.

Shear-wave pushes and long bursts. A 200 µs push at 5 MHz is 1000 cycles: 3 mJ per channel at 50 V into 300 pF, and an average current of \(4CVf_0\) = 0.3 A per channel from the two rails together, \(2CVf_0\) = 0.15 A from each (19 A per rail for 128 channels). The HV supply's reservoir capacitor must deliver 3.8 mC in 200 µs; a 1 mF bank droops by 3.8 V (7.7 % of 50 V). Pushes, not B-mode pulses, size the HV supply, the reservoir and the pulser package.

Probe surface temperature. IEC 60601-2-37 limits the transducer face to 43 °C when coupled to a tissue-mimicking test object and 50 °C in still air. Pulser and AFE heat in the probe handle (matrix probes with in-handle electronics) and acoustic absorption in the lens both count. The acoustic output limits (MI, TI, derated \(I_{\mathrm{SPTA}}\)) are in Module 22; the coded-excitation trade-off is in Module 10.

Power cards: capacitive load only (ideal switches charging C = 300 pF), ideal class-B stage into a resistive load. The element's acoustic (resistive) load and switch losses come on top.

Interlock (generic)What it preventsTypical implementation
Per-mode HV limitExceeding the acoustic output measured for that mode and probeLookup table of maximum supply voltage per probe, mode and transmit setting; HV DAC clamp
Duty and burst-length limitThermal runaway, TI excursionsFirmware limits on cycles × PRF × voltage; hardware timer that cuts long bursts
Probe ID and temperature sensingDriving a probe with another probe's settings; face overheatingProbe EEPROM ID; thermistor in the probe with a shutdown threshold below the IEC limit
Watchdog / HV dischargeStuck pulser or software fault holding HV on an elementIndependent watchdog that disables HV and discharges the reservoir
Display of MI and TIUninformed exposureReal-time indices computed from the calibrated output tables (IEC 62359)
510(k) angle

The acoustic output tables in a submission are measured at the system's worst-case settings, so every interlock above is part of the safety argument: the reviewer's question is "what stops the system from exceeding the measured maximum?". Changing a pulser (more levels, a linear driver) or a probe cable changes the voltage-to-pressure transfer and therefore the measured output, even if the software limits are unchanged.

20.8The link budget: from transmit voltage to ADC LSB to penetration

A link budget is a column of dB numbers that add. Here it runs from the drive voltage on one element to the beamformed SNR of one target at one depth. Every stage is one of the formulas above; the calculator only adds them, so you can change any one and see which stage owns the result.

\[ V_{\mathrm{oc}} = V_{\mathrm{tx}} \cdot 10^{(G_{\mathrm{loop}} + R - 2\alpha f_0 z)/20} \]
(20.17)
\(V_{\mathrm{tx}}\)
drive voltage on the element, V
\(G_{\mathrm{loop}}\)
per-element pulse-echo loop gain for a perfect reflector, dB
\(R\)
target reflectivity relative to a perfect reflector, dB
\(\alpha\)
attenuation, dB/cm/MHz
\(f_0\)
centre frequency, MHz
\(z\)
target depth, cm
\(V_{\mathrm{oc}}\)
open-circuit echo voltage, V
\(G_{\mathrm{loop}}\): per-element pulse-echo loop gain for a perfect plane reflector at the focus in water (focusing gain and diffraction included), the quantity a pulse-echo test on the real probe measures. \(R\): target reflectivity relative to a perfect reflector (strong interface ≈ −20 dB; tissue speckle per resolution cell ≈ −60 dB; blood a further 30–60 dB below tissue). Defaults \(G_{\mathrm{loop}} = -40\) dB and \(R = -60\) dB are illustrative orders of magnitude, chosen so the result matches typical penetration; replace them with measured values.
\[ \mathrm{SNR}_{\mathrm{ch}} = \frac{(V_{\mathrm{oc}} \lvert H \rvert)^2 / 2}{\left( 4kT \operatorname{Re} Z_s + e_n^2 + i_n^2 \lvert Z_s \rvert^2 \right) B + v_q^2 / G^2} \]
(20.18)
\(H\)
element–cable transfer \(V_{\mathrm{LNA}}/V_{\mathrm{oc}}\) at \(f_0\), (20.7), dimensionless
\(B\)
receive noise bandwidth, Hz
\(v_q\)
in-band ADC noise, V rms
\(G\)
total gain LNA + VGA, linear
\(\mathrm{SNR}_{\mathrm{ch}}\)
per-channel SNR (peak signal over rms noise), linear or dB
\(k,\ T,\ e_n,\ i_n,\ Z_s\)
as in (20.9)
\(V_{\mathrm{oc}}\)
as in (20.17)
\(\lvert\cdot\rvert,\ \operatorname{Re}\)
magnitude, real part
\(H\) and \(Z_s\) from the element–cable model of 20.3 at \(f_0\); \(B\) = fractional bandwidth × \(f_0\) (noise bandwidth of the receive filter); \(v_q\) = ADC noise in band, referred back through the total gain \(G\) = LNA + VGA. Peak-signal-to-rms-noise convention (\(A^2/2\) over \(\sigma^2\)).
\[ \begin{aligned} \mathrm{SNR}_{\mathrm{out}} &= \mathrm{SNR}_{\mathrm{ch}} + 10 \log_{10} G_{\mathrm{BF}} \\ G_{\mathrm{BF}} &= N \ \ (\text{point target}) \quad \text{or} \quad \frac{2N^2 + 1}{3N} \approx \frac{2N}{3} \ \ (\text{speckle}) \end{aligned} \]
(20.19)
\(N\)
number of receive channels
\(G_{\mathrm{BF}}\)
beamforming SNR gain, linear
\(\mathrm{SNR}_{\mathrm{out}}\)
beamformed SNR, dB
For speckle the echo is only partially coherent across the aperture: with equal transmit and receive apertures the van Cittert–Zernike coherence is triangular (Mallart and Fink, JASA 1991), and the beamforming gain is 19.3 dB for \(N = 128\) instead of 21.1 dB. Noise-limited penetration: \(\mathrm{SNR}_{\mathrm{out}}(z_{\max}) = 0\) dB, i.e. \(z_{\max} \approx z + \mathrm{SNR}_{\mathrm{out}}(z)/(2\alpha f_0)\) while the ADC is not limiting.

Worked default (50 V, 5 MHz, 70 % bandwidth, 0.5 dB/cm/MHz, speckle at 6 cm, 150 pF cable, 0.8 nV/√Hz and 1.5 pA/√Hz LNA at 20 dB, VGA −10 … +30 dB, 12-bit ADC at 40 MS/s with 3 dB implementation loss, 128 channels). Open-circuit echo −96.0 dBV peak (15.8 µV, −99.0 dBV rms); after the cable 4.0 µV peak; input noise 1.10 nV/√Hz × √3.5 MHz = 2.06 µV rms, so \(\mathrm{SNR}_{\mathrm{ch}}\) = 2.7 dB. The VGA is at its +30 dB limit and the echo reaches the ADC at −58 dBFS, but the analog noise there (0.65 mV rms) is 17.9 dB above the ADC's in-band noise (83 µV), so the ADC costs 0.07 dB. Beamforming adds 19.3 dB: \(\mathrm{SNR}_{\mathrm{out}}\) = 21.9 dB, and the noise-limited penetration is 10.4 cm. Removing the cable gives 24.8 dB, the 2.9 dB that the noise-figure difference predicts. The same pages print from m20_link_budget.m.

Demo 20.7

Link-budget calculator: waterfall, SNR versus depth, stage table

Approx. modeldB bookkeeping of 20.8: \(G_{\mathrm{loop}}\) and R are illustrative orders of magnitude, BVD element and cable at \(f_0\), white noise in \(B = \mathrm{FBW} \cdot f_0\), beamforming gain \(N\) or \((2N^2 + 1)/(3N)\).
gainlosssignal level (rms)noise floor (rms, in B)ADC full scale and in-band ADC noise
\(\mathrm{SNR}_{\mathrm{out}}(z)\), full chainanalog noise only (ideal ADC)ADC noise onlyselected depth
StageGain (dB)Signal (dBV rms)Noise (dBV rms)SNR (dB)
Try: (1) Set the VGA max gain to 0 dB: deep speckle lands near the ADC floor and the "ADC only" curve now caps \(\mathrm{SNR}_{\mathrm{out}}\); that is the rule "30–40 dB of gain in front of the ADC". (2) Pick the strong interface at 1 cm and raise \(V_{\mathrm{tx}}\): the echo clips (> 0 dBFS) even at minimum VGA gain, so the LNA's linear range, not noise, limits the near field. (3) Double the drive from 50 to 100 V: +6 dB everywhere and 1.2 cm more penetration at 5 MHz. (4) Raise \(f_0\) from 5 to 10 MHz: the attenuation term doubles and the penetration roughly halves.
Reading the waterfall

The blue staircase is the signal; the pink line is the noise floor, which appears at the element and is lifted by the LNA's own noise. After that, every gain lifts both by the same amount, so the gap between them, the SNR, is fixed at the LNA input. Gain after the LNA has only two jobs: put the signal above the ADC noise (orange dashed) and keep it below full scale (orange solid). If you find yourself trying to improve SNR with VGA gain, the ADC is the limiting stage.

Pitfall

Adding the beamforming gain to a signal that is already ADC-limited, or to "noise" that is actually clutter or reverberation. The \(10 \log N\) gain applies only to noise that is uncorrelated across channels. Electronic interference coupled into all channels at once (switching-supply ripple, a common clock spur) is correlated and survives beamforming; reverberation and off-axis clutter are signals, not noise, and the link budget says nothing about them.

20.9Visual summary

Fourteen questions an expert answers in five seconds, each with its picture computed from the formula.

Model cards: pulser edge = constant current into a capacitor; cable = BVD element at \(f_0\); TGC = attenuation linear in frequency; beamforming for speckle = triangular van Cittert–Zernike coherence; link budget = the 20.8 defaults.

20.10How experts think about it

Experts keep two ledgers: a voltage ledger (will anything clip or saturate?) and a noise ledger (where is the noise floor set, and does any later stage raise it?). The noise floor is set once, at the LNA input, by the element's thermal noise plus the amplifier's; everything after should be invisible in the noise ledger. Transmit is judged by what reaches the band you receive in: symmetry for even harmonics, levels for odd harmonics, current for slew, and energy for heat.

Even harmonics come from broken symmetry; a 1 ns duty error at 5 MHz puts the second harmonic at −36 dBc.
\(c_2/c_1 = \sin(\pi\varepsilon)\)\(\varepsilon = \Delta/T\)1 ns @ 5 MHz: −36.1 dBc

A ±V square with duty \(D\) has \(c_n \propto \lvert \sin n\pi D \rvert / n\), so \(c_2/c_1 = \lvert \cos \pi D \rvert = \sin \pi\varepsilon\) for \(D = \tfrac{1}{2} + \varepsilon\) (20.4). At 5 MHz, \(\Delta = 1\) ns is \(\varepsilon = 0.005\): −36.1 dBc; 2 ns: −30.1 dBc. A −45 dBc spec needs \(\Delta < 0.36\) ns. Unequal rise and fall times break half-wave symmetry in the same way. m20_pulser_spectra.m prints the simulated \(2f_0\) level against \(\sin(\pi\varepsilon)\); they agree to 0.01 dB.

Exact formula
Steady-state (long burst) view. For 1–2 cycle pulses the spectrum is continuous and the \(f_0\) skirt itself reaches \(2f_0\); shape the envelope too.
A 120° three-level pulse kills the third harmonic for 1.25 dB of fundamental.
\(c_n \propto \sin(n\beta/2)/n\)\(\beta = 120^\circ\): \(c_3 = 0\)\(c_1 \times 0.866\)

The zero dwell turns each half cycle into a pulse of width \(\beta\). Its Fourier coefficient is \((4V/n\pi) \sin(n\beta/2)\) (20.2); at \(\beta = 120^\circ\), \(\sin(180^\circ) = 0\) for \(n = 3\), and the fundamental falls to \(\sin 60^\circ = 0.866\) (−1.25 dB). The 5th and 7th stay at 1/5 and 1/7 of the fundamental. Any one odd harmonic can be nulled by choosing \(\beta = 360^\circ/n\).

Exact formula
Ideal edges. A slew-limited edge at high drive already rounds the waveform and shifts the null.
Five levels switched at 12° and 48° cancel both the third and the fifth harmonic.
\(\cos n\theta_1 + \cos n\theta_2 = 0\)\(n = 3, 5\)\(c_1\) −1.69 dB\(c_7\) −21.1 dBc

A quarter-wave-symmetric staircase 0 → V/2 → V has \(c_n = (2V/n\pi)(\cos n\theta_1 + \cos n\theta_2)\) (20.3). Two angles allow two nulls: \(\cos 36^\circ + \cos 144^\circ = 0\) and \(\cos 60^\circ + \cos 240^\circ = 0\). The fundamental is \(0.824 \times 4V/\pi\). The first surviving harmonics are the 7th (−21.1 dBc) and 11th (−20.8 dBc), well outside a typical transducer passband.

Exact formula
Requires the ±V/2 rails and matched switching delays; timing errors of a few ns reintroduce the 3rd at the −30 dB level.
Slew rate is current over capacitance: 2 A into 300 pF is 6.7 V/ns.
\(dV/dt = I/C\)200 V swing: 30 ns\(\times \operatorname{sinc}(n f_0 t_r)\)

The pulser is a current-limited switch into \(C_0\) plus cable. \(t_{\mathrm{sw}} = C\Delta V/I\): 300 pF × 200 V / 2 A = 30 ns, 30 % of a 5 MHz half period. Ramps act as a low-pass filter on the harmonics, \(\operatorname{sinc}(n f_0 t_r)\): −0.32 dB at \(f_0\) and −3.1 dB at \(3f_0\) for 30 ns. At 10 MHz the same edge eats 60 % of the half period and the waveform becomes a triangle.

Approx. modelconstant-current charging of \(C_{\mathrm{load}}\)
Constant-current model. Real MOSFET drivers have voltage-dependent on-resistance and the element's resistive part also draws current.
Pulse inversion cancels only as well as your pulser is symmetric: 1 % amplitude leaves −40 dB, 1 ns at 5 MHz leaves −30 dB.
\(\lvert 1 - a\, e^{-j2\pi f_0 \Delta t} \rvert\)\(\delta a = 1\,\%\): −40 dB\(\Delta t = 1\) ns: −30.1 dB

The sum of the +pulse echo and the inverted −pulse echo at \(f_0\) is proportional to \(1 - (1 - \delta a)e^{-j\varphi}\) with \(\varphi = 2\pi f_0 \Delta t\), magnitude \(\approx \sqrt{\delta a^2 + \varphi^2}\). At 5 MHz, \(\Delta t = 1\) ns gives \(\varphi = 0.0314\): −30.1 dB of residual fundamental, enough to show up as tissue signal in a contrast image. Motion between the two firings adds the same kind of phase error.

Exact formula
Linear propagation of the fundamental; at high MI nonlinear propagation also differs between polarities.
The cable is a capacitive divider: a 30 pF element on 150 pF of cable loses about 12 dB.
\(C_0/(C_0 + C_c + C_{\mathrm{in}})\)BVD @ \(f_0\): −12.0 dB1 pF element: −41 dB

Below resonance the element is \(C_0\) and the cable \(C_c\) in a divider: \(30/195\) = −16.3 dB. At resonance the motional branch lowers the source impedance and the BVD model gives −12.0 dB. A 2D-matrix element of ≈ 0.9 pF on the same cable loses 41 dB, which is why matrix probes amplify or sub-array beamform in the handle.

Approx. modelBVD element at \(f_0\), lumped cable
Lumped cable (length \(\ll \lambda_{\mathrm{electrical}}\), true at a few MHz for 2 m). At higher frequencies the cable is a transmission line and its characteristic impedance matters.
Signal loss is not SNR loss: the cable costs SNR only through the LNA's own noise.
150 pF: −12.0 dB signalNF 0.88 → 3.72 dBtuned: NF 1.28 dB

The element's thermal noise \(4kT \operatorname{Re} Z_e\) is divided exactly like the echo. Only \(e_n\) and \(i_n \lvert Z_s \rvert\) are added after the divider, so the SNR penalty is the noise-figure change: 2.8 dB for 12 dB of signal loss. A shunt inductor resonating \(C_T = 195\) pF recovers the signal at \(f_0\) (+0.6 dB) and the NF (1.28 dB), but narrows the band. m20_noise_budget.m prints these values.

Approx. modelBVD element, \(e_n\)–\(i_n\) LNA, 290 K
Thermal-noise-limited reception. With external interference picked up by the cable, a lower signal level does cost SNR directly.
A 50 Ω resistor makes 0.9 nV/√Hz; a good ultrasound LNA is as quiet as a 40 Ω resistor.
\(\sqrt{4kTR}\)50 Ω: 0.895 nV/√Hz0.8 nV/√Hz ≡ 40 Ω

At 290 K, \(4kT = 1.60 \times 10^{-20}\) J. A 50 Ω source gives 0.895 nV/√Hz, 1 kΩ gives 4.00 nV/√Hz. Array elements present a few hundred ohms near resonance (509 Ω real part in the model), so their own noise (2.9 nV/√Hz) exceeds a 0.8 nV/√Hz LNA by 11 dB and the NF is under 1 dB without a cable.

Exact formula
T = 290 K is the noise-figure convention; the patient is at 310 K (+0.29 dB of source noise).
Noise match, not power match: the optimum source resistance is \(e_n/i_n\).
\(R_{\mathrm{opt}} = e_n/i_n\)\(F_{\mathrm{min}} = 1 + e_n i_n/2kT\)533 Ω, 0.61 dB

\(F(R) = 1 + (e_n^2 + i_n^2 R^2)/(4kTR)\). Setting \(dF/dR = 0\) gives \(e_n^2 = i_n^2 R^2\), i.e. \(R_{\mathrm{opt}} = e_n/i_n\), and \(F_{\mathrm{min}} = 1 + 2 e_n i_n R/(4kTR)\). With 0.8 nV/√Hz and 1.5 pA/√Hz: 533 Ω and 0.61 dB. Below \(R_{\mathrm{opt}}\) voltage noise dominates (low-impedance sources), above it current noise does (tiny, high-impedance elements).

Exact formula
Resistive source and uncorrelated \(e_n\), \(i_n\). Reactive sources and correlated noise shift the optimum.
The first stage's gain buys down everything after it.
\(e_{\mathrm{tot}}^2 = e_1^2 + e_2^2/A_1^2\)\(A_1\) = 20 dB: \(e_2/10\)

Refer every stage's noise to the input: the second stage's \(e_2\) is divided by \(A_1\). With \(e_1\) = 0.8 nV/√Hz and a 5 nV/√Hz VGA, \(A_1\) = 20 dB adds \(e_2/A_1\) = 0.5 nV/√Hz in quadrature (total 0.94); \(A_1\) = 6 dB adds 2.5 nV/√Hz (total 2.6) and the VGA owns the noise floor. This is why LNAs have 12–24 dB of gain even though they set no other spec.

Exact formula
More LNA gain shrinks the input range before overload (near-field echoes); programmable LNA gain trades noise against headroom.
The TGC slope is \(2\alpha f_0\): 5 dB/cm, or 0.385 dB/µs, at 5 MHz in soft tissue.
\(dG/dz = 2\alpha f_0\)\(dG/dt = \alpha f_0 c\)0.385 dB/µs

Two-way attenuation \(2\alpha f_0 z\) with \(z = ct/2\) gives \(dG/dt = \alpha f_0 c\). With \(\alpha = 0.5\) dB/cm/MHz, \(f_0 = 5\) MHz and \(c = 0.154\) cm/µs: 5 dB/cm and 0.385 dB/µs. A 40 dB VGA range covers 8 cm of compensation at 5 MHz and 5.3 cm at 7.5 MHz; deeper, the gain saturates and the image becomes noise-limited.

Approx. model\(\alpha\) linear in \(f\), 40 dB VGA
Narrowband; the echo spectrum downshifts with depth so the effective slope is lower (Module 10). Operators adjust TGC for fluid-filled regions with no attenuation.
\(6.02N + 1.76\) dB is the ceiling; ENOB is what you get.
12 bit: 74.0 dB14 bit: 86.0 dB\(\mathrm{ENOB} = (\mathrm{SINAD} - 1.76)/6.02\)

Uniform quantization error has variance \(\mathrm{LSB}^2/12\); a full-scale sine has power \((2^N \mathrm{LSB})^2/8\). Their ratio is \(1.5 \cdot 2^{2N}\), i.e. \(6.02N + 1.76\) dB. A 14-bit converter with 77 dBFS SNR has an ENOB of 12.5. Processing gain adds \(10 \log_{10}(f_s/2B)\): +7.0 dB for 4 MHz in a 40 MS/s stream. m20_adc_quantization_jitter.m measures 62.0, 73.8 and 86.0 dB for 10, 12 and 14 bits at −0.1 dBFS.

Exact formula
Busy, full-scale input. A signal far below full scale, or a quiet input without dither, makes quantization noise signal-dependent.
Jitter caps SNR at \(-20 \log_{10}(2\pi f \sigma_t)\): 1 ps at 10 MHz is 84 dB.
1 ps, 10 MHz: 84.0 dB1 ps, 15 MHz: 80.5 dB14 bit @ 15 MHz needs ≤ 0.53 ps

A time error \(\delta t\) on a sine \(A \sin \omega t\) produces an amplitude error \(A\omega \cos(\omega t)\, \delta t\) with rms \(A\omega\sigma_t/\sqrt{2}\); the signal rms is \(A/\sqrt{2}\), so \(\mathrm{SNR} = 1/(\omega\sigma_t)\). The penalty grows 6 dB per octave of input frequency and is independent of the bit count. To keep 86 dB at 15 MHz, \(\sigma_t \le 10^{-86/20}/(2\pi \cdot 15\ \mathrm{MHz})\) = 0.53 ps.

Exact formula
Random (white) jitter. Deterministic clock spurs produce discrete sidebands instead; jitter common to all channels does not average out in beamforming.
Put 30–40 dB of gain in front of the ADC, then it stops mattering.
ADC ≈ 35 nV/√Hz at its input\(\div\, G\): 54 dB → 0.07 nV/√Hz

A 2 Vpp ADC with 72 dBFS SNR at 50 MS/s has 178 µV rms over 25 MHz, i.e. 35.5 nV/√Hz. Referred to the LNA input through a total gain \(G\) it is \(35.5/G\) nV/√Hz: 3.6 nV/√Hz at 20 dB (dominant), 0.36 at 40 dB (adds 0.8 dB to a 0.8 nV/√Hz floor), 0.07 at 54 dB (negligible). This is the noise-floor job of the VGA.

Exact formula
Too much gain clips the strongest echoes; TGC exists to apply high gain only where echoes are weak.
128 channels × 40 MHz × 12 bit is 61 Gb/s before a single pixel is formed.
\(N_{\mathrm{ch}} f_s b\)61.4 Gb/s1024 ch: 492 Gb/s

The ADC aggregate is continuous; what must reach a host is only the acquisition window per event: \(N_{\mathrm{ch}} \cdot (2z/c)\, f_s\) words. At 5 cm and 10 kHz that is 6.65 GB/s with 16-bit words, close to a PCIe Gen3 ×8 link. Matrix probes without in-probe beamforming would need 8 times the 128-channel figure for 1024 elements.

Exact formula
Raw RF. IQ decimation, bit packing and on-board beamforming reduce the export rate by factors of 2–100.
Beamforming buys \(10 \log N\) for a point target and \(10 \log(2N/3)\) for speckle.
\(N = 128\): 21.1 dBspeckle: 19.3 dB−1.76 dB

Noise is uncorrelated across channels and adds in power (\(N\)); a focused point echo adds in amplitude (\(N^2\)). Speckle from a diffuse region is coherent across the aperture only as the van Cittert–Zernike function, triangular for equal transmit and receive apertures: \(\sum_{i,j} (1 - \lvert i - j \rvert / N) = (2N^2 + 1)/3\), so the gain is \((2N^2 + 1)/(3N) \approx 2N/3\), 1.76 dB below \(N\).

Approx. modelspeckle curve: triangular VCZ coherence
Uncorrelated noise only; aberration lowers coherence further (that is what coherence-based SoS and aberration estimators measure).
A capacitive load costs \(4CV^2\) per cycle; the push, not the B-mode pulse, sizes the HV supply.
\(4CV^2 \cdot N_{\mathrm{cyc}} \cdot \mathrm{PRF}\)B-mode: 60 mW/ch200 µs push: 3 mJ/ch

Each ±V transition draws \(2CV\) from a rail at \(V\) and dissipates \(2CV^2\) in the switches. B-mode (2 cycles, 10 kHz, 50 V, 300 pF): 60 mW per channel. A 200 µs shear-wave push at 5 MHz is 1000 cycles, 3 mJ per channel, with 19 A per rail for 128 channels; the reservoir droops 3.8 V per mF. The probe face must stay below 43 °C (50 °C in air, IEC 60601-2-37).

Approx. modelcapacitive load only, constant push current
Capacitive part only; the element's resistive (acoustic) load adds real power, and linear transmitters dissipate the difference between rail and output continuously.

20.11Cheat sheet

ConceptFormulaUltrasound use
Square-wave harmonics\(c_n = 4V/(n\pi)\), \(n\) oddBipolar pulser content at \(3f_0\), \(5f_0\)
3-level null\(c_n \propto \sin(n\beta/2)/n\); \(\beta = 120^\circ \to c_3 = 0\)RTZ pulser timing
5-level SHE\(\cos n\theta_1 + \cos n\theta_2 = 0\) for \(n = 3, 5 \to 12^\circ, 48^\circ\)Clean multi-level transmit
Duty-error 2nd harmonic\(c_2/c_1 = \sin(\pi\Delta/T)\)Harmonic-imaging transmit purity
Slew\(dV/dt = I/C\); \(t_{\mathrm{sw}} = C\Delta V/I\)Pulser current vs cable + element
Pulse-inversion residual\(\sqrt{\delta a^2 + (2\pi f_0 \Delta t)^2}\)PI / CEUS tissue suppression
Element capacitance\(C_0 = \varepsilon^S \varepsilon_0 A/t\)Cable loading, pulser load
Cable divider\(H = Z_L/(Z_e + Z_L) \approx C_0/(C_0 + C_c + C_{\mathrm{in}})\)Receive signal loss
Tuning inductor\(L = 1/(\omega_0^2 C_T)\)Recover signal at \(f_0\)
Thermal noise\(v_n = \sqrt{4kTRB}\)Element noise floor
Noise figure\(F = 1 + (e_n^2 + i_n^2 \lvert Z_s \rvert^2)/(4kT \operatorname{Re} Z_s)\)LNA selection
Noise match\(R_{\mathrm{opt}} = e_n/i_n\), \(F_{\mathrm{min}} = 1 + e_n i_n/(2kT)\)LNA vs element impedance
Cascade\(e_{\mathrm{tot}}^2 = e_1^2 + e_2^2/A_1^2 + \dots\)LNA gain choice
TGC slope\(2\alpha f_0\) dB/cm = \(\alpha f_0 c\) dB/sGain law
Quantization SNR\(6.02N + 1.76\) dB (+\(10 \log_{10}(f_s/2B)\))ADC bits
ENOB\((\mathrm{SINAD} - 1.76)/6.02\)Real ADC performance
Jitter SNR\(-20 \log_{10}(2\pi f \sigma_t)\)Clock spec
Data rate\(N_{\mathrm{ch}} f_s b\); per event \(N_{\mathrm{ch}} (2z/c) f_s\)Link and memory sizing
Beamforming gain\(N\) (point), \((2N^2 + 1)/(3N)\) (speckle)Link budget
Pulser dissipation\(4CV^2 N_{\mathrm{cyc}}\, \mathrm{PRF}\)Thermal, HV supply
Link budget\(V_{\mathrm{tx}} + G_{\mathrm{loop}} + R - 2\alpha f_0 z + H\) (dB) vs noise at LNASNR and penetration

20.12Interview and qualifying-exam questions

I1Walk me through the receive chain of one channel. Where is the noise floor set? · screen

Element → cable → T/R switch → LNA → VGA (TGC) → anti-aliasing filter → ADC → serializer → beamformer. The noise floor is set at the LNA input: the element's thermal noise \(4kT \operatorname{Re} Z_e\) (divided by the cable together with the signal) plus the LNA's \(e_n\) and \(i_n \lvert Z_s \rvert\). With 12–24 dB of LNA gain, later stages are divided down; the VGA's job is to put the signal above the ADC noise without clipping. Typical numbers: 0.8 nV/√Hz LNA, 3.5 MHz band, ≈ 1.5–2 µV rms input noise. Follow-up: "How do you check in a running system that the ADC isn't limiting?" Disconnect the probe or mute transmit, set maximum gain, and compare the measured noise in LSB with the ADC's own noise; the analog noise should exceed it by ≥ 6–10 dB.

I2Why do modern systems use 3- or 5-level pulsers instead of simple bipolar ones? · screen

A bipolar square burst has odd harmonics at −9.5 dB (3rd) and −14 dB (5th) and only one degree of freedom. A 3-level pulse with 120° conduction nulls the 3rd for 1.25 dB of fundamental; 5-level switching at 12° and 48° nulls both 3rd and 5th. Extra levels also allow amplitude shaping (tapered envelopes, transmit apodization, amplitude-modulation contrast sequences) without a power-hungry linear amplifier. Harmonic imaging needs the \(2f_0\) band clean, which is about duty symmetry (−36 dBc per ns at 5 MHz) and envelope shape. Follow-up: "Why not always use a linear amplifier?" Dissipation: a linear stage drops (rail − output) × current continuously, which is expensive across 128–256 channels.

I3A 30 pF element drives 150 pF of cable into a high-impedance LNA. How much signal do you lose, and how much SNR? · onsite

Capacitive divider estimate: \(30/(30 + 150 + 15)\) = −16.3 dB; with the motional branch at resonance (BVD, \(R_m\) ≈ 800 Ω) −12.0 dB. SNR drops much less, because the element's thermal noise is divided equally; only the LNA's noise is added after the divider. With 0.8 nV/√Hz and 1.5 pA/√Hz the NF goes from 0.88 to 3.72 dB: 2.8 dB of SNR. Follow-up: "And with a 1 pF matrix element?" Then the divider is ≈ −41 dB, the element's noise falls far below the LNA, and the NF is above 10 dB: amplify in the handle.

I4The input dynamic range is about 100 dB. Why is a 12-bit (74 dB) ADC enough? · onsite

Three reasons. (1) TGC: the 100 dB is mostly a depth-dependent mean level (\(2\alpha f_0 z\)), which the VGA removes; the instantaneous range at a given depth is smaller. (2) Processing gain: quantization noise spreads over \(f_s/2\), the echo occupies \(B\), so filtering gains \(10 \log_{10}(f_s/2B)\), ≈ 7 dB at 40 MS/s and 4 MHz. (3) Beamforming: uncorrelated per-channel noise averages, \(+10 \log_{10} N\) (21 dB for 128). The displayed image then needs only ≈ 60 dB of log-compressed dynamic range. Follow-up: "When would you want 14 bits?" Strong near-field clutter next to weak signals (cardiac apical views), Doppler with large wall signals, and systems with less TGC flexibility (plane-wave acquisitions with fixed gain).

I5What clock jitter do you need for a 14-bit ADC digitizing a 15 MHz harmonic band? · onsite

Set \(\mathrm{SNR}_{\mathrm{jitter}} \ge 6.02 \cdot 14 + 1.76\) = 86.0 dB: \(\sigma_t \le 10^{-86/20}/(2\pi \cdot 15\ \mathrm{MHz})\) = 0.53 ps rms. In practice the ADC's own SNR is ≈ 75–77 dBFS, so 1 ps (80.5 dB at 15 MHz) is acceptable; 5 ps (66.5 dB) is not. Follow-up: "Does beamforming average jitter?" Per-channel random jitter, yes; jitter of a shared clock, no (all channels err together for a coherent target), so the master clock needs the spec.

I6Size the data path for a 256-channel ultrafast research system, 62.5 MS/s, 14 bit, 10 cm, 5 kHz. · onsite

At the ADCs: 256 × 62.5 MHz × 14 bit = 224 Gb/s. Per event: \(2 \cdot 0.1/1540\) = 130 µs → 8117 samples × 256 × 2 B = 4.16 MB; at 5 kHz, 20.8 GB/s to the host, beyond PCIe Gen3 ×8 (7.9 GB/s) and within Gen4 ×16 (31.5 GB/s) with little margin. IQ at \(f_{\mathrm{IQ}}\) = 5 MHz complex cuts it by 62.5/10 = 6.25 to 3.3 GB/s. Follow-up: "Where would you beamform?" On the GPU for flexibility (ULM, adaptive beamforming), with IQ demodulation and decimation in the FPGA to fit the link.

I7Contrast images show tissue signal that should have been cancelled by pulse inversion. Diagnose. · research

Residual fundamental = \(\sqrt{\delta a^2 + (2\pi f_0 \Delta t)^2}\) plus motion. Check (1) pulser amplitude symmetry (1 % → −40 dB), (2) timing skew between the + and − pulses (1 ns at 5 MHz → −30 dB), including the slew-limited edges on the actual cable, (3) tissue motion between firings (axial displacement \(d\) gives \(\varphi = 4\pi f_0 d/c\)), (4) receive saturation that is polarity dependent. Measure with the probe in a static, linear phantom at low MI: whatever survives is the electronics. Follow-up: "How would amplitude modulation behave?" It cancels with half-amplitude pulses, so it depends on the pulser's amplitude linearity rather than polarity symmetry, and 5-level or linear drivers help.

I8Why can't you cable a 32 × 32 matrix probe element by element to the system? · research

Three budgets fail at once. Channel count: 1024 coax lines and 1024 system channels (492 Gb/s at 40 MS/s, 12 bit). Signal: a ≈ 0.2 mm element has ≈ 1 pF, so a 150 pF cable divider is ≈ −41 dB and the NF exceeds 10 dB. Cable bulk and cost for a TEE or handheld probe. The fix is in-probe electronics: preamplifiers and sub-array (micro-)beamformers that delay and sum groups of elements so only ≈ 100–200 partially beamformed channels travel down the cable (Savord and Solomon 2003; Module 19). Follow-up: "What do you lose?" Per-element channel data, so software beamforming, SoS estimation and aberration correction must work with sub-array sums.

I9What TGC slope do you program at 7.5 MHz, and how much VGA range do you need for 6 cm? · screen

\(2\alpha f_0 = 2 \times 0.5 \times 7.5\) = 7.5 dB/cm, i.e. \(\alpha f_0 c\) = 0.58 dB/µs. Over 6 cm: 45 dB, so a 40 dB attenuator plus some LNA/PGA gain margin is needed; deeper, the gain saturates and the image becomes noise-limited. Follow-up: "Why do users still need TGC sliders?" Attenuation varies (fluid, fat, liver), and the downshifted echo spectrum at depth reduces the effective slope.

I10You measure only 19 dB of beamforming SNR gain with 128 channels on a speckle phantom. Is the hardware broken? · research

Not necessarily. For diffuse scatterers the per-channel echoes are only partially coherent: with equal transmit and receive apertures the van Cittert–Zernike coherence is triangular and the gain is \((2N^2 + 1)/(3N)\) → 19.3 dB, not 21.1 dB. Check the noise side too: correlated interference (supply ripple, clock spurs) does not average. Test with a point target in water and with transmit off; a point should give ≈ 21 dB. Follow-up: "How does aberration show up?" Lower coherence, hence lower gain; that is the basis of coherence-based beamformers (SLSC) and sound-speed estimators.

I11What is active termination and why use it? · screen

A defined LNA input impedance made with feedback rather than a shunt resistor: \(R_{\mathrm{in}} = R_f/(1 + A)\). It damps the element and cable (shorter ring-down, flatter response), but the noise current of \(R_f\) is \((1 + A)\) times smaller than that of a physical \(R_{\mathrm{in}}\). In the model, a 200 Ω resistor gives NF 8.8 dB, a 200 Ω active termination with \(A = 10\) gives 5.9 dB. Follow-up: "When would you leave the input high-impedance?" When SNR matters most and the element is already well damped acoustically; high-Z gives the lowest NF (3.7 dB here).

20.13MATLAB lab

Base MATLAB only (no toolboxes); each script runs as-is in MATLAB R2019b+ and GNU Octave 8. Paste into the editor and press Run.

Download the scripts: m20_pulser_spectra.m · m20_noise_budget.m · m20_adc_quantization_jitter.m · m20_link_budget.m. Base MATLAB R2019b+ or GNU Octave 8, no toolboxes; all scripts in the repository.

m20_pulser_spectra.mFive pulser types, slew limit and duty error, harmonic table · change V, C, I, Δ · runtime ≈ 8 s
%% m20_pulser_spectra.m
% Pulser waveforms and their harmonic content (Module 20.2).
%   Builds unipolar, bipolar, 3-level (120 deg conduction), 5-level
%   (switching at 12 and 48 deg) and linear (Hann-windowed sine) bursts,
%   then measures the level at n*f0 by an exact DFT of the burst.
%   Part 1: ideal edges, 20-cycle bursts (steady-state harmonic content).
%   Part 2: slew-limited edges, I/C = 2 A / 300 pF at +-50 V.
%   Part 3: duty error D = 1/2 + Delta/T, simulated 2f0 versus sin(pi*Delta*f0).
% What to change: f0, V, Cload, Ipk, the conduction angle beta, the cycles.
% Expected output: bipolar 3f0 -9.5 dBc, 5f0 -14.0 dBc; 3-level no 3f0;
%   5-level no 3f0 or 5f0; duty error of 1.1 ns at 5 MHz: about -35 dBc,
%   matching theory to within 0.1 dB.
clear; close all; rng(1);

%% Parameters
f0    = 5e6;              % centre frequency (Hz)
V     = 50;               % rail voltage (V), drive is +-V
dt    = 1/(720*f0);       % 0.5 deg of phase per sample (0.278 ns)
N     = 2^15;             % samples (9.1 us window)
t     = (0:N-1)*dt;       % time axis (s)
t0    = 0.2e-6;           % burst start (s)
beta  = 120;              % 3-level conduction angle per half cycle (deg)
Cload = 300e-12;          % element + cable capacitance (F)
Ipk   = 2;                % pulser peak current (A)
slew  = Ipk/Cload;        % slew rate (V/s)

%% Level functions of the normalized phase u in [0,1)
lvUni  = @(u) double(u < 0.5);
lvBi   = @(u) 1 - 2*double(u >= 0.5);
lvTri  = @(u) double(abs(u-0.25) < beta/720) - double(abs(u-0.75) < beta/720);
lv5h   = @(a) 0.5*((a>=12)&(a<48)) + ((a>=48)&(a<132)) + 0.5*((a>=132)&(a<168));
lvFive = @(u) (u<0.5).*lv5h(u*360) - (u>=0.5).*lv5h(u*360-180);
% duty error e: the positive half cycle lasts (1/2 + e) of the period
dutyMap = @(fr,e) (fr < 0.5+e).*(fr/(0.5+e)*0.5) + (fr >= 0.5+e).*(0.5 + (fr-0.5-e)/(0.5-e)*0.5);
dft1    = @(x,f) abs(sum(x .* exp(-1i*2*pi*f*t)));   % exact DFT at one frequency
names   = {'unipolar', 'bipolar', '3-level', '5-level', 'linear'};

%% Waveform builder (ideal edges); type index k, cycles nc, duty error e
X = cell(5,1);
ph  = (t - t0)*f0;
for k = 1:5
  for pass = 1:2
    if pass == 1, nc = 20; else, nc = 4; end
    inb = (ph >= 0) & (ph < nc);
    fr  = ph - floor(ph);
    u   = dutyMap(fr, 0);
    switch k
      case 1, lv = lvUni(u);
      case 2, lv = lvBi(u);
      case 3, lv = lvTri(u);
      case 4, lv = lvFive(u);
      case 5, lv = sin(2*pi*ph) .* 0.5.*(1 - cos(2*pi*ph/nc));
    end
    x = V * lv .* inb;
    if pass == 1, X{k} = x; else, Xs{k} = x; end %#ok<SAGROW>
  end
end

%% Part 1: ideal edges, 20-cycle bursts
fprintf('Part 1: ideal edges, 20 cycles at %.1f MHz, +-%d V\n', f0/1e6, V);
fprintf('%-10s %10s %8s %8s %8s %8s\n', 'type', 'f0 re bi', '2f0', '3f0', '5f0', '7f0');
h1bi = dft1(X{2}, f0);
for k = 1:5
  h1 = dft1(X{k}, f0); r = zeros(1,4); nn = [2 3 5 7];
  for j = 1:4, r(j) = max(-99, 20*log10(dft1(X{k}, nn(j)*f0)/h1 + 1e-12)); end
  fprintf('%-10s %8.2f dB %7.1f %8.1f %8.1f %8.1f   dBc\n', names{k}, 20*log10(h1/h1bi), r);
end
fprintf('theory: bipolar 3f0 %.2f, 5f0 %.2f dBc; 3-level f0 %.2f dB; 5-level f0 %.2f dB\n', ...
  20*log10(1/3), 20*log10(1/5), 20*log10(sind(beta/2)), 20*log10(0.5*(cosd(12)+cosd(48))));

%% Part 2: slew-limited edges (constant-current charging of Cload)
fprintf('\nPart 2: slew limit I/C = %.2f V/ns, full -V to +V edge = %.1f ns\n', slew/1e9, 2*V*Cload/Ipk*1e9);
st = slew*dt; Y = cell(5,1);
for k = 1:5
  x = X{k}; y = zeros(size(x)); prev = 0;
  for i = 1:N
    d = x(i) - prev; prev = prev + max(-st, min(st, d)); y(i) = prev;
  end
  Y{k} = y;
  h1 = dft1(y, f0); r = zeros(1,3); nn = [3 5 7];
  for j = 1:3, r(j) = max(-99, 20*log10(dft1(y, nn(j)*f0)/h1 + 1e-12)); end
  fprintf('%-10s f0 %6.2f dB re ideal bipolar   3f0 %6.1f  5f0 %6.1f  7f0 %6.1f dBc\n', names{k}, 20*log10(h1/h1bi), r);
end
fprintf('trapezoid prediction for bipolar: f0 x sinc = %.2f dB, 3f0 rel. = %.1f dBc\n', ...
  20*log10(sin(pi*f0*2*V*Cload/Ipk)/(pi*f0*2*V*Cload/Ipk)), ...
  20*log10((1/3)*sin(3*pi*f0*2*V*Cload/Ipk)/(3*pi*f0*2*V*Cload/Ipk)/(sin(pi*f0*2*V*Cload/Ipk)/(pi*f0*2*V*Cload/Ipk))));

%% Part 3: duty error and the second harmonic (bipolar, ideal edges)
fprintf('\nPart 3: duty error, bipolar, 20 cycles\n');
kList = [1 2 4 7 11];                  % positive half-cycle longer by k samples
dl = zeros(size(kList)); sim2 = dl; thr2 = dl;
inb = (ph >= 0) & (ph < 20); fr = ph - floor(ph);
for j = 1:numel(kList)
  e  = (kList(j) - 0.5)/720;           % boundary placed between samples
  x  = V * lvBi(dutyMap(fr, e)) .* inb;
  npos = sum(x(inb) > 0)/20;           % realized samples per positive half cycle
  dl(j)   = (npos - 360)*dt;           % realized Delta (s)
  sim2(j) = 20*log10(dft1(x, 2*f0)/dft1(x, f0));
  thr2(j) = 20*log10(sin(pi*dl(j)*f0));
  fprintf('Delta = %5.2f ns   2f0 simulated %6.2f dBc   theory 20log10(sin(pi*Delta*f0)) %6.2f dBc\n', dl(j)*1e9, sim2(j), thr2(j));
end
fprintf('1 ns at 5 MHz (theory): %.2f dBc; a -45 dBc spec needs Delta < %.2f ns\n', ...
  20*log10(sin(pi*1e-9*f0)), asin(10^(-45/20))/(pi*f0)*1e9);

%% Figures
figure('Name','m23 pulser waveforms and spectra', 'Position', [50 50 900 950]);
set(gcf, 'PaperPositionMode', 'manual', 'PaperUnits', 'inches', 'PaperPosition', [0 0 10 11]);
nf = 2^16; fax = (0:nf/2-1)/(nf*dt)/1e6;
for k = 1:5
  y = Xs{k};
  ys = zeros(size(y)); prev = 0;
  for i = 1:N, d = y(i) - prev; prev = prev + max(-st, min(st, d)); ys(i) = prev; end
  subplot(5,2,2*k-1); idx = t < 1.2e-6;
  plot(t(idx)*1e6, y(idx), ':', t(idx)*1e6, ys(idx), '-'); ylim([-1.2 1.2]*V);
  ylabel('V'); title([names{k} ', 4 cycles']); if k == 5, xlabel('time (\mus)'); end
  S = abs(fft(ys, nf)); S = S(1:nf/2); S = 20*log10(S/max(S) + 1e-9);
  subplot(5,2,2*k); plot(fax, S); xlim([0 6*f0/1e6]); ylim([-70 3]); grid on;
  ylabel('dB'); title('spectrum (slew-limited)'); if k == 5, xlabel('frequency (MHz)'); end
end
figure('Name','m23 duty error');
dd = linspace(0.05e-9, 4e-9, 200);
plot(dd*1e9, 20*log10(sin(pi*dd*f0)), '-', dl*1e9, sim2, 'o'); grid on;
xlabel('duty error \Delta (ns)'); ylabel('2f_0 level (dBc)'); legend('sin(\pi\Delta f_0)', 'simulated', 'Location', 'southeast');
title('Second harmonic from a duty error, 5 MHz bipolar');

What to look for: for 20-cycle bursts with ideal edges, bipolar shows \(3f_0\) at −9.5 dBc and \(5f_0\) at −14.0 dBc, 3-level (120°) shows no \(3f_0\), 5-level shows neither \(3f_0\) nor \(5f_0\) (below −60 dBc, the sampling floor) and the 7th at −21.1 dBc. With the 2 A / 300 pF slew limit the bipolar fundamental drops 0.08 dB and the 3rd falls to −10.2 dBc, as the trapezoid sinc predicts. The duty-error sweep prints simulated \(2f_0\) levels identical to \(20 \log_{10} \sin(\pi\Delta f_0)\) to 0.01 dB (−35.4 dBc at \(\Delta = 1.08\) ns; 1 ns would give −36.1 dBc).

m20_noise_budget.mBVD element + cable + LNA: transfer, NF, noise match, tuning · change \(C_0\), cable, \(e_n\), \(i_n\) · runtime ≈ 1 s
%% m20_noise_budget.m
% Element, cable and LNA: signal transfer, noise figure and noise match (Module 20.3-20.4).
%   Element: Butterworth-Van Dyke model (C0 in parallel with Rm, Lm, Cm),
%   resonant at f0 with effective coupling keff^2 and loaded Q.
%   Load: cable capacitance + LNA input capacitance, optional 200 ohm
%   termination (resistive or active) and optional shunt tuning inductor.
%   Noise at the LNA input: 4kT Re(Zs) + en^2 + in^2 |Zs|^2, with Zs the
%   impedance seen by the LNA. NF is referred to the element's own thermal
%   noise passed through the same divider as the signal.
% What to change: C0, keff2, Q, cable capacitance, en, in.
% Expected output: |Ze| = 637 ohm at -37 deg; cable 0/50/150/300 pF gives
%   |H| = -1.61/-6.28/-12.00/-16.83 dB and NF = 0.88/1.60/3.72/6.90 dB;
%   tuned: +0.63 dB, NF 1.28 dB; Ropt = 533 ohm, NFmin = 0.61 dB.
clear; close all; rng(1);

%% Parameters
kB  = 1.380649e-23;  T0 = 290;      % Boltzmann constant (J/K), noise-figure temperature (K)
f0  = 5e6;                          % element resonance (Hz)
C0  = 30e-12;                       % clamped capacitance (F)
k2  = 0.4;                          % keff^2 = Cm/(C0 + Cm)
Q   = 2;                            % loaded mechanical Q (broadband element)
Cin = 15e-12;                       % LNA input capacitance (F)
en  = 0.8e-9;                       % LNA voltage noise (V/sqrt(Hz))
in  = 1.5e-12;                      % LNA current noise (A/sqrt(Hz))
QL  = 30;                           % tuning-inductor Q
Rt  = 200;                          % termination resistance (ohm)

Cm = C0*k2/(1-k2); w0 = 2*pi*f0;
Rm = 1/(w0*Cm*Q);  Lm = 1/(w0^2*Cm);
fprintf('BVD: C0 = %.0f pF, Cm = %.1f pF, Lm = %.2f uH, Rm = %.1f ohm\n', C0*1e12, Cm*1e12, Lm*1e6, Rm);

%% Model as anonymous functions of frequency f (vector) and options
Ze   = @(f) 1 ./ (1./(Rm + 1i*2*pi*f*Lm + 1./(1i*2*pi*f*Cm)) + 1i*2*pi*f*C0);
% load admittance: cable + Cin, termination flag term (0 none, 1 resistive, 2 active), tuning flag tu
Yl   = @(f,Cc,term,tu) 1i*2*pi*f*(Cc+Cin) + (term>0)/Rt + ...
        tu ./ (w0*(1/(w0^2*(C0+Cc+Cin)))/QL + 1i*2*pi*f*(1/(w0^2*(C0+Cc+Cin))));
Hf   = @(f,Cc,term,tu) (1./Yl(f,Cc,term,tu)) ./ (Ze(f) + 1./Yl(f,Cc,term,tu));
Zsf  = @(f,Cc,term,tu) 1 ./ (1./Ze(f) + Yl(f,Cc,term,tu));
% total noise PSD at the LNA input (V^2/Hz); active termination: feedback resistor (1+A) = 11 times larger
Ntot = @(f,Cc,term,tu) 4*kB*T0*real(Zsf(f,Cc,term,tu)) + en^2 + in^2*abs(Zsf(f,Cc,term,tu)).^2 ...
        - (term==2)*(1-1/11)*4*kB*T0*abs(Zsf(f,Cc,term,tu)).^2/Rt;
Nel  = @(f,Cc,term,tu) 4*kB*T0*real(Ze(f)).*abs(Hf(f,Cc,term,tu)).^2;
NF   = @(f,Cc,term,tu) 10*log10(Ntot(f,Cc,term,tu)./Nel(f,Cc,term,tu));

%% Spot values at f0
z = Ze(f0);
fprintf('Element at f0: |Ze| = %.0f ohm, angle %.0f deg, Re = %.0f ohm, thermal noise %.2f nV/rtHz\n', ...
  abs(z), angle(z)*180/pi, real(z), sqrt(4*kB*T0*real(z))*1e9);
fprintf('\n%-34s %9s %9s %12s\n', 'configuration', '|H| (dB)', 'NF (dB)', 'noise nV/rtHz');
cases = {0,0,0,'no cable, high-Z'; 50e-12,0,0,'50 pF cable, high-Z'; 150e-12,0,0,'150 pF cable, high-Z'; ...
         300e-12,0,0,'300 pF cable, high-Z'; 150e-12,0,1,'150 pF, tuned (QL = 30)'; ...
         150e-12,1,0,'150 pF, 200 ohm resistor'; 150e-12,2,0,'150 pF, 200 ohm active (x11)'};
for k = 1:size(cases,1)
  Cc = cases{k,1}; term = cases{k,2}; tu = cases{k,3};
  fprintf('%-34s %9.2f %9.2f %12.2f\n', cases{k,4}, 20*log10(abs(Hf(f0,Cc,term,tu))), NF(f0,Cc,term,tu), sqrt(Ntot(f0,Cc,term,tu))*1e9);
end
fprintf('capacitive-divider estimate for 150 pF: %.2f dB\n', 20*log10(C0/(C0+150e-12+Cin)));
fprintf('tuning inductor for 150 pF: L = %.2f uH\n', 1/(w0^2*(C0+150e-12+Cin))*1e6);

%% Noise match for a resistive source
Ropt  = en/in;  NFmin = 10*log10(1 + en*in/(2*kB*T0));
fprintf('\nResistive source: Ropt = en/in = %.0f ohm, NFmin = %.2f dB\n', Ropt, NFmin);
fprintf('sqrt(4kTR): 50 ohm %.3f, 1 kohm %.3f nV/rtHz; en equals a %.1f ohm resistor\n', ...
  sqrt(4*kB*T0*50)*1e9, sqrt(4*kB*T0*1000)*1e9, en^2/(4*kB*T0));
% cascade with a second stage of 5 nV/rtHz
for A1dB = [6 20]
  fprintf('LNA gain %2d dB: input-referred total %.2f nV/rtHz (e2 = 5 nV/rtHz)\n', A1dB, sqrt(en^2 + (5e-9)^2/10^(A1dB/10))*1e9);
end

%% Figures
f = linspace(0.5e6, 10e6, 400);
figure('Name','m23 receive transfer and NF');
subplot(2,1,1);
plot(f/1e6, 20*log10(abs(Hf(f,0,0,0))), f/1e6, 20*log10(abs(Hf(f,150e-12,0,0))), f/1e6, 20*log10(abs(Hf(f,300e-12,0,0))), f/1e6, 20*log10(abs(Hf(f,150e-12,0,1))), '--');
grid on; ylabel('|H| (dB)'); title('V_{LNA}/V_{oc}: element + cable + LNA input'); legend('0 pF','150 pF','300 pF','150 pF tuned','Location','southwest'); ylim([-40 10]);
subplot(2,1,2);
plot(f/1e6, NF(f,0,0,0), f/1e6, NF(f,150e-12,0,0), f/1e6, NF(f,300e-12,0,0), f/1e6, NF(f,150e-12,0,1), '--');
grid on; ylim([0 20]); xlabel('frequency (MHz)'); ylabel('NF (dB)'); title('noise figure');
figure('Name','m23 noise match');
R = logspace(1, 4, 300);
semilogx(R, 10*log10(1 + (en^2 + in^2*R.^2)./(4*kB*T0*R)), Ropt, NFmin, 'o'); grid on;
xlabel('source resistance R_s (\Omega)'); ylabel('NF (dB)'); title(sprintf('NF vs R_s, R_{opt} = %.0f \\Omega', Ropt)); ylim([0 10]);

What to look for: \(\lvert Z_e \rvert\) = 637 Ω at −37°; with 0/50/150/300 pF of cable \(\lvert H \rvert\) = −1.61/−6.28/−12.00/−16.83 dB and NF = 0.88/1.60/3.72/6.90 dB; tuned: +0.63 dB and 1.28 dB; \(R_{\mathrm{opt}} = 533\) Ω, \(\mathrm{NF}_{\mathrm{min}} = 0.61\) dB.

m20_adc_quantization_jitter.mMeasured vs theoretical quantization and jitter SNR, ENOB · change N, \(\sigma_t\), \(f_{\mathrm{in}}\) · runtime ≈ 1 s
%% m20_adc_quantization_jitter.m
% ADC quantization SNR, aperture-jitter SNR, ENOB and processing gain (Module 20.5).
%   A coherently sampled sine (integer, odd number of cycles in the record)
%   is quantized to N bits and/or sampled with Gaussian clock jitter sigma_t.
%   SNR is measured from the FFT as signal-bin power over all other bins (SINAD).
% What to change: bit counts, jitter values, input frequency, input level.
% Expected output: measured quantization SNR within about 0.3 dB of
%   6.02N + 1.76; jitter-only SNR at 10 MHz near 84.0 dB (1 ps) and 70.1 dB
%   (5 ps); 14 bit + 1 ps at 10 MHz about 82 dB (ENOB about 13.3);
%   in-band SNR in a 4 MHz band at 40 MS/s about 7 dB above the Nyquist-band value.
clear; close all; rng(1);

%% Setup
fs  = 65e6;                 % sample rate (Hz)
Ns  = 8192;                 % record length
n   = 0:Ns-1;
k   = round(10e6/fs*Ns); if mod(k,2) == 0, k = k + 1; end
fin = k*fs/Ns;              % coherent input frequency (Hz), about 10 MHz
A   = 10^(-0.1/20);         % input level: -0.1 dBFS (full scale = +-1)
quant = @(x,N) max(-1, min(1 - 2^(1-N), round(x*2^(N-1))/2^(N-1)));
sinad = @(X,kk) 10*log10( abs(X(kk+1))^2 / (sum(abs(X(2:Ns/2)).^2) - abs(X(kk+1))^2) );   % X = fft(x)
ph0 = 0.37;
fprintf('fin = %.4f MHz (bin %d of %d), fs = %.1f MS/s, level %.1f dBFS\n', fin/1e6, k, Ns, fs/1e6, 20*log10(A));

%% Quantization only
fprintf('\n%5s %12s %12s %8s\n', 'bits', 'measured dB', 'theory dB', 'ENOB');
bits = [8 10 12 14 16]; mq = zeros(size(bits));
for j = 1:numel(bits)
  x = quant(A*sin(2*pi*fin*n/fs + ph0), bits(j));
  mq(j) = sinad(fft(x), k);
  th = 6.02*bits(j) + 1.76 + 20*log10(A);
  fprintf('%5d %12.2f %12.2f %8.2f\n', bits(j), mq(j), th, (mq(j) - 20*log10(A) - 1.76)/6.02);
end

%% Jitter only (no quantization)
fprintf('\n%10s %12s %12s\n', 'jitter ps', 'measured dB', 'theory dB');
sj = [0.5 1 2 5]*1e-12; mj = zeros(size(sj));
for j = 1:numel(sj)
  x = A*sin(2*pi*fin*(n/fs + sj(j)*randn(1,Ns)) + ph0);
  mj(j) = sinad(fft(x), k);
  fprintf('%10.1f %12.2f %12.2f\n', sj(j)*1e12, mj(j), -20*log10(2*pi*fin*sj(j)));
end

%% Combined: 14 bits + 1 ps at about 10 MHz
x = quant(A*sin(2*pi*fin*(n/fs + 1e-12*randn(1,Ns)) + ph0), 14);
mc = sinad(fft(x), k);
thc = -10*log10(10^(-(86.04 + 20*log10(A))/10) + 10^(20*log10(2*pi*fin*1e-12)/10));
fprintf('\n14 bit + 1 ps at %.2f MHz: measured %.2f dB, theory %.2f dB, ENOB %.2f\n', fin/1e6, mc, thc, (mc - 1.76)/6.02);
fprintf('jitter needed for 86 dB at 15 MHz: %.2f ps\n', 10^(-86/20)/(2*pi*15e6)*1e12);

%% Processing gain: 12 bits at 40 MS/s, 5 MHz tone, 4 MHz band
fs2 = 40e6; k2 = round(5e6/fs2*Ns); if mod(k2,2) == 0, k2 = k2 + 1; end
x2  = quant(A*sin(2*pi*k2/Ns*n + ph0), 12);
X2  = abs(fft(x2)).^2; fb = (0:Ns-1)*fs2/Ns;
band = find(fb >= 3e6 & fb <= 7e6); band = band(band ~= k2+1);
snrN = sinad(fft(x2), k2);
snrB = 10*log10(X2(k2+1)/sum(X2(band)));
fprintf('\n12 bit, 40 MS/s: SNR over 0-20 MHz %.2f dB; in 3-7 MHz %.2f dB; gain %.2f dB (theory 10log10(fs/2B) = %.2f dB)\n', ...
  snrN, snrB, snrB - snrN, 10*log10(fs2/2/4e6));
fprintf('LSB (2 Vpp): 12 bit %.1f uV, 14 bit %.1f uV\n', 2/2^12*1e6, 2/2^14*1e6);

%% Figures
figure('Name','m23 ADC spectra', 'Position', [50 50 760 720]);
set(gcf, 'PaperPositionMode', 'manual', 'PaperUnits', 'inches', 'PaperPosition', [0 0 8 7.5]);
x = quant(A*sin(2*pi*fin*(n/fs + 1e-12*randn(1,Ns)) + ph0), 12);
P = abs(fft(x)).^2*4/Ns^2; fa = (0:Ns/2-1)*fs/Ns/1e6;
subplot(2,1,1); plot(fa, 10*log10(P(1:Ns/2) + 1e-30)); grid on; ylim([-140 5]);
xlabel('frequency (MHz)'); ylabel('dBFS per bin'); title('12 bit, 1 ps jitter, 10 MHz tone');
subplot(2,1,2);
ff = linspace(0.5e6, 30e6, 200);
plot(ff/1e6, -20*log10(2*pi*ff*1e-12), ff/1e6, -20*log10(2*pi*ff*5e-12), ff/1e6, 74 + 0*ff, '--', ff/1e6, 86.04 + 0*ff, '--', fin/1e6, mj(2), 'o', fin/1e6, mj(4), 's');
grid on; ylim([50 110]); xlabel('input frequency (MHz)'); ylabel('SNR (dB)');
legend('1 ps', '5 ps', '12 bit', '14 bit', 'measured 1 ps', 'measured 5 ps', 'Location', 'southwest'); title('jitter-limited SNR');
figure('Name','m23 quantization SNR');
plot(bits, mq, 'o', 6:16, 6.02*(6:16) + 1.76, '-'); grid on;
xlabel('bits N'); ylabel('SNR (dB)'); legend('measured', '6.02N + 1.76', 'Location', 'northwest'); title('quantization SNR vs bits');

What to look for: measured quantization SNR within 0.2 dB of \(6.02N + 1.76\) at −0.1 dBFS (62.0, 73.8, 86.0 dB for 10, 12, 14 bits); jitter-only SNR at 10 MHz 83.9 dB (1 ps, theory 84.0) and 70.1 dB (5 ps); 14 bit + 1 ps: 81.9 dB, ENOB 13.3; band-limiting a 40 MS/s, 12-bit stream to 3–7 MHz gains 6.6 dB (theory 7.0).

m20_link_budget.mThe Demo 20.7 link budget as a stage table, SNR vs depth and penetration · change any input · runtime ≈ 3 s
%% m20_link_budget.m
% Link budget from transmit voltage to beamformed SNR (Module 20.8, Demo 20.7).
%   Voc   = Vtx * 10^((Gloop + R - 2*alpha*f0*z)/20)     open-circuit echo (peak)
%   H, Zs from the BVD element + cable + LNA model at f0 (as m20_noise_budget.m)
%   noise at the LNA input: (4kT Re Zs + en^2 + in^2 |Zs|^2) * B, B = fbw*f0
%   TGC: VGA gain puts the echo at the target dBFS, clamped to [vmin, vmax]
%   ADC noise in band: full-scale-sine rms * 10^(-SNRadc/20) * sqrt(B/(fs/2))
%   SNRout = SNRch + 10log10(Gbf), Gbf = N (point) or (2N^2+1)/(3N) (speckle)
% What to change: any parameter in the first cell (drive, f0, attenuation,
%   cable, LNA, VGA range, bits, channels, target).
% Expected output (defaults): Voc -96.02 dBV peak, |H| -12.00 dB, input noise
%   2.06 uV rms, SNRch 2.62 dB, VGA +30 dB, -58.0 dBFS, ADC penalty 0.07 dB,
%   SNRout 21.93 dB, penetration 10.4 cm; without the cable 24.83 dB.
clear; close all; rng(1);

%% Parameters (the Demo 20.7 defaults)
P.Vtx  = 50;      % drive voltage, peak (V)
P.f0   = 5e6;     % centre frequency (Hz)
P.fbw  = 0.7;     % noise bandwidth as a fraction of f0
P.al   = 0.5;     % attenuation (dB/cm/MHz)
P.z    = 6;       % depth (cm)
P.Gl   = -40;     % element pulse-echo loop gain, perfect reflector at focus (dB), illustrative
P.R    = -60;     % target reflectivity re perfect reflector (dB): speckle
P.speck= 1;       % 1 = speckle coherence gain (2N^2+1)/(3N), 0 = point target (N)
P.Cc   = 150e-12; % cable capacitance (F)
P.en   = 0.8e-9;  % LNA voltage noise (V/rtHz)
P.in   = 1.5e-12; % LNA current noise (A/rtHz)
P.Glna = 20;      % LNA gain (dB)
P.vmin = -10; P.vmax = 30;   % VGA gain range (dB)
P.tgt  = -40;     % TGC target for the echo (dBFS)
P.bits = 12; P.Limp = 3;     % ADC bits, implementation loss (dB)
P.fs   = 40e6;    % sample rate (Hz)
P.Vfs  = 2;       % ADC full scale (Vpp)
P.N    = 128;     % receive channels
kB = 1.380649e-23; T0 = 290;
% element model (BVD) and input capacitance
C0 = 30e-12; k2 = 0.4; Q = 2; Cin = 15e-12;

%% Model (anonymous functions of the parameter struct p)
w0f  = @(p) 2*pi*p.f0;
Cmf  = C0*k2/(1-k2);
Zef  = @(p) 1 ./ (1./(1/(w0f(p)*Cmf*Q)) + 1i*w0f(p)*C0);   % at resonance the motional branch is Rm
Zlf  = @(p) 1 ./ (1i*w0f(p)*(p.Cc + Cin));
Hf   = @(p) abs(Zlf(p) ./ (Zef(p) + Zlf(p)));
Zsf  = @(p) Zef(p).*Zlf(p) ./ (Zef(p) + Zlf(p));
Sn   = @(p) 4*kB*T0*real(Zsf(p)) + p.en^2 + p.in^2*abs(Zsf(p))^2;     % V^2/Hz at LNA input
Bf   = @(p) p.fbw*p.f0;
Vocf = @(p) p.Vtx * 10^((p.Gl + p.R - 2*p.al*p.f0/1e6*p.z)/20);
Vinf = @(p) Vocf(p)*Hf(p);
vnf  = @(p) sqrt(Sn(p)*Bf(p));
gf   = @(p) min(p.vmax, max(p.vmin, p.tgt - 20*log10(Vinf(p)*10^(p.Glna/20)/(p.Vfs/2))));
Gtf  = @(p) p.Glna + gf(p);
vqf  = @(p) (p.Vfs/2/sqrt(2)) * 10^(-(6.02*p.bits + 1.76 - p.Limp)/20) * sqrt(Bf(p)/(p.fs/2));
snrch= @(p) 20*log10( (Vinf(p)*10^(Gtf(p)/20)/sqrt(2)) / sqrt((vnf(p)*10^(Gtf(p)/20))^2 + vqf(p)^2) );
gbf  = @(p) p.speck*10*log10((2*p.N^2+1)/(3*p.N)) + (1-p.speck)*10*log10(p.N);
snro = @(p) snrch(p) + gbf(p);

%% Stage table at the default depth
p = P; dBv = @(v) 20*log10(v);
Gt = Gtf(p); Va = Vinf(p)*10^(Gt/20); vna = vnf(p)*10^(Gt/20);
fprintf('%-34s %9s %12s %12s %9s\n', 'stage', 'gain dB', 'signal dBV', 'noise dBV', 'SNR dB');
fprintf('%-34s %9s %12.2f\n', sprintf('drive %g V peak (rms)', p.Vtx), '', dBv(p.Vtx/sqrt(2)));
fprintf('%-34s %9.2f\n', 'loop gain', p.Gl);
fprintf('%-34s %9.2f\n', 'target', p.R);
fprintf('%-34s %9.2f\n', 'two-way attenuation', -2*p.al*p.f0/1e6*p.z);
elN = sqrt(4*kB*T0*real(Zef(p))*Bf(p));
fprintf('%-34s %9s %12.2f %12.2f %9.2f\n', 'open-circuit echo (rms)', '', dBv(Vocf(p)/sqrt(2)), dBv(elN), dBv(Vocf(p)/sqrt(2)/elN));
fprintf('%-34s %9.2f\n', 'cable / interface |H|', dBv(Hf(p)));
fprintf('%-34s %9s %12.2f %12.2f %9.2f\n', 'LNA input', '', dBv(Vinf(p)/sqrt(2)), dBv(vnf(p)), dBv(Vinf(p)/sqrt(2)/vnf(p)));
fprintf('%-34s %9.2f\n', 'LNA gain', p.Glna);
fprintf('%-34s %9.2f\n', 'VGA (TGC) gain', gf(p));
fprintf('%-34s %9s %12.2f %12.2f %9.2f\n', 'ADC input', '', dBv(Va/sqrt(2)), dBv(sqrt(vna^2 + vqf(p)^2)), snrch(p));
fprintf('%-34s %9.2f\n', 'beamforming gain', gbf(p));
fprintf('%-34s %9s %12s %12s %9.2f\n', 'output SNR', '', '', '', snro(p));
fprintf('\nVoc = %.2f dBV peak (%.2f uV), Vin = %.2f uV peak, input noise %.3f uV rms (%.3f nV/rtHz)\n', ...
  dBv(Vocf(p)), Vocf(p)*1e6, Vinf(p)*1e6, vnf(p)*1e6, sqrt(Sn(p))*1e9);
fprintf('echo at ADC %.1f dBFS, analog noise at ADC %.3f mV rms, ADC noise in band %.1f uV rms\n', dBv(Va/(p.Vfs/2)), vna*1e3, vqf(p)*1e6);
q = p; q.Limp = -300; pen = snrch(q) - snrch(p);
fprintf('ADC penalty %.3f dB; LSB %.1f uV; analog noise = %.2f LSB rms\n', pen, p.Vfs/2^p.bits*1e6, vna/(p.Vfs/2^p.bits));

%% SNR versus depth and penetration
z = 0.1:0.01:25; s = zeros(size(z)); sa = s; sq = s;
for j = 1:numel(z)
  q = P; q.z = z(j); s(j) = snro(q);
  q.Limp = -300; sa(j) = snro(q);                      % ideal ADC
end
iz = find(s(1:end-1) > 0 & s(2:end) <= 0, 1);
zpen = z(iz) + 0.01*s(iz)/(s(iz) - s(iz+1));
fprintf('\nnoise-limited penetration (SNRout = 0 dB): %.2f cm\n', zpen);
q = P; q.Cc = 0;       fprintf('no cable: SNRout %.2f dB (+%.2f dB)\n', snro(q), snro(q) - snro(P));
q = P; q.Vtx = 100;    fprintf('100 V drive: SNRout %.2f dB\n', snro(q));
q = P; q.R = -20; q.speck = 0; fprintf('strong interface (point) at 6 cm: SNRout %.2f dB, echo %.1f dBFS\n', snro(q), dBv(Vinf(q)*10^(Gtf(q)/20)/(q.Vfs/2)));
q = P; q.vmax = 0;     fprintf('VGA max 0 dB: SNRout %.2f dB (ADC-limited)\n', snro(q));

%% Figures
figure('Name','m23 link budget');
st = [dBv(P.Vtx/sqrt(2)), P.Gl, P.R, -2*P.al*P.f0/1e6*P.z, dBv(Hf(P)), P.Glna, gf(P)];
lev = cumsum(st);
subplot(2,1,1);
bar(1:7, lev); hold on; plot([4 5 6 7], dBv([elN vnf(P) vnf(P)*10^(P.Glna/20) vna]), 'o-'); hold off; grid on;
set(gca, 'XTick', 1:7, 'XTickLabel', {'drive','loop','target','atten','cable','LNA','VGA'});
ylabel('dBV rms'); title('cumulative signal level (bars) and noise floor (line)');
subplot(2,1,2);
plot(z, s, '-', z, sa, '--', [P.z P.z], [-20 80], ':'); grid on; ylim([-20 80]);
xlabel('depth (cm)'); ylabel('SNR_{out} (dB)'); legend('full chain', 'ideal ADC', 'selected depth'); title('beamformed SNR vs depth, speckle');

What to look for: \(V_{\mathrm{oc}}\) = −96.02 dBV peak, \(\lvert H \rvert\) = −12.00 dB, input noise 2.06 µV rms, \(\mathrm{SNR}_{\mathrm{ch}}\) = 2.62 dB, VGA at +30 dB, echo at −58.0 dBFS, ADC penalty 0.07 dB, \(\mathrm{SNR}_{\mathrm{out}}\) = 21.93 dB and penetration 10.4 cm; without the cable 24.83 dB; 100 V drive 27.95 dB; VGA capped at 0 dB 9.6 dB (ADC-limited).

20.14Self-check

Q1A bipolar pulser drives a 400 pF load at ±80 V with 2 A. How long is each full transition, and what fraction of a 7.5 MHz half period is that?

\(t = C\Delta V/I\) = 400 pF × 160 V / 2 A = 32 ns. Half period at 7.5 MHz = 66.7 ns, so 48 %: the waveform is closer to a trapezoid-triangle and the fundamental is reduced (\(\operatorname{sinc}(7.5\ \mathrm{MHz} \times 32\ \mathrm{ns}) = \operatorname{sinc}(0.24)\) → −0.84 dB).

Q2What conduction angle nulls the 5th harmonic of a 3-level pulse, and what does the fundamental lose?

\(\sin(5\beta/2) = 0 \to \beta = 72^\circ\) or \(144^\circ\). At \(144^\circ\): \(c_1 \propto \sin 72^\circ = 0.951\) (−0.44 dB), and \(c_3 \propto \sin(216^\circ)/3\), \(\lvert c_3/c_1 \rvert = 0.588/(3 \times 0.951) = 0.206\) (−13.7 dB).

Q3An LNA has \(e_n\) = 1 nV/√Hz and \(i_n\) = 2 pA/√Hz. What source resistance minimizes NF, and what is \(\mathrm{NF}_{\mathrm{min}}\)?

\(R_{\mathrm{opt}} = 1\ \mathrm{nV}/2\ \mathrm{pA}\) = 500 Ω. \(F_{\mathrm{min}} = 1 + e_n i_n/(2kT)\) \(= 1 + 2 \times 10^{-21}/(8.01 \times 10^{-21})\) \(= 1.25\) → 0.97 dB.

Q4Your 12-bit ADC (2 Vpp) samples at 50 MS/s. What is the LSB and the ideal quantization noise in a 5 MHz band?

\(\mathrm{LSB} = 2/4096\) = 488 µV; noise \(\mathrm{LSB}/\sqrt{12}\) = 141 µV rms over 25 MHz; in 5 MHz: \(141 \times \sqrt{5/25}\) = 63 µV rms. Relative to a full-scale sine (0.707 V rms): 74.0 + 7.0 = 81.0 dB.

Q5How much does doubling the drive voltage extend noise-limited penetration at 5 MHz and 0.5 dB/cm/MHz? At 10 MHz?

+6.02 dB of SNR divided by \(2\alpha f_0\): \(6.02/5\) = 1.2 cm at 5 MHz, 0.6 cm at 10 MHz. (Acoustic output limits usually forbid the doubling; Module 22.)

Q6Why does a resistive 200 Ω input termination hurt more than the cable in the default receive model?

The resistor adds its own thermal noise current \(4kT/R\) across the input, which, with \(\lvert Z_s \rvert\) of a few hundred ohms, is comparable to the element's noise; it also loads the divider (−14.9 dB). NF rises from 3.7 dB (high-Z) to 8.8 dB. An active termination with A = 10 reduces that noise current ×11 (NF 5.9 dB).

Q7With IQ at \(f_{\mathrm{IQ}} = f_0\) = 3 MHz, by how much does a 40 MS/s RF stream shrink?

RF: 40 M real words/s; IQ: 3 M complex = 6 M words/s. Ratio 40/6 = 6.7.

20.15Figures from the literature

Published figures that show real hardware, measured front-end data or platform specifications. Links only; no figures are reproduced here.

The textbook system block diagram, and analog versus digital beamforming

Look at: Fig. 1 (ultrasound system block diagram: array, ≈ 2 m cable, HV transmit amplifiers, T/R switch, LNA, VGA, beamformer, with a separate analog CW-Doppler beamformer) and Figs. 4–5 (analog versus digital beamformer architectures). Why: compare with Figure 20.1 and the architecture table in 20.6. Note the article's rule that 2 dB of cable loss costs 2 dB of noise figure: that holds for a dissipative (resistive) loss; the capacitive divider of 20.3 is lossless and divides the element's noise with the signal, which is why it costs less SNR than signal.

E. Brunner, "How ultrasound system considerations influence front-end component choice," Analog Dialogue 36(1), 2002. analog.com (open)

Multi-level pulsers: harmonic control and measured pressure

Look at: Figs. 3–4 (bipolar square wave with a variable switching angle and the normalized 1st, 3rd, 5th and 7th harmonic magnitudes versus that angle, the same physics as the 3-level β card in 20.2) and Fig. 8 (a 4.8 MHz, 10 µs tone burst with a linear ramp: five-level PWM drive sequence, simulated pressure and hydrophone-measured pressure). Why: a switched-mode pulser with five levels produces a shaped envelope that a hydrophone confirms, the argument for 5-level drivers in 20.2.

P. R. Smith, D. M. J. Cowell and S. Freear, "Width-modulated square-wave pulses for ultrasound applications," IEEE Trans. Ultrason. Ferroelectr. Freq. Control 60(11), 2244–2256, 2013. doi:10.1109/TUFFC.2013.6644730

A real matrix element, an in-probe LNA and sub-array beamforming

Look at: Fig. 4 (measured impedance of one 150 µm-pitch PZT element of a 32 × 32 TEE matrix, with its equivalent electrical model), Figs. 3 and 9 (3 × 3 sub-array receiver and its delay-line beamformer: 96 receive sub-arrays of 3 × 3 elements, each summed onto one cable, a nine-fold reduction in receive cables) and Figs. 17–18 (measured noise of the summed output versus the number of sub-arrays). Why: this is the 1 pF case of Demo 20.2 solved in silicon. The LNA here is 5.5 nV/√Hz at 5 MHz, far above the 0.8 nV/√Hz of a cart-based AFE, which is consistent with 20.4: a tiny element has a source impedance of kilohms, its own thermal noise \(\sqrt{4kT \operatorname{Re} Z_s}\) is correspondingly larger, and the optimum \(R_{\mathrm{opt}} = e_n/i_n\) moves to a design with low current noise rather than low voltage noise. Receive power is ≈ 0.27 mW per element.

C. Chen, Z. Chen, D. Bera, et al. (M. A. P. Pertijs), "A front-end ASIC with receive sub-array beamforming integrated with a 32 × 32 PZT matrix transducer for 3-D transesophageal echocardiography," IEEE J. Solid-State Circuits 52(4), 994–1006, 2017. doi:10.1109/JSSC.2016.2638433 (accepted manuscript in the TU Delft repository)

ULA-OP 256: the data path of a 256-channel open scanner

Look at: Fig. 1 (general architecture) and Fig. 2 (front-end board block diagram: 32 channels per board, AFE ICs sampling at 78.125 MS/s with 12 bits, an FPGA for delay-and-sum and two DSPs; the transmitter is an arbitrary-waveform design with sigma-delta bitstreams and HV amplifiers up to 200 Vpp). Why: the ADC aggregate is 256 × 78.125 MS/s × 12 b = 240 Gb/s (30 GB/s), against ≈ 200 MB/s over USB 3.0 to the PC: a factor of 150, which is why the platform beamforms and stores on board (Demo 20.6, link ⑤ versus ② in Figure 20.1).

E. Boni, L. Bassi, A. Dallai, F. Guidi, V. Meacci, A. Ramalli, S. Ricci and P. Tortoli, "ULA-OP 256: a 256-channel open scanner for development and real-time implementation of new ultrasound methods," IEEE Trans. Ultrason. Ferroelectr. Freq. Control 63, 1488–1495, 2016. doi:10.1109/TUFFC.2016.2566920

Open platforms side by side: software- versus hardware-based

Look at: Fig. 2 (architecture of software-based open platforms: front end streaming channel data to a computing back end), Fig. 3 (hardware-based platforms and the ULA-OP 256 modules with their Serial RapidIO links), Fig. 4 (SARUS front-end board: five FPGAs per board, 64 boards) and Table I (main specifications of SARUS, ULA-OP 256, UARP, an Ultrasonix add-on and Verasonics). Why: it places the architectures of 20.6 on real systems and is the first place to check what a ULM or sound-speed paper's platform could store and at what rate. Open access (CC BY 3.0).

E. Boni, A. C. H. Yu, S. Freear, J. A. Jensen and P. Tortoli, "Ultrasound open platforms for next-generation imaging technique development," IEEE Trans. Ultrason. Ferroelectr. Freq. Control 65(7), 1078–1091, 2018. doi:10.1109/TUFFC.2018.2844560

20.16Go deeper

  • T. L. Szabo, Diagnostic Ultrasound Imaging: Inside Out, 2nd ed., Academic Press, 2014. System architecture, transducer electrical models, front-end trade-offs.
  • R. S. C. Cobbold, Foundations of Biomedical Ultrasound, Oxford University Press, 2007. Transducer equivalent circuits, noise and system design.
  • C. D. Motchenbacher and J. A. Connelly, Low-Noise Electronic System Design, Wiley, 1993. \(e_n\)–\(i_n\) model, noise figure, noise matching.
  • H. T. Friis, "Noise figures of radio receivers," Proc. IRE, 1944. The cascade formula.
  • W. Kester (ed.), The Data Conversion Handbook, Analog Devices / Newnes, 2005. Quantization, ENOB, aperture jitter, processing gain.
  • R. H. Walden, "Analog-to-digital converter survey and analysis," IEEE J. Selected Areas in Communications, 1999. Jitter and resolution limits.
  • E. Brunner, "How ultrasound system considerations influence front-end component choice," Analog Dialogue, 2002. A practical walk through LNA, TGC and ADC requirements.
  • R. Mallart and M. Fink, "The van Cittert–Zernike theorem in pulse echo measurements," J. Acoust. Soc. Am., 1991. Speckle coherence across the aperture.
  • B. Savord and R. Solomon, "Fully sampled matrix transducer for real time 3D ultrasonic imaging," Proc. IEEE Ultrasonics Symposium, 2003. In-probe micro-beamforming.
  • E. Boni et al., "ULA-OP 256: a 256-channel open scanner for development and real-time implementation of new ultrasound methods," IEEE Trans. Ultrason. Ferroelectr. Freq. Control, 2016.
  • J. A. Jensen et al., "SARUS: a synthetic aperture real-time ultrasound system," IEEE Trans. Ultrason. Ferroelectr. Freq. Control, 2013.
  • M. Tanter and M. Fink, "Ultrafast imaging in biomedical ultrasound," IEEE Trans. Ultrason. Ferroelectr. Freq. Control, 2014. Why plane-wave imaging moved beamforming into software.
  • IEC 60601-2-37 (safety of ultrasonic diagnostic equipment, including surface temperature) and IEC 62359 (determination of MI and TI), by name; see Module 22 for the output indices.