private void Measure() { results.frequencyRamp = new double[frequencyRamp.Length]; results.measuredPower = new double[frequencyRamp.Length]; results.measuredGain = new double[frequencyRamp.Length]; for (int i = 0; i < frequencyRamp.Length; i++) { results.frequencyRamp[i] = frequencyRamp[i]; // copying the frequency ramp array prevents modification by the user ComplexDouble[] rawIQ; if (queue.TryTake(out rawIQ, timeout.ToTimeSpan())) { results.measuredPower[i] = SignalAnalysis.CalculatePower(rawIQ).Average(); results.measuredGain[i] = results.measuredPower[i] - sgPowerLevel; } } measurementCompleteEvent.Set(); }
public string Analyze(string testDescriptionXml) { string xml = ""; try { var dao = new InstrumentDAO(); var testDescription = TestDescription.Deserialize(testDescriptionXml); var signalTypeLookup = new Dictionary <string, SignalAnalysisType>(); var signalList = new List <string>(); Dictionary <SignalRequirementsSignalRequirement, ICollection <object> > equips = Build(testDescription); foreach (SignalRequirementsSignalRequirement signalRequirement in testDescription.SignalRequirements) { string name = signalRequirement.TsfClass.tsfClassName; string id = signalRequirement.TsfClass.tsfLibraryID; SignalRole role = signalRequirement.role; if ("SHORT".Equals(name)) { continue; } if ("".Equals(name)) { continue; } SignalAnalysisType sat = null; if (!signalTypeLookup.ContainsKey(name)) { sat = new SignalAnalysisType(); sat.Type = name; signalTypeLookup.Add(name, sat); } sat = signalTypeLookup[name]; SignalInstance si = new SignalInstance(); si.Tsf = id; foreach ( SignalRequirementsSignalRequirementTsfClassAttribute tsfClassAttribute in signalRequirement.TsfClassAttribute) { SignalInstanceAttribute sia = new SignalInstanceAttribute(); sia.Name = tsfClassAttribute.Name.Value; sia.Value = tsfClassAttribute.Value.ToString(); if (tsfClassAttribute.Value.Item is DatumType) { object v = Datum.GetNominalDatumValue((DatumType)tsfClassAttribute.Value.Item); sia.NominalValue = v == null?null:v.ToString(); sia.Qualifier = ((DatumType)tsfClassAttribute.Value.Item).unitQualifier; } si.AddAttribute(sia); } if (!signalList.Contains(name + id + si)) { signalList.Add(name + id + si); sat.AddSignal(si); Console.WriteLine(name + si); } } SignalAnalysis signalAnalysis = new SignalAnalysis(); signalAnalysis.Uut = new Uut(); if (testDescription.UUT != null && testDescription.UUT.Description != null && testDescription.UUT.Description.Item != null) { var id = testDescription.UUT.Description.Item as ItemDescription; var docRef = testDescription.UUT.Description.Item as DocumentReference; if (docRef != null) { signalAnalysis.Uut.Name = docRef.DocumentName; signalAnalysis.Uut.Uuid = docRef.uuid; } else if (id != null) { signalAnalysis.Uut.Name = id.name; signalAnalysis.Uut.Uuid = id.Identification.ModelName; signalAnalysis.Uut.Version = id.version; } } signalAnalysis.Tps = ATMLContext.CurrentProjectName; signalAnalysis.RunDateTime = String.Format("{0:yyyy-dd-MM HH:mm:ss}", DateTime.Now); foreach (var testStation in ATMLAllocator.Instance.SelectedTestStations) { var tsa = new TestStationSignalAnalysis(); tsa.Name = testStation.name; tsa.Uuid = testStation.uuid; signalAnalysis.AddTestStation(tsa); foreach (SignalAnalysisType signalType in signalTypeLookup.Values) { SignalAnalysisType copy = signalType.Copy(); tsa.AddSignal(copy); foreach (var signalInstance in copy.SignalInstances) { foreach (var signalInstanceAttribute in signalInstance.Attributes) { try { if (signalInstanceAttribute.NominalValue != null) { bool isValid = dao.TestAttribute(testStation.uuid, signalInstanceAttribute.Name, signalInstanceAttribute.NominalValue, signalInstanceAttribute.Qualifier); signalInstanceAttribute.IsValid = isValid; } } catch (Exception err) { LogManager.SourceError(ATMLAllocator.SOURCE, err); } } } } } xml = XmlUtils.SerializeObject(signalAnalysis); } catch (Exception e) { LogManager.SourceError(ATMLAllocator.SOURCE, e); } return(xml); }
public void Mod_FormatCheck(string strWaveform, string strWaveformName, string strmutateCond, bool WaveformInitalLoad) { #region Variable double papr_dB; ComplexDouble[] iqDataArr; string org_SG_IPath = NF_VSTDriver.SG_Path + strWaveform + @"\I_" + strWaveformName + ".txt"; string org_SG_QPath = NF_VSTDriver.SG_Path + strWaveform + @"\Q_" + strWaveformName + ".txt"; string mut_SG_IPath = NF_VSTDriver.SG_Path + strWaveform + @"\MUTSIG\I_" + strWaveformName + ".txt"; string mut_SG_QPath = NF_VSTDriver.SG_Path + strWaveform + @"\MUTSIG\Q_" + strWaveformName + ".txt"; //check mutate signal folder if (!Directory.Exists(NF_VSTDriver.SG_Path + strWaveform + @"\MUTSIG\")) { Directory.CreateDirectory(NF_VSTDriver.SG_Path + strWaveform + @"\MUTSIG\"); } #endregion #region set IQ Rate and status NoiseFloorWaveformMode ModulationType; ModulationType = (NoiseFloorWaveformMode)Enum.Parse(typeof(NoiseFloorWaveformMode), strWaveform.ToUpper()); int arrayNo = (int)Enum.Parse(ModulationType.GetType(), ModulationType.ToString()); //to get the int value from System.Enum NF_VSTDriver.SignalType[arrayNo].signalMode = ModulationType.ToString(); switch (ModulationType) { case NoiseFloorWaveformMode.CW: NF_VSTDriver.SignalType[arrayNo].status = true; NF_VSTDriver.SignalType[arrayNo].SG_IQRate = 1e6; //set to default CW Rate break; case NoiseFloorWaveformMode.CDMA2K: NF_VSTDriver.SignalType[arrayNo].status = true; NF_VSTDriver.SignalType[arrayNo].SG_IQRate = 4.9152e6; break; case NoiseFloorWaveformMode.CDMA2KRC1: NF_VSTDriver.SignalType[arrayNo].status = true; NF_VSTDriver.SignalType[arrayNo].SG_IQRate = 4.9152e6; break; case NoiseFloorWaveformMode.GSM850: NF_VSTDriver.SignalType[arrayNo].status = true; break; case NoiseFloorWaveformMode.GSM900: NF_VSTDriver.SignalType[arrayNo].status = true; break; case NoiseFloorWaveformMode.GSM1800: NF_VSTDriver.SignalType[arrayNo].status = true; break; case NoiseFloorWaveformMode.GSM1900: NF_VSTDriver.SignalType[arrayNo].status = true; break; case NoiseFloorWaveformMode.GSM850A: NF_VSTDriver.SignalType[arrayNo].status = true; break; case NoiseFloorWaveformMode.GSM900A: NF_VSTDriver.SignalType[arrayNo].status = true; break; case NoiseFloorWaveformMode.GSM1800A: NF_VSTDriver.SignalType[arrayNo].status = true; break; case NoiseFloorWaveformMode.GSM1900A: NF_VSTDriver.SignalType[arrayNo].status = true; break; case NoiseFloorWaveformMode.IS95A: NF_VSTDriver.SignalType[arrayNo].status = true; NF_VSTDriver.SignalType[arrayNo].SG_IQRate = 4.9152e6; break; case NoiseFloorWaveformMode.WCDMA: NF_VSTDriver.SignalType[arrayNo].status = true; NF_VSTDriver.SignalType[arrayNo].SG_IQRate = 7.68e6; break; case NoiseFloorWaveformMode.WCDMAUL: NF_VSTDriver.SignalType[arrayNo].status = true; NF_VSTDriver.SignalType[arrayNo].SG_IQRate = 7.68e6; break; case NoiseFloorWaveformMode.WCDMAGTC1: NF_VSTDriver.SignalType[arrayNo].status = true; NF_VSTDriver.SignalType[arrayNo].SG_IQRate = 7.68e6; break; case NoiseFloorWaveformMode.LTE10M1RB: NF_VSTDriver.SignalType[arrayNo].status = true; NF_VSTDriver.SignalType[arrayNo].SG_IQRate = 15.36e6; break; case NoiseFloorWaveformMode.LTE10M12RB: NF_VSTDriver.SignalType[arrayNo].status = true; NF_VSTDriver.SignalType[arrayNo].SG_IQRate = 15.36e6; break; case NoiseFloorWaveformMode.LTE10M20RB: NF_VSTDriver.SignalType[arrayNo].status = true; NF_VSTDriver.SignalType[arrayNo].SG_IQRate = 15.36e6; break; case NoiseFloorWaveformMode.LTE10M48RB: NF_VSTDriver.SignalType[arrayNo].status = true; NF_VSTDriver.SignalType[arrayNo].SG_IQRate = 15.36e6; break; case NoiseFloorWaveformMode.LTE10M50RB: NF_VSTDriver.SignalType[arrayNo].status = true; NF_VSTDriver.SignalType[arrayNo].SG_IQRate = 15.36e6; break; case NoiseFloorWaveformMode.LTE15M75RB: NF_VSTDriver.SignalType[arrayNo].status = true; NF_VSTDriver.SignalType[arrayNo].SG_IQRate = 23.04e6; break; case NoiseFloorWaveformMode.LTE5M25RB: NF_VSTDriver.SignalType[arrayNo].status = true; NF_VSTDriver.SignalType[arrayNo].SG_IQRate = 7.68e6; break; case NoiseFloorWaveformMode.LTE5M8RB: NF_VSTDriver.SignalType[arrayNo].status = true; NF_VSTDriver.SignalType[arrayNo].SG_IQRate = 7.68e6; break; case NoiseFloorWaveformMode.LTE20M100RB: NF_VSTDriver.SignalType[arrayNo].status = true; NF_VSTDriver.SignalType[arrayNo].SG_IQRate = 30.72e6; break; case NoiseFloorWaveformMode.LTE20M18RB: NF_VSTDriver.SignalType[arrayNo].status = true; NF_VSTDriver.SignalType[arrayNo].SG_IQRate = 30.72e6; break; case NoiseFloorWaveformMode.LTE20M48RB: NF_VSTDriver.SignalType[arrayNo].status = true; NF_VSTDriver.SignalType[arrayNo].SG_IQRate = 30.72e6; break; case NoiseFloorWaveformMode.LTE5MCUSTOM: NF_VSTDriver.SignalType[arrayNo].status = true; NF_VSTDriver.SignalType[arrayNo].SG_IQRate = 7.68e6; break; case NoiseFloorWaveformMode.LTE10MCUSTOM: NF_VSTDriver.SignalType[arrayNo].status = true; NF_VSTDriver.SignalType[arrayNo].SG_IQRate = 15.36e6; break; case NoiseFloorWaveformMode.LTE15MCUSTOM: NF_VSTDriver.SignalType[arrayNo].status = true; NF_VSTDriver.SignalType[arrayNo].SG_IQRate = 23.04e6; break; case NoiseFloorWaveformMode.LTE20MCUSTOM: NF_VSTDriver.SignalType[arrayNo].status = true; NF_VSTDriver.SignalType[arrayNo].SG_IQRate = 30.72e6; break; case NoiseFloorWaveformMode.CDMA2KCUSTOM: NF_VSTDriver.SignalType[arrayNo].status = true; NF_VSTDriver.SignalType[arrayNo].SG_IQRate = 4.9152e6; break; case NoiseFloorWaveformMode.WCDMACUSTOM: NF_VSTDriver.SignalType[arrayNo].status = true; NF_VSTDriver.SignalType[arrayNo].SG_IQRate = 7.68e6; break; default: throw new Exception("Not such a waveform!"); } #endregion #region Normal or Mutate Modulation Signal Generation if (NF_VSTDriver.SignalType[arrayNo].status) { if (NF_VSTDriver.SignalType[arrayNo].signalMode == "CW") { NF_VSTDriver.SignalType[arrayNo].SG_papr_dB = 0; } else { // Read IQ data and calculate PAPR offset for given modulation //Read original waveform iqData_Array(org_SG_IPath, org_SG_IPath, out iqDataArr); papr_dB = SignalAnalysis.PAPR(iqDataArr); NF_VSTDriver.SignalType[arrayNo].SG_papr_dB = Math.Round(papr_dB, 3); // Read IQ data and calculate PAPR offset for given modulation //double[] SG_Idata, SG_Qdata; //ComplexDouble.DecomposeArray(iqDataArr, out SG_Idata, out SG_Qdata); //Filters.PAPR(SG_Idata, SG_Qdata, out papr_dB); //NF_VSTDriver.SignalType[arrayNo].SG_papr_dB = papr_dB; if (MutSignal_Setting.enable) { //NF_VSTDriver.SignalType[arrayNo].SG_IPath = mut_SG_IPath; //NF_VSTDriver.SignalType[arrayNo].SG_QPath = mut_SG_QPath; //var mutSG_Idata = new double[iqDataArr.Length]; //var mutSG_Qdata = new double[iqDataArr.Length]; //Filters.MutateWaveform(SG_Idata.ToArray(), SG_Qdata.ToArray(), NF_VSTDriver.SignalType[arrayNo].SG_IQRate, total_time_sec, mod_time_sec, mod_offset_sec, freq_offset_hz, f_off_delay_sec, out mutSG_Idata, out mutSG_Qdata); //string[] tempIdata = Array.ConvertAll(mutSG_Idata, Convert.ToString); //System.IO.File.WriteAllLines(mut_SG_IPath, tempIdata); //string[] tempQdata = Array.ConvertAll(mutSG_Qdata, Convert.ToString); //System.IO.File.WriteAllLines(mut_SG_QPath, tempQdata); } else { // Set the modulation file path to default if mutate signal no required NF_VSTDriver.SignalType[arrayNo].SG_IPath = org_SG_IPath; NF_VSTDriver.SignalType[arrayNo].SG_QPath = org_SG_QPath; } } } #endregion }