class sdr.LinearModulation

Implements linear phase/amplitude modulation with arbitrary symbol mapping.

Variable nomenclature
  • \(k\): Symbol index

  • \(n\): Sample index

  • \(s[k]\): Decimal symbols

  • \(a[k]\) Complex symbols

  • \(x[n]\): Pulse-shaped complex samples

  • \(\tilde{x}[n]\): Received (noisy) pulse-shaped complex samples

  • \(\tilde{a}[k]\): Received (noisy) complex symbols

  • \(\hat{a}[k]\): Complex symbol decisions

  • \(\hat{s}[k]\): Decimal symbol decisions

Constructors

LinearModulation(symbol_map: ArrayLike, ...)

Creates a new linear phase/amplitude modulation object.

Methods

map_symbols(s: ArrayLike) NDArray[complex128]

Converts the decimal symbols into complex symbols.

decide_symbols(a_tilde) tuple[NDArray[int_], NDArray[complex128]]

Converts the received complex symbols into MLE symbol decisions.

modulate(s: ArrayLike) NDArray[complex128]

Modulates the decimal symbols into pulse-shaped complex samples.

demodulate(...) tuple[NDArray[int_], NDArray[complex128], NDArray[complex128]]

Demodulates the pulse-shaped complex samples.

abstract ber(ebn0: ArrayLike) NDArray[float64]

Computes the bit error rate (BER) at the provided \(E_b/N_0\) values.

abstract ser(esn0: ArrayLike) NDArray[float64]

Computes the symbol error rate (SER) at the provided \(E_s/N_0\) values.

Properties

property order : int

The modulation order \(M = 2^k\).

property bps : int

The number of coded bits per symbol \(k = \log_2 M\).

property phase_offset : float

The phase offset \(\phi\) in degrees.

property symbol_map : NDArray[np.complex128]

The symbol map \(\{0, \dots, M-1\} \mapsto \mathbb{C}\).

property sps : int

The number of samples per symbol \(f_s / f_{sym}\).

property pulse_shape : NDArray[np.float64]

The pulse shape \(h[n]\) of the modulated signal.

property tx_filter : Interpolator

The transmit interpolating pulse shaping filter.

property rx_filter : Decimator

The receive decimating matched filter.