comm.t28 module¶
Module t28 is a demonstration on how to use
UserTransceiver to build own transceiver model.
Users can learn how UserTransceiver can be
used from this demonstration, or use this module to build further
features.
The module contains two classes Signal and Transceiver:
Signal class: to hold the signal information.
Transceiver class: a transceiver design using 28GHz. The transceiver uses
UserTransceiverto implement a specific transceiver design. In this design, the signal radiates within the predefined beamwidth towards a given pointing angle.
The pathloss is based on [1] which is the 3GPP Band n257 (28GHz) for Urban Micro (UMi). The parameters used in the model are taken from Table I in [1].
Beam coverage has a shape of a sector. Signals radiate to all directions within the beamwidth with the same gains and behaviour. Outside of the beamwidth, no signal is radiated. Within the beamwidth, the antenna gain is the same, and no signal appears outside of the beanwidth. See example5a.py for the radiation of this transceiver model.
To create this transceiver design, we did the following:
created a Signal class (or reuse an existing one).
in the constructor, added any attribute needed for the design
in copy() method, made sure all attributes were copied over
create a Transceiver class.
in the constructor, performed all necessary initialization
in create_signal() method, created the Signal object
in can_detect() method, implemented the logic to decide whether the input signal could be detected. This method will be called at the receiver side.
Note
[1] Sun et al, “Investigation of Prediction Accuracy, Sensitivity, and Parameter Stability of Large-Scale Propagation Path Loss Models for 5G Wireless Communications,” IEEE Transactions on Vehicular Technology, vol. 65, no. 5, pp. 2843-2860, May 2016.
Note
Created by: CH Foh (2023)
-
class
comm.t28.Signal(source, freq, tx_power)¶ Bases:
comm.signalwave.QualityBasedSignalThis is an implementation of signal for mmWave communication.
- Attributes
- freqfloat
Carrier frequency.
- source
node.node.BaseNodesubclass The source node that transmitted this signal.
- tx_powerfloat
The transmit power in dBm.
- rx_powerfloat, default is None
The received power in dBm, this will be filled automatically after it detects a transmission triggered by unicast(), multicast() or broadcast().
Methods
add_info(key, value)Use this method to add an info to the signal that can be retrieved later.
copy()See the description in the base class for more information.
get_info(key)Use this method to retrieve an earlier added info.
-
__init__(source, freq, tx_power)¶ This is the constructor.
-
copy()¶ See the description in the base class for more information.
-
class
comm.t28.Transceiver(node, ant_mode=0, beam_width=60, azimuth=0, bandwidth=50000000.0, tx_power=20, SNR_threshold=- 5, tx_gain=12, rx_gain=0, noise_fig=7)¶ Bases:
comm.transceiver.UserTransceiverThis class specifies the transceiver model assuming 28GHz mmWave transmission.
For the pathloss, we implement the model presented in [1] which is the 3GPP Band n257 (28GHz) for Urban Micro (UMi). The parameters used in the model are taken from Table I in [1].
Note
[1] Sun et al, “Investigation of Prediction Accuracy, Sensitivity, and Parameter Stability of Large-Scale Propagation Path Loss Models for 5G Wireless Communications,” IEEE Transactions on Vehicular Technology, vol. 65, no. 5, pp. 2843-2860, May 2016.
The antenna can operate in three modes set by ant_mode:
Mode 0: (default mode) omnidirectional
Mode 1: fixed directional transmission, omnidirectional reception
Mode 2: fixed directional transmission and reception
For directional, we assume sectored radiation footprint where the antenna gain for all transmitting angles is the same within the beam width, and no signal outside of the beam width. The beam width is given by beam_width and the point angle is given by azimuth.
- Parameters
- node
node.node.BaseNodesubclass The node where this transceiver belongs to
- ant_modeint, optional, default is 0 (default)
Antenna mode of the transceiver, 0 means omnidirectional, 1 means directional transmitter and omnidirectional receiver, 2 means directional transmitter and receiver.
- beam_widthint or float
The beam width of the directional transmission (in degree). This is common to both transmitter and receiver. For omnidirectional transceiver, this input is not used.
- azimuthint, float
The pointing angle (in degree) of the antenna, 0 degree means north and increases clockwise. For omnidirectional transceiver, this input is not used.
- bandwidthint, optional
The bandwidth used for this transceiver in Hz
- tx_powerint or float, optional
The transmit power in dBm.
- SNR_thresholdint or float, optional
The SNR threshold for correct reception of the signal (in dB).
- tx_gainint or float, optional
The transmitter antenna gain, should be larger for directional transmission and smaller for omnidirectional.
- rx_gainint or float, optional
The receiver antenna gain, should be larger for directional reception and smaller for omnidirectional.
- noise_figint or float, optional
The noise figure setting.
- node
Methods
broadcast(signal)This method allows a node to perform a broadcast on the channel, and the method returns a list of tuple (node,received_signal) that the broadcast signal can be decoded, or None if no node can decode the signal.
can_detect(sent_signal)A callback function triggered by a transmission, use this method to check whether the input signal can be detected.
Create a signal for transmission.
get_carrier_freq()Return the carrier frequency used by the channel.
get_property([property])The method returns the property of the transceiver.
get_type()This method returns the type of the transceiver.
multicast(signal, node_list)This method allows a node to perform a multicast, and the method returns a list of tuple (node,received_signal) that the multicast signal can be decoded, or None if no node can decode the signal.
set_property(key, value)Set a property to this transceiver.
unicast(signal, node)This method allows a node to perform a unicast on the channel, and the method returns a received_signal if the signal can be decoded, or None.
-
__init__(node, ant_mode=0, beam_width=60, azimuth=0, bandwidth=50000000.0, tx_power=20, SNR_threshold=- 5, tx_gain=12, rx_gain=0, noise_fig=7)¶ This is the constructor.
-
create_signal() → comm.t28.Signal¶ Create a signal for transmission.
-
can_detect(sent_signal) → bool¶ A callback function triggered by a transmission, use this method to check whether the input signal can be detected.
When unicast() is called, the signal is copied and sent to each potential receiver via this method. The receiver must then decide whether this signal can be detected successfully. If so, return True, otherwise False.