Fix impedance renormalization + add unit tests

This commit is contained in:
Jan Käberich 2025-02-09 12:59:11 +01:00
parent 523946447a
commit 50bde261af
9 changed files with 114 additions and 2 deletions

View file

@ -62,7 +62,19 @@ double Util::distanceToLine(QPointF point, QPointF l1, QPointF l2, QPointF *clos
}
std::complex<double> Util::SparamToImpedance(std::complex<double> d, std::complex<double> Z0) {
return Z0 * (1.0 + d) / (1.0 - d);
if (d != 1.0) {
return Z0 * (1.0 + d) / (1.0 - d);
} else {
return std::complex<double>(std::numeric_limits<double>::infinity(), 0.0);
}
}
std::complex<double> Util::ImpedanceToSparam(std::complex<double> Z, std::complex<double> Z0) {
if(std::isinf(Z.real())) {
return 1.0;
} else {
return (Z-Z0)/(Z+Z0);
}
}
double Util::dBmTodBuV(double dBm)

View file

@ -52,6 +52,7 @@ namespace Util {
return SparamToVSWR(abs(d));
}
std::complex<double> SparamToImpedance(std::complex<double> d, std::complex<double> Z0 = 50.0);
std::complex<double> ImpedanceToSparam(std::complex<double> Z, std::complex<double> Z0 = 50.0);
// all these conversions assume series connection of real and imag part
static inline double SparamToResistance(std::complex<double> d, std::complex<double> Z0 = 50.0) {
return SparamToImpedance(d, Z0).real();