comm.mmwave28 module

Module mmwave28 contains the signal, channel, and various transceivers that operate at 28GHz millimeter wave spectrum. The relationship among them is given in the following table:

Channel

Signal

Transceiver

MMWave28GHz

MMWaveSignal

Transceiver28GHz

Transceiver28GHzOmni

Transceiver28GHzSteered

Note

  • Created by: CH Foh (2021)

List of Classes

MMWaveSignal

This is the mmWave signal specification for transmission.

Channel28GHz

It describes the channel model for 28GHz transmission.

Transceiver28GHz

This is a mmWave transceiver with beamforming. The receiver signal will be stronger at its pointing direction, and become weaker away from the pointing direction.

Transceiver28GHzOmni

This is a mmWave transceiver with omni-directional transmission.

Transceiver28GHzSteered

This is a mmWave transceiver with tracking capability. It assumes tracking of a user is possible, and so it can always steer its pointing direction towards the receiver.


class comm.mmwave28.MMWaveSignal(source, freq, tx_power)

Bases: comm.signalwave.QualityBasedSignal

This is an implementation of signal for mmWave communication. It extends comm.signalwave.QualityBasedSignal to inherit quality and add more properties related to mmWave signal properties.

Attributes
rx_powerfloat

Storing the received power after propagation (mainly pathloss and fading).

pathlossfloat

Storing impact (in dB) of pathloss after propagation.

fadingfloat

Storing impact (in dB) of the channel fading after propagation.

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. It must be reimplemented and super() must be called.

Parameters
sourcecomm.transceiver.BaseTransceiver subclass

To specify which transceiver is transmitting this signal.

freqfloat

The carrier frequency of this signal.

tx_powerfloat

The transmit power in dBm.

copy()

See the description in the base class for more information.

Returns
comm.signalwave.MMWaveSignal

Return a copy of this signal.

class comm.mmwave28.Channel28GHz(slow_fading=(3.2, 8.6))

Bases: comm.channel.BaseChannel

This is a subclass of BaseChannel implementing a millimeter wave channel radiation.

The channel uses comm.signalwave.MMWaveSignal to record the received signal power. If the received power is higher than the threshold, then the signal is considered delivered successfully. Otherwise, the signal cannot be detected successfully and is dropped at the receiver side.

By default, this class uses 3GPP Band n257 (28GHz) for Urban Micro (UMi). The pathloss for 28GHz UMi setting is given by the following (see also Equation (10) in [c1]). We use CI model in Equation (2) in [c2], which is the same as CIF model in (4) in [c2] by setting b=0. The parameters for the pathloss are based on Table I in [c2].

Pathloss: \(PL(d) = 32.4 + 20 log_{10}(f_c) + 10n log_{10}(d) + X_g\)

  • \(f_c\) is the carrier frequency in GHz.

  • \(d\) is the distance between the transmitter and receiver. It is also used to decide whether a propagation is LOS or non-LOS, as described in Table I of Yan et al.

  • \(X_g\) is the slow and fast fading. For slow fading, it is log-normal shadowing, which is a Normal Distribution with mean = 0, variance = \(\sigma^2\). Based on Table I in Sun et al, 28 GHz NLOS \(\sigma=8.6\) dB, LOS is 3.2 dB. For fast fading, it can be Rayleigh or Racian. However, we do not include fast fading here at the moment.

References

c1

Yan et al, “Stable Beamforming With Low Overhead for C/U-Plane Decoupled HSR Wireless Networks,” IEEE Transactions on Vehicular Technology, vol. 67, no. 7, pp. 6075-6086, July 2018.

c2(1,2,3)

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.

Attributes
freqfloat, default=28

The frequency of this channel. This class is designed to describe the signal propagation of 28GHz, however, the formula can be used for similar frequencies around 28GHz.

Methods

do_propagation(signal)

This method derives the received signal after its propagation.

get_range(threshold)

This method returns the coverage radius.

__init__(slow_fading=(3.2, 8.6))

This is the constructor.

Parameters
slow_fadingTuple (float,float), optional, default = (3.2,8.6) in dB

The slow fading standard deviation, \(\sigma\), setup for LOS and NLOS. The tuple specifies (\(\sigma\) for LOS, \(\sigma\) for NLOS). The default setting is taken from Yan et al. Setting it to (0,0) will disable the slow_fading.

get_range(threshold)

This method returns the coverage radius. See also the base class description. For this subclass, the range is decided based on the SNR threshold which is set by the transceiver.

Parameters
thresholdfloat

The pathloss threshold which should be determined by received signal power with no pathloss minus SNR_threshold and minus Noise_Power.

do_propagation(signal: comm.mmwave28.MMWaveSignal)comm.mmwave28.MMWaveSignal

This method derives the received signal after its propagation.

In this implementation, signal is used as the data structure for inputs and outputs. signal contains distance and LOS_dir class properties for this method to read and derive the propagation. It also contains pathloss and fading class properties for this method to recorded the impact of pathloss (in dB) and channel fading (in dB) after the propagation.

Parameters
signalcomm.signalwave.MMWaveSignal

The transmitted signal. This instance will be modified appropriately within this method. The modification describes how the signal would be attenuated and distorted.

Returns
comm.signalwave.MMWaveSignal

The received signal instance.

class comm.mmwave28.Transceiver28GHz(node, freq, channel, bandwidth=50000000.0, tx_power=30, antenna_height=5, pointing_dir=0, gain_tx=12, gain_rx=0, beam_3dB=0.6108652381980153, noise_figure=7, snr_threshold=- 5)

Bases: comm.transceiver.BaseTransceiver

This is a class providing functions to simulate transceiver operations of a mmWave. When constructing the class, you may specify a tx-rx setting for the transceiver.

This transceiver is designed to work on mmWave, e.g. 3GPP Band n257 (28GHz). For communication, the transceiver creates a comm.signalwave.MMWaveSignal and performs transmissions (unicast, broadcast or multicast). After which, the receiver will detect the signal and perform a series of calculation to judge whether the signal can be decoded successfully. Some important settings are:

  • Carrier freq \(f_c\) in GHz, e.g. 3GPP Band n257 (28GHz).

  • Channel bandwidth \(B\), default is the smallest bandwidth = 50MHz.

  • Transmit power \(P_{tx}\) = 30 dBm.

  • Path loss \(PL(d)\), see comm.channel.Channel28HGz, where \(d\) is the distance between the two nodes. If \(d_{hor}\) is the horizontal distance, \(d_{min}\) is the antenna height, then \(d=\sqrt{d_{hor}^2+d_{min}^2}\).

  • Receiver antenna gain \(G_{rx}\) is a constant.

  • Transmitter antenna gain \(G_{tx}\) is a constant.

  • Beamforming gain \(G_{bf}(Δa)\) = \((2π/θ_{3dB}) 10^{(-0.1η)(Δa/θ_{3dB})^2}\):

    • \(Δa\) is the difference between beam pointing angle and angle to vehicle.

    • \(θ_{3dB}\) is the 3 dB beamwidth. Default is a 6 sector setting with \(θ_{3dB}=35π/180\) rad (or 35 degree) [t2].

    • \(η\) is a constant, \(η = 12\).

    • see also: Equation (4) in [t1].

  • The received Signal_Power = \(P_{tx} - PL(d) + G_{bf}(Δa) + G_{rx} + G_{tx}\)

  • The overall Noise_Power at the receiver is \(NF + N_0\) = -90.2 dBm.

    • Noise Figure at receiver \(NF\) = 7 dB.

    • Thermal Noise \(N_0\) = -174 dBm/Hz or about 3.981e-18 mW per Hz. So for 50 MHz, \(N_0\) = -174 dBm + \(10 log{10}(50\cdot 10^6)\) = -97.2 dBm/50MHz.

  • Receiver SNR (in dB) = Signal_Power - Noise_Power

  • Minimum SNR threshold is a constant, default is -5 dB. Receiver SNR lower than the threshold will be considered undecodeable and the signal will be dropped.

References

t1

Vakilian et al, “Effects of angle-of-arrival estimation errors, angular spread and antenna beamwidth on the performance of reconfigurable SISO systems,” IEEE Pac. Rim Conf. Commun. Comput. Signal Process, Canada, Aug. 2011.

t2

3GPP, “Spatial channel model for multiple input multiple output (MIMO) simulations,” Tech. Rep., Sept. 2003.

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

See also the base class for description, this method allows a receiving node to check if a receiving signal can be successfully detected and decoded.

create_signal()

Create a signal for transmissioin.

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 on the channel, 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, freq, channel, bandwidth=50000000.0, tx_power=30, antenna_height=5, pointing_dir=0, gain_tx=12, gain_rx=0, beam_3dB=0.6108652381980153, noise_figure=7, snr_threshold=- 5)

This is the constructor.

Parameters
nodenode.node.BaseNode subclass

The node that contains the transceiver.

channelcomm.channel.Channel28HGz

The channel that the transceiver uses.

bandwidthint in Hz, optional, default = 50 MHz

The channel bandwidth.

tx_powerfloat in dBm, optional, default = 30 dBm

The transmit power.

antenna_heightfloat in meter, optional, default = 5 m

Height of the antenna.

pointing_dirfloat in degree, optional, default = 0 (or north)

The pointing direction (azimuth angle in degree) of the antenna.

gain_txfloat in dBi, optional, default = 12 dBi

The transmitter antenna gain. This is different from the beamforming gain.

gain_rxfloat in dBi, optional, default = 0 dBi

The receiver antenna gain.

beam_3dBfloat in rad, optional, default = 35π/180 for 6 sectors

The 3dB beamwidth. It is the width that the gain is 3dB.

noise_figurefloat in dB, optional, default = 7 dB

Noise figure at the receiver.

snr_thresholdfloat in dB, optional, default = -5 dB

The SNR threshold that allows the receiver to decode the signal with reasonably high success rate.

create_signal()comm.mmwave28.MMWaveSignal

Create a signal for transmissioin.

multicast(signal: comm.mmwave28.MMWaveSignal, node_list)

This method allows a node to perform a multicast on the channel, 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. Note that this method can be used for unicast by putting a single node in node_list.

Parameters
signalcomm.signalwave.MMWaveSignal

The signal to be transmitted. Use create_signal() method to create one.

node_lista list of node.node.BaseNode subclass

The list containing the nodes to receive the multicast signal

Returns
A list of tuple (node.node.BaseNode, comm.signalwave.MMWaveSignal)

It returns a list of (node,signal) that the node can decode the signal. signal.quality contains the receiving SNR in dB.

can_detect(signal) → bool

See also the base class for description, this method allows a receiving node to check if a receiving signal can be successfully detected and decoded.

In this implementation, the condition for successful decoding is:

  • Received_Signal_Power + \(G_{rx}\) + \(G_{bf}(Δa)\) - Noise_Power >= SNR_threshold

The received signal power is already recorded in the signal. The receiver needs to add beamforming gain. The noise power is a constant which is already calculated during the class construction. The SNR threshold is a constant specified during the class construction.

class comm.mmwave28.Transceiver28GHzOmni(node, freq, channel, bandwidth=50000000.0, tx_power=30, antenna_height=5, gain_tx=12, gain_rx=0, noise_figure=7, snr_threshold=- 5)

Bases: comm.mmwave28.Transceiver28GHz

This is a transceiver class providing functions to simulate mmWave omni-directional transmission. It is based on comm.transceiver.Transceiver28GHz where beamforming gain is zero regardless of the difference between beam pointing angle and angle to the receiver.

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

See also the base class for description, this method allows a receiving node to check if a receiving signal can be successfully detected and decoded.

create_signal()

Create a signal for transmissioin.

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 on the channel, 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, freq, channel, bandwidth=50000000.0, tx_power=30, antenna_height=5, gain_tx=12, gain_rx=0, noise_figure=7, snr_threshold=- 5)

This is the constructor for mmWave used for omni-directional mode.

class comm.mmwave28.Transceiver28GHzSteered(node, freq, channel, bandwidth=50000000.0, tx_power=30, antenna_height=5, gain_tx=12, gain_rx=0, beam_3dB=0.6108652381980153, noise_figure=7, snr_threshold=- 5)

Bases: comm.mmwave28.Transceiver28GHz

This is a transceiver class providing functions to simulate mmWave transmission that can perfectly steer its beam to point perfectly to the receiver. It is based on comm.transceiver.Transceiver28GHz and its beamforming gain is always at the peak indicating that the beam is always pointing to the receiver. Likewise, it can steer its beam to receive the transmission with beamforming gain.

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

See also the base class for description, this method allows a receiving node to check if a receiving signal can be successfully detected and decoded.

create_signal()

Create a signal for transmissioin.

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 on the channel, 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, freq, channel, bandwidth=50000000.0, tx_power=30, antenna_height=5, gain_tx=12, gain_rx=0, beam_3dB=0.6108652381980153, noise_figure=7, snr_threshold=- 5)

This is the constructor for mmWave used for steered beam mode.