class sdr.CPM

Implements continuous-phase modulation (CPM).

Note

The nomenclature for variable names in continuous-phase modulation is as follows: \(s[k]\) are decimal symbols, \(\hat{s}[k]\) are decimal symbol decisions, \(a[k]\) are complex symbols, \(\tilde{a}[k]\) are received complex symbols, \(\hat{a}[k]\) are complex symbol decisions, \(x[n]\) are pulse-shaped complex samples, and \(\tilde{x}[n]\) are received pulse-shaped complex samples. \(k\) indicates a symbol index and \(n\) indicates a sample index.

Constructors

CPM(order: int, index: float = 0.5, ...)

Creates a new continuous-phase modulation object.

Methods

modulate(s: ArrayLike) NDArray[complex128]

Modulates the decimal symbols \(s[k]\) into pulse-shaped complex samples \(x[n]\).

demodulate(x_tilde: ArrayLike) NDArray[int_]

Demodulates the pulse-shaped complex samples into decimal symbol decisions.

abstract ber(ebn0: ArrayLike | None = None) ndarray

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

abstract ser(esn0: ArrayLike) ndarray

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 bits per symbol \(k = \log_2 M\).

property index : float

The modulation index \(h\).

property phase_offset : float

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

property sps : int

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

property pulse_shape : ndarray

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

property tx_filter : Interpolator

The transmit interpolating pulse shaping filter. The filter coefficients are the pulse shape \(h[n]\).

property rx_filter : Decimator

The receive decimating matched filter. The filter coefficients are matched to the pulse shape \(h[-n]^*\).