From 2f018e386764562e825eeaebd30ef2367671313a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20K=C3=A4berich?= Date: Sun, 10 Aug 2025 17:17:53 +0200 Subject: [PATCH] New calibration type: OSL --- .../LibreVNA-GUI/Calibration/calibration.cpp | 30 +++++++++++++------ .../LibreVNA-GUI/Calibration/calibration.h | 2 ++ 2 files changed, 23 insertions(+), 9 deletions(-) diff --git a/Software/PC_Application/LibreVNA-GUI/Calibration/calibration.cpp b/Software/PC_Application/LibreVNA-GUI/Calibration/calibration.cpp index 63e30c0..18d06c1 100644 --- a/Software/PC_Application/LibreVNA-GUI/Calibration/calibration.cpp +++ b/Software/PC_Application/LibreVNA-GUI/Calibration/calibration.cpp @@ -301,6 +301,7 @@ QString Calibration::TypeToString(Calibration::Type type) { switch(type) { case Type::None: return "None"; + case Type::OSL: return "OSL"; case Type::SOLT: return "SOLT"; case Type::ThroughNormalization: return "ThroughNormalization"; case Type::TRL: return "TRL"; @@ -708,19 +709,19 @@ Calibration::Point Calibration::createInitializedPoint(double f) { point.frequency = f; // resize vectors point.D.resize(caltype.usedPorts.size(), 0.0); - point.R.resize(caltype.usedPorts.size(), 0.0); + point.R.resize(caltype.usedPorts.size(), 1.0); point.S.resize(caltype.usedPorts.size(), 0.0); point.L.resize(caltype.usedPorts.size()); point.T.resize(caltype.usedPorts.size()); point.I.resize(caltype.usedPorts.size()); fill(point.L.begin(), point.L.end(), vector>(caltype.usedPorts.size(), 0.0)); - fill(point.T.begin(), point.T.end(), vector>(caltype.usedPorts.size(), 0.0)); + fill(point.T.begin(), point.T.end(), vector>(caltype.usedPorts.size(), 1.0)); fill(point.I.begin(), point.I.end(), vector>(caltype.usedPorts.size(), 0.0)); return point; } -Calibration::Point Calibration::computeSOLT(double f) +Calibration::Point Calibration::computeOSL(double f) { Point point = createInitializedPoint(f); @@ -762,6 +763,13 @@ Calibration::Point Calibration::computeSOLT(double f) auto delta = (l_c * l_m * (o_m - s_m) + o_c * o_m * (s_m - l_m) + s_c * s_m * (l_m - o_m)) / denom; point.R[i] = point.D[i] * point.S[i] - delta; } + return point; +} + +Calibration::Point Calibration::computeSOLT(double f) +{ + Point point = computeOSL(f); + // calculate forward match and transmission for(unsigned int i=0;i points; Point createInitializedPoint(double f); + Point computeOSL(double f); Point computeSOLT(double f); Point computeThroughNormalization(double f); Point computeTRL(double f);