Link Budget and Constraints
In order to compute a LinkBudget, several pieces of information are needed to produce each scalar parameter. After setting up the various links, signal processors, antennas, and other models, the scalar needs to be able to identify the output of a given receiver object. This is accomplished by using a SignalOutputExtension to identify which SignalProcessor to use as the receiver's output (prior to demodulating the signal into data).
The functionality described in this topic requires a license for the Communications Library.
In addition, the scalar needs to know how to identify which signal among the SignalCollection to use as the intended signal from which to compute the link budget parameter. This is accomplished by specifying an IntendedSignalStrategy. Using multiple strategies, it is possible to define scalar parameters for more than one signal at a time, allowing users to model multiple access scenarios without having to reoptimize the EvaluatorGroup. Currently, the following strategies are provided by the library:
IntendedReferenceSignal - always returns a given signal, for cases where you want to compare against a simplified reference signal.
IntendedSignalByFrequency - identifies an intended signal as the one with a frequency closest to a target frequency.
IntendedSignalByIdentifier<TIdentifier> - identifies an intended signal by looking for a user-specified object in the signal data.
IntendedSignalByModulation<TModulation> - identifies an intended signal as the one with the correct modulation and with frequency closest to a target frequency.
You can also create your own strategy by extending IntendedSignalStrategy.
Each scalar representing a communication parameter needs to know which links are propagating signals to which receivers. This is done using a SignalPropagationGraph, which contains all the links which propagate the intended signals as well as links which act purely as interference. The Communications Library is designed to model the real world as closely as possible. As such, there is no a priori distinction between "intended" and "interfering" signals until the user specifies an IntendedSignalStrategy. Signals which otherwise act as intended signals for other scalars will be treated as interference unless explicitly removed from the list of unintended signals in the IntendedSignalStrategy. Alternatively, the use of RectangularFilter will eliminate unintended signals (and intended signals) which do not lie within a certain bandwidth.
ScalarAntennaGainInLinkDirection - The ratio of signal power after the antenna to the signal power before the antenna, for a given intended signal.
ScalarEffectiveIsotropicRadiatedPower (EIRP) - The power of the intended signal after it has been transmitted along the communication link but before any propagation effects are applied.
ScalarReceivedIsotropicPower (RIP) - The power of the intended signal after it has been propagated along the communication link but before applying any gain from the receiving antenna.
ScalarCarrierToNoise (C/N) - The ratio of the power of the carrier (or signal) at the output to the noise power of the signal, based on the thermal noise contributions of the electronics in the receiver as well as any noise generated by the antenna or propagation models.
ScalarCarrierToNoiseDensity (C/No) - The ratio of the power of the carrier (or signal) at the output to the noise of the signal without taking into account the receiver bandwidth. The noise is based on the thermal noise contributions of the electronics in the receiver as well as any noise generated by the antenna or propagation models.
ScalarCarrierToInterference (C/I) - The ratio of the power of the carrier (or signal) at the output to the power of the interfering signals.
ScalarCarrierToNoisePlusInterference (C/(N+I)) - The ratio of the power of the carrier (or signal) at the output to the noise power of the signal plus the power of the interfering signals. The noise is based on the thermal noise contributions of the electronics in the receiver as well as any noise generated by the antenna or propagation models.
ScalarEnergyPerBitToNoiseDensity<TModulation> (Eb/No) - The ratio of the energy per bit to the carrier noise without taking into account the receiver bandwidth. The energy per bit is calculated based on the carrier power and the SignalDataRate.
ScalarBitErrorRate<TModulation> (BER) - The probability that any given bit will be incorrect, based on the modulation and the value of Eb/No for the intended signal.
Using the given Scalar base classes, it is also possible to define custom communication parameters.
Setting up an access constraint using a link budget parameter is as simple as specifying which parameters to use and combining them together with boolean expressions. For more information, see the Access Queries topic.
double minThreshold = CommunicationAnalysis.FromDecibels(14.198); double maxThreshold = CommunicationAnalysis.FromDecibels(1000); // Combine two link budget constraints CommunicationObjectConstraint interferenceConstraint = new CommunicationObjectConstraint( new ScalarCarrierToInterference(downlinkRcvrAntenna, propagationGraph, intendedDownlinkSignal), minThreshold, maxThreshold); CommunicationObjectConstraint berConstraint = new CommunicationObjectConstraint( new ScalarBitErrorRate<ModulationBpsk>(downlinkRcvrAntenna, propagationGraph, intendedDownlinkSignal), 0.0, 0.012271); // Combine access constraints (queries) using boolean operators AccessQuery combinedQuery = berConstraint & interferenceConstraint; // Use the philadelphia platform as the time observer AccessEvaluator accessEval = combinedQuery.GetEvaluator(downlinkRcvrAntenna); // Compute Access AccessQueryResult result = accessEval.Evaluate(startAccess, stopAccess);
The Communications Library also provides a generalized CommunicationFigureOfMerit class, which can be used with the Spatial Analysis Library to compute coverage over a grid using the above Scalar values. To learn more about setting up a coverage calculation, see the Coverage topic.
Including communications analysis into a coverage calculation is simple. Communications based access constraints can be used as assets in a coverage calculation. Then, in order to create a figure of merit, simply use a CommunicationFigureOfMerit with the desired scalar value.
ScalarCarrierToNoise carrierToNoise = new ScalarCarrierToNoise(coverage.GridPointPlaceholder, network, new IntendedSignalByFrequency(source.SignalToTransmit.Frequency)); CommunicationObjectConstraint carrierToNoiseConstraint = new CommunicationObjectConstraint( carrierToNoise,CommunicationAnalysis.FromDecibels(12), CommunicationAnalysis.FromDecibels(200)); coverage.AddAsset(new AssetDefinition(transmitterPlatform, carrierToNoiseConstraint & cbConstraint));
// Compute Coverage CoverageResults coverageResult = coverage.ComputeCoverageOverTheGrid(start, stop); // Create Signal to Noise Figure of Merit CommunicationFigureOfMerit carrierToNoiseFoM = new CommunicationFigureOfMerit(carrierToNoise); // Compute the Figure of Merit over the grid results GridTimeSampledValues sampledGrid = GridTimeSampledValues.ComputeData(coverageResult, carrierToNoiseFoM, new TimeInterval(start, stop), Duration.FromSeconds(60.0));