Conventional Heatmap Processor#
Introduction#
The conventional heatmap processor applies a Bartlett (conventional) beamformer to a smoothed estimate of the channel covariance matrix. For each range bin and each grid direction \((\theta, \phi)\) it computes the quadratic form \(\mathbf{a}^H R\, \mathbf{a}\), which is the estimated power received in that direction assuming the steering vector is correct. It is the natural baseline for the processing methods: more expensive than coherent delay-and-sum, cheaper than Capon, no matrix inverse required. It gives a resolution determined only by the aperture width.
Typical use case#
General-purpose heatmap use cases where Capon’s higher resolution is not needed or where power estimation is important.
Static scene beamforming (
DISTANCE).
Pros and cons#
Pros
No matrix inverse — only the covariance build and a quadratic form.
Can image static scenes — unlike Capon it handles correlated sources.
Very robust to steering-vector mismatch and low SNR.
Smoothing of the covariance matrix gives lower noise than coherent delay-and-sum.
Cons
Angular resolution is limited by the array aperture. FWHM \(\approx 10.2 ^\circ\) at boresight; broadens off-boresight as the effective aperture scales with \(\cos\theta\).
High side lobe levels; side lobes leak energy from strong reflectors into other directions.
Math and theory#
Let \(R \in \mathbb{C}^{N_{ch} \times N_{ch}}\) be the smoothed estimate of the channel covariance matrix at a given range bin and \(\mathbf{a}(\theta, \phi)\) the steering vector for direction \((\theta, \phi)\). The conventional beamformer output is
The output is real-valued (since \(R\) is Hermitian positive semi-definite) and is interpreted as the power received from direction \((\theta, \phi)\).
Example spectrum plots#
As seen in Figure 50, the sidelobes of the actual targets can mask other weaker reflectors. A peak-finding algorithm would not be able to find the three positions. The beamforming method can, however, still be used for amplitude estimation.
Figure 50 Conventional D–Az heatmap on a recording of three corner reflectors. The three colored markers and dashed lines mark the true reflector locations. The 1D plots show the distance and azimuth spectra cut at each of the three true peak locations. Recorded using Profile 3.#
Figure 51 Elevation spectrum of the conventional heatmap at each of the three true peak locations. Recorded using Profile 3.#
Configuration#
Shared parameters are documented in Shared Heatmap Configuration. Processor-specific fields:
heatmap_modeMOVEMENTenables a per-channel high-pass filter that suppresses the static scene before the covariance is formed;DISTANCEskips the filter.covariance_matrix_time_constant_sTime constant of the exponential smoothing applied to the per-range covariance matrices across frames. Larger values reduce noise but introduce lag on moving targets. See the shared notes for more tuning guidance.
high_pass_filter_time_constant_sTime constant of the high-pass filter when
heatmap_modeisMOVEMENT. Ignored otherwise. See the shared notes for more tuning guidance.
Typical processing cost#
Per frame, the work is dominated by the covariance processing (\(\mathcal{O}(N_d \cdot N_{ch}^2)\)) and the beamforming quadratic form (\(\mathcal{O}(N_d \cdot N_{ch}^2 \cdot N_{az} \cdot N_{el})\)). No matrix inverse is needed. This is the baseline for the family — 1 ×. The other covariance-based processors are quoted relative to this number.
API reference#
- class acconeer.exptool.a2.algo.heatmap.conventional.HeatmapProcessor(subsweep_config: SubsweepConfig, heatmap_config: HeatmapConfig, update_rate: float)#
- class acconeer.exptool.a2.algo.heatmap.conventional.HeatmapConfig(antenna_array, az_angle_range: t.Any, el_angle_range: t.Any, num_az_angles: int, num_el_angles: int, heatmap_mode, covariance_matrix_time_constant_s: float, high_pass_filter_time_constant_s: float)#
- class HeatmapMode(*values)#
Heatmap mode.
MOVEMENThigh-pass filters data.DISTANCEdoes no filtering- DISTANCE = 1#
- MOVEMENT = 2#
- heatmap_mode: HeatmapMode#
Heatmap mode to use
- covariance_matrix_time_constant_s: float#
Time constant for exponential smoothing of the covariance matrices
- high_pass_filter_time_constant_s: float#
Time constant for the high-pass filter.
- classmethod default() Self#