Ieee80211LayeredOfdmTransmitter.ned

NED File src/inet/physicallayer/ieee80211/bitlevel/Ieee80211LayeredOfdmTransmitter.ned

Name Type Description
Ieee80211LayeredOfdmTransmitter compound module

The level of detail parameter determines which submodules of the transmitter will be used:

Source code

//
// Copyright (C) 2014 OpenSim Ltd
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public License
// as published by the Free Software Foundation; either version 2
// of the License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public License
// along with this program; if not, see <http://www.gnu.org/licenses/>.
//

package inet.physicallayer.ieee80211.bitlevel;

import inet.physicallayer.contract.packetlevel.ITransmitter;
import inet.physicallayer.contract.bitlevel.IDigitalAnalogConverter;
import inet.physicallayer.contract.bitlevel.IEncoder;
import inet.physicallayer.contract.bitlevel.IModulator;
import inet.physicallayer.contract.bitlevel.IPulseShaper;

//
//
// This module implements an IEEE 802.11 OFDM transmitter.
// The implemenation details are based on the following standard:
// IEEE Std 802.11-2012 PART 11: WIRELESS LAN MAC AND PHY SPECIFICATIONS

// If the compliant mode is set to true then the transmitter
// works in compliant IEEE 802.11 modes (can be found in the
// standard). The current mode depends on the IEEE 802.11 MAC,
// thus, in this case it is only allowed to set the power.
// If it is configured to be a non-compliant transmitter then
// you can freely set your own submodules: modulator, encoder,
// etc., or other parameters such as carrier frequency, banwidth,
// etc.

// The level of detail parameter determines which submodules of
// the transmitter will be used:
//
// <table border="1">
//   <tr>  <th>Level (domain)</th>  <th>Submodules</th>                                                             </tr>
//   <tr>  <td>PACKET</td>          <td>-</td>                                                                      </tr>
//   <tr>  <td>BIT</td>             <td>signal encoder, data encoder</td>                                           </tr>
//   <tr>  <td>SYMBOL</td>          <td>signal modulator, data modulator + bit level modules</td>                   </tr>
//   <tr>  <td>SAMPLE</td>          <td>pulse shaper + bit, symbol level modules + (digital/analog converter)</td>  </tr>
// </table>
//
// Important: We have no default module implementation for sample level
// features.
//
// Note that if a digital/analog converter is provided for the
// transmitter then it will be only used at sample level, otherwise,
// since analog representation is obligatory, a simplified, built-in
// (scalar) analog model is used at all levels.
//
// Note that in non-compliant mode, whatever the level of detail is,
// you must always set all submodules. If the current level of detail
// does not demand a specific submodule it is necessary and sufficient
// to implement those methods of that submodule which provide metadata
// about its settings.
//
// For example, if the level of detail is bit level, you don't have to
// implement a complete modulator, it is enough to implement a dummy
// modulator that can give information about its subcarrier modulation
// (e.g. BPSK).
//
//
module Ieee80211LayeredOfdmTransmitter like ITransmitter
{
    parameters:
        bool isCompliant = default(true);
        string levelOfDetail @enum("packet","bit","symbol","sample") = default("symbol");
        double channelSpacing @unit(Hz) = default(nan Hz);
        double power @unit(W);
        double centerFrequency @unit(Hz);
        double bandwidth @unit(Hz);
        @class(Ieee80211LayeredOfdmTransmitter);

        @display("i=block/tx");
    submodules:
        signalEncoder: <default("")> like IEncoder if typename != "" {
            @display("p=100,100");
        }
        dataEncoder: <default("")> like IEncoder if typename != "" {
            @display("p=300,100");
        }
        dataModulator: <default("")> like IModulator if typename != "" {
            @display("p=100,200");
        }
        signalModulator: <default("")> like IModulator if typename != "" {
            @display("p=300,200");
        }
        pulseShaper: <default("")> like IPulseShaper if typename != "" {
            @display("p=100,300");
        }
        digitalAnalogConverter: <default("")> like IDigitalAnalogConverter if typename != "" {
            @display("p=100,400");
        }
}