Compound Module Radio

Package: inet.physicallayer.common.packetlevel
File: src/inet/physicallayer/common/packetlevel/Radio.ned

The radio model describes the physical device that is capable of transmitting and receiving signals on the medium. It contains an antenna model, a transmitter model, a receiver model, and an energy consumer model.

The radio model supports changing radio mode, transmission power, or bitrate via ConfigureRadioCommand, or with direct C++ function calls.

switchingTimes parameter should be regarded as a 5x5 matrix:

OFF SLEEP RECEIVER TRANSMITTER TRANSCEIVER OFF 0 0 0 0 0 SLEEP 0 0 0 0 0 RECEIVER 0 0 0 0 0 TRANSMITTER 0 0 0 0 0 TRANSCEIVER 0 0 0 0 0

The corresponding RadioMode pairs contain the time needed to switch from one state to another. For example: the 6th number identifies the time needed to switch from SLEEP to OFF.

The first entry of the switchingTimes string indicates the time-related metric prefix and it MUST be s, ms or ns.

IAntenna ITransmitter IReceiver IEnergyConsumer

Usage diagram:

The following diagram shows usage relationships between types. Unresolved types are missing from the diagram.

Inheritance diagram:

The following diagram shows inheritance relationships for this type. Unresolved types are missing from the diagram.

Known subclasses:

Name Type Description
IdealRadio compound module

This radio model provides a very simple but fast and predictable physical layer behavior. It must be used in conjunction with the IdealRadioMedium model.

Ieee802154UWBIRRadio compound module (no description)
NarrowbandRadioBase compound module

This module servces as a base module for narrowband radio models.

Parameters:

Name Type Default value Description
antennaType string

NED type of the antenna model

transmitterType string

NED type of the transmitter model

receiverType string

NED type of the receiver model

energyConsumerType string ""

NED type of the energy consumer model

radioMediumModule string "radioMedium"

module path of the medium module where this radio communicates

energySourceModule string ""

module path of the energy source module which provides energy to the radio

switchingTimes string "ms 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0"

time parameters to switch between radio modes

separateTransmissionParts bool false

when enabled the transmission of preamble, header and data part are simulated separately

separateReceptionParts bool false

when enabled the reception of preamble, header and data part are simulated separately

displayCommunicationRange bool false

if true communication range is displayed as a blue circle around the node

displayInterferenceRange bool false

if true interference range is displayed as a gray circle around the node

Properties:

Name Value Description
class Radio
display i=block/wrxtx

Gates:

Name Direction Size Description
upperLayerIn input
upperLayerOut output
radioIn input

Signals:

Name Type Unit
receptionStateChanged long
bitErrorRate
radioModeChanged long
transmittedSignalPartChanged long
packetReceivedFromUpper cPacket
receivedSignalPartChanged long
packetErrorRate
symbolErrorRate
packetSentToUpper cPacket
transmissionStateChanged long
listeningChanged
minSNIR

Statistics:

Name Title Source Record Unit Interpolation Mode
receptionState Radio reception state receptionStateChanged count, vector sample-hold
bitErrorRate Bit error rate bitErrorRate histogram
radioMode Radio mode radioModeChanged count, vector sample-hold
packetErrorRate Packet error rate packetErrorRate histogram
symbolErrorRate Symbol error rate symbolErrorRate histogram
transmissionState Radio transmission state transmissionStateChanged count, vector sample-hold
minSNIR Min SNIR minSNIR histogram

Source code:

//
// The radio model describes the physical device that is capable of transmitting
// and receiving signals on the medium. It contains an antenna model, a
// transmitter model, a receiver model, and an energy consumer model.
//
// The radio model supports changing radio mode, transmission power, or bitrate
// via ~ConfigureRadioCommand, or with direct C++ function calls.
//
// switchingTimes parameter should be regarded as a 5x5 matrix:
//
//               OFF SLEEP RECEIVER TRANSMITTER TRANSCEIVER
// OFF           0 0 0 0 0
// SLEEP         0 0 0 0 0
// RECEIVER      0 0 0 0 0
// TRANSMITTER   0 0 0 0 0
// TRANSCEIVER   0 0 0 0 0
//
// The corresponding RadioMode pairs contain the time needed to
// switch from one state to another.
// For example: the 6th number identifies the time needed to switch
// from SLEEP to OFF.
//
// The first entry of the switchingTimes string indicates the
// time-related metric prefix and it MUST be s, ms or ns.
//
module Radio like IRadio
{
    parameters:
        string antennaType;                      // NED type of the antenna model
        string transmitterType;                  // NED type of the transmitter model
        string receiverType;                     // NED type of the receiver model
        string energyConsumerType = default(""); // NED type of the energy consumer model

        string radioMediumModule = default("radioMedium"); // module path of the medium module where this radio communicates
        string energySourceModule = default("");           // module path of the energy source module which provides energy to the radio

        string switchingTimes = default("ms 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0"); // time parameters to switch between radio modes

        bool separateTransmissionParts = default(false); // when enabled the transmission of preamble, header and data part are simulated separately
        bool separateReceptionParts = default(false);    // when enabled the reception of preamble, header and data part are simulated separately 

        bool displayCommunicationRange = default(false); // if true communication range is displayed as a blue circle around the node
        bool displayInterferenceRange = default(false);  // if true interference range is displayed as a gray circle around the node

        *.energySourceModule = default(absPath(energySourceModule));

        @class(Radio);
        @display("i=block/wrxtx");

        @signal[packetSentToUpper](type=cPacket);
        @signal[packetReceivedFromUpper](type=cPacket);
        @signal[radioModeChanged](type=long);
        @signal[listeningChanged];
        @signal[receptionStateChanged](type=long);
        @signal[transmissionStateChanged](type=long);
        @signal[receivedSignalPartChanged](type=long);
        @signal[transmittedSignalPartChanged](type=long);
        @signal[minSNIR];
        @signal[packetErrorRate];
        @signal[bitErrorRate];
        @signal[symbolErrorRate];

        @statistic[radioMode](title="Radio mode"; source=radioModeChanged; record=count,vector; interpolationmode=sample-hold);
        @statistic[receptionState](title="Radio reception state"; source=receptionStateChanged; record=count,vector; interpolationmode=sample-hold);
        @statistic[transmissionState](title="Radio transmission state"; source=transmissionStateChanged; record=count,vector; interpolationmode=sample-hold);

        @statistic[minSNIR](title="Min SNIR"; source=minSNIR; record=histogram);
        @statistic[packetErrorRate](title="Packet error rate"; source=packetErrorRate; record=histogram);
        @statistic[bitErrorRate](title="Bit error rate"; source=bitErrorRate; record=histogram);
        @statistic[symbolErrorRate](title="Symbol error rate"; source=symbolErrorRate; record=histogram);

    gates:
        input upperLayerIn @labels(ILinkLayerFrame/down);
        output upperLayerOut @labels(ILinkLayerFrame/up);
        input radioIn @labels(IRadioFrame);

    submodules:
        antenna: <antennaType> like IAntenna {
            parameters:
                @display("p=100,50");
        }
        transmitter: <transmitterType> like ITransmitter {
            parameters:
                @display("p=100,150");
        }
        receiver: <receiverType> like IReceiver {
            parameters:
                @display("p=100,250");
        }
        energyConsumer: <energyConsumerType> like IEnergyConsumer if energyConsumerType != "" {
            parameters:
                @display("p=100,350");
        }
}