comnum.bps#

comnum.bps(x, constellation, *, n=35, b=64)#

Blind phase search (Pfau, Hoffmann and Noé 2009; OptiCommPy bps).

Every test phase b (π/2)/B rotates the samples; the squared distances to the nearest points are summed over 2n + 1 samples and the phase of the smallest sum is kept. The constellation is normalised inside, so the signal should have unit mean power. Unwrap the result with a period of π/2, then apply it with derotate(x, θ).

Parameters:
  • x (array_like) – signal at one sample per symbol, unit mean power.

  • constellation (Constellation) – the alphabet.

  • n (int) – half-length of the window (symbols).

  • b (int) – number of test phases B.

Returns:

one phase per symbol (rad, in [0, π/2)).

Return type:

numpy.ndarray

Raises:

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