2020-11-22 07:41:42 +08:00
|
|
|
#ifndef UTILH_H
|
|
|
|
#define UTILH_H
|
|
|
|
|
2021-06-28 05:40:50 +08:00
|
|
|
#include <complex>
|
|
|
|
#include <math.h>
|
|
|
|
#include <limits>
|
|
|
|
|
2021-10-26 02:56:27 +08:00
|
|
|
#include <QColor>
|
|
|
|
|
2020-11-22 07:41:42 +08:00
|
|
|
namespace Util {
|
|
|
|
template<typename T> T Scale(T value, T from_low, T from_high, T to_low, T to_high) {
|
|
|
|
value -= from_low;
|
|
|
|
value *= (to_high - to_low) / (from_high - from_low);
|
|
|
|
value += to_low;
|
|
|
|
return value;
|
|
|
|
}
|
2021-06-28 05:40:50 +08:00
|
|
|
|
|
|
|
static inline double SparamTodB(double d) {
|
|
|
|
return 20*log10(d);
|
|
|
|
}
|
|
|
|
static inline double SparamTodB(std::complex<double> d) {
|
|
|
|
return SparamTodB(abs(d));
|
|
|
|
}
|
|
|
|
static inline double SparamToDegree(std::complex<double> d) {
|
|
|
|
return (arg(d) * 180.0 / M_PI);
|
|
|
|
}
|
|
|
|
static inline double SparamToVSWR(double d) {
|
|
|
|
if(abs(d) < 1.0) {
|
|
|
|
return (1+abs(d)) / (1-abs(d));
|
|
|
|
} else {
|
|
|
|
return std::numeric_limits<double>::quiet_NaN();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
static inline double SparamToVSWR(std::complex<double> d) {
|
|
|
|
return SparamToVSWR(abs(d));
|
|
|
|
}
|
|
|
|
static inline std::complex<double> SparamToImpedance(std::complex<double> d) {
|
|
|
|
return 50.0 * (1.0 + d) / (1.0 - d);
|
|
|
|
}
|
|
|
|
// all these conversions assume series connection of real and imag part
|
|
|
|
static inline double SparamToResistance(std::complex<double> d) {
|
|
|
|
return SparamToImpedance(d).real();
|
|
|
|
}
|
|
|
|
static inline double SparamToCapacitance(std::complex<double> d, double freq) {
|
|
|
|
return -1.0 / (SparamToImpedance(d).imag() * 2.0 * M_PI * freq);
|
|
|
|
}
|
|
|
|
static inline double SparamToInductance(std::complex<double> d, double freq) {
|
|
|
|
return SparamToImpedance(d).imag() / (2.0 * M_PI * freq);
|
|
|
|
}
|
|
|
|
static inline double SparamToQualityFactor(std::complex<double> d) {
|
|
|
|
return abs(d.imag()) / d.real();
|
|
|
|
}
|
2021-10-26 02:56:27 +08:00
|
|
|
// attempts to return a font color with good contrast against the given background color
|
|
|
|
static inline QColor getFontColorFromBackground(QColor q) {
|
|
|
|
auto brightness = q.redF() * 0.299 + q.greenF() * 0.587 + q.blueF() * 0.114;
|
|
|
|
return brightness > 0.6 ? Qt::black : Qt::white;
|
|
|
|
}
|
2020-11-22 07:41:42 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
#endif // UTILH_H
|