STK ObjectsSend comments on this topic.
IAgRFEnvironment Interface

Description

Provides access to the properties and methods defining the RF environment.

Public Properties

Public Property ActiveCommSystemGets or sets the active CommSystem object.
Public Property ContourRainOutagePercentGets or sets the contour rain outage percent.
Public Property EarthTemperatureGets or sets the earth temperature.
Public Property MagneticNorthPoleLatitudeGets or sets magnetic north pole latitude.
Public Property MagneticNorthPoleLongitudeGets or sets magnetic north pole longitude.
Public Property PropagationChannelGets the propagation channel.
Public Property SupportedActiveCommSystemsGets an array of supported active CommSystem objects.
Public Property SupportedContourRainOutagePercentValuesGets an array of supported contour rain outage percent values.

CoClasses that Implement IAgRFEnvironment

Example

Compute the probability of detection of a target for a monostatic search/track radar
[C#]
IAgStkObject rdrAsStkObject = radar as IAgStkObject;
IAgStkObject tgtAsStkObject = targetAircraft as IAgStkObject;

//Enable the rain loss computation on the scenario RF environment
scenarioRFEnv.PropagationChannel.EnableRainLoss = true;

//Configure the radar object as a monostatic model.
radar.SetModel("Monostatic");
IAgRadarModelMonostatic monostaticModel = radar.Model as IAgRadarModelMonostatic;

//Orient the radar antenna in the direction of the target
monostaticModel.AntennaControl.EmbeddedModelOrientation.AssignAzEl(50.9, 36.8, AgEAzElAboutBoresight.eAzElAboutBoresightRotate);


//Set the radar antenna model to parabolic
monostaticModel.AntennaControl.SetEmbeddedModel("Parabolic");
IAgAntennaModelParabolic parabolic = monostaticModel.AntennaControl.EmbeddedModel as IAgAntennaModelParabolic;

//Give the parabolic antenna a 2 deg beamwidth;
parabolic.InputType = AgEAntennaModelInputType.eAntennaModelInputTypeBeamwidth;
parabolic.Beamwidth = 2.0;

//Put the monostatic radar model in Search/Track mode
monostaticModel.SetMode("Search Track");
IAgRadarModeMonostaticSearchTrack searchTrackMode = monostaticModel.Mode as IAgRadarModeMonostaticSearchTrack;

//Set the waveform type to fixed prf
searchTrackMode.SetWaveformType(AgERadarWaveformSearchTrackType.eRadarWaveformSearchTrackTypeFixedPRF);
IAgRadarWaveformMonostaticSearchTrackFixedPRF fixedPrf = searchTrackMode.Waveform as IAgRadarWaveformMonostaticSearchTrackFixedPRF;
fixedPrf.PulseDefinition.Prf = 0.002; //2 kHz

//Set the pulse width to 1e-8 sec
fixedPrf.PulseDefinition.PulseWidth = 1.0e-8; //sec

//Set the number of pulses
fixedPrf.PulseDefinition.NumberOfPulses = 25;

//Set the pulse integration strategy to goal SNR
fixedPrf.PulseIntegrationType = AgERadarPulseIntegrationType.eRadarPulseIntegrationTypeGoalSNR;
IAgRadarPulseIntegrationGoalSNR pulseIntGoalSNR = fixedPrf.PulseIntegration as IAgRadarPulseIntegrationGoalSNR;
pulseIntGoalSNR.SNR = 40.0; //dB

//Set the transmit frequency
monostaticModel.Transmitter.FrequencySpecification = AgERadarFrequencySpec.eRadarFrequencySpecFrequency;
monostaticModel.Transmitter.Frequency = 2.1; //GHz

//Set the transmit power
monostaticModel.Transmitter.Power = 50.0; //dBW

//Enable rain loss computation on the receiver
monostaticModel.Receiver.UseRain = true;
monostaticModel.Receiver.RainOutagePercent = 0.001;

//Enable the receiver system noise temperature computation.
monostaticModel.Receiver.SystemNoiseTemperature.ComputeType = AgENoiseTempComputeType.eNoiseTempComputeTypeCalculate;

//Enable the antenna noise temperature computation
monostaticModel.Receiver.SystemNoiseTemperature.AntennaNoiseTemperature.ComputeType = AgENoiseTempComputeType.eNoiseTempComputeTypeCalculate;
monostaticModel.Receiver.SystemNoiseTemperature.AntennaNoiseTemperature.UseRain = true;

//Don't inherit the radar cross section settings from the scenario
targetAircraft.RadarCrossSection.Inherit = false;
IAgRadarCrossSectionModel rcs = targetAircraft.RadarCrossSection.Model as IAgRadarCrossSectionModel;

//Set the radar cross section compute strategy to constan value
rcs.FrequencyBands[0].SetComputeStrategy("Constant Value");
IAgRadarCrossSectionComputeStrategyConstantValue constValRcs = 
    rcs.FrequencyBands[0].ComputeStrategy as IAgRadarCrossSectionComputeStrategyConstantValue;

//Set the constant radar cross section to 0.5 dBsm
constValRcs.ConstantValue = 0.5; //dBsm            

//Create an access object for the access between the radar and target
IAgStkAccess radarAccess = rdrAsStkObject.GetAccessToObject(tgtAsStkObject);

//Compute access
radarAccess.ComputeAccess();

// Get the access intervals 
IAgIntervalCollection accessIntervals = radarAccess.ComputedAccessIntervalTimes;

// Extract the access intervals and the range information for each access interval 
Array dataPrvElements = new object[] { "Time", "S/T SNR1", "S/T PDet1", "S/T Integrated SNR", "S/T Integrated PDet" };

IAgDataPrvTimeVar dp = radarAccess.DataProviders["Radar SearchTrack"] as IAgDataPrvTimeVar;

for (int index0 = 0; index0 < accessIntervals.Count; ++index0)
{
    object startTime = null, stopTime = null;
    accessIntervals.GetInterval(index0, out startTime, out stopTime);

    IAgDrResult result = dp.ExecElements(startTime, stopTime, 60, ref dataPrvElements);

    Array timeValues = result.DataSets.GetDataSetByName("Time").GetValues();
    Array snr1 = result.DataSets.GetDataSetByName("S/T SNR1").GetValues();
    Array pdet1 = result.DataSets.GetDataSetByName("S/T PDet1").GetValues();
    Array integSnr = result.DataSets.GetDataSetByName("S/T Integrated SNR").GetValues();
    Array integPdet = result.DataSets.GetDataSetByName("S/T Integrated PDet").GetValues();

    for (int index1 = 0; index1 < timeValues.GetLength(0); ++index1)
    {
        string time = (string)timeValues.GetValue(index1);
        double snr1Val = (double)snr1.GetValue(index1);
        double pdet1Val = (double)pdet1.GetValue(index1);
        double integSnrVal = (double)integSnr.GetValue(index1);
        double integPdetVal = (double)integPdet.GetValue(index1);
        Console.WriteLine("{0}: SNR1={1} PDet1={2} Integrated SNR={3} Integrated PDet={4}", time, snr1Val, pdet1Val, integSnrVal, integPdetVal);
    }

    Console.WriteLine();
}
Compute a link budget for a Transmtiter and Receiver pair, using complex models
[C#]
IAgStkObject xmtrAsStkObject = geoTransmitter as IAgStkObject;
IAgStkObject rcvrAsStkObject = facilityReceiver as IAgStkObject;

//Enable the rain loss computation on the scenario RF environment
scenarioRFEnv.PropagationChannel.EnableRainLoss = true;

//Set the transmitter to the complex model
geoTransmitter.SetModel("Complex Transmitter Model");
IAgTransmitterModelComplex complexTrans = geoTransmitter.Model as IAgTransmitterModelComplex;

//Set the complex transmitter model's frequency to 3.2 GHz
complexTrans.Frequency = 3.2;

//Set the complex transmitter model's Power to 50 dBW
complexTrans.Power = 50.0;

//Set the complex transmitter's embedded antenna model to helix
complexTrans.AntennaControl.SetEmbeddedModel("Helix");

//Set the beamwidth of the parablic antenna to 2 degrees
IAgAntennaModelHelix helix = complexTrans.AntennaControl.EmbeddedModel as IAgAntennaModelHelix;
helix.NumberOfTurns = 30.0;

//Orient the complex transmitter embedded antenna's boresight to point directly at the receiver's location
complexTrans.AntennaControl.EmbeddedModelOrientation.AssignAzEl(287.2, 83.4, AgEAzElAboutBoresight.eAzElAboutBoresightRotate);

//Set the receiver to the complex model
facilityReceiver.SetModel("Complex Receiver Model");
IAgReceiverModelComplex complexRcvr = facilityReceiver.Model as IAgReceiverModelComplex;

//Configure the complex receiver to use the antenna object on the same parent facility, by linking
complexRcvr.AntennaControl.ReferenceType = AgEAntennaControlRefType.eAntennaControlRefTypeLink;
complexRcvr.AntennaControl.LinkedAntennaObject = "Antenna/FacilityDish";

//Enable rain loss computation on the receiver
complexRcvr.UseRain = true;
complexRcvr.RainOutagePercent = 0.001;

//Enable the receiver system noise temperature computation.
complexRcvr.SystemNoiseTemperature.ComputeType = AgENoiseTempComputeType.eNoiseTempComputeTypeCalculate;

//Enable the antenna noise temperature computation
complexRcvr.SystemNoiseTemperature.AntennaNoiseTemperature.ComputeType = AgENoiseTempComputeType.eNoiseTempComputeTypeCalculate;
complexRcvr.SystemNoiseTemperature.AntennaNoiseTemperature.UseRain = true;

//Orient the antenna object's boresight to point directly at the transmitter's location
facilityDish.Orientation.AssignAzEl(202.6, 41.2, AgEAzElAboutBoresight.eAzElAboutBoresightRotate);

//Set the antenna object's model to parabolic
facilityDish.SetModel("Parabolic");

//Set the antenan object's design frequency to match the transmitter's 3.2 GHz
facilityDish.Model.DesignFrequency = 3.2;

//Set the antenna object's parabolic model diameter to 5 m.
IAgAntennaModelParabolic parabolic = facilityDish.Model as IAgAntennaModelParabolic;
parabolic.InputType = AgEAntennaModelInputType.eAntennaModelInputTypeDiameter;
parabolic.Diameter = 5.0;

//Create an access object for the access between the transmitter and recevier objects
IAgStkAccess linkAccess = xmtrAsStkObject.GetAccessToObject(rcvrAsStkObject);

//Compute access
linkAccess.ComputeAccess();

// Get the access intervals 
IAgIntervalCollection accessIntervals = linkAccess.ComputedAccessIntervalTimes;

// Extract the access intervals and the range information for each access interval 
Array dataPrvElements = new object[] { "Time", "Xmtr Gain", "Rcvr Gain", "Eb/No", "BER" };

IAgDataPrvTimeVar dp = linkAccess.DataProviders["Link Information"] as IAgDataPrvTimeVar;

for (int index0 = 0; index0 < accessIntervals.Count; ++index0)
{
    object startTime = null, stopTime = null;

    accessIntervals.GetInterval(index0, out startTime, out stopTime);

    IAgDrResult result = dp.ExecElements(startTime, stopTime, 60, ref dataPrvElements);

    Array timeValues = result.DataSets[0].GetValues();
    Array xmtrGain = result.DataSets[1].GetValues();
    Array rcvrGain = result.DataSets[2].GetValues();
    Array ebno = result.DataSets[3].GetValues();
    Array ber = result.DataSets[4].GetValues();

    for (int index1 = 0; index1 < timeValues.GetLength(0); ++index1)
    {
        string time = (string)timeValues.GetValue(index1);
        double xmtrGainVal = (double)xmtrGain.GetValue(index1);
        double rcvrGainVal = (double)rcvrGain.GetValue(index1);
        double ebnoVal = (double)ebno.GetValue(index1);
        double berVal = (double)ber.GetValue(index1);
        Console.WriteLine("{0}: Xmtr Gain = {1} Rcvr Gain = {2} Eb/No={3} BER={4}", time, xmtrGainVal, rcvrGainVal, ebnoVal, berVal);
    }

    Console.WriteLine();
}

Compute a link budget for a Transmtiter and Receiver pair, using complex models
[Visual Basic .NET]
Dim xmtrAsStkObject As IAgStkObject = TryCast(geoTransmitter, IAgStkObject)
Dim rcvrAsStkObject As IAgStkObject = TryCast(facilityReceiver, IAgStkObject)

'Enable the rain loss computation on the scenario RF environment
scenarioRFEnv.PropagationChannel.EnableRainLoss = True

'Set the transmitter to the complex model
geoTransmitter.SetModel("Complex Transmitter Model")
Dim complexTrans As IAgTransmitterModelComplex = TryCast(geoTransmitter.Model, IAgTransmitterModelComplex)

'Set the complex transmitter model's frequency to 3.2 GHz
complexTrans.Frequency = 3.2

'Set the complex transmitter model's Power to 50 dBW
complexTrans.Power = 50

'Set the complex transmitter's embedded antenna model to helix
complexTrans.AntennaControl.SetEmbeddedModel("Helix")

'Set the beamwidth of the parablic antenna to 2 degrees
Dim helix As IAgAntennaModelHelix = TryCast(complexTrans.AntennaControl.EmbeddedModel, IAgAntennaModelHelix)
helix.NumberOfTurns = 30

'Orient the complex transmitter embedded antenna's boresight to point directly at the receiver's location
complexTrans.AntennaControl.EmbeddedModelOrientation.AssignAzEl(287.2, 83.4, AgEAzElAboutBoresight.eAzElAboutBoresightRotate)

'Set the receiver to the complex model
facilityReceiver.SetModel("Complex Receiver Model")
Dim complexRcvr As IAgReceiverModelComplex = TryCast(facilityReceiver.Model, IAgReceiverModelComplex)

'Configure the complex receiver to use the antenna object on the same parent facility, by linking
complexRcvr.AntennaControl.ReferenceType = AgEAntennaControlRefType.eAntennaControlRefTypeLink
complexRcvr.AntennaControl.LinkedAntennaObject = "Antenna/FacilityDish"

'Enable rain loss computation on the receiver
complexRcvr.UseRain = True
complexRcvr.RainOutagePercent = 0.001

'Enable the receiver system noise temperature computation.
complexRcvr.SystemNoiseTemperature.ComputeType = AgENoiseTempComputeType.eNoiseTempComputeTypeCalculate

'Enable the antenna noise temperature computation
complexRcvr.SystemNoiseTemperature.AntennaNoiseTemperature.ComputeType = AgENoiseTempComputeType.eNoiseTempComputeTypeCalculate
complexRcvr.SystemNoiseTemperature.AntennaNoiseTemperature.UseRain = True

'Orient the antenna object's boresight to point directly at the transmitter's location
facilityDish.Orientation.AssignAzEl(202.6, 41.2, AgEAzElAboutBoresight.eAzElAboutBoresightRotate)

'Set the antenna object's model to parabolic
facilityDish.SetModel("Parabolic")

'Set the antenan object's design frequency to match the transmitter's 3.2 GHz
facilityDish.Model.DesignFrequency = 3.2

'Set the antenna object's parabolic model diameter to 5 m.
Dim parabolic As IAgAntennaModelParabolic = TryCast(facilityDish.Model, IAgAntennaModelParabolic)
parabolic.InputType = AgEAntennaModelInputType.eAntennaModelInputTypeDiameter
parabolic.Diameter = 5

'Create an access object for the access between the transmitter and recevier objects
Dim linkAccess As IAgStkAccess = xmtrAsStkObject.GetAccessToObject(rcvrAsStkObject)

'Compute access
linkAccess.ComputeAccess()

' Get the access intervals 
Dim accessIntervals As IAgIntervalCollection = linkAccess.ComputedAccessIntervalTimes

' Extract the access intervals and the range information for each access interval 
Dim dataPrvElements As Array = New Object() {"Time", "Xmtr Gain", "Rcvr Gain", "Eb/No", "BER"}

Dim dp As IAgDataPrvTimeVar = TryCast(linkAccess.DataProviders("Link Information"), IAgDataPrvTimeVar)

Dim index0 As Integer = 0
While index0 < accessIntervals.Count
	Dim startTime As Object = Nothing, stopTime As Object = Nothing

	accessIntervals.GetInterval(index0, startTime, stopTime)

	Dim result As IAgDrResult = dp.ExecElements(startTime, stopTime, 60, dataPrvElements)

	Dim timeValues As Array = result.DataSets(0).GetValues()
	Dim xmtrGain As Array = result.DataSets(1).GetValues()
	Dim rcvrGain As Array = result.DataSets(2).GetValues()
	Dim ebno As Array = result.DataSets(3).GetValues()
	Dim ber As Array = result.DataSets(4).GetValues()

	Dim index1 As Integer = 0
	While index1 < timeValues.GetLength(0)
		Dim time As String = DirectCast(timeValues.GetValue(index1), String)
		Dim xmtrGainVal As Double = DirectCast(xmtrGain.GetValue(index1), Double)
		Dim rcvrGainVal As Double = DirectCast(rcvrGain.GetValue(index1), Double)
		Dim ebnoVal As Double = DirectCast(ebno.GetValue(index1), Double)
		Dim berVal As Double = DirectCast(ber.GetValue(index1), Double)
		Console.WriteLine("{0}: Xmtr Gain = {1} Rcvr Gain = {2} Eb/No={3} BER={4}", time, xmtrGainVal, rcvrGainVal, ebnoVal, berVal)
		System.Threading.Interlocked.Increment(index1)
	End While

	Console.WriteLine()
	System.Threading.Interlocked.Increment(index0)
End While

Compute the probability of detection of a target for a monostatic search/track radar
[Visual Basic .NET]
Dim rdrAsStkObject As IAgStkObject = TryCast(radar, IAgStkObject)
Dim tgtAsStkObject As IAgStkObject = TryCast(targetAircraft, IAgStkObject)

'Enable the rain loss computation on the scenario RF environment
scenarioRFEnv.PropagationChannel.EnableRainLoss = True

'Configure the radar object as a monostatic model.
radar.SetModel("Monostatic")
Dim monostaticModel As IAgRadarModelMonostatic = TryCast(radar.Model, IAgRadarModelMonostatic)

'Orient the radar antenna in the direction of the target
monostaticModel.AntennaControl.EmbeddedModelOrientation.AssignAzEl(50.9, 36.8, AgEAzElAboutBoresight.eAzElAboutBoresightRotate)


'Set the radar antenna model to parabolic
monostaticModel.AntennaControl.SetEmbeddedModel("Parabolic")
Dim parabolic As IAgAntennaModelParabolic = TryCast(monostaticModel.AntennaControl.EmbeddedModel, IAgAntennaModelParabolic)

'Give the parabolic antenna a 2 deg beamwidth;
parabolic.InputType = AgEAntennaModelInputType.eAntennaModelInputTypeBeamwidth
parabolic.Beamwidth = 2

'Put the monostatic radar model in Search/Track mode
monostaticModel.SetMode("Search Track")
Dim searchTrackMode As IAgRadarModeMonostaticSearchTrack = TryCast(monostaticModel.Mode, IAgRadarModeMonostaticSearchTrack)

'Set the waveform type to fixed prf
searchTrackMode.SetWaveformType(AgERadarWaveformSearchTrackType.eRadarWaveformSearchTrackTypeFixedPRF)
Dim fixedPrf As IAgRadarWaveformMonostaticSearchTrackFixedPRF = TryCast(searchTrackMode.Waveform, IAgRadarWaveformMonostaticSearchTrackFixedPRF)
fixedPrf.PulseDefinition.Prf = 0.002
'2 kHz
'Set the pulse width to 1e-8 sec
fixedPrf.PulseDefinition.PulseWidth = 1E-08
'sec
'Set the number of pulses
fixedPrf.PulseDefinition.NumberOfPulses = 25

'Set the pulse integration strategy to goal SNR
fixedPrf.PulseIntegrationType = AgERadarPulseIntegrationType.eRadarPulseIntegrationTypeGoalSNR
Dim pulseIntGoalSNR As IAgRadarPulseIntegrationGoalSNR = TryCast(fixedPrf.PulseIntegration, IAgRadarPulseIntegrationGoalSNR)
pulseIntGoalSNR.SNR = 40
'dB
'Set the transmit frequency
monostaticModel.Transmitter.FrequencySpecification = AgERadarFrequencySpec.eRadarFrequencySpecFrequency
monostaticModel.Transmitter.Frequency = 2.1
'GHz
'Set the transmit power
monostaticModel.Transmitter.Power = 50
'dBW
'Enable rain loss computation on the receiver
monostaticModel.Receiver.UseRain = True
monostaticModel.Receiver.RainOutagePercent = 0.001

'Enable the receiver system noise temperature computation.
monostaticModel.Receiver.SystemNoiseTemperature.ComputeType = AgENoiseTempComputeType.eNoiseTempComputeTypeCalculate

'Enable the antenna noise temperature computation
monostaticModel.Receiver.SystemNoiseTemperature.AntennaNoiseTemperature.ComputeType = AgENoiseTempComputeType.eNoiseTempComputeTypeCalculate
monostaticModel.Receiver.SystemNoiseTemperature.AntennaNoiseTemperature.UseRain = True

'Don't inherit the radar cross section settings from the scenario
targetAircraft.RadarCrossSection.Inherit = False
Dim rcs As IAgRadarCrossSectionModel = TryCast(targetAircraft.RadarCrossSection.Model, IAgRadarCrossSectionModel)

'Set the radar cross section compute strategy to constan value
rcs.FrequencyBands(0).SetComputeStrategy("Constant Value")
Dim constValRcs As IAgRadarCrossSectionComputeStrategyConstantValue = TryCast(rcs.FrequencyBands(0).ComputeStrategy, IAgRadarCrossSectionComputeStrategyConstantValue)

'Set the constant radar cross section to 0.5 dBsm
constValRcs.ConstantValue = 0.5
'dBsm            
'Create an access object for the access between the radar and target
Dim radarAccess As IAgStkAccess = rdrAsStkObject.GetAccessToObject(tgtAsStkObject)

'Compute access
radarAccess.ComputeAccess()

' Get the access intervals 
Dim accessIntervals As IAgIntervalCollection = radarAccess.ComputedAccessIntervalTimes

' Extract the access intervals and the range information for each access interval 
Dim dataPrvElements As Array = New Object() {"Time", "S/T SNR1", "S/T PDet1", "S/T Integrated SNR", "S/T Integrated PDet"}

Dim dp As IAgDataPrvTimeVar = TryCast(radarAccess.DataProviders("Radar SearchTrack"), IAgDataPrvTimeVar)

Dim index0 As Integer = 0
While index0 < accessIntervals.Count
	Dim startTime As Object = Nothing, stopTime As Object = Nothing
	accessIntervals.GetInterval(index0, startTime, stopTime)

	Dim result As IAgDrResult = dp.ExecElements(startTime, stopTime, 60, dataPrvElements)

	Dim timeValues As Array = result.DataSets.GetDataSetByName("Time").GetValues()
	Dim snr1 As Array = result.DataSets.GetDataSetByName("S/T SNR1").GetValues()
	Dim pdet1 As Array = result.DataSets.GetDataSetByName("S/T PDet1").GetValues()
	Dim integSnr As Array = result.DataSets.GetDataSetByName("S/T Integrated SNR").GetValues()
	Dim integPdet As Array = result.DataSets.GetDataSetByName("S/T Integrated PDet").GetValues()

	Dim index1 As Integer = 0
	While index1 < timeValues.GetLength(0)
		Dim time As String = DirectCast(timeValues.GetValue(index1), String)
		Dim snr1Val As Double = DirectCast(snr1.GetValue(index1), Double)
		Dim pdet1Val As Double = DirectCast(pdet1.GetValue(index1), Double)
		Dim integSnrVal As Double = DirectCast(integSnr.GetValue(index1), Double)
		Dim integPdetVal As Double = DirectCast(integPdet.GetValue(index1), Double)
		Console.WriteLine("{0}: SNR1={1} PDet1={2} Integrated SNR={3} Integrated PDet={4}", time, snr1Val, pdet1Val, integSnrVal, integPdetVal)
		System.Threading.Interlocked.Increment(index1)
	End While

	Console.WriteLine()
	System.Threading.Interlocked.Increment(index0)
End While
© 2024 Analytical Graphics, Inc. All Rights Reserved.