CombInterpolator#

Note

  • Estimator constructor defaults mirror the settings used during benchmarking.

class sionna.bench.mimo_ofdm_chest.papers.coleri2002.CombInterpolator(pilot_pattern: sionna.phy.ofdm.pilot_pattern.PilotPattern, method: str = 'second-order', *, lowpass_filter_half_length: int = 16, lowpass_cutoff: float = 0.105, err_var_scale: float = 0.868, precision: Literal['single', 'double'] | None = None, device: str | None = None)[source]#

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

Channel interpolator that leverages certain smoothness-assumptions to interpolate channel estimates.

This interpolator implements the methods proposed in:

  • Sinem Coleri, Mustafa Ergen, Anuj Puri, and Ahmad Bahai. Channel estimation techniques based on pilot arrangement in OFDM systems. IEEE Trans. Broadcast., 48(3):223–229, 2002.

TL;DR

The input pilot estimates are grouped by transmit stream and pilot-bearing OFDM symbol. For each group, the channel is reconstructed across frequency using one of four methods:

  • "second-order" applies a local second-order interpolation rule.

  • "low-pass" inserts zeros between pilot estimates and applies a symmetric low-pass FIR interpolation filter.

  • "cubic-spline" applies cubic-spline interpolation using.

  • "time-domain" transforms the pilot sequence to the delay domain, inserts zeros in the middle of the FFT-ordered delay vector, and transforms it back to the complete effective-subcarrier grid.

After frequency reconstruction, all methods apply linear interpolation between pilot-bearing OFDM symbols.

Supported System Geometry

The interpolator supports different effective FFT sizes, OFDM-symbol counts, transmit-stream counts, and receive-antenna counts, provided that:

  • Each pilot group forms a uniform comb over subcarriers.

  • All pilot groups have the same comb spacing and number of pilots.

  • Each comb spans the complete effective-subcarrier grid, such that num_effective_subcarriers == pilot_spacing * num_pilots_per_symbol.

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

Different comb offsets between transmit streams are supported. Nonuniform, incomplete, or inconsistent comb layouts are rejected during construction.

Deviations from the Paper

  • The paper formulates its interpolation methods independently for each OFDM symbol. This implementation additionally applies linear interpolation over OFDM time when pilots occupy only a subset of the OFDM symbols.

  • The paper does not fully specify frequency-boundary behavior. Second-order and low-pass interpolation therefore use constant edge extension, while cubic-spline queries outside the observed pilot span are clipped to the nearest edge.

  • The low-pass implementation follows the publicly documented MATLAB interp/intfilt construction but is not claimed to reproduce its internal implementation bit for bit.

  • Equation (19) is evaluated using the normalized interval coordinate \(l/L\), consistently with Equation (18), instead of the printed \(l/N\).

  • The printed zero-padding expression in Equation (21) is inconsistent. The time-domain method follows the surrounding description and Figure 3: pilot-rate IDFT, middle zero padding, and a DFT over all effective subcarriers.

  • The paper does not define detector-facing channel-estimation error variances. This implementation expands the mean pilot-domain LS variance over frequency, interpolates it over OFDM time, and applies err_var_scale.

Parameters:
  • pilot_pattern (PilotPattern) – Pilot pattern defining the active comb-pilot positions.

  • method (str) – Frequency-interpolation method. Must be "second-order", "low-pass", "cubic-spline", or "time-domain".

  • lowpass_filter_half_length (int) – Half-length parameter of the MATLAB-style low-pass interpolation filter. The resulting FIR length is 2 * lowpass_filter_half_length * pilot_spacing + 1. This parameter is used only by method="low-pass".

  • lowpass_cutoff (float) – Normalized cutoff of the low-pass interpolation filter, expressed as a fraction of the input Nyquist frequency. It must lie in (0, 1] and is used only by method="low-pass".

  • err_var_scale (float) – Non-negative scale applied to the reconstructed detector-facing error variances.

  • 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.

Inputs:
  • h_hat – [batch_size, num_rx, num_rx_ant, num_tx, num_streams_per_tx, num_pilot_symbols], torch.complex. Channel estimates at the active pilot positions.

  • err_var – [batch_size, num_rx, num_rx_ant, num_tx, num_streams_per_tx, num_pilot_symbols], torch.float. Corresponding pilot-domain channel-estimation error variances.

Outputs:
  • h_hat – [batch_size, num_rx, num_rx_ant, num_tx, num_streams_per_tx, num_ofdm_symbols, num_effective_subcarriers], torch.complex. Channel estimates over the complete effective resource grid.

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

Hyperparameter Tuning#

sionna.bench.mimo_ofdm_chest.papers.coleri2002.tuning.run_tuning(*, study: str = 'lowpass', n_trials: int | None = None, num_mc_batches: int | None = None, batch_size: int | None = None, output_dir: str | pathlib.Path | None = None)[source]#

Training Hyperparameter Tuning

The "training" stage minimizes weighted NMSE at -10, -5, 0, 5, and 10 dB. It runs 10 seeded TPE trials. Every trial trains a separate VAE model for each of these five SNRs and evaluates three batches of four channels at each SNR.

All trials reuse the same training-data bank. Every SNR-specific model uses 6,400 training channels and 256 validation channels, at most 200 epochs, patience of 20 epochs, and a relative minimum validation improvement of 1e-4. The best checkpoint is restored.

Parameter

Search space

latent_dim

categorical set {4, 8, 16}

learning_rate

logarithmic from 1e-5 through 1e-3

free_bits

uniform from 0 through 1

optimizer_batch_size

categorical set {256, 512, 1024, 2048}

The "training-validation" stage retrains and compares the rounded winner with the existing training defaults using 63 batches of four channels at each 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 using the frozen canonical model bank.

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

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

  • n_trials (int | None) – Trial-count override. If None, use 10 for both training tuning and 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 training tuning and 63 for validation and variance calibration.

  • batch_size (int | None) – Channels per evaluation 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 – Directory containing the training study and paired-validation evidence used to select the canonical training recipe.

  • asset_root – External root containing or receiving trained VAE model assets.

  • training_data_manifest – Manifest of the fixed training and validation data bank. This is required by the training and training-validation stages.

Returns:

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