From 4caec3989e4ec5fe5f7f688b6b5bd3dade10049b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20K=C3=A4berich?= Date: Wed, 1 Mar 2023 10:34:54 +0100 Subject: [PATCH] Fix impedance for mixed mode traces --- .../Tools/mixedmodeconversion.cpp | 35 ++++++++++--------- .../LibreVNA-GUI/Traces/trace.cpp | 5 +++ .../LibreVNA-GUI/Traces/trace.h | 2 ++ 3 files changed, 25 insertions(+), 17 deletions(-) diff --git a/Software/PC_Application/LibreVNA-GUI/Tools/mixedmodeconversion.cpp b/Software/PC_Application/LibreVNA-GUI/Tools/mixedmodeconversion.cpp index 447ca38..a07f26e 100644 --- a/Software/PC_Application/LibreVNA-GUI/Tools/mixedmodeconversion.cpp +++ b/Software/PC_Application/LibreVNA-GUI/Tools/mixedmodeconversion.cpp @@ -66,12 +66,13 @@ void MixedModeConversion::selectionChanged() class Destination { public: - Destination(std::vector sources, QString name, QString formula) + Destination(std::vector sources, QString name, QString formula, double reference_impedance) { this->name = name; t = new Trace(name); t->fromMath(); t->setMathFormula(formula); + t->setReferenceImpedance(reference_impedance); // is a reflection trace if the last two chars in the name are the same t->setReflection(name[name.size()-1] == name[name.size()-2]); // add math sources @@ -114,25 +115,25 @@ void MixedModeConversion::selectionChanged() auto prefix = ui->prefix->text(); std::vector destinations = { - Destination(sources, prefix+"SDD11", "0.5*(S11-S13-S31+S33)"), - Destination(sources, prefix+"SDD12", "0.5*(S12-S14-S32+S34)"), - Destination(sources, prefix+"SDD21", "0.5*(S21-S23-S41+S43)"), - Destination(sources, prefix+"SDD22", "0.5*(S22-S24-S42+S44)"), + Destination(sources, prefix+"SDD11", "0.5*(S11-S13-S31+S33)", 2*ui->selector->getReferenceImpedance()), + Destination(sources, prefix+"SDD12", "0.5*(S12-S14-S32+S34)", 2*ui->selector->getReferenceImpedance()), + Destination(sources, prefix+"SDD21", "0.5*(S21-S23-S41+S43)", 2*ui->selector->getReferenceImpedance()), + Destination(sources, prefix+"SDD22", "0.5*(S22-S24-S42+S44)", 2*ui->selector->getReferenceImpedance()), - Destination(sources, prefix+"SDC11", "0.5*(S11+S13-S31-S33)"), - Destination(sources, prefix+"SDC12", "0.5*(S12+S14-S32-S34)"), - Destination(sources, prefix+"SDC21", "0.5*(S21+S23-S41-S43)"), - Destination(sources, prefix+"SDC22", "0.5*(S22+S24-S42-S44)"), + Destination(sources, prefix+"SDC11", "0.5*(S11+S13-S31-S33)", 0.5*ui->selector->getReferenceImpedance()), + Destination(sources, prefix+"SDC12", "0.5*(S12+S14-S32-S34)", 0.5*ui->selector->getReferenceImpedance()), + Destination(sources, prefix+"SDC21", "0.5*(S21+S23-S41-S43)", 0.5*ui->selector->getReferenceImpedance()), + Destination(sources, prefix+"SDC22", "0.5*(S22+S24-S42-S44)", 0.5*ui->selector->getReferenceImpedance()), - Destination(sources, prefix+"SCD11", "0.5*(S11-S13+S31-S33)"), - Destination(sources, prefix+"SCD12", "0.5*(S12-S14+S32-S34)"), - Destination(sources, prefix+"SCD21", "0.5*(S21-S23+S41-S43)"), - Destination(sources, prefix+"SCD22", "0.5*(S22-S24+S42-S44)"), + Destination(sources, prefix+"SCD11", "0.5*(S11-S13+S31-S33)", 2*ui->selector->getReferenceImpedance()), + Destination(sources, prefix+"SCD12", "0.5*(S12-S14+S32-S34)", 2*ui->selector->getReferenceImpedance()), + Destination(sources, prefix+"SCD21", "0.5*(S21-S23+S41-S43)", 2*ui->selector->getReferenceImpedance()), + Destination(sources, prefix+"SCD22", "0.5*(S22-S24+S42-S44)", 2*ui->selector->getReferenceImpedance()), - Destination(sources, prefix+"SCC11", "0.5*(S11+S13+S31+S33)"), - Destination(sources, prefix+"SCC12", "0.5*(S12+S14+S32+S34)"), - Destination(sources, prefix+"SCC21", "0.5*(S21+S23+S41+S43)"), - Destination(sources, prefix+"SCC22", "0.5*(S22+S24+S42+S44)"), + Destination(sources, prefix+"SCC11", "0.5*(S11+S13+S31+S33)", 0.5*ui->selector->getReferenceImpedance()), + Destination(sources, prefix+"SCC12", "0.5*(S12+S14+S32+S34)", 0.5*ui->selector->getReferenceImpedance()), + Destination(sources, prefix+"SCC21", "0.5*(S21+S23+S41+S43)", 0.5*ui->selector->getReferenceImpedance()), + Destination(sources, prefix+"SCC22", "0.5*(S22+S24+S42+S44)", 0.5*ui->selector->getReferenceImpedance()), }; ui->list->clear(); diff --git a/Software/PC_Application/LibreVNA-GUI/Traces/trace.cpp b/Software/PC_Application/LibreVNA-GUI/Traces/trace.cpp index d3e50be..ac4649f 100644 --- a/Software/PC_Application/LibreVNA-GUI/Traces/trace.cpp +++ b/Software/PC_Application/LibreVNA-GUI/Traces/trace.cpp @@ -576,6 +576,11 @@ bool Trace::addMathSource(unsigned int hash, QString variableName) return false; } +void Trace::setReferenceImpedance(double value) +{ + reference_impedance = value; +} + bool Trace::mathDependsOn(Trace *t, bool onlyDirectDependency) { if(mathSourceTraces.count(t)) { diff --git a/Software/PC_Application/LibreVNA-GUI/Traces/trace.h b/Software/PC_Application/LibreVNA-GUI/Traces/trace.h index 35c9e0d..ac0b6b8 100644 --- a/Software/PC_Application/LibreVNA-GUI/Traces/trace.h +++ b/Software/PC_Application/LibreVNA-GUI/Traces/trace.h @@ -171,6 +171,8 @@ public: // after all traces from the setup file have been created. It will look for the missing traces bool resolveMathSourceHashes(); + void setReferenceImpedance(double value); + public slots: void setVisible(bool visible); void setColor(QColor color);