Multipath Fading#

class AntennaCorrelation(channel=None, device=None)#

Bases: ABC

Base class for statistical modeling of antenna array correlations.

abstract property covariance: ndarray#

Antenna covariance matrix.

Returns: Two-dimensional numpy array representing the covariance matrix.

property channel: Channel | None#

The channel this correlation model configures.

Returns:

Handle to the channel. None if the model is currently considered floating

property device: SimulatedDevice | None#

The device this correlation model is based upon.

Returns:

Handle to the device. None if the device is currently unknown.

class CustomAntennaCorrelation(covariance)#

Bases: Serializable, AntennaCorrelation

Customizable antenna correlations.

Parameters:

covariance (np.ndarray) – Postive definte square antenna covariance matrix.

yaml_tag: Optional[str] = 'CustomCorrelation'#

YAML serialization tag

property covariance: ndarray#

Antenna covariance matrix.

Returns: Two-dimensional numpy array representing the covariance matrix.

class MultipathFadingChannel(delays, power_profile, rice_factors, num_sinusoids=None, los_angle=None, doppler_frequency=None, los_doppler_frequency=None, interpolate_signals=None, alpha_correlation=None, beta_correlation=None, **kwargs)#

Bases: Channel, Serializable

Implements a stochastic fading multipath channel.

For MIMO systems, the received signal is the addition of the signal transmitted at all antennas. The channel model is defined in the parameters, which should have the following fields: - param.delays - numpy.ndarray containing the delays of all significant paths (in s) - param.power_delay_profile - numpy.ndarray containing the average power of each path (in linear scale). It must have the same number of elements as ‘param.delays’ - param.k_factor_rice: numpy.ndarray containing the K-factor of the Ricean distribution for each path (in linear scale). It must have the same number of elements as ‘param.delays’

The channel is time-variant, with the auto-correlation depending on its maximum ‘doppler_frequency’ (in Hz). Realizations in different drops are independent.

The model supports multiple antennas, and the correlation among different antennas can be specified in parameters ‘tx_cov_matrix’ and ‘rx_cov_matrix’, for the both transmitter and at the receiver side, respectively. They both must be Hermitian, positive definite square matrices.

Rayleigh/Rice fading and uncorrelated scattering is considered. Fading follows Jakes’ Doppler spectrum, using the simulation approach from Xiao et al.[1], which is based on the sum of sinusoids with random phases.

If the delays are not multiple of the sampling interval, then sinc-based interpolation is considered.

Antenna correlation considers the Kronecker model, as described in Yu et al.[2].

The channel will provide ‘number_rx_antennas’ outputs to a signal consisting of ‘number_tx_antennas’ inputs. A random number generator, given by ‘rnd’ may be needed. The sampling rate is the same at both input and output of the channel, and is given by ‘sampling_rate’ samples/second. tx_cov_matrix and rx_cov_matrix are covariance matrices for transmitter and receiver.

Parameters:
  • delays (np.ndarray) – Delay in seconds of each individual multipath tap.

  • power_profile (np.ndarray) – Power loss factor of each individual multipath tap.

  • rice_factors (np.ndarray) – Rice factor balancing line of sight and multipath in each individual channel tap.

  • transmitter (Transmitter, optional) – The modem transmitting into this channel.

  • receiver (Receiver, optional) – The modem receiving from this channel.

  • scenario (Scenario, optional) – The scenario this channel is attached to.

  • active (bool, optional) – Channel activity flag.

  • gain (float, optional) – Channel power gain.

  • random_generator (rnd.Generator, optional) – Generator object for random number sequences.

  • num_sinusoids (int, optional) – Number of sinusoids used to sample the statistical distribution.

  • los_angle (float, optional) – Angle phase of the line of sight component within the statistical distribution.

  • doppler_frequency (float, optional) – Doppler frequency shift of the statistical distribution.

  • alpha_correlation (AntennaCorrelation, optional) – Antenna correlation model at the first device. By default, the channel assumes ideal correlation, i.e. no cross correlations.

  • beta_correlation (AntennaCorrelation, optional) – Antenna correlation model at the second device. By default, the channel assumes ideal correlation, i.e. no cross correlations.

  • **kwargs (Any, optional) – Channel base class initialization parameters.

Raises:

ValueError – If the length of delays, power_profile and rice_factors is not identical. If delays are smaller than zero. If power factors are smaller than zero. If rice factors are smaller than zero.

yaml_tag: Optional[str] = 'MultipathFading'#

YAML serialization tag.

serialized_attributes: Set[str] = {'impulse_response_interpolation', 'interpolate_signals'}#

Set of object attributes to be serialized.

delay_resolution_error: float = 0.4#
interpolate_signals: bool#
los_gains: np.ndarray#
property delays: ndarray#

Access configured path delays.

Returns:

Path delays.

Return type:

np.ndarray

property power_profile: ndarray#

Access configured power profile.

Returns:

Power profile.

Return type:

np.ndarray

property rice_factors: ndarray#

Access configured rice factors.

Returns:

Rice factors.

Return type:

np.ndarray

property doppler_frequency: float#

Access doppler frequency shift.

Returns:

Doppler frequency shift in Hz.

Return type:

float

property los_doppler_frequency: float#

Access doppler frequency shift of the line of sight component.

Returns:

Doppler frequency shift in Hz.

Return type:

float

property max_delay: float#

Access the maximum multipath delay.

Returns:

The maximum delay.

Return type:

float

property num_resolvable_paths: int#

Access the configured number of fading sequences generating a single impulse response.

Returns:

The number of sequences.

Return type:

int

property num_sinusoids: int#

Access the configured number of sinusoids within one fading sequence.

Returns:

The number of sinusoids.

Return type:

int

property los_angle: float | None#

Access configured angle of arrival of the specular model component.

Returns:

The AoA in radians, None if it is not configured.

Return type:

Optional[float]

realize(num_samples, sampling_rate)#

Generate a new channel impulse response.

Note that this is the core routine from which Channel.propagate() will create the channel state.

Parameters:
  • num_samples (int) – Number of samples \(N\) within the impulse response.

  • sampling_rate (float) – The rate at which the delay taps will be sampled, i.e. the delay resolution.

Return type:

ChannelRealization

Returns:

Numpy aray representing the impulse response for all propagation paths between antennas. 4-dimensional tensor of size \(M_\mathrm{Rx} \times M_\mathrm{Tx} \times N \times (L+1)\) where \(M_\mathrm{Rx}\) is the number of receiving antennas, \(M_\mathrm{Tx}\) is the number of transmitting antennas, \(N\) is the number of propagated samples and \(L\) is the maximum path delay (in samples). For the ideal channel in the base class \(L = 0\).

interpolation_filter(sampling_rate)#

Create an interpolation filter matrix.

Parameters:

sampling_rate (float) – The sampling rate to which to interpolate.

Returns:

Interpolation filter matrix containing filters for each configured resolvable path.

Return type:

np.ndarray

property alpha_correlation: AntennaCorrelation | None#

Antenna correlation at the first device.

Returns:

Handle to the correlation model. None, if not model was configured and ideal correlation is assumed.

property beta_correlation: AntennaCorrelation | None#

Antenna correlation at the second device.

Returns:

Handle to the correlation model. None, if not model was configured and ideal correlation is assumed.

property transmitter: SimulatedDevice#

SimulatedDevice transmitting into this channel.

Returns:

A handle to the modem transmitting into this channel.

Return type:

Transmitter

Raises:

RuntimeError – If a transmitter is already configured.

property receiver: SimulatedDevice#

SimulatedDevice receiving from this channel.

Returns:

A handle to the device receiving from this channel.

Return type:

Receiver

Raises:

RuntimeError – If a receiver is already configured.