Code Sample |
Below is a detailed code example for a monostatic radar, tracking a target aircraft with interference from a secondary radar system.
Note |
---|
The functionality described in this topic requires a license for the Radar Library and the Communications Library. |
JulianDate epoch = new GregorianDate(2016, 7, 27, 16, 0, 0).ToJulianDate(); double aircraftAltitude = 10668.0; // meters double aircraftRadarCrossSection = 0.1; //meters squared SwerlingTargetModel aircraftSwerlingModel = SwerlingTargetModel.II; CentralBody earth = CentralBodiesFacet.GetFromContext().Earth; JulianDate[] wayPointTimes = { epoch, new GregorianDate(2016, 7, 27, 16, 3, 59.991).ToJulianDate(), new GregorianDate(2016, 7, 27, 16, 9, 26.975).ToJulianDate(), }; Cartographic[] wayPointLocations = { new Cartographic(Trig.DegreesToRadians(-75.97198961), Trig.DegreesToRadians(39.77474399), aircraftAltitude), new Cartographic(Trig.DegreesToRadians(-75.59880655), Trig.DegreesToRadians(40.03338572), aircraftAltitude), new Cartographic(Trig.DegreesToRadians(-75.03595287), Trig.DegreesToRadians(40.34252416), aircraftAltitude), }; WaypointPropagator aircraftPropagator = WaypointPropagator.ConstructConstantVelocityWaypointPropagator(earth, wayPointTimes, wayPointLocations); //Construct the target platform Platform radarTargetPlatform = new Platform { LocationPoint = aircraftPropagator.CreatePoint() }; radarTargetPlatform.OrientationAxes = new AxesVehicleVelocityLocalHorizontal(earth.InertialFrame, radarTargetPlatform.LocationPoint); ConstantCrossSectionScatteringCoefficient constantCrossSection = new ConstantCrossSectionScatteringCoefficient(aircraftRadarCrossSection); //Construct the radar cross section platform extension with a constant cross section coefficient TargetRadarCrossSectionExtension targetExtension = new TargetRadarCrossSectionExtension(constantCrossSection); PointScattererFrequencyBand firstBand = targetExtension.FrequencyBands[0]; //Additional signal data can be added to each frequency band which will be added to the processed reflected signal, which can be discovered by downstream processors. Below we are //adding a data structure to the signal data which indicates the frequency band Swerling case of this target, used by the downstream Mitchell-Walker probability-of-detection algorithm. firstBand.SignalData.Add(new SignalSwerlingTargetModel(aircraftSwerlingModel)); radarTargetPlatform.Extensions.Add(targetExtension);
//Radar Latitude, Longitude, and Altitude double radarLatitude = 0.698806; double radarLongitude = -1.31941; double radarAltitude = 0.0; //Transmit waveform properties. double pulseRepetitionFrequency = 1.0e6; double pulseWidth = 1 / (2 * pulseRepetitionFrequency); int pulseCount = 20; //Transmitter properties double wavelength = 0.1; //meters double frequency = Constants.SpeedOfLight / wavelength; double amplifierGain = 1e4; double antennaDiameter = 5.0; //meters; double antennaEfficiency = 0.8; double antennaBacklobeGain = 0.001; ParabolicGainPattern parabolicGainPattern = new ParabolicGainPattern(antennaDiameter, antennaEfficiency, antennaBacklobeGain); //Define the monostatic radar Point which will be used by both the radar transmitter and receiver platforms Cartographic monostaticRadarLocation = new Cartographic(radarLongitude, radarLatitude, radarAltitude); Point monostaticPoint = new PointCartographic(earth, monostaticRadarLocation); //Construct the radar transmitter platform Platform radarTransmitterPlatform = new Platform { LocationPoint = monostaticPoint }; //Using the AxesAlignedConstrained axes type will target the radar transmitter antenna boresight at the radar target VectorFixed earthZAxis = new VectorFixed(earth.InertialFrame.Axes, UnitCartesian.UnitZ); Axes targetTrackingAxes = new AxesAlignedConstrained(new VectorTrueDisplacement(monostaticPoint, radarTargetPlatform.LocationPoint), AxisIndicator.Third, earthZAxis, AxisIndicator.First); radarTransmitterPlatform.OrientationAxes = targetTrackingAxes; //Transmitter identification. This platform extension is used by the IntendedSignalByTransmitter intended signal strategy for identifying the //desired signal. IdentifiableTransmitterExtension transmitterIdentifier = new IdentifiableTransmitterExtension(); SignalDataCollection additionalSignalData = new SignalDataCollection { transmitterIdentifier.Identifier }; //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 transmitAntennaExtension = new RadarTransmittingAntennaExtension(amplifier, parabolicGainPattern); radarTransmitterPlatform.Extensions.Add(transmitAntennaExtension); radarTransmitterPlatform.Extensions.Add(transmitterIdentifier); //Transmitter identification
//Construct the radar receiver platform Platform radarReceiverPlatform = new Platform { LocationPoint = monostaticPoint, OrientationAxes = targetTrackingAxes }; //Receiver properties double noiseBandwidth = 1.0 / pulseWidth; double halfNoiseBandwidth = noiseBandwidth / 2.0; double lowNoiseAmplifierGain = 1e4; double antennaNoiseTemperature = 290.0; //Receiver Antenna Extension RadarReceivingAntennaExtension receiveAntennaExtension = new RadarReceivingAntennaExtension(parabolicGainPattern, antennaNoiseTemperature); radarReceiverPlatform.Extensions.Add(receiveAntennaExtension); //Configure the receiver filter RectangularFilter filter = new RectangularFilter(receiveAntennaExtension.OutputSignalProcessor, 0.0, frequency, -halfNoiseBandwidth, halfNoiseBandwidth); //Receiver Low Noise Amplifier ConstantGainAmplifier lowNoiseAmplifier = new ConstantGainAmplifier(filter, lowNoiseAmplifierGain); //Configure the SignalOutputExtension SignalOutputExtension signalOutput = new SignalOutputExtension(lowNoiseAmplifier); radarReceiverPlatform.Extensions.Add(signalOutput); //Configure waveform processing PerfectFixedNumberOfPulsesWaveformIntegrator waveformIntegrator = new PerfectFixedNumberOfPulsesWaveformIntegrator(pulseCount); //Attach the last SignalProcessor as input to the first RadarWaveformProcessor waveformIntegrator.AttachSignalProcessorAsInput(lowNoiseAmplifier); ProcessedRadarWaveformOutputExtension processedWaveformOutput = new ProcessedRadarWaveformOutputExtension(waveformIntegrator); radarReceiverPlatform.Extensions.Add(processedWaveformOutput);
//Construct the forward link from the transmitter to the target LinkSpeedOfLight forwardLink = new LinkSpeedOfLight(radarTransmitterPlatform, radarTargetPlatform, earth.InertialFrame); forwardLink.Extensions.Add(new WirelessLinkExtension()); //Construct the return link from the target to the receiver LinkSpeedOfLight returnLink = new LinkSpeedOfLight(radarTargetPlatform, radarReceiverPlatform, earth.InertialFrame); returnLink.Extensions.Add(new WirelessLinkExtension()); SignalPropagationGraph propagationGraph = new SignalPropagationGraph(); propagationGraph.AddLink(forwardLink); propagationGraph.AddLink(returnLink);
//Radar Latitude, Longitude, and Altitude double interferingRadarLatitude = 0.69865; double interferingRadarLongitude = -1.31893; double interferingRadarAltitude = 30.0; Cartographic interferingRadarCartographic = new Cartographic(interferingRadarLongitude, interferingRadarLatitude, interferingRadarAltitude); //Construct the interfering radar transmitter platform Platform interferingRadarTransmitterPlatform = new Platform { LocationPoint = new PointCartographic(earth, interferingRadarCartographic) }; interferingRadarTransmitterPlatform.OrientationAxes = new AxesEastNorthUp(earth, interferingRadarTransmitterPlatform.LocationPoint); interferingRadarTransmitterPlatform.Extensions.Add(new IdentifiableTransmitterExtension()); //Pulsed Signal Source PulsedSignalData interferencePulsedSignalData = new PulsedSignalData(pulseRepetitionFrequency, pulseWidth, pulseCount); PulsedSignalSource interferencePulsedSignalSource = new PulsedSignalSource(interferencePulsedSignalData); //Pulsed Signal Modulator PulsedSignalModulator interferenceModulator = new PulsedSignalModulator(interferencePulsedSignalSource, Constants.SpeedOfLight / wavelength); //Constant Gain Amplifier ConstantGainAmplifier interferenceAmplifier = new ConstantGainAmplifier(interferenceModulator, amplifierGain); //Interfering Radar Transmitting Antenna Extension RadarTransmittingAntennaExtension interferingAntennaExtension = new RadarTransmittingAntennaExtension(interferenceAmplifier, new IsotropicGainPattern()); interferingRadarTransmitterPlatform.Extensions.Add(interferingAntennaExtension); //Construct the interference link LinkSpeedOfLight interferenceLink = new LinkSpeedOfLight(interferingRadarTransmitterPlatform, radarReceiverPlatform, earth.InertialFrame); interferenceLink.Extensions.Add(new WirelessLinkExtension()); //Add the interference link to the propagation graph propagationGraph.AddLink(interferenceLink);
//Construct the intended signal strategy. IntendedSignalByTransmitter intendedSignalStrategy = new IntendedSignalByTransmitter(radarTransmitterPlatform); //Construct the scalar types SignalToNoiseRatioScalar signalToNoiseRatioScalar = new SignalToNoiseRatioScalar(radarTransmitterPlatform, radarTargetPlatform, radarReceiverPlatform, intendedSignalStrategy, propagationGraph, false, SignalToNoiseRatioComputeMode.SinglePulse); SignalToNoiseRatioScalar integratedSignalToNoiseRatioScalar = new SignalToNoiseRatioScalar(radarTransmitterPlatform, radarTargetPlatform, radarReceiverPlatform, intendedSignalStrategy, propagationGraph, false, SignalToNoiseRatioComputeMode.Integrated); SignalToNoiseRatioScalar signalToNoisePlusInterferenceRatioScalar = new SignalToNoiseRatioScalar(radarTransmitterPlatform, radarTargetPlatform, radarReceiverPlatform, intendedSignalStrategy, propagationGraph, true, SignalToNoiseRatioComputeMode.SinglePulse); SignalToNoiseRatioScalar integratedSignalToNoisePlusInterferenceRatioScalar = new SignalToNoiseRatioScalar(radarTransmitterPlatform, radarTargetPlatform, radarReceiverPlatform, intendedSignalStrategy, propagationGraph, true, SignalToNoiseRatioComputeMode.Integrated); //Construct the evaluator group EvaluatorGroup group = new EvaluatorGroup(); //Get the evaluators from the scalar instances ScalarEvaluator signalToNoiseRatioEvaluator = signalToNoiseRatioScalar.GetEvaluator(group); ScalarEvaluator integratedSignalToNoiseRatioEvaluator = integratedSignalToNoiseRatioScalar.GetEvaluator(group); ScalarEvaluator signalToNoisePlusInterferenceRatioEvaluator = signalToNoisePlusInterferenceRatioScalar.GetEvaluator(group); ScalarEvaluator integratedSignalToNoisePlusInterferenceRatioEvaluator = integratedSignalToNoisePlusInterferenceRatioScalar.GetEvaluator(group); group.OptimizeEvaluators(); JulianDate pulseTransmissionTime = epoch; int analysisDuration = 30; //seconds; double[] signalToNoiseRatio = new double[analysisDuration]; double[] integratedSignalToNoiseRatio = new double[analysisDuration]; double[] signalToNoisePlusInterferenceRatio = new double[analysisDuration]; double[] integratedSignalToNoisePlusInterferenceRatio = new double[analysisDuration]; for (int i = 0; i < analysisDuration; ++i) { signalToNoiseRatio[i] = signalToNoiseRatioEvaluator.Evaluate(pulseTransmissionTime); integratedSignalToNoiseRatio[i] = integratedSignalToNoiseRatioEvaluator.Evaluate(pulseTransmissionTime); signalToNoisePlusInterferenceRatio[i] = signalToNoisePlusInterferenceRatioEvaluator.Evaluate(pulseTransmissionTime); integratedSignalToNoisePlusInterferenceRatio[i] = integratedSignalToNoisePlusInterferenceRatioEvaluator.Evaluate(pulseTransmissionTime); pulseTransmissionTime = pulseTransmissionTime.AddSeconds(i); }