SpectralGMMChannelEstimator#
Note
Estimator constructor defaults mirror the settings used during benchmarking.
generate_fitting_data()defaults mirror the settings used to generate fitting data.fit_model()defaults mirror the settings used to fit the model.
- class sionna.bench.mimo_ofdm_chest.papers.koller2022.SpectralGMMChannelEstimator(resource_grid: sionna.phy.ofdm.resource_grid.ResourceGrid, weights: torch.Tensor, means: torch.Tensor, covariances: torch.Tensor, *, 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._PilotGroupMixinChannel estimator that leverages a Gaussian mixture model (GMM) across subcarriers.
This estimator implements the method proposed in:
Michael Koller, Benedikt Fesl, Nurettin Turan, and Wolfgang Utschick. An asymptotically MSE-optimal estimator based on Gaussian mixture models. IEEE Trans. Signal Process., 70:4109–4123, 2022.
TL;DR
For every receive antenna, transmit stream, and pilot-bearing OFDM symbol, the estimator first computes LS observations at the active pilot subcarriers and concatenates their real and imaginary parts into a real-valued observation vector. A Gaussian mixture model of the complete frequency-domain channel then provides the posterior mean and variance of all effective subcarriers conditioned on these observations. The resulting full-frequency estimates on pilot-bearing OFDM symbols are expanded across OFDM time using
TimeDomainInterpolator.Supported System Geometry
The estimator supports different UE counts, stream counts, pilot positions, OFDM-symbol counts, and receive-antenna counts, provided that:
The GMM real-vector dimension is twice the number of effective subcarriers.
Every component covariance is square and uses the same complete-subcarrier ordering as its mean.
All pilot groups have the same number of active pilot subcarriers.
Every transmit stream has the same number of pilot-bearing OFDM symbols.
Every pilot value used by the estimator is non-zero.
The injected GMM was fitted for a compatible resource-grid and pilot geometry.
Receive antennas are processed independently, so changing their number does not change the GMM vector dimension.
Deviations from the Paper
The estimator models one complete frequency-domain vector for each receive antenna, stream, and pilot-bearing OFDM symbol. It does not jointly model the complete spatial-frequency MIMO channel.
One GMM is fitted by pooling full-subcarrier vectors from all receive antennas, UEs, and pilot-bearing OFDM symbols. This assumes common spectral statistics across those observations.
Reconstruction between pilot-bearing OFDM symbols is performed separately by
TimeDomainInterpolator.The paper defines the conditional channel mean but does not provide detector-facing error variances. This implementation returns the posterior variances implied by the same GMM.
- Parameters:
resource_grid (ResourceGrid) – Sionna resource grid defining the OFDM dimensions and pilot pattern.
weights (torch.Tensor) – GMM component probabilities with shape
[num_components].means (torch.Tensor) – Real-valued component means with shape
[num_components, 2*num_effective_subcarriers]. Real channel entries precede imaginary channel entries.covariances (torch.Tensor) – Full real-valued component covariance matrices with shape
[num_components, 2*num_effective_subcarriers, 2*num_effective_subcarriers]using the same stacking convention asmeans.time_avg (bool) – If True, average the full-frequency estimates from the pilot-bearing OFDM symbols before replicating them across time. If False, interpolate between the pilot-bearing symbols. Defaults to True.
precision (Optional[Precision]) – Precision used for internal calculations and outputs. If None, use
precision.device (Optional[str]) – Device used for tensor operations. If None, use
device.
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.
Statistical Fitting#
- sionna.bench.mimo_ofdm_chest.papers.koller2022.asset.generate_fitting_data(resource_grid: sionna.phy.ofdm.resource_grid.ResourceGrid, cfg: sionna.bench.mimo_ofdm_chest.configs.system_config.SystemConfig, *, train_batches: int = 100, train_batch_size: int = 64, seed: int = 22022, asset_root: str | pathlib.Path, verbose: bool = True, overwrite: bool = False) pathlib.Path[source]
Generate the common spatial and spectral GMM fitting-data bank.
The function samples complete noiseless system-channel realizations from the configured Sionna channel model. From every realization, it retains the pilot-bearing OFDM-symbol slices and derives both representations used by the Koller estimators:
Spatial vectors contain the complex channel across all receive antennas at one pilot resource element.
Spectral vectors contain the complete effective-subcarrier channel for one receive antenna, transmit stream, and pilot-bearing OFDM symbol.
The same independently generated channels are used for both representations, so spatial and spectral GMMs can be fitted and tuned without regenerating the underlying propagation channels. The data are written under the supplied external asset root together with a manifest recording the system geometry, generation recipe, payload identities, and independent-channel count. The completed asset is strictly reloaded and validated before its manifest path is returned.
Deviations from the Paper
The spatial data pool vectors from all UEs, pilot subcarriers, and pilot-bearing OFDM symbols, assuming common spatial statistics.
The spectral data pool vectors from all UEs, receive antennas, and pilot-bearing OFDM symbols, assuming common spectral statistics.
Only pilot-bearing OFDM-symbol slices are retained because the implemented estimators do not consume the remaining symbols during GMM fitting.
The fitting channels are generated by the configured Sionna channel model rather than loaded from a paper-provided dataset.
- Parameters:
resource_grid (sionna.phy.ofdm.resource_grid.ResourceGrid) – Sionna resource grid defining the OFDM dimensions, effective subcarriers, streams, and pilot geometry.
cfg (sionna.bench.mimo_ofdm_chest.configs.system_config.SystemConfig) – System and channel-source configuration used to generate the independent channel realizations.
train_batches (int) – Number of independently generated channel batches.
train_batch_size (int) – Number of complete system-channel realizations in each batch. The total independent-channel count is
train_batches * train_batch_size.seed (int) – Seed used for topology and channel generation.
asset_root (str | pathlib.Path) – External directory under which the fitting-data asset is written.
verbose (bool) – If True, report generation progress.
overwrite (bool) – If True, replace an existing asset with the same identity; otherwise raise
FileExistsError.
- Returns:
Path to the strictly validated fitting-data
manifest.json.
- sionna.bench.mimo_ofdm_chest.papers.koller2022.asset.fit_model(resource_grid: sionna.phy.ofdm.resource_grid.ResourceGrid, cfg: sionna.bench.mimo_ofdm_chest.configs.system_config.SystemConfig, *, method: str, num_components: int, train_batches: int = 100, train_batch_size: int = 64, em_iters: int = 15, covariance_reg: float = 0.001, seed: int = 22022, asset_root: str | pathlib.Path, verbose: bool = True, overwrite: bool = False, fitting_data_manifest: str | pathlib.Path | None = None) tuple[tuple[torch.Tensor, torch.Tensor, torch.Tensor], pathlib.Path][source]
Fit and persist one spatial or spectral Gaussian mixture model.
The selected method’s real-valued channel vectors are fitted with a full-covariance Gaussian mixture model using expectation maximization. Complex vectors are represented by concatenating all real entries followed by all imaginary entries.
When
fitting_data_manifestis supplied, the function loads the selected method’s vectors from the common deterministic fitting-data bank. Otherwise, it generates the configured number of channel realizations directly. The canonical fitting procedure supplies the common data-bank manifest so all component-count candidates and both estimator methods use the same underlying channels.The fitted weights, means, and covariance matrices are written beneath the explicit external asset root. The completed asset is strictly reloaded and validated before its tensors and manifest path are returned.
Deviations from the Paper
The spatial GMM pools receive-array vectors from all UEs, pilot subcarriers, and pilot-bearing OFDM symbols.
The spectral GMM pools full-frequency vectors from all UEs, receive antennas, and pilot-bearing OFDM symbols.
Complex channels are fitted as real-valued vectors with real entries followed by imaginary entries.
The paper prescribes EM but does not fully specify initialization, convergence, or covariance stabilization. This implementation uses seeded sample initialization, a mean-log-likelihood stopping tolerance of
1e-4, and variance-scaled diagonal covariance loading.Fitting uses channels from the configured Sionna channel model rather than a paper-provided dataset.
- Parameters:
resource_grid (sionna.phy.ofdm.resource_grid.ResourceGrid) – Sionna resource grid defining the channel-vector and pilot geometry.
cfg (sionna.bench.mimo_ofdm_chest.configs.system_config.SystemConfig) – System and channel-source configuration.
method (str) – GMM representation to fit, either
"spatial"or"spectral".num_components (int) – Number of Gaussian mixture components.
train_batches (int) – Number of independently generated channel batches.
train_batch_size (int) – Number of complete system-channel realizations in each batch.
em_iters (int) – Maximum number of expectation-maximization iterations.
covariance_reg (float) – Diagonal covariance-loading factor. The applied loading is this value times the mean sample variance, with a numerical floor.
seed (int) – Seed used for channel generation and component initialization.
asset_root (str | pathlib.Path) – External directory under which the fitted GMM asset is stored.
verbose (bool) – If True, report fitting progress and EM likelihoods.
overwrite (bool) – If True, replace an existing asset with the same identity; otherwise raise
FileExistsError.fitting_data_manifest (str | pathlib.Path | None) – Optional manifest for the common deterministic fitting-data bank. If omitted, channels are generated during this call.
- Returns:
A tuple
((weights, means, covariances), manifest_path). The GMM parameters are CPU torch.float32 tensors, andmanifest_pathidentifies the strictly validated fitted asset.
Hyperparameter Tuning#
- sionna.bench.mimo_ofdm_chest.papers.koller2022.tuning.run_tuning(*, method: str = 'spectral', output_dir: str | pathlib.Path | None = None, asset_root: str | pathlib.Path, fitting_data_manifest: str | pathlib.Path)[source]
Component-Count Tuning
The study minimizes weighted NMSE at -10, -5, 0, 5, and 10 dB. It exhaustively evaluates four component counts. Every candidate is evaluated on three batches of four probe channels at each SNR.
Parameter
Search space
num_componentsexhaustive categorical set {5, 10, 15, 20}
Each candidate GMM is fitted to the same data bank containing 6,400 independent system-channel realizations. Spatial and spectral studies reuse these channels but derive method-specific fitting vectors from them. Every fit uses 15 EM iterations and covariance regularization of 1e-3.
The four component counts are explicitly enqueued, so the study is an exhaustive finite comparison rather than an adaptive TPE search. The count with the smallest weighted-NMSE objective is selected directly; no incumbent or separate paired-validation stage is used.
- Parameters:
method (str) – GMM method to tune, either
"spectral"or"spatial". The default is"spectral".output_dir (str | pathlib.Path | None) – Output-directory override. If None, use the canonical method-specific tuning directory.
asset_root (str | pathlib.Path) – External root containing or receiving fitted GMM assets.
fitting_data_manifest (str | pathlib.Path) – Manifest of the fixed 6,400-channel fitting data bank shared by both methods.
- Returns:
The completed four-candidate Optuna study.