Receiving Modem¶
Receiving modems represent the digital signal processing operations performed within a communication system for the point of analog-to-digital conversion up to the point of decoding the received bits.
After a ReceivingModem
is added as a
type of Receiver
to a Device
,
a call to Device.receive
will be delegated
to ReceivingModem._receive()
:
Initially, the ReceivingModem
will synchronize incoming
Signals
, partitionin them into individual frames.
For each frame, the ReceiveStreamCoding
configured by the receive_stream_coding
will be used to decode the incoming base-band sample streams from each AntennaPort
.
Afterwards, each decoded stream will be demodulated
,
the channel will be estimated
and
the resulting StatedSymbols
will be picked
.
The StatedSymbols
will then be decoded
and equalized
.
Finally, the Symbols
will be unmapped
and the error correction will be decoded
.
Note that, as a bare minimum, only the waveform
has to be configured for a fully functional ReceivingModem
.
The following snippet shows how to configure a ReceivingModem
with a RootRaisedCosineWaveform
wavform implementing a
CommunicationWaveform
:
1# Initialize a new simulation considering a single device
2simulation = Simulation()
3device = simulation.new_device(carrier_frequency=1e10)
4
5# Configure the modem modeling the device's transmit DSP
6rx_modem = ReceivingModem(device=device)
7
8# Configure the modem's waveform
9waveform = RootRaisedCosineWaveform(
10 oversampling_factor=4,
11 symbol_rate=1e6,
12 num_preamble_symbols=16,
13 num_data_symbols=32,
14 modulation_order=64,
15)
16rx_modem.waveform = waveform
The barebone configuration can be extend by additional components such as
Synchronization
,
Stream Precoding
,
Channel Estimation
,
Symbol Precoding
,
Channel Equalization
and
Bit Encoders
:
1# Configure the waveform's synchronization routine
2rx_modem.waveform.synchronization = SingleCarrierCorrelationSynchronization()
3
4# Add a custom stream precoding to the modem
5rx_modem.receive_stream_coding[0] = ConventionalBeamformer()
6
7# Add a custom symbol precoding to the modem
8rx_modem.precoding[0] = DFT()
9
10# Configure the waveform's channel estimation routine
11rx_modem.waveform.channel_estimation = SingleCarrierLeastSquaresChannelEstimation()
12
13# Add a custom symbol precoding to the modem
14rx_modem.precoding[0] = DFT()
15
16# Configure the waveform's channel equalization routine
17rx_modem.waveform.channel_equalization = SingleCarrierZeroForcingChannelEqualization()
18
19# Add forward error correction encodings to the transmitted bit stream
20rx_modem.encoder_manager.add_encoder(RepetitionEncoder(32, 3))
21rx_modem.encoder_manager.add_encoder(BlockInterleaver(192, 32))
- class ReceivingModem(*args, device=None, selected_receive_ports=None, **kwargs)[source]¶
Bases:
ReceivingModemBase
[CommunicationWaveform
],Receiver
[CommunicationReception
],Serializable
Representation of a wireless modem exclusively receiving.
- Parameters:
device (Device, optional) – Device operated by the modem.
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 antenna ports will be considered.*args – Modem initialization parameters. Refer to
ReceivingModemBase
for further details.**kwargs – Modem initialization parameters. Refer to
ReceivingModemBase
for further details.
- property device: Device | None¶
Device this object is assigned to.
None
if this object is currently considered floating / unassigned.
- property power: float¶
Expected power of the received signal in Watts.
Note
Applies only to the signal-carrying parts of the transmission, silent parts shuch as guard intervals should not be considered.
- property receiving_device: Device | None¶
Receiving device operated by the modem.
None
if the device is unspecified.
- property transmitting_device: Device | None¶
Tranmsitting device operated by the modem.
None
if the device is unspecified.
- yaml_tag: Optional[str] = 'RxModem'¶
YAML serialization tag
- class ReceivingModemBase(*args, **kwargs)[source]¶
Bases:
Generic
[CWT
],BaseModem
[CWT
]Base class of signal processing algorithms receiving information.
- Parameters:
encoding (EncoderManager, optional) – Bit coding configuration. Encodes communication bit frames during transmission and decodes them during reception.
precoding (SymbolPrecoding, optional) – Modulation symbol coding configuration.
waveform (CWT, optional) – The waveform to be transmitted by this modem.
seed (int, optional) – Seed used to initialize the pseudo-random number generator.
- property receive_stream_coding: ReceiveStreamCoding¶
Stream MIMO coding configuration during signal reception.
Returns: Handle to the coding configuration.