Click or drag to resize

Signals and SignalProcessors

The fundamental data product of the Communications Library is a Signal. The Signal type is an immutable representation of the properties of a communication carrier signal or baseband signal at a given instant in time.

Note Note

The functionality described in this topic requires a license for the Communications Library.


A Signal is defined by the following properties. As mentioned in the Units topic, all units are SI units (watts, hertz, kelvin).

  • Power (get) - The total power of the signal distributed over its bandwidth, in watts.

  • Frequency (get) - The center frequency at which the signal operates, in hertz.

  • UpperBandwidthLimit (get) and LowerBandwidthLimit (get) - Frequency offsets from the center frequency which specify the frequency range over which the signal operates, in hertz.

  • NoiseTemperature (get) - A figure representing the equivalent noise temperature affecting the signal, particularly thermal noise from receiver electronics, in kelvin.

  • UpperNoiseBandwidthLimit (get) and LowerNoiseBandwidthLimit (get) - Frequency offsets from the center frequency, in hertz, which specify the frequency range over which the noise is distributed and usually corresponds to the bandwidth of the receiver. Together with NoiseTemperature (get), this bandwidth is used to calculate the total NoisePower (get) of a signal.

  • Additional Data - The signal contains a set of immutable objects which represent additional properties on the signal. This can represent the DigitalModulation of a signal, the SignalDataRate, the message encoded onto the carrier, polarization, the GPS PRN code, and many other custom properties. This data must be an immutable reference type, and any custom data types which a user creates must be immutable as well. Only one instance of a particular type can be present on a Signal at a given time.

Creating and Modifying Signals

In order to create and modify signals, the user combines a number of SignalProcessors which each modify the input signals in specific ways to produce a corresponding set of output signals. Here is a list of some of the available signal processors.

  • SignalSource - A simple processor which takes a given template signal and outputs it over certain time intervals.

  • DigitalDataSource - Creates a signal based on a digital data rate, specified by SignalDataRate, and a set of time intervals over which the processor produces a signal.

  • ConstantFrequencyMixer - Alters the frequency of all the incoming signals by a specified frequency offset.

  • DigitalModulator<TModulation> - Adds the given type of DigitalModulation onto the input signals.

  • DigitalDemodulator<TModulation> - Removes the given type of DigitalModulation from the input signals after identifying the intended signal. This is useful for transceivers which receive a digital signal with one modulation and want to remodulate with a different modulation prior to retransmitting the signal.

  • RectangularFilter - A simple filter which constrains the signal bandwidth, particularly the noise bandwidth, to lie within a specific range. If this is the only filter in a receiver, the filter bandwidth will be the bandwidth used when computing C/N using ScalarCarrierToNoise.

  • ConstantGainAmplifier - Applies a gain to the signal as well as adding thermal noise, depending on the noise figure of the amplifier.

  • VariableGainAmplifier - Applies a gain based off of a power backoff curve (IBO/OBO). It also adds thermal noise based on the noise figure, and intermodulation noise based on the appropriate curve (C/Im).

  • PulsedSignalSource - A SignalSource which produces a signal which represents a series of pulses. The signal produced holds an PulsedSignalData instance, which contains the waveform pulse repetition frequency, pulse width, and number of pulses.

  • PulsedSignalModulator - Sets the carrier frequency and upper and lower bandwidth limits of the input signals. The upper and lower bandwidth limits are set to produce an overall bandwidth equivalent to 1 / pulse width, where the pulse width is obtained from the PulsedSignalData instance held by the input signal.

  • Custom - By extending the SignalProcessor base class and implementing a corresponding SignalEvaluator, it is possible to model custom behavior which works seamlessly with existing types.