Simplex Link¶
Simplex links represent the signal processing chain of a unidirectional communication betweeen a transmitting device and a receiving device, implementing the digital signal processing before digital-to-analog conversion and after analog-to-digital conversion, respectively. They are a combination of a Transmitting Modem and a Receiving Modem.
After a SimplexLink
is added as a
type of Transmitter
to a Device
,
a call to Device.transmit
will be delegated
to TransmittingModem._transmit()
.
Similarly, after a SimplexLink
is added as a
type of Receiver
to a Device
,
a call to Device.receive
will be delegated
to ReceivingModem._receive()
1# Initialize a new simulation considering a single device
2simulation = Simulation()
3tx_device = simulation.new_device(carrier_frequency=1e10)
4rx_device = simulation.new_device(carrier_frequency=1e10)
5
6# Configure the link modeling the devices' transmit DSP
7link = SimplexLink(tx_device, rx_device)
8
9# Configure the links's waveform
10waveform = RootRaisedCosineWaveform(
11 oversampling_factor=4,
12 symbol_rate=1e6,
13 num_preamble_symbols=16,
14 num_data_symbols=32,
15 modulation_order=64,
16)
17link.waveform = waveform
For a detailed description of the transmit and receive routines, refer to the Transmitting Modem and a Receiving Modem of the base classes.
The barebone configuration can be extend by additional components such as
Custom Bit Sources
,
Synchronization
,
Stream Precoding
,
Channel Estimation
,
Symbol Precoding
,
Channel Equalization
and
Bit Encoders
:
1# Configure the link modeling the devices' transmit DSP
2link = SimplexLink(tx_device, rx_device)
3
4# Configure the links's waveform
5waveform = RootRaisedCosineWaveform(
6 oversampling_factor=4,
7 symbol_rate=1e6,
8 num_preamble_symbols=16,
9 num_data_symbols=32,
10 modulation_order=64,
11)
12link.waveform = waveform
13
14# Configure a custom bits source for the modem
15link.bits_source = RandomBitsSource(seed=42)
16
17# Configure the waveform's synchronization routine
18link.waveform.synchronization = SingleCarrierCorrelationSynchronization()
19
20# Add a custom stream precoding to the modem
21link.transmit_stream_coding[0] = ConventionalBeamformer()
22link.receive_stream_coding[0] = ConventionalBeamformer()
23
24# Add a custom symbol precoding to the modem
25link.precoding[0] = DFT()
26
27# Configure the waveform's channel estimation routine
28link.waveform.channel_estimation = SingleCarrierLeastSquaresChannelEstimation()
29
30# Configure the waveform's channel equalization routine
31link.waveform.channel_equalization = SingleCarrierZeroForcingChannelEqualization()
32
33# Add forward error correction encodings to the transmitted bit stream
34link.encoder_manager.add_encoder(RepetitionEncoder(32, 3))
35link.encoder_manager.add_encoder(BlockInterleaver(192, 32))
- class SimplexLink(transmitting_device, receiving_device, *args, bits_source=None, selected_transmit_ports=None, selected_receive_ports=None, **kwargs)[source]¶
Bases:
TransmittingModem
,ReceivingModem
Convenience class to manage a simplex communication link between two dedicated devices.
- Parameters:
transmitting_device (Device) – Transmitting device.
receiving_device (Device) – Receiving device.
bits_source (BitsSource, optional) – Source configuration of communication bits transmitted by this modem. Bits are randomly generated by default.
selected_transmit_ports (Sequence[int] | None) – Indices of antenna ports selected for transmission from the operated
Device's
antenna array. If not specified, all available ports will be considered.selected_receive_ports (Sequence[int] | None) – Indices of antenna ports selected for reception from the operated
Device's
antenna array. If not specified, all available ports will be considered.*args – Modem initialization parameters. Refer to
TransmittingModem
andReceivingModem
for further details.**kwargs – Modem initialization parameters. Refer to
TransmittingModem
andReceivingModem
for further details.
- property reference: Device | None¶
Reference transmitter for this receiver.
- Returns:
A handle to the referenced device. None if the device was not specified.
- yaml_tag: Optional[str] = 'SimplexLink'¶
YAML serialization tag