SBLChannelEstimator#

Note

  • Estimator constructor defaults mirror the settings used during benchmarking.

class sionna.bench.mimo_ofdm_chest.papers.wei2017.SBLChannelEstimator(resource_grid: sionna.phy.ofdm.resource_grid.ResourceGrid, interpolation_type: str = 'lin_time_avg', interpolator: sionna.phy.ofdm.channel_estimation.BaseChannelInterpolator | None = None, *, num_taps: int | None = None, num_iter: int = 10, alpha_init: float = 0.00259, posterior_variance_scale: float = 0.755, precision: Literal['single', 'double'] | None = None, device: str | None = None)[source]#

Bases: sionna.phy.ofdm.channel_estimation.BasePilotChannelEstimator, sionna.phy.ofdm.channel_estimation._PilotGroupMixin

Channel estimator that leverages sparsity in the delay domain through Sparse Bayesian Learning (SBL).

This estimator implements the method proposed in:

  • Chao Wei, Zaichen Zhang, and Huaping Liu. Expectation-propagation based low-complexity channel estimation for massive mimo systems. In IEEE Int. Conf. Commun. (ICC), 1–5. May 2017.

TL;DR

The estimator models the retained delay-domain coefficients at delay \(l\) and receive antenna \(m\) as conditionally independent complex Gaussian variables,

\[h_{m,l} \mid \alpha_l \sim \mathcal{CN}(0,\alpha_l),\]

where the variance \(\alpha_l\) is shared across the co-located receive antennas. The estimator first computes LS channel observations at the pilot-bearing resource elements, transforms each pilot comb to the delay domain, and applies sparse Bayesian denoising there. The denoised coefficients are transformed back to the observed pilot subcarriers, and the configured Sionna interpolator reconstructs the remaining resource elements.

Supported System Geometry

The estimator supports different FFT sizes, UE counts, pilot-bearing OFDM symbols, 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.

  • For every group, comb_spacing * group_length == fft_size.

  • Pilot power is constant and non-zero within each group.

  • num_taps is between one and the common pilot-group length.

The delay-support variances are shared across receive antennas but are estimated independently for different batches, receivers, transmit streams, and pilot-bearing OFDM symbols.

Deviations from the Paper

  • The paper considers downlink estimation with channels from multiple co-located transmit antennas superimposed through a generic pilot observation matrix. This uplink adaptation instead shares the delay-support variances across the separated BS receive-antenna observations.

  • Pilot normalization and the uniform-comb IFFT diagonalize the adapted observation model. Consequently, this implementation evaluates exact scalar Gaussian posterior moments and does not implement the paper’s generic expectation-propagation cavity distributions or factor-to-variable messages.

  • The paper assumes a finite causal delay-tap model and reconstructs the full frequency response by end-padding the delay vector and applying an FFT. This implementation estimates only the observed pilot subcarriers and delegates full-grid reconstruction to a configurable Sionna interpolator.

  • If num_taps is None, all pilot-comb delay coefficients are retained. This avoids imposing the paper’s model-matched finite-delay truncation on channels with continuous, off-grid delays.

  • The returned pilot-subcarrier error variances are posterior marginals under the diagonalized delay model. Correlations between frequency-domain errors are not represented by Sionna’s marginal err_var interface or propagated by its interpolators.

Parameters:
  • resource_grid (ResourceGrid) – Resource grid defining the OFDM dimensions and pilot pattern.

  • interpolation_type (str) – Sionna interpolation policy used after estimating the observed pilot subcarriers. Ignored when interpolator is provided.

  • interpolator (Optional[BaseChannelInterpolator]) – Custom Sionna channel interpolator. If None, the interpolator selected by interpolation_type is used.

  • num_taps (Optional[int]) – Number of delay-domain coefficients retained from each pilot comb. If None, retain the complete pilot-group length.

  • num_iter (int) – Number of expectation-maximization updates.

  • alpha_init (float) – Positive initial value of every common-support variance parameter \(\alpha_l\).

  • posterior_variance_scale (float) – Non-negative confidence scale applied to the summed delay-domain posterior variances before interpolation.

  • precision (Optional[Precision]) – Precision used for internal calculations and outputs. If None, precision is used.

  • device (Optional[str]) – Device used for tensor operations. If None, device is 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.wei2017.tuning.run_tuning(*, study: str = 'sbl', 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 "sbl" stage minimizes weighted NMSE at -10, -5, 0, 5, and 10 dB. It runs 50 seeded TPE trials. Every trial evaluates three batches of four channels at each SNR.

Parameter

Search space

num_iter

integer from 1 through 60

alpha_init

logarithmic from 1e-3 through 10

num_taps

integer from 1 through the number of frequency pilots in one pilot-bearing OFDM symbol; the canonical maximum is 156

The "sbl-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 tunes posterior_variance_scale logarithmically 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 posterior-variance scale.

Parameters:
  • study (str) – Stage to execute: "sbl", "sbl-validation", "variance", or "variance-validation".

  • n_trials (int | None) – Trial-count override. If None, use 50 for SBL 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 SBL 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 SBL 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.