Spatial Delay Channel#

class SpatialDelayChannel(alpha_device=None, beta_device=None, gain=1.0, model_propagation_loss=True, **kwargs)[source]#

Bases: DelayChannelBase[SpatialDelayChannelRealization]

Delay channel based on spatial relations between the linked devices.

The spatial delay channel requires both linked devices to specify their assumed positions. 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 between the two devices is given by

\[\overline{\tau} = \frac{\|\mathbf{p}^{(\alpha)} - \mathbf{p}^{(\beta)}\|_2}{c_0}\]

and depends on the distance between the two devices located at positions \(\mathbf{p}^{(\alpha)}\) and \(\mathbf{p}^{(\beta)}\). The sensor array response \(\mathbf{A}^{(\alpha,\beta)}\) depends on the device’s relative orientation towards each other.

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:
  • alpha_device (SimulatedDevice, optional) – First device linked by the DelayChannelBase instance that generated this realization.

  • beta_device (SimulatedDevice, optional) – Second device linked by the DelayChannelBase instance that generated this realization.

  • gain (float, optional) – Linear power gain factor a signal experiences when being propagated over this realization. \(1.0\) by default.

  • model_propagation_loss (bool, optional) – Should free space propagation loss be modeled? Enabled by default.

  • **kawrgsChannel base class initialization arguments.

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:

SpatialDelayChannelRealization

Returns: The recalled realization instance.