Random Delay Channel#
- class RandomDelayChannel(delay, *args, **kwargs)[source]#
Bases:
DelayChannelBase
[RandomDelayChannelRealization
]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
\[\mathbf{H}(t,\tau) = \frac{1}{4\pi f_\mathrm{c}^{(\alpha)}\overline{\tau}} \mathbf{A}^{(\alpha,\beta)} \delta(\tau - \overline{\tau})\ \text{.}\]The assumed propagation delay is drawn from the uniform distribution
\[\overline{\tau} \sim \mathcal{U}(\tau_{\mathrm{Min}}, \tau_{\mathrm{Max}})\]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(alpha_device, beta_device) 12 13# Specify the waveform and postprocessing to be used by the link 14link.waveform = RRCWaveform( 15 symbol_rate=1e8, oversampling_factor=2, num_data_symbols=1000, 16 num_preamble_symbols=10, pilot_rate=10) 17link.waveform.channel_estimation = SCLeastSquaresChannelEstimation() 18link.waveform.channel_equalization = SCZeroForcingChannelEqualization() 19link.waveform.synchronization = SCCorrelationSynchronization() 20 21# Configure a simulation to evaluate the link's BER and sweep over the receive SNR 22simulation.add_evaluator(BitErrorEvaluator(link, link)) 23simulation.new_dimension('snr', dB(20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40)) 24 25# Run simulation and plot resulting SNR curve 26simulation.num_samples = 1000 27result = simulation.run() 28result.plot()
- Parameters:
delay (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.
*args –
Channel
base class initialization parameters.**kwargs –
Channel
base class initialization parameters.
- recall_realization(group)[source]#
Recall a realization of this channel type from its HDF serialization.
- Parameters:
group (h5py.Group) – HDF group to which the channel realization was serialized.
- Return type:
Returns: The recalled realization instance.
- 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.