comnum.Ufmc#

class comnum.Ufmc(n_fft, n_subbands, subband_size, filter_len, *, sidelobe_db=40.0)#

Universal filtered multicarrier (Schaich & Wild 2014): OFDM filtered per sub-band by Dolph–Chebyshev filters, no cyclic prefix, n_fft + filter_len - 1 samples per symbol.

Parameters:
  • n_fft (int) – grid size N.

  • n_subbands (int) – B.

  • subband_size (int) – subcarriers per sub-band Q.

  • filter_len (int) – L.

  • sidelobe_db (float) – attenuation of the sidelobes of the filter (dB).

Raises:

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

Examples

>>> import comnum, numpy as np
>>> u = comnum.Ufmc(64, 4, 12, 16, sidelobe_db=40.0)
>>> d = np.exp(2j * np.pi * np.arange(96) / 5)
>>> np.allclose(u.demodulate(u.modulate(d)), d)
True
demodulate(samples)#

Demodulate whole symbols (zeros to 2N, DFT, even bins, divided by the filters).

Parameters:

samples (array_like) – the received samples.

Returns:

the symbols (complex128).

Return type:

numpy.ndarray

Raises:

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

modulate(data)#

Modulate K = B Q symbols per UFMC symbol.

Parameters:

data (array_like) – the symbols.

Returns:

the samples (complex128).

Return type:

numpy.ndarray

Raises:

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

block_len#

Samples per symbol, N + L - 1.

Type:

int

n_active#

Active subcarriers K = B Q.

Type:

int