comnum.oamp_state_evolution#

comnum.oamp_state_evolution(constellation, singular_values, n_tx, noise_var, iterations, *, linear='lmmse', px=None, real=False)#

The empirical state evolution of OAMP with the optimal denoiser (Ma & Ping 2017, eqs. 32 and 39) for the singular values of a channel.

Parameters:
  • constellation (Constellation) – the alphabet of every stream.

  • singular_values (array_like) – the singular values of the channel.

  • n_tx (int) – the number of columns of the channel.

  • noise_var (float) – noise variance per receive antenna.

  • iterations (int) – iterations.

  • linear (str) – the linear estimator, "lmmse", "pinv" or "mf".

  • px (array_like, optional) – prior probabilities of the points (uniform by default).

  • real (bool) – a real model.

Returns:

noise_var (τ² of every iteration) and mse.

Return type:

dict

Raises:

ValueError – for an invalid parameter or input (the message names it).

Examples

>>> import comnum, numpy as np
>>> c = comnum.Constellation("qam", 4).normalized()
>>> h = comnum.mimo_channel(128, 64, comnum.Rng(1)) / np.sqrt(128)
>>> lam = np.linalg.svd(h, compute_uv=False)
>>> se = comnum.oamp_state_evolution(c, lam, 64, 0.3, 10)
>>> bool(se["mse"][-1] < se["mse"][0])
True