EvaluatorsΒΆ

Communication evaluators are used to extract key performance indicators of communication links between modems.

        classDiagram

class CommunicationEvaluator {

   <<Abstract>>

   +TransmittingModem transmitting_modem
   +ReceivingModem receiving_modem
}

class BitErrorArtifact {

   +float artifact
   +to_scalar() float
}

class BitErrorEvaluation {

   +str title
   +artifact() BitErrorArtifact
}

class BitErrorEvaluator {

   +evaluate() BitErrorEvaluation
   +str abbreviation
   +str title
}

class BlockErrorArtifact {

   +float artifact
   +to_scalar() float
}

class BlockErrorEvaluation {

   +str title
   +artifact() BlockErrorArtifact
}

class BlockErrorEvaluator {

   +evaluate() BlockErrorEvaluation
   +str abbreviation
   +str title
}

class FrameErrorArtifact {

   +float artifact
   +to_scalar() float
}

class FrameErrorEvaluation {

   +str title
   +artifact() FrameErrorArtifact
}

class FrameErrorEvaluator {

   +evaluate() FrameErrorEvaluation
   +str abbreviation
   +str title
}

class ThroughputArtifact {

   +float artifact
   +to_scalar() float
}

class ThroughputEvaluation {

   +str title
   +artifact() ThroughputArtifact
}

class ThroughputEvaluator {

   +evaluate() ThroughputEvaluation
   +str abbreviation
   +str title
}

class EVMArtifact {

   +float artifact
   +to_scalar() float
}

class EVMEvaluation {

   +str title
   +artifact() EVMArtifact
}

class ConstellationEVM {

   +evaluate() EVMEvaluation
   +str abbreviation
   +str title
}

BitErrorEvaluator --|> CommunicationEvaluator
BlockErrorEvaluator --|> CommunicationEvaluator
FrameErrorEvaluator --|> CommunicationEvaluator
ThroughputEvaluator --|> CommunicationEvaluator
ConstellationEVM --|> CommunicationEvaluator

BitErrorEvaluator --> BitErrorArtifact : create
BitErrorEvaluator --> BitErrorEvaluation : create
BlockErrorEvaluator --> BlockErrorArtifact : create
BlockErrorEvaluator --> BlockErrorEvaluation : create
FrameErrorEvaluator --> FrameErrorArtifact : create
FrameErrorEvaluator --> FrameErrorEvaluation : create
ThroughputEvaluator --> ThroughputArtifact : create
ThroughputEvaluator --> ThroughputEvaluation : create
ConstellationEVM --> EVMEvaluation : create
EVMEvaluation --> EVMArtifact : create

link CommunicationEvaluator "modem.evaluators.CommunicationEvaluator.html"
link BitErrorArtifact "modem.evaluators.BitErrorArtifact.html"
link BitErrorEvaluation "modem.evaluators.BitErrorEvaluation.html"
link BitErrorEvaluator "modem.evaluators.BitErrorEvaluator.html"
link BlockErrorArtifact "modem.evaluators.BlockErrorArtifact.html"
link BlockErrorEvaluation "modem.evaluators.BlockErrorEvaluation.html"
link BlockErrorEvaluator "modem.evaluators.BlockErrorEvaluator.html"
link FrameErrorArtifact "modem.evaluators.FrameErrorArtifact.html"
link FrameErrorEvaluation "modem.evaluators.FrameErrorEvaluation.html"
link FrameErrorEvaluator "modem.evaluators.FrameErrorEvaluator.html"
link ThroughputArtifact "modem.evaluators.ThroughputArtifact.html"
link ThroughputEvaluation "modem.evaluators.ThroughputEvaluation.html"
link ThroughputEvaluator "modem.evaluators.ThroughputEvaluator.html"
link EVMArtifact "modem.evaluators.evm.html#hermespy.modem.evaluators.evm.EVMArtifact"
link EVMEvaluation "modem.evaluators.evm.html#hermespy.modem.evaluators.evm.EVMEvaluation"
link ConstellationEVM "modem.evaluators.evm.html#hermespy.modem.evaluators.evm.ConstellationEVM"
    

The implemented Communication Evaluators all inherit from the identically named common base which gets initialized by selecting the two Modem instances whose communication should be evaluated. The currently considered performance indicators are

Performance Indicator

Performance Indicator

Bit Error Rate

Errors comparing two bit streams

Block Error Rate

Errors comparing two bit streams divided into blocks

Frame Error Rate

Errors comparing two bit streams divided into frames

Throughput

Rate of correct frames multiplied by the frame bit rate

Error Vector Magnitude

Root mean square error between transmitted and received symbols

Configuring Communication Evaluators to evaluate the communication process between two Modem instances is rather straightforward:

# Create two separate modem instances
modem_alpha = Modem()
modem_beta = Modem()

# Create a bit error evaluation as a communication evaluation example
communication_evaluator = BitErrorEvaluator(modem_alpha, modem_beta)

# Extract evaluation artifact
communication_artifact = communication_evaluator.evaluate()

# Visualize artifact
communication_artifact.plot()