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._PilotGroupMixinChannel 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/intfiltconstruction 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 bymethod="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,
precisionis used.device (Optional[str]) – Device used for tensor operations. If None,
deviceis 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_dimcategorical set {4, 8, 16}
learning_ratelogarithmic from 1e-5 through 1e-3
free_bitsuniform from 0 through 1
optimizer_batch_sizecategorical 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 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 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.