Signals and SignalProcessors
Just as in the Communications Library, the fundamental data product of the Radar Library is a Signal. See the Signals and SignalProcessors topic for an overview of the Signal and SignalProcessor types in the Communications Library.
The functionality described in this topic requires a license for the Radar Library and the Communications Library.
The below figure shows the signal processors used to construct a basic radar transmitter.
The first SignalProcessor in this example is a PulsedSignalSource, which is responsible for generating the Signal which represents the radar waveform, defined by pulse repetition frequency, pulse width, and number of pulses. The PulsedSignalSource is the input signal processor to the PulsedSignalModulator. The modulator sets the signal's carrier frequency as well as its upper and lower bandwidth limits. The bandwidth limits are determined from the waveform pulse width, defined by the input PulsedSignalSource. The PulsedSignalSource adds an instance of the PulsedSignalData type to the signal's data collection, which determines the waveform pulse width. The PulsedSignalModulator is the input to the ConstantGainAmplifier, which sets the output power of the signal by multiplying the input signal's power by a constant gain value. The ConstantGainAmplifier is the input to the RadarTransmittingAntennaExtension, which applies the antenna gain to the signal to produce the effective isotropic power at the output of the transmit antenna. The antenna gain is computed based on the relative geometry of the radar transmitter and the target and also accounts for the attitude of the antenna coordinate system relative to the parent platform.
Below is a code example of how to configure the basic radar transmitter in the figure above.
//Transmit waveform properties. double pulseRepetitionFrequency = 1.0e6; double pulseWidth = 1 / (2 * pulseRepetitionFrequency); int pulseCount = 20; //Transmitter properties double wavelength = 0.1; //meters double amplifierGain = 1e4; double antennaDiameter = 1.0; //meters; double antennaEfficiency = 0.8; double antennaBacklobeGain = 0.001; ParabolicGainPattern parabolicGainPattern = new ParabolicGainPattern(antennaDiameter, antennaEfficiency, antennaBacklobeGain); //Transmitter identification IdentifiableTransmitterExtension transmitterIdentifier = new IdentifiableTransmitterExtension(); SignalDataCollection additionalSignalData = new SignalDataCollection(); additionalSignalData.add(transmitterIdentifier.getIdentifier()); //Pulsed Signal Source PulsedSignalData pulsedSignalData = new PulsedSignalData(pulseRepetitionFrequency, pulseWidth, pulseCount); PulsedSignalSource pulsedSignalSource = new PulsedSignalSource(pulsedSignalData, additionalSignalData); //Pulsed Signal Modulator PulsedSignalModulator modulator = new PulsedSignalModulator(pulsedSignalSource, Constants.SpeedOfLight / wavelength); //Constant Gain Amplifier ConstantGainAmplifier amplifier = new ConstantGainAmplifier(modulator, amplifierGain); //Transmitting Antenna Extension RadarTransmittingAntennaExtension antennaExtension = new RadarTransmittingAntennaExtension(amplifier, parabolicGainPattern); Platform radarTransmitterPlatform = new Platform(); radarTransmitterPlatform.getExtensions().add(antennaExtension); radarTransmitterPlatform.getExtensions().add(transmitterIdentifier); CentralBody earth = CentralBodiesFacet.getFromContext().getEarth(); Point radarTransmitterPlatformLocation = new PointCartographic(earth, new Cartographic(-1.31941, 0.698806, 0.0)); radarTransmitterPlatform.setLocationPoint(radarTransmitterPlatformLocation); radarTransmitterPlatform.setOrientationAxes(new AxesEastNorthUp(earth, radarTransmitterPlatformLocation));
The below figure shows the signal processors used to construct a basic radar receiver.
The first SignalProcessor in this example is the RadarAntennaSignalProcessor which is provided by the OutputSignalProcessor (get) property. The RadarAntennaSignalProcessor applies the antenna gain to the received signals, including target reflected signal as well as any interference signals present. The antenna gain is computed based on the relative geometry of the radar receiver and the target or interference source and accounts for the attitude of the antenna coordinate system relative to the parent platform. The RadarAntennaSignalProcessor is the input signal processor to the RectangularFilter, which accounts for the bandwidth overlap between the received signal and the receiver's noise bandwidth. The RectangularFilter is the input SignalProcessor for the ConstantGainAmplifier which is used to model the receiver's low noise amplifier. The amplifier is then attached as input to the waveform processing block(s) of the radar receiver. As you can see from the diagram, the amplifier is referenced by an instance of the SignalOutputExtension which is added to the receiver's platform. This extension marks the amplifier as the last SignalProcessor in the signal processing chain and it allows scalar computations to discover the amplifier, using the IServiceProvider interface. Similarly, the ProcessedRadarWaveformOutputExtension allows scalar computations to discover the last RadarWaveformProcessor in the radar receiver.
Below is a code example of how to configure the basic radar receiver in the figure above.
//Receiver properties double wavelength = 0.1; //meters double frequency = Constants.SpeedOfLight / wavelength; double pulseRepetitionFrequency = 1.0e6; double pulseWidth = 1 / (2 * pulseRepetitionFrequency); int pulseCount = 20; double noiseBandwidth = 1.0 / pulseWidth; double halfNoiseBandwidth = noiseBandwidth / 2.0; double lowNoiseAmplifierGain = 1e4; double antennaDiameter = 1.0; //meters; double antennaEfficiency = 0.8; double antennaBacklobeGain = 0.001; double antennaNoiseTemperature = 290.0; ParabolicGainPattern parabolicGainPattern = new ParabolicGainPattern(antennaDiameter, antennaEfficiency, antennaBacklobeGain); Platform radarReceiverPlatform = new Platform(); CentralBody earth = CentralBodiesFacet.getFromContext().getEarth(); Point radarReceiverPlatformLocation = new PointCartographic(earth, new Cartographic(-1.31941, 0.698806, 0.0)); radarReceiverPlatform.setLocationPoint(radarReceiverPlatformLocation); radarReceiverPlatform.setOrientationAxes(new AxesEastNorthUp(earth, radarReceiverPlatformLocation)); //Receiver Antenna Extension RadarReceivingAntennaExtension antennaExtension = new RadarReceivingAntennaExtension(parabolicGainPattern, antennaNoiseTemperature); radarReceiverPlatform.getExtensions().add(antennaExtension); //Configure the receiver filter RectangularFilter filter = new RectangularFilter(antennaExtension.getOutputSignalProcessor(), 0.0, frequency, -halfNoiseBandwidth, halfNoiseBandwidth); //Receiver Low Noise Amplifier ConstantGainAmplifier amplifier = new ConstantGainAmplifier(filter, lowNoiseAmplifierGain); //Configure the SignalOutputExtension SignalOutputExtension signalOutput = new SignalOutputExtension(amplifier); radarReceiverPlatform.getExtensions().add(signalOutput); //Configure waveform processing PerfectFixedNumberOfPulsesWaveformIntegrator waveformIntegrator = new PerfectFixedNumberOfPulsesWaveformIntegrator(pulseCount); //Attach the last SignalProcessor as input to the first RadarWaveformProcessor waveformIntegrator.attachSignalProcessorAsInput(amplifier); ProcessedRadarWaveformOutputExtension processedWaveformOutput = new ProcessedRadarWaveformOutputExtension(waveformIntegrator); radarReceiverPlatform.getExtensions().add(processedWaveformOutput);