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.QualityBasedSignalThis is an implementation of signal for mmWave communication. It extends
comm.signalwave.QualityBasedSignalto 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
- source
comm.transceiver.BaseTransceiversubclass To specify which transceiver is transmitting this signal.
- freqfloat
The carrier frequency of this signal.
- tx_powerfloat
The transmit power in dBm.
- source
-
copy()¶ See the description in the base class for more information.
- Returns
comm.signalwave.MMWaveSignalReturn a copy of this signal.
-
class
comm.mmwave28.Channel28GHz(slow_fading=(3.2, 8.6))¶ Bases:
comm.channel.BaseChannelThis is a subclass of BaseChannel implementing a millimeter wave channel radiation.
The channel uses
comm.signalwave.MMWaveSignalto 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
- signal
comm.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.
- signal
- Returns
comm.signalwave.MMWaveSignalThe 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.BaseTransceiverThis 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.MMWaveSignaland 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}\):
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 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
- node
node.node.BaseNodesubclass The node that contains the transceiver.
- channel
comm.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.
- node
-
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
- signal
comm.signalwave.MMWaveSignal The signal to be transmitted. Use create_signal() method to create one.
- node_lista list of
node.node.BaseNodesubclass The list containing the nodes to receive the multicast signal
- 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.
- A list of tuple (
-
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.Transceiver28GHzThis is a transceiver class providing functions to simulate mmWave omni-directional transmission. It is based on
comm.transceiver.Transceiver28GHzwhere 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.Transceiver28GHzThis 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.Transceiver28GHzand 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.
-