SparseDiffuseChannelEstimator#
Note
Estimator constructor defaults mirror the settings used during benchmarking.
- class sionna.bench.mimo_ofdm_chest.papers.lyu2026.SparseDiffuseChannelEstimator(resource_grid: sionna.phy.ofdm.resource_grid.ResourceGrid, *, diffuse_num_taps: int | None = 3, tau: float = 3.0, tau_noise_scale: float | None = 6.55, tau_min: float = 1e-06, tau_max: float = 3.0, diffuse_energy: float = 0.807, err_var_scale: float = 1.0, admm_rho: float = 0.08, admm_num_iters: int = 18, interpolation_type: str = 'lin_time_avg', interpolator: sionna.phy.ofdm.channel_estimation.BaseChannelInterpolator | None = None, precision: Literal['single', 'double'] | None = None, device: str | None = None)[source]#
Bases:
sionna.phy.ofdm.channel_estimation.BasePilotChannelEstimator,sionna.phy.ofdm.channel_estimation._PilotGroupMixinChannel estimator that leverages sparsity through hyyrid diffuse/sparse atomic-norm minimization.
This estimator implements the method proposed in:
Lei Lyu, Maxime Ferreira Da Costa, and Urbashi Mitra. Atomic hybrid sparse/diffuse channel estimation and Cramér-Rao bounds analysis. arXiv preprint arXiv:2605.01825, 2026.
TL;DR
The paper models the channel frequency response as the sum of a sparse specular component and a diffuse component, \(\mathbf{h} = \mathbf{h}_{\mathrm{s}} + \mathbf{D}\boldsymbol{\gamma}\). The continuous-delay representation of \(\mathbf{h}_{\mathrm{s}}\) is promoted to be sparse through atomic-norm regularization. The diffuse component \(\mathbf{D}\boldsymbol{\gamma}\) lies in the column space of the known Fourier dictionary \(\mathbf{D}\), whose columns represent uniformly spaced delay taps, and its coefficients satisfy the energy constraint \(\lVert\boldsymbol{\gamma}\rVert_2^2 \leq E_{\mathrm{d}}\).
This implementation first divides the received pilots by their known values. Repeated pilot-symbol observations belonging to the same transmit stream are then averaged independently for every receive antenna. Each averaged pilot comb is treated as a reduced OFDM grid, and the corresponding reduced-grid form of Program P2 is solved approximately using batched Torch ADMM. The estimator returns the resulting regularized reconstruction \(\mathbf{h}_{\mathrm{s}}+\mathbf{D}\boldsymbol{\gamma}\) and uses the configured Sionna interpolator to reconstruct the remaining resource elements.
Supported System Geometry
The estimator supports different FFT sizes, UE counts, pilot-bearing OFDM symbols, uniform pilot-comb spacings, transmit-stream counts, and receive antenna counts, provided that the following hold:
Every active pilot group is a uniformly spaced subcarrier comb.
All pilot groups have the same number of active subcarriers.
All active pilot values are non-zero.
Repeated pilot groups belonging to the same transmit stream represent the same ordered subcarrier comb because they are averaged elementwise.
diffuse_num_tapsis between one and the common pilot-comb length.
Repeated pilot observations are combined independently for each transmit stream and receive antenna. No common sparse support is imposed across receive antennas.
Deviations from the Paper
The paper assumes complete observations over all OFDM subcarriers. This implementation instead applies the paper’s Program P2 to each sparse pilot comb, interpreted as a reduced OFDM grid with a correspondingly larger effective subcarrier spacing.
The paper does not define interpolation. Off-pilot reconstruction is therefore delegated to a configurable Sionna interpolator.
Program P2 is solved approximately using a fixed number of batched ADMM iterations rather than an exact generic semidefinite-program solver.
Continuous support extraction from Equation (16) and projection debiasing from Equation (17) are not implemented. The regularized, and therefore generally biased, P2 reconstruction is returned directly.
Receive antennas are estimated independently; the implementation does not introduce a multiple-measurement-vector or shared-support model.
The paper does not specify detector-facing marginal error variances. For averaging weights \(w_g\), this implementation uses
\[c_{\mathrm{err}}\,\sigma^2 \sum_g \frac{w_g^2}{|p_g|^2},\]followed by the configured Sionna interpolation.
- Parameters:
resource_grid (ResourceGrid) – Resource grid defining the OFDM dimensions and pilot pattern.
diffuse_num_taps (Optional[int]) – Number of columns in the reduced-grid diffuse dictionary. If None, use the complete pilot-comb length.
tau (float) – Constant weight of the atomic-norm Toeplitz term. Used when
tau_noise_scaleis None.tau_noise_scale (Optional[float]) – Optional multiplier used to derive the regularization weight from the mean input noise variance. If provided, the effective weight is
clamp(tau_noise_scale*mean(no), tau_min, tau_max).tau_min (float) – Lower bound applied to the noise-dependent regularization weight.
tau_max (float) – Upper bound applied to the noise-dependent regularization weight.
diffuse_energy (float) – Diffuse-coefficient energy bound \(E_{\mathrm{d}}\).
err_var_scale (float) – Non-negative scale applied to the detector-facing error variance.
admm_rho (float) – Positive augmented-Lagrangian penalty used by ADMM.
admm_num_iters (int) – Number of ADMM iterations performed for every observation.
interpolation_type (str) – Sionna interpolation policy used after estimating the pilot comb. Ignored when
interpolatoris provided.interpolator (Optional[BaseChannelInterpolator]) – Custom Sionna channel interpolator. If None, the interpolator selected by
interpolation_typeis used.precision (Optional[Precision]) – Precision used for internal calculations and outputs. If None,
precisionis used.device (Optional[str]) – Device used for tensor operations. If None,
deviceis used.
Methods
- estimate_at_pilot_locations(y_pilots: torch.Tensor, no: torch.Tensor) tuple[torch.Tensor, torch.Tensor][source]#
Estimate denoised channels at Sionna pilot locations.
- Parameters:
y_pilots (torch.Tensor) – [batch_size, num_rx, num_rx_ant, num_tx, num_streams, num_pilot_symbols], torch.complex. Observed signals for the pilot-carrying resource elements.
no (torch.Tensor) – [batch_size, num_rx, num_rx_ant] or only the first n>=0 dims, torch.float. Variance of the AWGN.
- Outputs:
h_hat – [batch_size, num_rx, num_rx_ant, num_tx, num_streams, num_pilot_symbols], torch.complex. Channel estimates for the pilot-carrying resource elements.
err_var – Same shape as
h_hat, torch.float. Channel estimation error variance for the pilot-carrying resource elements.
Hyperparameter Tuning#
- sionna.bench.mimo_ofdm_chest.papers.lyu2026.tuning.run_tuning(*, study: str = 'admm', n_trials: int | None = None, num_mc_batches: int | None = None, batch_size: int | None = None, output_dir: str | pathlib.Path | None = None, algorithm_output_dir: str | pathlib.Path | None = None)[source]#
Algorithmic Tuning
The
"admm"stage minimizes weighted NMSE at -10, -5, 0, 5, and 10 dB. It runs 80 seeded TPE trials. Every trial evaluates three batches of four channels at each SNR and executes the complete batched Torch ADMM estimator.Parameter
Search space
diffuse_num_tapsinteger from 1 through 24
tau_noise_scalelogarithmic from 1e-2 through 1e2
diffuse_energylogarithmic from 1e-3 through 1e2
admm_rhologarithmic from 1e-2 through 3
admm_num_itersinteger from 5 through 20
The study requires 80 completed trials. Failed or incomplete trials do not satisfy this requirement.
The
"admm-validation"stage compares the rounded winner with the existing estimator defaults using 63 batches of four channels per SNR.Error-Variance Calibration
The
"variance"stage tuneserr_var_scalelogarithmically from 1e-3 through 1 using 10 TPE trials. Codeword BLER is evaluated at 10 dB over 63 batches of four channels using the algorithm parameters selected by paired validation.The
"variance-validation"stage compares the rounded winner with the existing scale.- Parameters:
study (str) – Stage to execute:
"admm","admm-validation","variance", or"variance-validation".n_trials (int | None) – Trial-count override. If None, use 80 for ADMM tuning and 10 for variance calibration. Validation stages do not run Optuna trials.
num_mc_batches (int | None) – Monte Carlo budget override. If None, use three batches per SNR for ADMM tuning and 63 for validation and variance calibration.
batch_size (int | None) – Channels per batch. If None, use the canonical configuration value of four.
output_dir (str | pathlib.Path | None) – Output directory override for the selected stage.
algorithm_output_dir (str | pathlib.Path | None) – Directory containing the ADMM tuning and paired-validation evidence required by variance calibration.
- Returns:
An Optuna study for tuning stages or a dictionary containing paired-validation results for validation stages.