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
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.
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.
| Block | Job | Typical range (generic) | What it limits |
|---|---|---|---|
| HV supply + pulser | Drive 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 resolution | Peak pressure (MI), waveform purity (harmonic imaging), push duration (SWE) |
| T/R switch / limiter | Isolate the LNA during transmit, connect it during receive | On-resistance of several Ω, switching on the order of 100 ns, clamp to about a volt | Near-field dead zone, transmit feed-through |
| Cable | Connect probe to system | Micro-coax, on the order of 100 pF/m (low-capacitance types about half), 1.5–2.5 m | Signal loss, noise figure for small elements |
| LNA | Set the noise floor | Input-referred noise ≈ 0.6–1.1 nV/√Hz, gain 12–24 dB, linear input up to 0.25–1 Vpp | Penetration (noise), near-field overload |
| VGA / TGC | Compress depth-dependent amplitude into the ADC window | ≈ 40 dB attenuation range plus 24–30 dB fixed gain | Dynamic range mapping |
| Anti-aliasing filter | Band-limit signal and noise before sampling | 2nd–5th order low-pass, selectable cutoff ≈ 10–30 MHz | Aliased noise, harmonic band |
| ADC | Sample | 12–14 bit, 40–80 MS/s, SNR ≈ 70–77 dBFS | Instantaneous dynamic range |
| Data link + beamformer | Move and combine channel data | Serial LVDS / multi-Gb/s links; FPGA, ASIC or GPU beamforming | Frame rate, channel-data access |
| Integrated AFE | LNA + VGA + AAF + ADC (often + CW mixer) for 8–16 channels in one package | Tens to ≈ 150 mW per channel, traded against noise | Channel 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.
- \(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
- \(\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)
- \(\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
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
- \(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
Slew rate. The pulser sources a limited current into a mostly capacitive load (element \(C_0\) plus cable):
- \(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)
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.The harmonic content of an infinitely long burst of each switching type, computed from the coefficients (20.1)–(20.3):
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.
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.
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\).
- \(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
- \(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)
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.
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.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\)
- 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
- \(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
- \(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
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\).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\):
- \(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
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.
- \(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
- \(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
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).
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.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.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
- \(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
- \(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
| Architecture | Where the delays are applied | Strength | Limit |
|---|---|---|---|
| Analog beamforming | Analog delay lines or switched-capacitor sample-and-hold before one ADC per beam | Few 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 silicon | Real time, dynamic receive focusing, parallel receive beams; the mainstream architecture | Algorithm changes need firmware; channel data rarely exported |
| Software / GPU | All channel data (RF or IQ) moved to host memory; beamforming in GPU code | Plane-wave and diverging-wave compounding, adaptive beamformers, ULM, SoS estimation; any pixel grid | Link bandwidth (GB/s) and GPU throughput (channel-pixel interpolations per second) |
| Research platforms | Programmable transmit, raw channel-data capture, often software beamforming | Full 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 |
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.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:
- \(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
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 prevents | Typical implementation |
|---|---|---|
| Per-mode HV limit | Exceeding the acoustic output measured for that mode and probe | Lookup table of maximum supply voltage per probe, mode and transmit setting; HV DAC clamp |
| Duty and burst-length limit | Thermal runaway, TI excursions | Firmware limits on cycles × PRF × voltage; hardware timer that cuts long bursts |
| Probe ID and temperature sensing | Driving a probe with another probe's settings; face overheating | Probe EEPROM ID; thermistor in the probe with a shutdown threshold below the IEC limit |
| Watchdog / HV discharge | Stuck pulser or software fault holding HV on an element | Independent watchdog that disables HV and discharges the reservoir |
| Display of MI and TI | Uninformed exposure | Real-time indices computed from the calibrated output tables (IEC 62359) |
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{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
- \(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
- \(N\)
- number of receive channels
- \(G_{\mathrm{BF}}\)
- beamforming SNR gain, linear
- \(\mathrm{SNR}_{\mathrm{out}}\)
- beamformed SNR, dB
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.
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)\).| Stage | Gain (dB) | Signal (dBV rms) | Noise (dBV rms) | SNR (dB) |
|---|
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.
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.
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.
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\).
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.
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.
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.
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.
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.
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.
\(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).
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.
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.
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.
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.
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.
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.
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\).
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).
20.11Cheat sheet
| Concept | Formula | Ultrasound use |
|---|---|---|
| Square-wave harmonics | \(c_n = 4V/(n\pi)\), \(n\) odd | Bipolar 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/s | Gain 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 LNA | SNR 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.
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.