RKHSChannelEstimator#

Note

  • Estimator constructor defaults mirror the settings used during benchmarking.

class sionna.bench.mimo_ofdm_chest.papers.delfeld2025.RKHSChannelEstimator(resource_grid: sionna.phy.ofdm.resource_grid.ResourceGrid, *, num_rows: int, num_cols: int, rank: int = 4, sparse_num_iter: int = 19, debias_num_iter: int = 15, step_size: float = 1.57, lambda_scale: float = 58.3, debias_scale: float = 0.00115, err_var_scale: float = 0.00102, time_avg: bool = True, precision: Literal['single', 'double'] | None = None, device: str | None = None)[source]#

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

Channel estimator that leverages sparsity through RKHS regularization.

This implementation follows Algorithm 1 proposed in:

  • James Delfeld, Gian Marti, and Chris Dick. Sparse MIMO-OFDM channel estimation via RKHS regularization. arXiv preprint arXiv:2511.20082, 2025.

TL;DR

The estimator solves a low-dimensional surrogate of an optimization problem derived through Reproducing Kernel Hilbert Space (RKHS) theory. The solver uses forward-backward splitting with two stages: a regularized stage that identifies the channel’s support, and a debiasing stage that reconstructs the channel within the support using Tikhonov regularization.

The channel estimator exploits sparsity in the beamspace and the delay domain. The channel is estimated independently for each pilot-bearing OFDM symbol, and a TimeDomainInterpolator is used to complete the channel estimate across OFDM symbols.

Supported System Geometry

The estimator supports different FFT sizes, UE counts, pilot-bearing OFDM symbol positions, and rectangular receive antenna arrays, provided that the following hold:

  • Each pilot group is a uniform comb over subcarriers with at least two non-zero pilots.

  • All pilot groups have the same length.

  • Every stream has the same number of active pilot-bearing OFDM symbols.

  • num_rows * num_cols matches the receive-antenna dimension.

Deviations from the Paper

  • The default number of iterations and the regularization weights were selected using Optuna, rather than following the paper’s specified values.

  • The paper does not specify detector-facing error variances, so the implementation returns err_var_scale * no, where the default value of err_var_scale was selected using Optuna.

Parameters:
  • resource_grid (ResourceGrid) – Sionna resource grid defining the pilot pattern.

  • num_rows (int) – Number of rows in the base-station antenna grid. num_rows*num_cols must match the receive-antenna dimension.

  • num_cols (int) – Number of columns in the base-station antenna grid.

  • rank (int) – Low-rank RKHS approximation rank per frequency/row/column dimension. The rank is clipped independently to each available dimension size.

  • sparse_num_iter (int) – Number of sparse optimization iterations using gradient steps and group soft-thresholding.

  • debias_num_iter (int) – Number of support-constrained debiasing iterations after sparse support extraction.

  • step_size (float) – Forward-backward splitting step size.

  • lambda_scale (float) – Scale applied to the paper’s sqrt(noise variance) sparse regularization weight.

  • debias_scale (float) – Scale applied to the debiasing Tikhonov weight.

  • err_var_scale (float) – Nonnegative multiplicative scale applied to the LS pilot error variances before interpolation.

  • time_avg (bool) – If True, average estimates from all pilot-bearing OFDM symbols and repeat the mean over every OFDM symbol. If False, interpolate linearly across OFDM symbols and extrapolate outside the first and last pilot-bearing symbols.

  • precision (Optional[Precision]) – Optional Sionna precision setting.

  • device (Optional[str]) – Optional torch device for Sionna buffers.

Methods

call(y: torch.Tensor, no: torch.Tensor) → tuple[torch.Tensor, torch.Tensor][source]#

Estimate the full effective resource-grid channel.

Inputs:
  • y – [batch, num_rx, num_rx_ant, num_ofdm_symbols, fft_size], torch.complex. Received OFDM resource grid.

  • no – torch.float. Noise variance with a Sionna-compatible broadcast shape.

Outputs:
  • h_hat – [batch, num_rx, num_rx_ant, num_tx, num_streams_per_tx, num_ofdm_symbols, num_effective_subcarriers], torch.complex. Channel estimates.

  • err_var – Same shape as h_hat, torch.float. Detector-facing channel-estimation error variances.

Hyperparameter Tuning#

sionna.bench.mimo_ofdm_chest.papers.delfeld2025.tuning.run_tuning(*, study: str = 'rkhs', 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 "rkhs" 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

rank

integer from 1 through 4

sparse_num_iter

integer from 5 through 20

debias_num_iter

integer from 0 through 20

step_size

logarithmic from 0.05 through 2

lambda_scale

logarithmic from 1 through 300

debias_scale

logarithmic from 1e-4 through 1

The "rkhs-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 err_var_scale logarithmically from 1e-3 through 1 using 10 TPE trials. Codeword BLER is evaluated at 10 dB over 63 batches of four channels. T

The "variance-validation" stage compares the rounded winner with the existing scale.

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

  • n_trials (int | None) – Trial-count override. If None, use 50 for RKHS 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 RKHS 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 RKHS tuning and validation evidence required by variance calibration.

Returns:

An Optuna study for tuning stages or a dictionary containing paired-validation results for validation stages.