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 UserTransceiver to 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.QualityBasedSignal

This is an implementation of signal for mmWave communication.

Attributes
freqfloat

Carrier frequency.

sourcenode.node.BaseNode subclass

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.UserTransceiver

This 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
nodenode.node.BaseNode subclass

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.

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_signal()

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.