diff --git a/Software/PC_Application/Calibration/calkit.cpp b/Software/PC_Application/Calibration/calkit.cpp index c719f59..000bca7 100644 --- a/Software/PC_Application/Calibration/calkit.cpp +++ b/Software/PC_Application/Calibration/calkit.cpp @@ -80,6 +80,13 @@ Calkit Calkit::fromFile(QString filename) qDebug() << "JSON format detected"; // calkit file uses json format, parse Savable::parseJSON(j, c.descr); + auto jSOLT = j["SOLT"]; + if (!jSOLT.contains("loadModelCFirst")) { + // older version which did not allow the user to choose the load model. CFirst seems to be the more + // used standard so it is the default for newer calkits. However, old calkits used LFirst so we need + // to keep that to not mess with older calkit files + c.SOLT.loadModelCFirst = false; + } // adjust Z0/resistance in case of older calkit file version with missing resistance entries if(isnan(c.SOLT.load_f.resistance)) { c.SOLT.load_f.resistance = c.SOLT.load_f.Z0; @@ -207,14 +214,20 @@ class Calkit::SOLT Calkit::toSOLT(double frequency, bool male_standards) ref.Load = ts_load->interpolate(frequency).S[0]; } else { auto imp_load = complex(Load.resistance, 0); + if (SOLT.loadModelCFirst) { + // C is the first parameter starting from the VNA port. But the load is modeled here starting from + // the other end, so we need to start with the inductor + imp_load += complex(0, frequency * 2 * M_PI * Load.Lseries); + } // Add parallel capacitor to impedance if(Load.Cparallel > 0) { auto imp_C = complex(0, -1.0 / (frequency * 2 * M_PI * Load.Cparallel)); imp_load = (imp_load * imp_C) / (imp_load + imp_C); } - // add series inductor to impedance - auto imp_L = complex(0, frequency * 2 * M_PI * Load.Lseries); - imp_load += imp_L; + if (!SOLT.loadModelCFirst) { + // inductor not added yet, do so now + imp_load += complex(0, frequency * 2 * M_PI * Load.Lseries); + } ref.Load = (imp_load - complex(50.0)) / (imp_load + complex(50.0)); ref.Load = addTransmissionLine(ref.Load, Load.Z0, Load.delay*1e-12, 0, frequency); } diff --git a/Software/PC_Application/Calibration/calkit.h b/Software/PC_Application/Calibration/calkit.h index 8947310..3c4e8ac 100644 --- a/Software/PC_Application/Calibration/calkit.h +++ b/Software/PC_Application/Calibration/calkit.h @@ -79,6 +79,7 @@ private: int Sparam; }; Load load_m, load_f; + bool loadModelCFirst; struct { double Z0, delay, loss; QString file; @@ -152,6 +153,7 @@ private: {&SOLT.short_f.file, "SOLT.Short.Measurements.File_Female", ""}, {&SOLT.short_f.Sparam, "SOLT.Short.Measurements.Port_Female", 0}, + {&SOLT.loadModelCFirst, "SOLT.loadModelCFirst", true}, {&SOLT.load_m.resistance, "SOLT.Load.Param.Resistance", 50.0}, {&SOLT.load_m.Z0, "SOLT.Load.Param.Z0", 50.0}, {&SOLT.load_m.delay, "SOLT.Load.Param.Delay", 0.0}, diff --git a/Software/PC_Application/Calibration/calkitdialog.cpp b/Software/PC_Application/Calibration/calkitdialog.cpp index 6d66a62..7f8cca4 100644 --- a/Software/PC_Application/Calibration/calkitdialog.cpp +++ b/Software/PC_Application/Calibration/calkitdialog.cpp @@ -249,6 +249,7 @@ void CalkitDialog::parseEntries() ownKit.SOLT.short_m.L2 = ui->short_L2->value(); ownKit.SOLT.short_m.L3 = ui->short_L3->value(); + ownKit.SOLT.loadModelCFirst = ui->load_C_first->isChecked(); ownKit.SOLT.load_m.resistance = ui->load_resistance->value(); ownKit.SOLT.load_m.Z0 = ui->load_Z0->value(); ownKit.SOLT.load_m.delay = ui->load_delay->value(); @@ -336,6 +337,8 @@ void CalkitDialog::updateEntries() ui->short_L2->setValueQuiet(ownKit.SOLT.short_m.L2); ui->short_L3->setValueQuiet(ownKit.SOLT.short_m.L3); + ui->load_C_first->setChecked(ownKit.SOLT.loadModelCFirst); + ui->load_L_first->setChecked(!ownKit.SOLT.loadModelCFirst); ui->load_resistance->setValueQuiet(ownKit.SOLT.load_m.resistance); ui->load_Z0->setValueQuiet(ownKit.SOLT.load_m.Z0); ui->load_delay->setValueQuiet(ownKit.SOLT.load_m.delay); diff --git a/Software/PC_Application/Calibration/calkitdialog.ui b/Software/PC_Application/Calibration/calkitdialog.ui index 3cb705d..dee0f6d 100644 --- a/Software/PC_Application/Calibration/calkitdialog.ui +++ b/Software/PC_Application/Calibration/calkitdialog.ui @@ -722,7 +722,7 @@ - 1 + 0 @@ -940,6 +940,35 @@ + + + + Load Parameter Model + + + + + + Series L first + + + LoadModel + + + + + + + Shunt C first + + + LoadModel + + + + + + @@ -1477,12 +1506,13 @@ - - - + + + +