Random Delay Channel¶

Delay channel assuming a uniformly distributed random propagation between the linked devices. Its impulse response between two devices \(\alpha\) and \(\beta\) featuring \(N^{(\alpha)}\) and \(N^{(\beta)}\) antennas, respectively, is given by
The assumed propagation delay is drawn from the uniform distribution
and lies in the interval between \(\tau_\mathrm{Min}\) and \(\tau_\mathrm{Max}\). The sensor array response \(\mathbf{A}^{(\alpha,\beta)}\) is always assumed to be the identity matrix.
The following minimal example outlines how to configure the channel model
within the context of a Simulation
:
1# Initialize two devices to be linked by a channel
2simulation = Simulation()
3alpha_device = simulation.new_device(carrier_frequency=1e8)
4beta_device = simulation.new_device(carrier_frequency=1e8)
5
6# Create a channel between the two devices
7channel = RandomDelayChannel((1e-8, 10e-8))
8simulation.set_channel(alpha_device, beta_device, channel)
9
10# Configure communication link between the two devices
11link = SimplexLink()
12alpha_device.transmitters.add(link)
13beta_device.receivers.add(link)
14
15# Specify the waveform and postprocessing to be used by the link
16link.waveform = RRCWaveform(
17 symbol_rate=1e8, oversampling_factor=2, num_data_symbols=1000,
18 num_preamble_symbols=10, pilot_rate=10)
19link.waveform.channel_estimation = SCLeastSquaresChannelEstimation()
20link.waveform.channel_equalization = SCZeroForcingChannelEqualization()
21link.waveform.synchronization = SCCorrelationSynchronization()
22
23# Configure a simulation to evaluate the link's BER and sweep over the receive SNR
24simulation.add_evaluator(BitErrorEvaluator(link, link))
25simulation.new_dimension('noise_level', dB(20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40), beta_device)
26
27# Run simulation and plot resulting SNR curve
28simulation.num_samples = 1000
- class RandomDelayChannel(delay, decorrelation_distance=inf, model_propagation_loss=True, gain=1.0, seed=None)[source]¶
Bases:
DelayChannelBase
[RandomDelayChannelRealization
]Delay channel assuming random propagation delays.
- Parameters:
delay (
Union
[float
,Tuple
[float
,float
]]) – Assumed propagation delay in seconds. If a scalar floating point, the delay is assumed to be constant. If a tuple of two floats, the tuple values indicate the mininum and maxium values of a uniform distribution, respectively.decorrelation_distance (
float
) – Distance in meters at which the channel decorrelates. By default, the channel is assumed to be static in space.model_propagation_loss (
bool
) – Should free space propagation loss be modeled? Enabled by default.gain (
float
) – Linear power gain factor a signal experiences when being propagated over this realization. \(1.0\) by default.seed (
int
|None
) – Seed used to initialize the pseudo-random number generator.
- classmethod Deserialize(process)[source]¶
Deserialize an object’s state.
Objects cannot be deserialized directly, instead a
Factory
must be instructed to carry out the deserialization process.- Parameters:
process (
DeserializationProcess
) – The current stage of the deserialization process. This object is generated by theFactory
and provides an interface to deserialization methods supporting multiple backends.- Return type:
- Returns:
The deserialized object.
- _realize()[source]¶
Generate a new channel realzation.
Abstract subroutine of
realize
. EachChannel
is required to implement their own_realize()
method.Returns: A new channel realization.
- Return type:
- serialize(process)[source]¶
Serialize this object’s state.
Objects cannot be serialized directly, instead a
Factory
must be instructed to carry out the serialization process.- Parameters:
process (
SerializationProcess
) – The current stage of the serialization process. This object is generated by theFactory
and provides an interface to serialization methods supporting multiple backends.- Return type:
- property decorrelation_distance: float¶
Distance in meters at which the channel decorrelates.
- Raises:
ValueError – If the decorrelation distance is set to a negative value.
- property delay: float | Tuple[float, float]¶
Assumed propagation delay in seconds.
If set to a scalar floating point, the delay is assumed to be constant. If set to a tuple of two floats, the tuple values indicate the mininum and maxium values of a uniform distribution, respectively.
- Raises:
ValueError – If the delay is set to a negative value.
ValueError – If the delay is set to a tuple of two values where the first value is greater than the second value.
- class RandomDelayChannelRealization(consistent_realization, delay_variable, delay, model_propagation_loss, sample_hooks, gain)[source]¶
Bases:
DelayChannelRealization
Realization of a random delay channel.
Generated from
RandomDelayChannel's
_realize
routine.- Parameters:
- classmethod Deserialize(process)[source]¶
Deserialize an object’s state.
Objects cannot be deserialized directly, instead a
Factory
must be instructed to carry out the deserialization process.- Parameters:
process (
DeserializationProcess
) – The current stage of the deserialization process. This object is generated by theFactory
and provides an interface to deserialization methods supporting multiple backends.- Return type:
- Returns:
The deserialized object.
- serialize(process)[source]¶
Serialize this object’s state.
Objects cannot be serialized directly, instead a
Factory
must be instructed to carry out the serialization process.- Parameters:
process (
SerializationProcess
) – The current stage of the serialization process. This object is generated by theFactory
and provides an interface to serialization methods supporting multiple backends.- Return type:
- property delay: float | Tuple[float, float]¶
Assumed propagation delay in seconds.
If set to a scalar floating point, the delay is assumed to be constant. If set to a tuple of two floats, the tuple values indicate the mininum and maxium values of a uniform distribution, respectively.
- Raises:
ValueError – If the delay is set to a negative value.
ValueError – If the delay is set to a tuple of two values where the first value is greater than the second value.