Channels#

class AWGN(value: float = 1.0, unit: Literal['sigma2', 'snr', 'snr_dB', 'snr_dBm'] = 'sigma2', sigma2s: float = 1.0, sigma2s_method: Literal['fixed', 'measured'] = 'fixed', seed: int = None, name: str = 'awgn')#

A class representing an Additive White Gaussian Noise (AWGN) for MIMO channel.

This class models an AWGN channel, which adds complex Gaussian noise to a signal. It is characterized by a noise power specified by sigma squared (sigma2).

Signal Model#

\[y_u[n] = x_u[n] + b_u[n]\]

where:

  • \(b[n]\sim \mathcal{N}(0, \sigma^2)\) is a Gaussian additive noise.

For complex signals, a circular Gaussian noise is applied to the signal. The value of \(\sigma^2\) is computed with respect to the method specified as input.

Attributes#

valuefloat, optional

The value associated with the given method. Default is 1

unitstr, optional

The unit to compute the noise power (“sigma2”, “snr”, “snr_dB”, “snr_dBm”). Default is “sigma2”

sigma2sfloat, optional

Signal power. default is 1

seedint, optional

The seed for the noise generator.

sigma2s_method: Literal[“fixed”, “measured”]

The method used to obtain the signal power

namestr

Name of the channel instance.

class BaseMIMOChannel(H: array | None = None, extend: bool = True, name: str = 'mimo_channel')#

A base class for modeling Multiple-Input Multiple-Output (MIMO) channels.

This class provides a framework for simulating MIMO communication channels, including methods for setting channel matrices, configuring signal-to-noise ratios (SNR), generating noise, and processing input signals.

Signal Model#

\[\mathbf{y}[n] = \sum_{l=0}^{L}\mathbf{H}[l]x[n-l] + \mathbf{b}[n]\]

where

  • \(\mathbf{H}[l]\) is a channel matrix of size \(N_r \times N_t\) corresponding the \(l^{th}\) channel tap,

  • \(\mathbf{x}[n]\) is a \(N_t\) vector containing the transmitted data,

  • \(\mathbf{b}[n]\sim \mathcal{N}_c(\mathbf{0},\sigma^2\mathbf{I}_{N_r})\) is a \(N_r\) vector containing the additive white Gaussian noise.

Attributes#

Pfloat

Transmit power.

HOptional[np.array]

List of channel matrices for each tap. Each matrix should have equal dimensions.

extendbool

Flag to extend the input signal.

namestr

Name of the processor.

class FlatMIMOChannel(H: array | None = None, extend: bool = True, name: str = 'mimo_channel')#

Flat (frequency-non-selective) MIMO channel.

Applies a single matrix multiplication \(\mathbf{y}[n] = \mathbf{H}\mathbf{x}[n]\) without frequency selectivity.

class SelectiveMIMOChannel(H: array | None = None, extend: bool = True, name: str = 'mimo_channel')#

Frequency-selective MIMO channel.

Applies a multi-tap convolution using the channel matrices stored in H. The extend flag controls whether the output signal is extended or truncated.