Package: inet.physicallayer.wireless.common.radio.packetlevel
Radio
compound moduleThe 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 0The 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.
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 |
---|---|---|
Ieee802154UwbIrRadio | compound module | (no description) |
NarrowbandRadioBase | compound module |
This module servces as a base module for narrowband radio models. |
UnitDiskRadio | compound module |
This radio model provides a very simple but fast and predictable physical layer behavior. It must be used in conjunction with the UnitDiskRadioMedium model. |
Extends
Name | Type | Description |
---|---|---|
PhysicalLayerBase | simple module |
Module base for different physical layers. |
Parameters
Name | Type | Default value | Description |
---|---|---|---|
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 |
initialRadioMode | string | "off" | |
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 |
sendRawBytes | bool | false |
when true packets are serialized into a sequence of bytes before sending out |
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 |
---|---|---|
display | i=block/wrxtx | |
class | Radio |
Gates
Name | Direction | Size | Description |
---|---|---|---|
upperLayerIn | input | ||
upperLayerOut | output | ||
radioIn | input |
Signals
Name | Type | Unit |
---|---|---|
receptionStateChanged | long | |
radioModeChanged | long | |
transmissionStarted | ||
receptionEnded | ||
transmittedSignalPartChanged | long | |
receptionStarted | ||
packetReceivedFromUpper | cPacket | |
receivedSignalPartChanged | long | |
packetSentToUpper | cPacket | |
transmissionStateChanged | long | |
listeningChanged | ||
transmissionEnded |
Statistics
Name | Title | Source | Record | Unit | Interpolation Mode |
---|---|---|---|---|---|
receptionState | Radio reception state | receptionStateChanged | count, vector | sample-hold | |
bitErrorRate | Bit error rate | bitErrorRate(packetSentToUpper) | histogram | ||
radioMode | Radio mode | radioModeChanged | count, vector | sample-hold | |
packetErrorRate | Packet error rate | packetErrorRate(packetSentToUpper) | histogram | ||
symbolErrorRate | Symbol error rate | symbolErrorRate(packetSentToUpper) | histogram | ||
transmissionState | Radio transmission state | transmissionStateChanged | count, vector | sample-hold | |
minSnir | Min SNIR | minimumSnir(packetSentToUpper) | 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: // <pre> // 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 // </pre> // 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 extends PhysicalLayerBase like IRadio { parameters: 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 initialRadioMode @enum("off","sleep","receiver","transmitter","transceiver") = default("off"); 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 sendRawBytes = default(false); // when true packets are serialized into a sequence of bytes before sending out 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(this.energySourceModule)); @class(Radio); @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[transmissionStarted]; @signal[transmissionEnded]; @signal[receptionStarted]; @signal[receptionEnded]; @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=minimumSnir(packetSentToUpper); record=histogram); @statistic[packetErrorRate](title="Packet error rate"; source=packetErrorRate(packetSentToUpper); record=histogram); @statistic[bitErrorRate](title="Bit error rate"; source=bitErrorRate(packetSentToUpper); record=histogram); @statistic[symbolErrorRate](title="Symbol error rate"; source=symbolErrorRate(packetSentToUpper); record=histogram); submodules: antenna: <default("IsotropicAntenna")> like IAntenna { parameters: @display("p=100,100"); } transmitter: <> like ITransmitter { parameters: @display("p=100,200"); } receiver: <> like IReceiver { parameters: @display("p=100,300"); } energyConsumer: <default("")> like IEnergyConsumer if typename != "" { parameters: @display("p=100,400"); } }File: src/inet/physicallayer/wireless/common/radio/packetlevel/Radio.ned