public void PowerBurstBt30() { PredictionModel model = new PredictionModel(); double _CEI_ = 0.249; double _DeploymentDuration_ = 30; int _Beams_ = 4; double _SystemFrequency_ = 288000; bool _CWPON_ = true; double _CWPBL_ = 1; double _CWPBS_ = 4; double _CWPBN_ = 30; double _CWPBB_LagLength_ = 1; Commands.AdcpSubsystemCommands.eCWPBB_TransmitPulseType _CWPBB_TransmitPulseType_ = Commands.AdcpSubsystemCommands.eCWPBB_TransmitPulseType.BROADBAND; double _CWPP_ = 1; double _CWPTBP_ = 0.5; bool _CBTON_ = true; Commands.AdcpSubsystemCommands.eCBTBB_Mode _CBTBB_TransmitPulseType_ = Commands.AdcpSubsystemCommands.eCBTBB_Mode.BROADBAND_CODED; double _BeamAngle_ = 20; double _SpeedOfSound_ = 1490; double _SystemBootPower_ = 1.80; double _SystemWakeupTime_ = 0.40; double _SystemInitPower_ = 2.80; double _SystemInitTime_ = 0.25; bool _BroadbandPower_ = true; double _SystemSavePower_ = 1.80; double _SystemSaveTime_ = 0.15; double _SystemSleepPower_ = 0.024; double _BeamDiameter_ = 0.075; double _CyclesPerElement_ = 12; int _CBI_EnsemblesPerBurst_ = 4096; double _CBI_BurstInterval_ = 3600; int _CBI_IsInterleaved_ = 0; double _BatteryCapacity_ = 440.0; double _BatteryDerate_ = 0.85; double _BatterySelfDischarge_ = 0.05; double temperature = 10.0; double salinity = 35.0; double xdcrDepth = 0.0; double power = model.CalculatePowerBurst(_CEI_, _DeploymentDuration_, _Beams_, _SystemFrequency_, _CWPON_, _CWPBL_, _CWPBS_, _CWPBN_, _CWPBB_LagLength_, _CWPBB_TransmitPulseType_, _CWPP_, _CWPTBP_, _CBTON_, _CBTBB_TransmitPulseType_, _BeamAngle_, _SpeedOfSound_, _SystemBootPower_, _SystemWakeupTime_, _SystemInitPower_, _SystemInitTime_, _BroadbandPower_, _SystemSavePower_, _SystemSaveTime_, _SystemSleepPower_, _BeamDiameter_, _CyclesPerElement_, temperature, salinity, xdcrDepth, _CBI_EnsemblesPerBurst_, _CBI_BurstInterval_, _CBI_IsInterleaved_); double correctAnswer = 12475.41; Assert.AreEqual(correctAnswer, power, 0.01); double batteryUsage = model.BatteryUsage(power, _DeploymentDuration_, _BatteryCapacity_, _BatteryDerate_, _BatterySelfDischarge_); double correctBattery = 33.36; Assert.AreEqual(correctBattery, batteryUsage, 0.01); }
public void PowerNB() { PredictionModel model = new PredictionModel(); double _CEI_ = 1; double _DeploymentDuration_ = 30; int _Beams_ = 4; double _SystemFrequency_ = 288000; bool _CWPON_ = true; double _CWPBL_ = 1; double _CWPBS_ = 4; double _CWPBN_ = 30; double _CWPBB_LagLength_ = 1; Commands.AdcpSubsystemCommands.eCWPBB_TransmitPulseType _CWPBB_TransmitPulseType_ = Commands.AdcpSubsystemCommands.eCWPBB_TransmitPulseType.NARROWBAND; double _CWPP_ = 9; double _CWPTBP_ = 0.5; bool _CBTON_ = true; Commands.AdcpSubsystemCommands.eCBTBB_Mode _CBTBB_TransmitPulseType_ = Commands.AdcpSubsystemCommands.eCBTBB_Mode.NARROWBAND_LONG_RANGE; double _BeamAngle_ = 20; double _SpeedOfSound_ = 1490; double _SystemBootPower_ = 1.80; double _SystemWakeupTime_ = 0.40; double _SystemInitPower_ = 2.80; double _SystemInitTime_ = 0.25; bool _BroadbandPower_ = true; double _SystemSavePower_ = 1.80; double _SystemSaveTime_ = 0.15; double _SystemSleepPower_ = 0.024; double _BeamDiameter_ = 0.075; double _CyclesPerElement_ = 12; double _BatteryCapacity_ = 440.0; double _BatteryDerate_ = 0.85; double _BatterySelfDischarge_ = 0.05; double temperature = 10.0; double salinity = 35.0; double xdcrDepth = 0.0; double power = model.CalculatePower(_CEI_, _DeploymentDuration_, _Beams_, _SystemFrequency_, _CWPON_, _CWPBL_, _CWPBS_, _CWPBN_, _CWPBB_LagLength_, _CWPBB_TransmitPulseType_, _CWPP_, _CWPTBP_, _CBTON_, _CBTBB_TransmitPulseType_, _BeamAngle_, _SpeedOfSound_, _SystemBootPower_, _SystemWakeupTime_, _SystemInitPower_, _SystemInitTime_, _BroadbandPower_, _SystemSavePower_, _SystemSaveTime_, _SystemSleepPower_, _BeamDiameter_, _CyclesPerElement_, temperature, salinity, xdcrDepth); double correctAnswer = 34770.30; Assert.AreEqual(correctAnswer, power, 0.01); double batteryUsage = model.BatteryUsage(power, _DeploymentDuration_, _BatteryCapacity_, _BatteryDerate_, _BatterySelfDischarge_); double correctBattery = 92.97; Assert.AreEqual(correctBattery, batteryUsage, 0.01); }
/// <summary> /// Setup the predictor. /// </summary> public void CalcPrediction() { if (_pm.SelectedProject.Configuration.SubsystemConfigDict.ContainsKey(ConfigKey)) { PredictionModelInput predInput = new PredictionModelInput(_pm.SelectedProject.Configuration.SubsystemConfigDict[ConfigKey].SubsystemConfig.SubSystem); if (_pm.SelectedProject.Configuration.DeploymentOptions.Duration <= 0) { predInput.DeploymentDuration = 1; } else { predInput.DeploymentDuration = _pm.SelectedProject.Configuration.DeploymentOptions.Duration; } // Absorption predInput.Temperature = _pm.SelectedProject.Configuration.Commands.CWT; predInput.Salinity = _pm.SelectedProject.Configuration.Commands.CWS; predInput.XdcrDepth = _pm.SelectedProject.Configuration.Commands.CTD; predInput.CEI = _pm.SelectedProject.Configuration.Commands.CEI.ToSecondsD(); predInput.CWPON = _pm.SelectedProject.Configuration.SubsystemConfigDict[ConfigKey].Commands.CWPON; predInput.CBTON = _pm.SelectedProject.Configuration.SubsystemConfigDict[ConfigKey].Commands.CBTON; predInput.CBTTBP = _pm.SelectedProject.Configuration.SubsystemConfigDict[ConfigKey].Commands.CBTTBP; predInput.CBTBB_TransmitPulseType = _pm.SelectedProject.Configuration.SubsystemConfigDict[ConfigKey].Commands.CBTBB_Mode; //predInput.CBTBB_TransmitPulseType = Commands.AdcpSubsystemCommands.eCBTBB_Mode.NARROWBAND_LONG_RANGE; // DEFAULT to narrowband because it autoswitches now predInput.CWPTBP = _pm.SelectedProject.Configuration.SubsystemConfigDict[ConfigKey].Commands.CWPTBP; predInput.CWPBN = _pm.SelectedProject.Configuration.SubsystemConfigDict[ConfigKey].Commands.CWPBN; predInput.CWPBS = _pm.SelectedProject.Configuration.SubsystemConfigDict[ConfigKey].Commands.CWPBS; predInput.CWPBL = _pm.SelectedProject.Configuration.SubsystemConfigDict[ConfigKey].Commands.CWPBL; predInput.CWPBB_TransmitPulseType = _pm.SelectedProject.Configuration.SubsystemConfigDict[ConfigKey].Commands.CWPBB_TransmitPulseType; predInput.CWPBB_LagLength = _pm.SelectedProject.Configuration.SubsystemConfigDict[ConfigKey].Commands.CWPBB_LagLength; predInput.CWPP = _pm.SelectedProject.Configuration.SubsystemConfigDict[ConfigKey].Commands.CWPP; predInput.BatteryType = _pm.SelectedProject.Configuration.DeploymentOptions.BatteryType; predInput.CBI_BurstInterval = _pm.SelectedProject.Configuration.SubsystemConfigDict[ConfigKey].Commands.CBI_BurstInterval.ToSecondsD(); predInput.CBI_SamplesPerBurst = _pm.SelectedProject.Configuration.SubsystemConfigDict[ConfigKey].Commands.CBI_NumEnsembles; predInput.CBI_IsInterleaved = _pm.SelectedProject.Configuration.SubsystemConfigDict[ConfigKey].Commands.CBI_BurstPairFlag; // Create Prediction model PredictionModel Predictor = new PredictionModel(); // Set the prediction values PredictionModel.PredictedRanges ranges = Predictor.GetPredictedRange(predInput); PredictedBottomRange = ranges.BottomTrack; PredictedProfileRange = ranges.WaterProfile; ProfileFirstBinPosition = ranges.FirstBinPosition.ToString("0.0000"); double maxVel = Predictor.GetMaxVelocity(predInput); MaximumVelocity = maxVel.ToString("0.0000"); double std = Predictor.GetStandardDeviation(predInput); StandardDeviation = std.ToString("0.0000"); double numBatts = Predictor.BatteryUsage(predInput); NumberBatteryPacks = numBatts; if (CBI_NumEnsembles > 0) { NumberBytes = Predictor.GetDataStorageBurst(predInput); } else { NumberBytes = Predictor.GetDataStorage(predInput); } if (RangeVM != null) { // Update all the properites RangeVM.WaterProfileRange = ranges.WaterProfile; RangeVM.BottomTrackRange = ranges.BottomTrack; RangeVM.WpBlank = predInput.CWPBL; RangeVM.WpFirstBinRange = ranges.FirstBinPosition; if (_pm.IsProjectSelected && _pm.SelectedProject.Configuration != null) { RangeVM.DepthToBottom = predInput.XdcrDepth; } } //this.NotifyOfPropertyChange(() => this.CWPP); //this.NotifyOfPropertyChange(() => this.CWPTBP); //this.NotifyOfPropertyChange(() => this.CWPBS); //this.NotifyOfPropertyChange(() => this.CWPBN); //this.NotifyOfPropertyChange(() => this.CWPBL); //this.NotifyOfPropertyChange(() => this.CWPBB_TransmitPulseType); //this.NotifyOfPropertyChange(() => this.CWPBB_LagLength); //this.NotifyOfPropertyChange(() => this.CBTON); //this.NotifyOfPropertyChange(() => this.CBI_BurstInterval); //this.NotifyOfPropertyChange(() => this.DataSize); //this.NotifyOfPropertyChange(() => this.NumberBatteryPackStr); //this.NotifyOfPropertyChange(() => this.PredictedBottomRangeStr); //this.NotifyOfPropertyChange(() => this.PredictedProfileRangeStr); //this.NotifyOfPropertyChange(() => this.ProfileFirstBinPosition); //this.NotifyOfPropertyChange(() => this.MaximumVelocity); //this.NotifyOfPropertyChange(() => this.StandardDeviation); } }