diff --git a/Software/PC_Application/LibreVNA-GUI/Calibration/calstandard.cpp b/Software/PC_Application/LibreVNA-GUI/Calibration/calstandard.cpp index c1fd8d4..fdfc368 100644 --- a/Software/PC_Application/LibreVNA-GUI/Calibration/calstandard.cpp +++ b/Software/PC_Application/LibreVNA-GUI/Calibration/calstandard.cpp @@ -141,27 +141,6 @@ void OnePort::fromJSON(nlohmann::json j) } } -std::complex OnePort::addTransmissionLine(std::complex termination_reflection, double offset_impedance, double offset_delay, double offset_loss, double frequency) -{ - // nomenclature and formulas from https://loco.lab.asu.edu/loco-memos/edges_reports/report_20130807.pdf - auto Gamma_T = termination_reflection; - auto f = frequency; - auto w = 2.0 * M_PI * frequency; - auto f_sqrt = sqrt(f / 1e9); - - auto Z_c = complex(offset_impedance + (offset_loss / (2*w)) * f_sqrt, -(offset_loss / (2*w)) * f_sqrt); - auto gamma_l = complex(offset_loss*offset_delay/(2*offset_impedance)*f_sqrt, w*offset_delay+offset_loss*offset_delay/(2*offset_impedance)*f_sqrt); - - auto Z_r = complex(50.0); - - auto Gamma_1 = (Z_c - Z_r) / (Z_c + Z_r); - - auto Gamma_i = (Gamma_1*(1.0-exp(-2.0*gamma_l)-Gamma_1*Gamma_T)+exp(-2.0*gamma_l)*Gamma_T) - / (1.0-Gamma_1*(exp(-2.0*gamma_l)*Gamma_1+Gamma_T*(1.0-exp(-2.0*gamma_l)))); - - return Gamma_i; -} - Open::Open() { Z0 = 50.0; @@ -184,7 +163,7 @@ std::complex Open::toS11(double freq) auto imp_open = complex(0, -1.0 / (freq * 2 * M_PI * Cfringing)); open = (imp_open - complex(50.0)) / (imp_open + complex(50.0)); } - return addTransmissionLine(open, Z0, delay*1e-12, loss*1e9, freq); + return Util::addTransmissionLine(open, Z0, delay*1e-12, loss*1e9, freq); } } @@ -299,7 +278,7 @@ std::complex Short::toS11(double freq) // convert to impedance auto imp_short = complex(0, freq * 2 * M_PI * Lseries); complex _short = (imp_short - complex(50.0)) / (imp_short + complex(50.0)); - return addTransmissionLine(_short, Z0, delay*1e-12, loss*1e9, freq); + return Util::addTransmissionLine(_short, Z0, delay*1e-12, loss*1e9, freq); } } @@ -427,7 +406,7 @@ std::complex Load::toS11(double freq) imp_load += complex(0, freq * 2 * M_PI * Lseries); } complex load = (imp_load - complex(50.0)) / (imp_load + complex(50.0)); - return addTransmissionLine(load, Z0, delay*1e-12, loss*1e9, freq); + return Util::addTransmissionLine(load, Z0, delay*1e-12, loss*1e9, freq); } } diff --git a/Software/PC_Application/LibreVNA-GUI/Calibration/calstandard.h b/Software/PC_Application/LibreVNA-GUI/Calibration/calstandard.h index 029040c..a37bdba 100644 --- a/Software/PC_Application/LibreVNA-GUI/Calibration/calstandard.h +++ b/Software/PC_Application/LibreVNA-GUI/Calibration/calstandard.h @@ -70,9 +70,6 @@ public: virtual void fromJSON(nlohmann::json j) override; protected: - std::complex addTransmissionLine(std::complex termination_reflection, - double offset_impedance, double offset_delay, - double offset_loss, double frequency); Touchstone *touchstone; }; diff --git a/Software/PC_Application/LibreVNA-GUI/LibreVNA-GUI b/Software/PC_Application/LibreVNA-GUI/LibreVNA-GUI index a2d2e63..d5e39c4 100755 Binary files a/Software/PC_Application/LibreVNA-GUI/LibreVNA-GUI and b/Software/PC_Application/LibreVNA-GUI/LibreVNA-GUI differ diff --git a/Software/PC_Application/LibreVNA-GUI/Util/util.cpp b/Software/PC_Application/LibreVNA-GUI/Util/util.cpp index 44872bc..c152e3a 100644 --- a/Software/PC_Application/LibreVNA-GUI/Util/util.cpp +++ b/Software/PC_Application/LibreVNA-GUI/Util/util.cpp @@ -167,3 +167,24 @@ std::complex Util::findCenterOfCircle(const std::vector(Xcenter + meanX, Ycenter + meanY); } + +std::complex Util::addTransmissionLine(std::complex termination_reflection, double offset_impedance, double offset_delay, double offset_loss, double frequency) +{ + // nomenclature and formulas from https://loco.lab.asu.edu/loco-memos/edges_reports/report_20130807.pdf + auto Gamma_T = termination_reflection; + auto f = frequency; + auto w = 2.0 * M_PI * frequency; + auto f_sqrt = sqrt(f / 1e9); + + auto Z_c = std::complex(offset_impedance + (offset_loss / (2*w)) * f_sqrt, -(offset_loss / (2*w)) * f_sqrt); + auto gamma_l = std::complex(offset_loss*offset_delay/(2*offset_impedance)*f_sqrt, w*offset_delay+offset_loss*offset_delay/(2*offset_impedance)*f_sqrt); + + auto Z_r = std::complex(50.0); + + auto Gamma_1 = (Z_c - Z_r) / (Z_c + Z_r); + + auto Gamma_i = (Gamma_1*(1.0-exp(-2.0*gamma_l)-Gamma_1*Gamma_T)+exp(-2.0*gamma_l)*Gamma_T) + / (1.0-Gamma_1*(exp(-2.0*gamma_l)*Gamma_1+Gamma_T*(1.0-exp(-2.0*gamma_l)))); + + return Gamma_i; +} diff --git a/Software/PC_Application/LibreVNA-GUI/Util/util.h b/Software/PC_Application/LibreVNA-GUI/Util/util.h index 485ddac..facecfd 100644 --- a/Software/PC_Application/LibreVNA-GUI/Util/util.h +++ b/Software/PC_Application/LibreVNA-GUI/Util/util.h @@ -79,6 +79,8 @@ namespace Util { unsigned long long random(unsigned long long max); std::complex findCenterOfCircle(const std::vector> &points); + + std::complex addTransmissionLine(std::complex termination_reflection, double offset_impedance, double offset_delay, double offset_loss, double frequency); } #endif // UTILH_H diff --git a/Software/PC_Application/LibreVNA-GUI/VNA/Deembedding/portextension.cpp b/Software/PC_Application/LibreVNA-GUI/VNA/Deembedding/portextension.cpp index deb4d76..a037dda 100644 --- a/Software/PC_Application/LibreVNA-GUI/VNA/Deembedding/portextension.cpp +++ b/Software/PC_Application/LibreVNA-GUI/VNA/Deembedding/portextension.cpp @@ -20,8 +20,10 @@ PortExtension::PortExtension() ext.velocityFactor = 0.66; port = 1; + isIdeal = true; kit = nullptr; + ui = nullptr; } std::set PortExtension::getAffectedPorts() @@ -60,6 +62,7 @@ void PortExtension::edit() ui->setupUi(dialog); connect(dialog, &QDialog::finished, [=](){ delete ui; + ui = nullptr; }); // set initial values @@ -164,7 +167,6 @@ void PortExtension::measurementCompleted(std::vector - -namespace Ui { -class PortExtensionDialog; -} - -class PortExtensionDialog : public QDialog -{ - Q_OBJECT - -public: - explicit PortExtensionDialog(QWidget *parent = nullptr); - ~PortExtensionDialog(); - -private slots: - void on_buttonBox_accepted(); - -private: - Ui::PortExtensionDialog *ui; -}; - -#endif // PORTEXTENSIONDIALOG_H diff --git a/Software/PC_Application/LibreVNA-Test/LibreVNA-Test b/Software/PC_Application/LibreVNA-Test/LibreVNA-Test index f3b2d19..d1e1ca4 100755 Binary files a/Software/PC_Application/LibreVNA-Test/LibreVNA-Test and b/Software/PC_Application/LibreVNA-Test/LibreVNA-Test differ diff --git a/Software/PC_Application/LibreVNA-Test/LibreVNA-Test.pro b/Software/PC_Application/LibreVNA-Test/LibreVNA-Test.pro index e1c3cf9..5d4e2cb 100644 --- a/Software/PC_Application/LibreVNA-Test/LibreVNA-Test.pro +++ b/Software/PC_Application/LibreVNA-Test/LibreVNA-Test.pro @@ -1,5 +1,4 @@ -QT += testlib -#QT -= gui +QT += testlib widgets network CONFIG += qt console warn_on depend_includepath testcase CONFIG -= app_bundle @@ -7,13 +6,384 @@ CONFIG -= app_bundle TEMPLATE = app SOURCES += \ + ../../VNA_embedded/Application/Communication/Protocol.cpp \ + ../LibreVNA-GUI/Calibration/LibreCAL/caldevice.cpp \ + ../LibreVNA-GUI/Calibration/LibreCAL/librecaldialog.cpp \ + ../LibreVNA-GUI/Calibration/LibreCAL/usbdevice.cpp \ + ../LibreVNA-GUI/Calibration/amplitudecaldialog.cpp \ + ../LibreVNA-GUI/Calibration/calibration.cpp \ + ../LibreVNA-GUI/Calibration/calibrationmeasurement.cpp \ + ../LibreVNA-GUI/Calibration/calkit.cpp \ + ../LibreVNA-GUI/Calibration/calkitdialog.cpp \ + ../LibreVNA-GUI/Calibration/calstandard.cpp \ + ../LibreVNA-GUI/Calibration/frequencycaldialog.cpp \ + ../LibreVNA-GUI/Calibration/manualcalibrationdialog.cpp \ + ../LibreVNA-GUI/Calibration/receivercaldialog.cpp \ + ../LibreVNA-GUI/Calibration/sourcecaldialog.cpp \ + ../LibreVNA-GUI/CustomWidgets/colorpickerbutton.cpp \ + ../LibreVNA-GUI/CustomWidgets/csvimport.cpp \ + ../LibreVNA-GUI/CustomWidgets/informationbox.cpp \ + ../LibreVNA-GUI/CustomWidgets/jsonpickerdialog.cpp \ + ../LibreVNA-GUI/CustomWidgets/siunitedit.cpp \ + ../LibreVNA-GUI/CustomWidgets/tilewidget.cpp \ + ../LibreVNA-GUI/CustomWidgets/toggleswitch.cpp \ + ../LibreVNA-GUI/CustomWidgets/touchstoneimport.cpp \ + ../LibreVNA-GUI/Device/compounddevice.cpp \ + ../LibreVNA-GUI/Device/compounddeviceeditdialog.cpp \ + ../LibreVNA-GUI/Device/device.cpp \ + ../LibreVNA-GUI/Device/devicelog.cpp \ + ../LibreVNA-GUI/Device/firmwareupdatedialog.cpp \ + ../LibreVNA-GUI/Device/manualcontroldialog.cpp \ + ../LibreVNA-GUI/Device/virtualdevice.cpp \ + ../LibreVNA-GUI/Generator/generator.cpp \ + ../LibreVNA-GUI/Generator/signalgenwidget.cpp \ + ../LibreVNA-GUI/SpectrumAnalyzer/spectrumanalyzer.cpp \ + ../LibreVNA-GUI/SpectrumAnalyzer/tracewidgetsa.cpp \ + ../LibreVNA-GUI/Tools/eseries.cpp \ + ../LibreVNA-GUI/Tools/impedancematchdialog.cpp \ + ../LibreVNA-GUI/Tools/parameters.cpp \ + ../LibreVNA-GUI/Traces/Marker/marker.cpp \ + ../LibreVNA-GUI/Traces/Marker/markergroup.cpp \ + ../LibreVNA-GUI/Traces/Marker/markermodel.cpp \ + ../LibreVNA-GUI/Traces/Marker/markerwidget.cpp \ + ../LibreVNA-GUI/Traces/Math/dft.cpp \ + ../LibreVNA-GUI/Traces/Math/expression.cpp \ + ../LibreVNA-GUI/Traces/Math/medianfilter.cpp \ + ../LibreVNA-GUI/Traces/Math/parser/mpError.cpp \ + ../LibreVNA-GUI/Traces/Math/parser/mpFuncCmplx.cpp \ + ../LibreVNA-GUI/Traces/Math/parser/mpFuncCommon.cpp \ + ../LibreVNA-GUI/Traces/Math/parser/mpFuncMatrix.cpp \ + ../LibreVNA-GUI/Traces/Math/parser/mpFuncNonCmplx.cpp \ + ../LibreVNA-GUI/Traces/Math/parser/mpFuncStr.cpp \ + ../LibreVNA-GUI/Traces/Math/parser/mpICallback.cpp \ + ../LibreVNA-GUI/Traces/Math/parser/mpIOprt.cpp \ + ../LibreVNA-GUI/Traces/Math/parser/mpIPackage.cpp \ + ../LibreVNA-GUI/Traces/Math/parser/mpIToken.cpp \ + ../LibreVNA-GUI/Traces/Math/parser/mpIValReader.cpp \ + ../LibreVNA-GUI/Traces/Math/parser/mpIValue.cpp \ + ../LibreVNA-GUI/Traces/Math/parser/mpIfThenElse.cpp \ + ../LibreVNA-GUI/Traces/Math/parser/mpOprtBinAssign.cpp \ + ../LibreVNA-GUI/Traces/Math/parser/mpOprtBinCommon.cpp \ + ../LibreVNA-GUI/Traces/Math/parser/mpOprtCmplx.cpp \ + ../LibreVNA-GUI/Traces/Math/parser/mpOprtIndex.cpp \ + ../LibreVNA-GUI/Traces/Math/parser/mpOprtMatrix.cpp \ + ../LibreVNA-GUI/Traces/Math/parser/mpOprtNonCmplx.cpp \ + ../LibreVNA-GUI/Traces/Math/parser/mpOprtPostfixCommon.cpp \ + ../LibreVNA-GUI/Traces/Math/parser/mpPackageCmplx.cpp \ + ../LibreVNA-GUI/Traces/Math/parser/mpPackageCommon.cpp \ + ../LibreVNA-GUI/Traces/Math/parser/mpPackageMatrix.cpp \ + ../LibreVNA-GUI/Traces/Math/parser/mpPackageNonCmplx.cpp \ + ../LibreVNA-GUI/Traces/Math/parser/mpPackageStr.cpp \ + ../LibreVNA-GUI/Traces/Math/parser/mpPackageUnit.cpp \ + ../LibreVNA-GUI/Traces/Math/parser/mpParser.cpp \ + ../LibreVNA-GUI/Traces/Math/parser/mpParserBase.cpp \ + ../LibreVNA-GUI/Traces/Math/parser/mpParserMessageProvider.cpp \ + ../LibreVNA-GUI/Traces/Math/parser/mpRPN.cpp \ + ../LibreVNA-GUI/Traces/Math/parser/mpScriptTokens.cpp \ + ../LibreVNA-GUI/Traces/Math/parser/mpTest.cpp \ + ../LibreVNA-GUI/Traces/Math/parser/mpTokenReader.cpp \ + ../LibreVNA-GUI/Traces/Math/parser/mpValReader.cpp \ + ../LibreVNA-GUI/Traces/Math/parser/mpValue.cpp \ + ../LibreVNA-GUI/Traces/Math/parser/mpValueCache.cpp \ + ../LibreVNA-GUI/Traces/Math/parser/mpVariable.cpp \ + ../LibreVNA-GUI/Traces/Math/tdr.cpp \ + ../LibreVNA-GUI/Traces/Math/timegate.cpp \ + ../LibreVNA-GUI/Traces/Math/tracemath.cpp \ + ../LibreVNA-GUI/Traces/Math/windowfunction.cpp \ + ../LibreVNA-GUI/Traces/fftcomplex.cpp \ + ../LibreVNA-GUI/Traces/sparamtraceselector.cpp \ + ../LibreVNA-GUI/Traces/trace.cpp \ + ../LibreVNA-GUI/Traces/traceaxis.cpp \ + ../LibreVNA-GUI/Traces/tracecsvexport.cpp \ + ../LibreVNA-GUI/Traces/traceeditdialog.cpp \ + ../LibreVNA-GUI/Traces/traceimportdialog.cpp \ + ../LibreVNA-GUI/Traces/tracemodel.cpp \ + ../LibreVNA-GUI/Traces/traceplot.cpp \ + ../LibreVNA-GUI/Traces/tracepolar.cpp \ + ../LibreVNA-GUI/Traces/tracepolarchart.cpp \ + ../LibreVNA-GUI/Traces/tracesmithchart.cpp \ + ../LibreVNA-GUI/Traces/tracetouchstoneexport.cpp \ + ../LibreVNA-GUI/Traces/tracewaterfall.cpp \ + ../LibreVNA-GUI/Traces/tracewidget.cpp \ + ../LibreVNA-GUI/Traces/tracexyplot.cpp \ + ../LibreVNA-GUI/Traces/waterfallaxisdialog.cpp \ + ../LibreVNA-GUI/Traces/xyplotaxisdialog.cpp \ ../LibreVNA-GUI/Util/util.cpp \ + ../LibreVNA-GUI/VNA/Deembedding/deembedding.cpp \ + ../LibreVNA-GUI/VNA/Deembedding/deembeddingdialog.cpp \ + ../LibreVNA-GUI/VNA/Deembedding/deembeddingoption.cpp \ + ../LibreVNA-GUI/VNA/Deembedding/impedancerenormalization.cpp \ + ../LibreVNA-GUI/VNA/Deembedding/manualdeembeddingdialog.cpp \ + ../LibreVNA-GUI/VNA/Deembedding/matchingnetwork.cpp \ + ../LibreVNA-GUI/VNA/Deembedding/portextension.cpp \ + ../LibreVNA-GUI/VNA/Deembedding/twothru.cpp \ + ../LibreVNA-GUI/VNA/tracewidgetvna.cpp \ + ../LibreVNA-GUI/VNA/vna.cpp \ + ../LibreVNA-GUI/about.cpp \ + ../LibreVNA-GUI/appwindow.cpp \ + ../LibreVNA-GUI/averaging.cpp \ + ../LibreVNA-GUI/csv.cpp \ + ../LibreVNA-GUI/mode.cpp \ + ../LibreVNA-GUI/modehandler.cpp \ + ../LibreVNA-GUI/modewindow.cpp \ + ../LibreVNA-GUI/preferences.cpp \ + ../LibreVNA-GUI/savable.cpp \ + ../LibreVNA-GUI/scpi.cpp \ + ../LibreVNA-GUI/tcpserver.cpp \ + ../LibreVNA-GUI/touchstone.cpp \ + ../LibreVNA-GUI/unit.cpp \ main.cpp \ + portextensiontests.cpp \ utiltests.cpp HEADERS += \ + ../../VNA_embedded/Application/Communication/Protocol.hpp \ + ../LibreVNA-GUI/Calibration/Eigen/Cholesky \ + ../LibreVNA-GUI/Calibration/Eigen/CholmodSupport \ + ../LibreVNA-GUI/Calibration/Eigen/Core \ + ../LibreVNA-GUI/Calibration/Eigen/Dense \ + ../LibreVNA-GUI/Calibration/Eigen/Eigen \ + ../LibreVNA-GUI/Calibration/Eigen/Eigenvalues \ + ../LibreVNA-GUI/Calibration/Eigen/Geometry \ + ../LibreVNA-GUI/Calibration/Eigen/Householder \ + ../LibreVNA-GUI/Calibration/Eigen/IterativeLinearSolvers \ + ../LibreVNA-GUI/Calibration/Eigen/Jacobi \ + ../LibreVNA-GUI/Calibration/Eigen/KLUSupport \ + ../LibreVNA-GUI/Calibration/Eigen/LU \ + ../LibreVNA-GUI/Calibration/Eigen/MetisSupport \ + ../LibreVNA-GUI/Calibration/Eigen/OrderingMethods \ + ../LibreVNA-GUI/Calibration/Eigen/PaStiXSupport \ + ../LibreVNA-GUI/Calibration/Eigen/PardisoSupport \ + ../LibreVNA-GUI/Calibration/Eigen/QR \ + ../LibreVNA-GUI/Calibration/Eigen/QtAlignedMalloc \ + ../LibreVNA-GUI/Calibration/Eigen/SPQRSupport \ + ../LibreVNA-GUI/Calibration/Eigen/SVD \ + ../LibreVNA-GUI/Calibration/Eigen/Sparse \ + ../LibreVNA-GUI/Calibration/Eigen/SparseCholesky \ + ../LibreVNA-GUI/Calibration/Eigen/SparseCore \ + ../LibreVNA-GUI/Calibration/Eigen/SparseLU \ + ../LibreVNA-GUI/Calibration/Eigen/SparseQR \ + ../LibreVNA-GUI/Calibration/Eigen/StdDeque \ + ../LibreVNA-GUI/Calibration/Eigen/StdList \ + ../LibreVNA-GUI/Calibration/Eigen/StdVector \ + ../LibreVNA-GUI/Calibration/Eigen/SuperLUSupport \ + ../LibreVNA-GUI/Calibration/Eigen/UmfPackSupport \ + ../LibreVNA-GUI/Calibration/LibreCAL/caldevice.h \ + ../LibreVNA-GUI/Calibration/LibreCAL/librecaldialog.h \ + ../LibreVNA-GUI/Calibration/LibreCAL/usbdevice.h \ + ../LibreVNA-GUI/Calibration/amplitudecaldialog.h \ + ../LibreVNA-GUI/Calibration/calibration.h \ + ../LibreVNA-GUI/Calibration/calibrationmeasurement.h \ + ../LibreVNA-GUI/Calibration/calkit.h \ + ../LibreVNA-GUI/Calibration/calkitdialog.h \ + ../LibreVNA-GUI/Calibration/calstandard.h \ + ../LibreVNA-GUI/Calibration/frequencycaldialog.h \ + ../LibreVNA-GUI/Calibration/manualcalibrationdialog.h \ + ../LibreVNA-GUI/Calibration/receivercaldialog.h \ + ../LibreVNA-GUI/Calibration/sourcecaldialog.h \ + ../LibreVNA-GUI/CustomWidgets/colorpickerbutton.h \ + ../LibreVNA-GUI/CustomWidgets/csvimport.h \ + ../LibreVNA-GUI/CustomWidgets/informationbox.h \ + ../LibreVNA-GUI/CustomWidgets/jsonpickerdialog.h \ + ../LibreVNA-GUI/CustomWidgets/siunitedit.h \ + ../LibreVNA-GUI/CustomWidgets/tilewidget.h \ + ../LibreVNA-GUI/CustomWidgets/toggleswitch.h \ + ../LibreVNA-GUI/CustomWidgets/touchstoneimport.h \ + ../LibreVNA-GUI/Device/compounddevice.h \ + ../LibreVNA-GUI/Device/compounddeviceeditdialog.h \ + ../LibreVNA-GUI/Device/device.h \ + ../LibreVNA-GUI/Device/devicelog.h \ + ../LibreVNA-GUI/Device/firmwareupdatedialog.h \ + ../LibreVNA-GUI/Device/manualcontroldialog.h \ + ../LibreVNA-GUI/Device/virtualdevice.h \ + ../LibreVNA-GUI/Generator/generator.h \ + ../LibreVNA-GUI/Generator/signalgenwidget.h \ + ../LibreVNA-GUI/SpectrumAnalyzer/spectrumanalyzer.h \ + ../LibreVNA-GUI/SpectrumAnalyzer/tracewidgetsa.h \ + ../LibreVNA-GUI/Tools/eseries.h \ + ../LibreVNA-GUI/Tools/impedancematchdialog.h \ + ../LibreVNA-GUI/Tools/parameters.h \ + ../LibreVNA-GUI/Traces/Marker/marker.h \ + ../LibreVNA-GUI/Traces/Marker/markergroup.h \ + ../LibreVNA-GUI/Traces/Marker/markermodel.h \ + ../LibreVNA-GUI/Traces/Marker/markerwidget.h \ + ../LibreVNA-GUI/Traces/Math/dft.h \ + ../LibreVNA-GUI/Traces/Math/expression.h \ + ../LibreVNA-GUI/Traces/Math/medianfilter.h \ + ../LibreVNA-GUI/Traces/Math/parser/mpCompat.h \ + ../LibreVNA-GUI/Traces/Math/parser/mpDefines.h \ + ../LibreVNA-GUI/Traces/Math/parser/mpError.h \ + ../LibreVNA-GUI/Traces/Math/parser/mpFuncCmplx.h \ + ../LibreVNA-GUI/Traces/Math/parser/mpFuncCommon.h \ + ../LibreVNA-GUI/Traces/Math/parser/mpFuncMatrix.h \ + ../LibreVNA-GUI/Traces/Math/parser/mpFuncNonCmplx.h \ + ../LibreVNA-GUI/Traces/Math/parser/mpFuncStr.h \ + ../LibreVNA-GUI/Traces/Math/parser/mpFwdDecl.h \ + ../LibreVNA-GUI/Traces/Math/parser/mpICallback.h \ + ../LibreVNA-GUI/Traces/Math/parser/mpIOprt.h \ + ../LibreVNA-GUI/Traces/Math/parser/mpIPackage.h \ + ../LibreVNA-GUI/Traces/Math/parser/mpIPrecedence.h \ + ../LibreVNA-GUI/Traces/Math/parser/mpIToken.h \ + ../LibreVNA-GUI/Traces/Math/parser/mpIValReader.h \ + ../LibreVNA-GUI/Traces/Math/parser/mpIValue.h \ + ../LibreVNA-GUI/Traces/Math/parser/mpIfThenElse.h \ + ../LibreVNA-GUI/Traces/Math/parser/mpMatrix.h \ + ../LibreVNA-GUI/Traces/Math/parser/mpMatrixError.h \ + ../LibreVNA-GUI/Traces/Math/parser/mpOprtBinAssign.h \ + ../LibreVNA-GUI/Traces/Math/parser/mpOprtBinCommon.h \ + ../LibreVNA-GUI/Traces/Math/parser/mpOprtCmplx.h \ + ../LibreVNA-GUI/Traces/Math/parser/mpOprtIndex.h \ + ../LibreVNA-GUI/Traces/Math/parser/mpOprtMatrix.h \ + ../LibreVNA-GUI/Traces/Math/parser/mpOprtNonCmplx.h \ + ../LibreVNA-GUI/Traces/Math/parser/mpOprtPostfixCommon.h \ + ../LibreVNA-GUI/Traces/Math/parser/mpPackageCmplx.h \ + ../LibreVNA-GUI/Traces/Math/parser/mpPackageCommon.h \ + ../LibreVNA-GUI/Traces/Math/parser/mpPackageMatrix.h \ + ../LibreVNA-GUI/Traces/Math/parser/mpPackageNonCmplx.h \ + ../LibreVNA-GUI/Traces/Math/parser/mpPackageStr.h \ + ../LibreVNA-GUI/Traces/Math/parser/mpPackageUnit.h \ + ../LibreVNA-GUI/Traces/Math/parser/mpParser.h \ + ../LibreVNA-GUI/Traces/Math/parser/mpParserBase.h \ + ../LibreVNA-GUI/Traces/Math/parser/mpParserMessageProvider.h \ + ../LibreVNA-GUI/Traces/Math/parser/mpRPN.h \ + ../LibreVNA-GUI/Traces/Math/parser/mpScriptTokens.h \ + ../LibreVNA-GUI/Traces/Math/parser/mpStack.h \ + ../LibreVNA-GUI/Traces/Math/parser/mpTest.h \ + ../LibreVNA-GUI/Traces/Math/parser/mpTokenReader.h \ + ../LibreVNA-GUI/Traces/Math/parser/mpTypes.h \ + ../LibreVNA-GUI/Traces/Math/parser/mpValReader.h \ + ../LibreVNA-GUI/Traces/Math/parser/mpValue.h \ + ../LibreVNA-GUI/Traces/Math/parser/mpValueCache.h \ + ../LibreVNA-GUI/Traces/Math/parser/mpVariable.h \ + ../LibreVNA-GUI/Traces/Math/parser/suSortPred.h \ + ../LibreVNA-GUI/Traces/Math/parser/suStringTokens.h \ + ../LibreVNA-GUI/Traces/Math/parser/utGeneric.h \ + ../LibreVNA-GUI/Traces/Math/tdr.h \ + ../LibreVNA-GUI/Traces/Math/timegate.h \ + ../LibreVNA-GUI/Traces/Math/tracemath.h \ + ../LibreVNA-GUI/Traces/Math/windowfunction.h \ + ../LibreVNA-GUI/Traces/fftcomplex.h \ + ../LibreVNA-GUI/Traces/sparamtraceselector.h \ + ../LibreVNA-GUI/Traces/trace.h \ + ../LibreVNA-GUI/Traces/traceaxis.h \ + ../LibreVNA-GUI/Traces/tracecsvexport.h \ + ../LibreVNA-GUI/Traces/traceeditdialog.h \ + ../LibreVNA-GUI/Traces/traceimportdialog.h \ + ../LibreVNA-GUI/Traces/tracemodel.h \ + ../LibreVNA-GUI/Traces/traceplot.h \ + ../LibreVNA-GUI/Traces/tracepolar.h \ + ../LibreVNA-GUI/Traces/tracepolarchart.h \ + ../LibreVNA-GUI/Traces/tracesmithchart.h \ + ../LibreVNA-GUI/Traces/tracetouchstoneexport.h \ + ../LibreVNA-GUI/Traces/tracewaterfall.h \ + ../LibreVNA-GUI/Traces/tracewidget.h \ + ../LibreVNA-GUI/Traces/tracexyplot.h \ + ../LibreVNA-GUI/Traces/waterfallaxisdialog.h \ + ../LibreVNA-GUI/Traces/xyplotaxisdialog.h \ ../LibreVNA-GUI/Util/util.h \ + ../LibreVNA-GUI/VNA/Deembedding/deembedding.h \ + ../LibreVNA-GUI/VNA/Deembedding/deembeddingdialog.h \ + ../LibreVNA-GUI/VNA/Deembedding/deembeddingoption.h \ + ../LibreVNA-GUI/VNA/Deembedding/impedancerenormalization.h \ + ../LibreVNA-GUI/VNA/Deembedding/manualdeembeddingdialog.h \ + ../LibreVNA-GUI/VNA/Deembedding/matchingnetwork.h \ + ../LibreVNA-GUI/VNA/Deembedding/portextension.h \ + ../LibreVNA-GUI/VNA/Deembedding/twothru.h \ + ../LibreVNA-GUI/VNA/portextensiondialog.h \ + ../LibreVNA-GUI/VNA/tracewidgetvna.h \ + ../LibreVNA-GUI/VNA/vna.h \ + ../LibreVNA-GUI/about.h \ + ../LibreVNA-GUI/appwindow.h \ + ../LibreVNA-GUI/averaging.h \ + ../LibreVNA-GUI/csv.h \ + ../LibreVNA-GUI/json.hpp \ + ../LibreVNA-GUI/mode.h \ + ../LibreVNA-GUI/modehandler.h \ + ../LibreVNA-GUI/modewindow.h \ + ../LibreVNA-GUI/preferences.h \ + ../LibreVNA-GUI/savable.h \ + ../LibreVNA-GUI/scpi.h \ + ../LibreVNA-GUI/tcpserver.h \ + ../LibreVNA-GUI/touchstone.h \ + ../LibreVNA-GUI/unit.h \ + portextensiontests.h \ utiltests.h INCLUDEPATH += \ - ../LibreVNA-GUI/Util + ../LibreVNA-GUI \ + ../LibreVNA-GUI/Util \ + ../LibreVNA-GUI/VNA/Deembedding \ + ../LibreVNA-GUI/Calibration + +FORMS += \ + ../LibreVNA-GUI/Calibration/CalStandardLineEditDialog.ui \ + ../LibreVNA-GUI/Calibration/CalStandardLoadEditDialog.ui \ + ../LibreVNA-GUI/Calibration/CalStandardOpenEditDialog.ui \ + ../LibreVNA-GUI/Calibration/CalStandardReflectEditDialog.ui \ + ../LibreVNA-GUI/Calibration/CalStandardShortEditDialog.ui \ + ../LibreVNA-GUI/Calibration/CalStandardThroughEditDialog.ui \ + ../LibreVNA-GUI/Calibration/LibreCAL/librecaldialog.ui \ + ../LibreVNA-GUI/Calibration/addamplitudepointsdialog.ui \ + ../LibreVNA-GUI/Calibration/amplitudecaldialog.ui \ + ../LibreVNA-GUI/Calibration/automaticamplitudedialog.ui \ + ../LibreVNA-GUI/Calibration/calibrationdialogui.ui \ + ../LibreVNA-GUI/Calibration/calkitdialog.ui \ + ../LibreVNA-GUI/Calibration/frequencycaldialog.ui \ + ../LibreVNA-GUI/Calibration/manualcalibrationdialog.ui \ + ../LibreVNA-GUI/CustomWidgets/csvimport.ui \ + ../LibreVNA-GUI/CustomWidgets/jsonpickerdialog.ui \ + ../LibreVNA-GUI/CustomWidgets/tilewidget.ui \ + ../LibreVNA-GUI/CustomWidgets/touchstoneimport.ui \ + ../LibreVNA-GUI/Device/compounddeviceeditdialog.ui \ + ../LibreVNA-GUI/Device/devicelog.ui \ + ../LibreVNA-GUI/Device/firmwareupdatedialog.ui \ + ../LibreVNA-GUI/Device/manualcontroldialog.ui \ + ../LibreVNA-GUI/Generator/signalgenwidget.ui \ + ../LibreVNA-GUI/Tools/impedancematchdialog.ui \ + ../LibreVNA-GUI/Traces/Marker/markerwidget.ui \ + ../LibreVNA-GUI/Traces/Math/dftdialog.ui \ + ../LibreVNA-GUI/Traces/Math/dftexplanationwidget.ui \ + ../LibreVNA-GUI/Traces/Math/expressiondialog.ui \ + ../LibreVNA-GUI/Traces/Math/expressionexplanationwidget.ui \ + ../LibreVNA-GUI/Traces/Math/medianexplanationwidget.ui \ + ../LibreVNA-GUI/Traces/Math/medianfilterdialog.ui \ + ../LibreVNA-GUI/Traces/Math/newtracemathdialog.ui \ + ../LibreVNA-GUI/Traces/Math/tdrdialog.ui \ + ../LibreVNA-GUI/Traces/Math/tdrexplanationwidget.ui \ + ../LibreVNA-GUI/Traces/Math/timedomaingatingexplanationwidget.ui \ + ../LibreVNA-GUI/Traces/Math/timegatedialog.ui \ + ../LibreVNA-GUI/Traces/Math/timegateexplanationwidget.ui \ + ../LibreVNA-GUI/Traces/XYPlotConstantLineEditDialog.ui \ + ../LibreVNA-GUI/Traces/polarchartdialog.ui \ + ../LibreVNA-GUI/Traces/smithchartdialog.ui \ + ../LibreVNA-GUI/Traces/tracecsvexport.ui \ + ../LibreVNA-GUI/Traces/traceeditdialog.ui \ + ../LibreVNA-GUI/Traces/traceimportdialog.ui \ + ../LibreVNA-GUI/Traces/tracetouchstoneexport.ui \ + ../LibreVNA-GUI/Traces/tracewidget.ui \ + ../LibreVNA-GUI/Traces/waterfallaxisdialog.ui \ + ../LibreVNA-GUI/Traces/xyplotaxisdialog.ui \ + ../LibreVNA-GUI/VNA/Deembedding/deembeddingdialog.ui \ + ../LibreVNA-GUI/VNA/Deembedding/impedancenormalizationdialog.ui \ + ../LibreVNA-GUI/VNA/Deembedding/manualdeembeddingdialog.ui \ + ../LibreVNA-GUI/VNA/Deembedding/matchingnetworkdialog.ui \ + ../LibreVNA-GUI/VNA/Deembedding/measurementdialog.ui \ + ../LibreVNA-GUI/VNA/Deembedding/portextensioneditdialog.ui \ + ../LibreVNA-GUI/VNA/Deembedding/twothrudialog.ui \ + ../LibreVNA-GUI/VNA/s2pImportOptions.ui \ + ../LibreVNA-GUI/aboutdialog.ui \ + ../LibreVNA-GUI/main.ui \ + ../LibreVNA-GUI/preferencesdialog.ui + +DISTFILES += \ + ../LibreVNA-GUI/TraceSetup \ + ../LibreVNA-GUI/test.setup + +CONFIG += c++17 + +LIBS += -lusb-1.0 +unix:LIBS += -L/usr/lib/ + +REVISION = $$system(git rev-parse HEAD) +DEFINES += GITHASH=\\"\"$$REVISION\\"\" +DEFINES += FW_MAJOR=1 FW_MINOR=4 FW_PATCH=0 FW_SUFFIX=""#\\"\"-alpha.2\\"\" diff --git a/Software/PC_Application/LibreVNA-Test/main.cpp b/Software/PC_Application/LibreVNA-Test/main.cpp index 9ba0466..0dff291 100644 --- a/Software/PC_Application/LibreVNA-Test/main.cpp +++ b/Software/PC_Application/LibreVNA-Test/main.cpp @@ -1,11 +1,15 @@ #include "utiltests.h" +#include "portextensiontests.h" #include int main(int argc, char *argv[]) { + QApplication a(argc, argv); + int status = 0; status |= QTest::qExec(new UtilTests, argc, argv); + status |= QTest::qExec(new PortExtensionTests, argc, argv); return status; } diff --git a/Software/PC_Application/LibreVNA-Test/portextensiontests.cpp b/Software/PC_Application/LibreVNA-Test/portextensiontests.cpp new file mode 100644 index 0000000..770ad01 --- /dev/null +++ b/Software/PC_Application/LibreVNA-Test/portextensiontests.cpp @@ -0,0 +1,72 @@ +#include "portextensiontests.h" + +#include "util.h" +#include "json.hpp" + +#include + +PortExtensionTests::PortExtensionTests() : QObject(nullptr) +{ + // create dummy data: port 1 is a simple open, port 2 is open with 1ns of (one-way) delay and some loss + constexpr double startFreq = 1000000; + constexpr double stopFreq = 6000000000; + constexpr int steps = 501; + for(int i=0;ifromJSON(j); + + pe2->edit(); + pe2->measurementCompleted(dummyData); + + j = pe2->toJSON(); + QVERIFY(qFuzzyCompare((float)j.value("delay", 0.0), (float)1e-9)); + QVERIFY(qFuzzyCompare((float)j.value("DCloss", 0.0), (float)(-10*log10(0.5)))); + + auto pe1 = new PortExtension(); + + j.clear(); + j["port"] = 1; + pe1->fromJSON(j); + + pe1->edit(); + pe1->measurementCompleted(dummyData); + + j = pe1->toJSON(); + QVERIFY(qFuzzyIsNull((float)j.value("delay", 0.0))); + QVERIFY(qFuzzyIsNull((float)j.value("DCloss", 0.0))); +} + +void PortExtensionTests::correct() +{ + auto pe = new PortExtension(); + nlohmann::json j; + j["port"] = 2; + pe->fromJSON(j); + pe->edit(); + pe->measurementCompleted(dummyData); + + for(auto m : dummyData) { + pe->transformDatapoint(m); + QVERIFY(qFuzzyIsNull((float)m.measurements["S22"].imag())); + QVERIFY(qFuzzyCompare((float)m.measurements["S22"].real(), 1.0f)); + } +} + + diff --git a/Software/PC_Application/LibreVNA-Test/portextensiontests.h b/Software/PC_Application/LibreVNA-Test/portextensiontests.h new file mode 100644 index 0000000..40828ac --- /dev/null +++ b/Software/PC_Application/LibreVNA-Test/portextensiontests.h @@ -0,0 +1,21 @@ +#ifndef PORTEXTENSIONTESTS_H +#define PORTEXTENSIONTESTS_H + +#include + +#include "portextension.h" + +class PortExtensionTests : public QObject +{ + Q_OBJECT +public: + explicit PortExtensionTests(); + +private slots: + void autocalc(); + void correct(); +private: + std::vector dummyData; +}; + +#endif // PORTEXTENSIONTESTS_H