mirror of
https://github.com/jankae/LibreVNA.git
synced 2026-04-05 06:25:16 +00:00
PC Application: partial firmware update dialog
This commit is contained in:
parent
8c8749accd
commit
07ba714f1f
134 changed files with 13954 additions and 7 deletions
60
Software/PC_Application/Tools/eseries.cpp
Normal file
60
Software/PC_Application/Tools/eseries.cpp
Normal file
|
|
@ -0,0 +1,60 @@
|
|||
#include "eseries.h"
|
||||
#include <math.h>
|
||||
#include <vector>
|
||||
|
||||
static const std::vector<double> E6 = {
|
||||
1.0, 1.5, 2.2, 3.3, 4.7, 6.8
|
||||
};
|
||||
static const std::vector<double> E12 = {
|
||||
1.0, 1.2, 1.5, 1.8, 2.2, 2.7, 3.3, 3.9, 4.7, 5.6, 6.8, 8.2
|
||||
};
|
||||
static const std::vector<double> E24 = {
|
||||
1.0, 1.1, 1.2, 1.3, 1.5, 1.6, 1.8, 2.0, 2.2, 2.4, 2.7, 3.0, 3.3, 3.6, 3.9, 4.3, 4.7, 5.1, 5.6, 6.2, 6.8, 7.5, 8.2, 9.1
|
||||
};
|
||||
static const std::vector<double> E48 = {
|
||||
1.00, 1.05, 1.10, 1.15, 1.21, 1.27, 1.33, 1.40, 1.47, 1.54, 1.62, 1.69, 1.78, 1.87, 1.96, 2.05, 2.15, 2.26, 2.37, 2.49, 2.61, 2.74, 2.87, 3.01, 3.16, 3.32, 3.48, 3.65, 3.83, 4.02, 4.22, 4.42, 4.64, 4.87, 5.11, 5.36, 5.62, 5.90, 6.19, 6.49, 6.81, 7.15, 7.50, 7.87, 8.25, 8.66, 9.09, 9.53
|
||||
};
|
||||
static const std::vector<double> E96 = {
|
||||
1.00, 1.02, 1.05, 1.07, 1.10, 1.13, 1.15, 1.18, 1.21, 1.24, 1.27, 1.30, 1.33, 1.37, 1.40, 1.43, 1.47, 1.50, 1.54, 1.58, 1.62, 1.65, 1.69, 1.74, 1.78, 1.82, 1.87, 1.91, 1.96, 2.00, 2.05, 2.10, 2.15, 2.21, 2.26, 2.32, 2.37, 2.43, 2.49, 2.55, 2.61, 2.67, 2.74, 2.80, 2.87, 2.94, 3.01, 3.09, 3.16, 3.24, 3.32, 3.40, 3.48, 3.57, 3.65, 3.74, 3.83, 3.92, 4.02, 4.12, 4.22, 4.32, 4.42, 4.53, 4.64, 4.75, 4.87, 4.99, 5.11, 5.23, 5.36, 5.49, 5.62, 5.76, 5.90, 6.04, 6.19, 6.34, 6.49, 6.65, 6.81, 6.98, 7.15, 7.32, 7.50, 7.68, 7.87, 8.06, 8.25, 8.45, 8.66, 8.87, 9.09, 9.31, 9.53, 9.76
|
||||
};
|
||||
|
||||
double ESeries::ToESeries(double value, ESeries::Series s, ESeries::Type t)
|
||||
{
|
||||
if(s == Series::Ideal) {
|
||||
// nothing to do
|
||||
return value;
|
||||
}
|
||||
// bring value into [1.0, 10.0) interval
|
||||
int shift10 = floor(log10(value));
|
||||
value *= pow(10.0, -shift10);
|
||||
std::vector<double> series;
|
||||
switch(s) {
|
||||
case Series::E96: series = E96; break;
|
||||
case Series::E48: series = E48; break;
|
||||
case Series::E24: series = E24; break;
|
||||
case Series::E12: series = E12; break;
|
||||
case Series::E6: series = E6; break;
|
||||
case Series::Ideal: /* already handled */ break;
|
||||
}
|
||||
unsigned int index = 1;
|
||||
while(index < 96 && series[index] <= value) {
|
||||
index++;
|
||||
}
|
||||
auto lower = series[index - 1];
|
||||
double higher = 10.0;
|
||||
if(index < series.size()) {
|
||||
higher = series[index];
|
||||
}
|
||||
double approximation;
|
||||
switch(t) {
|
||||
case Type::Lower: approximation = lower; break;
|
||||
case Type::Higher: approximation = higher; break;
|
||||
case Type::BestMatch:
|
||||
if(fabs(value - lower) < fabs(value - higher)) {
|
||||
approximation = lower;
|
||||
} else {
|
||||
approximation = higher;
|
||||
}
|
||||
}
|
||||
return approximation * pow(10, shift10);
|
||||
}
|
||||
25
Software/PC_Application/Tools/eseries.h
Normal file
25
Software/PC_Application/Tools/eseries.h
Normal file
|
|
@ -0,0 +1,25 @@
|
|||
#ifndef ESERIES_H
|
||||
#define ESERIES_H
|
||||
|
||||
|
||||
class ESeries
|
||||
{
|
||||
public:
|
||||
enum class Series {
|
||||
Ideal = 0,
|
||||
E6 = 1,
|
||||
E12 = 2,
|
||||
E24 = 3,
|
||||
E48 = 4,
|
||||
E96 = 5,
|
||||
};
|
||||
enum class Type {
|
||||
BestMatch = 0,
|
||||
Lower = 1,
|
||||
Higher = 2,
|
||||
};
|
||||
|
||||
static double ToESeries(double value, Series s, Type t = Type::BestMatch);
|
||||
};
|
||||
|
||||
#endif // ESERIES_H
|
||||
275
Software/PC_Application/Tools/impedancematchdialog.cpp
Normal file
275
Software/PC_Application/Tools/impedancematchdialog.cpp
Normal file
|
|
@ -0,0 +1,275 @@
|
|||
#include "impedancematchdialog.h"
|
||||
#include "ui_impedancematchdialog.h"
|
||||
#include "Tools/eseries.h"
|
||||
|
||||
using namespace std;
|
||||
|
||||
constexpr double ImpedanceMatchDialog::Z0;
|
||||
|
||||
ImpedanceMatchDialog::ImpedanceMatchDialog(TraceMarkerModel &model, TraceMarker *marker, QWidget *parent) :
|
||||
QDialog(parent),
|
||||
ui(new Ui::ImpedanceMatchDialog)
|
||||
{
|
||||
ui->setupUi(this);
|
||||
|
||||
// set SI units and prefixes
|
||||
ui->zReal->setUnit("Ohm");
|
||||
ui->zImag->setUnit("Ohm");
|
||||
ui->zFreq->setUnit("Hz");
|
||||
ui->zFreq->setPrefixes(" kMG");
|
||||
|
||||
ui->mImag->setUnit("Ohm");
|
||||
ui->mReal->setUnit("Ohm");
|
||||
ui->mLoss->setUnit("db");
|
||||
|
||||
ui->lValue->setUnit("H");
|
||||
ui->lValue->setPrefixes("pnum ");
|
||||
ui->cValue->setUnit("F");
|
||||
ui->cValue->setPrefixes("pnum ");
|
||||
|
||||
connect(ui->zFreq, &SIUnitEdit::valueChanged, this, &ImpedanceMatchDialog::calculateMatch);
|
||||
connect(ui->zImag, &SIUnitEdit::valueChanged, this, &ImpedanceMatchDialog::calculateMatch);
|
||||
connect(ui->zReal, &SIUnitEdit::valueChanged, this, &ImpedanceMatchDialog::calculateMatch);
|
||||
connect(ui->zGroup, qOverload<int>(&QButtonGroup::buttonClicked), this, &ImpedanceMatchDialog::calculateMatch);
|
||||
connect(ui->cMatchType, qOverload<int>(&QComboBox::currentIndexChanged), this, &ImpedanceMatchDialog::calculateMatch);
|
||||
connect(ui->lGroup, qOverload<int>(&QButtonGroup::buttonClicked), this, &ImpedanceMatchDialog::calculateMatch);
|
||||
connect(ui->cGroup, qOverload<int>(&QButtonGroup::buttonClicked), this, &ImpedanceMatchDialog::calculateMatch);
|
||||
connect(ui->zGroup, qOverload<int>(&QButtonGroup::buttonClicked), this, &ImpedanceMatchDialog::calculateMatch);
|
||||
|
||||
// populate marker options
|
||||
auto markers = model.getMarker();
|
||||
for(auto m : markers) {
|
||||
if(!m->trace()->isReflection()) {
|
||||
// matching only possible for reflections
|
||||
continue;
|
||||
}
|
||||
ui->cSource->addItem("From Marker "+QString::number(m->getNumber()), QVariant::fromValue<TraceMarker*>(m));
|
||||
if(m == marker) {
|
||||
// select the last index, e.i. the just created marker
|
||||
ui->cSource->setCurrentIndex(ui->cSource->count()-1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
ImpedanceMatchDialog::~ImpedanceMatchDialog()
|
||||
{
|
||||
delete ui;
|
||||
}
|
||||
|
||||
void ImpedanceMatchDialog::on_cSource_currentIndexChanged(int index)
|
||||
{
|
||||
ui->rbSeries->setEnabled(index == 0);
|
||||
ui->rbParallel->setEnabled(index == 0);
|
||||
ui->zReal->setEnabled(index == 0);
|
||||
ui->zImag->setEnabled(index == 0);
|
||||
ui->zFreq->setEnabled(index == 0);
|
||||
if(index > 0) {
|
||||
auto m = qvariant_cast<TraceMarker*>(ui->cSource->itemData(index));
|
||||
ui->rbSeries->setChecked(true);
|
||||
auto data = m->getData();
|
||||
auto reflection = Z0 * (1.0 + data) / (1.0 - data);
|
||||
ui->zReal->setValue(reflection.real());
|
||||
ui->zImag->setValue(reflection.imag());
|
||||
ui->zFreq->setValue(m->getFrequency());
|
||||
}
|
||||
}
|
||||
|
||||
void ImpedanceMatchDialog::calculateMatch()
|
||||
{
|
||||
try {
|
||||
double freq = ui->zFreq->value();
|
||||
complex<double> Z;
|
||||
if(ui->rbSeries->isChecked()) {
|
||||
Z.real(ui->zReal->value());
|
||||
Z.imag(ui->zImag->value());
|
||||
} else {
|
||||
auto real = complex<double>(ui->zReal->value(), 0.0);
|
||||
auto imag = complex<double>(0.0, ui->zImag->value());
|
||||
// calculate parallel impedance
|
||||
Z = real * imag / (real + imag);
|
||||
}
|
||||
bool seriesC = ui->cMatchType->currentIndex() == 0 ? true : false;
|
||||
// equations taken from http://www.ittc.ku.edu/~jstiles/723/handouts/section_5_1_Matching_with_Lumped_Elements_package.pdf
|
||||
double B, X;
|
||||
if(Z.real() > Z0) {
|
||||
B = sqrt(Z.real()/Z0)*sqrt(norm(Z)-Z0*Z.real());
|
||||
if (seriesC) {
|
||||
B = -B;
|
||||
}
|
||||
B += Z.imag();
|
||||
B /= norm(Z);
|
||||
X = 1/B + Z.imag()*Z0/Z.real()-Z0/(B*Z.real());
|
||||
} else {
|
||||
B = sqrt((Z0-Z.real())/Z.real())/Z0;
|
||||
X = sqrt(Z.real()*(Z0-Z.real()));
|
||||
if (seriesC) {
|
||||
B = -B;
|
||||
X = -X;
|
||||
}
|
||||
X -= Z.imag();
|
||||
}
|
||||
// convert X and B to inductor and capacitor
|
||||
bool twoCs = false;
|
||||
bool twoLs = false;
|
||||
double L, C, C2, L2;
|
||||
if(X >= 0) {
|
||||
L = X/(2*M_PI*freq);
|
||||
if(B > 0) {
|
||||
C = B/(2*M_PI*freq);
|
||||
} else {
|
||||
L2 = X/(2*M_PI*freq);
|
||||
L = -1/(B*2*M_PI*freq);
|
||||
twoLs = true;
|
||||
}
|
||||
} else {
|
||||
C = -1/(X*2*M_PI*freq);
|
||||
if(B < 0) {
|
||||
L = -1/(B*2*M_PI*freq);
|
||||
} else {
|
||||
C2 = B/(2*M_PI*freq);
|
||||
twoCs = true;
|
||||
}
|
||||
}
|
||||
|
||||
ESeries::Series Lseries;
|
||||
if(ui->lE6->isChecked()) {
|
||||
Lseries = ESeries::Series::E6;
|
||||
} else if(ui->lE12->isChecked()) {
|
||||
Lseries = ESeries::Series::E12;
|
||||
} else if(ui->lE24->isChecked()) {
|
||||
Lseries = ESeries::Series::E24;
|
||||
} else if(ui->lE48->isChecked()) {
|
||||
Lseries = ESeries::Series::E48;
|
||||
} else if(ui->lE96->isChecked()) {
|
||||
Lseries = ESeries::Series::E96;
|
||||
} else {
|
||||
Lseries = ESeries::Series::Ideal;
|
||||
}
|
||||
ESeries::Series Cseries;
|
||||
if(ui->cE6->isChecked()) {
|
||||
Cseries = ESeries::Series::E6;
|
||||
} else if(ui->cE12->isChecked()) {
|
||||
Cseries = ESeries::Series::E12;
|
||||
} else if(ui->cE24->isChecked()) {
|
||||
Cseries = ESeries::Series::E24;
|
||||
} else if(ui->cE48->isChecked()) {
|
||||
Cseries = ESeries::Series::E48;
|
||||
} else if(ui->cE96->isChecked()) {
|
||||
Cseries = ESeries::Series::E96;
|
||||
} else {
|
||||
Cseries = ESeries::Series::Ideal;
|
||||
}
|
||||
|
||||
L = ESeries::ToESeries(L, Lseries);
|
||||
C = ESeries::ToESeries(C, Cseries);
|
||||
L2 = ESeries::ToESeries(L2, Lseries);
|
||||
C2 = ESeries::ToESeries(C2, Cseries);
|
||||
|
||||
if(twoCs) {
|
||||
for(auto b : ui->lGroup->buttons()) {
|
||||
b->setEnabled(false);
|
||||
}
|
||||
for(auto b : ui->cGroup->buttons()) {
|
||||
b->setEnabled(true);
|
||||
}
|
||||
ui->lL->setText("C1:");
|
||||
ui->lC->setText("C2:");
|
||||
ui->lValue->setUnit("F");
|
||||
ui->cValue->setUnit("F");
|
||||
ui->lValue->setValue(C2);
|
||||
ui->cValue->setValue(C);
|
||||
} else if(twoLs) {
|
||||
for(auto b : ui->cGroup->buttons()) {
|
||||
b->setEnabled(false);
|
||||
}
|
||||
for(auto b : ui->lGroup->buttons()) {
|
||||
b->setEnabled(true);
|
||||
}
|
||||
ui->lC->setText("L2:");
|
||||
ui->lL->setText("L1:");
|
||||
ui->cValue->setUnit("H");
|
||||
ui->lValue->setUnit("H");
|
||||
ui->cValue->setValue(L2);
|
||||
ui->lValue->setValue(L);
|
||||
} else {
|
||||
for(auto b : ui->cGroup->buttons()) {
|
||||
b->setEnabled(true);
|
||||
}
|
||||
for(auto b : ui->lGroup->buttons()) {
|
||||
b->setEnabled(true);
|
||||
}
|
||||
ui->lC->setText("C:");
|
||||
ui->lL->setText("L:");
|
||||
ui->lValue->setUnit("H");
|
||||
ui->cValue->setUnit("F");
|
||||
ui->lValue->setValue(L);
|
||||
ui->cValue->setValue(C);
|
||||
}
|
||||
// calculate actual matched impedance
|
||||
complex<double> Zmatched;
|
||||
complex<double> Zp, Zs;
|
||||
if(seriesC) {
|
||||
if(twoLs) {
|
||||
Zs = complex<double>(0, 2*M_PI*freq*L2);
|
||||
Zp = complex<double>(0, 2*M_PI*freq*L);
|
||||
} else if(twoCs) {
|
||||
Zs = complex<double>(0, -1/(2*M_PI*freq*C2));
|
||||
Zp = complex<double>(0, -1/(2*M_PI*freq*C));
|
||||
} else {
|
||||
Zs = complex<double>(0, -1/(2*M_PI*freq*C));
|
||||
Zp = complex<double>(0, 2*M_PI*freq*L);
|
||||
}
|
||||
} else {
|
||||
if(twoCs) {
|
||||
Zs = complex<double>(0, -1/(2*M_PI*freq*C));
|
||||
Zp = complex<double>(0, -1/(2*M_PI*freq*C2));
|
||||
} else if(twoLs){
|
||||
Zs = complex<double>(0, 2*M_PI*freq*L);
|
||||
Zp = complex<double>(0, 2*M_PI*freq*L2);
|
||||
} else {
|
||||
Zs = complex<double>(0, 2*M_PI*freq*L);
|
||||
Zp = complex<double>(0, -1/(2*M_PI*freq*C));
|
||||
}
|
||||
}
|
||||
if(Z.real() > Z0) {
|
||||
Zmatched = Z*Zp/(Z+Zp) + Zs;
|
||||
} else {
|
||||
Zmatched = Zp*(Z+Zs)/(Zp+Z+Zs);
|
||||
}
|
||||
ui->mReal->setValue(Zmatched.real());
|
||||
ui->mImag->setValue(Zmatched.imag());
|
||||
double reflection = abs((Zmatched-Z0)/(Zmatched+Z0));
|
||||
auto loss = 20.0*log10(reflection);
|
||||
ui->mLoss->setValue(loss);
|
||||
|
||||
// set correct image
|
||||
if(Z.real() > Z0) {
|
||||
if(X >= 0 && B >= 0) {
|
||||
ui->Image->setPixmap(QPixmap(":/icons/sLpC_small.png"));
|
||||
} else if(X < 0 && B < 0) {
|
||||
ui->Image->setPixmap(QPixmap(":/icons/sCpL_small.png"));
|
||||
} else if(X >= 0 && B < 0) {
|
||||
ui->Image->setPixmap(QPixmap(":/icons/sCpC_small.png")); // TODO check
|
||||
} else {
|
||||
ui->Image->setPixmap(QPixmap(":/icons/sLpL_small.png")); // TODO check
|
||||
}
|
||||
} else {
|
||||
if(X >= 0 && B >= 0) {
|
||||
ui->Image->setPixmap(QPixmap(":/icons/pCsL_small.png"));
|
||||
} else if(X < 0 && B < 0) {
|
||||
ui->Image->setPixmap(QPixmap(":/icons/pLsC_small.png"));
|
||||
} else if(X >= 0 && B < 0) {
|
||||
ui->Image->setPixmap(QPixmap(":/icons/pLsL_small.png"));
|
||||
} else {
|
||||
ui->Image->setPixmap(QPixmap(":/icons/pCsC_small.png"));
|
||||
}
|
||||
}
|
||||
} catch (exception e){
|
||||
// something went wrong, probably caused by (intermediate) invalid input, such as f=0Hz
|
||||
ui->lValue->setValue(nan(""));
|
||||
ui->cValue->setValue(nan(""));
|
||||
ui->mReal->setValue(nan(""));
|
||||
ui->mImag->setValue(nan(""));
|
||||
ui->mLoss->setValue(nan(""));
|
||||
}
|
||||
}
|
||||
28
Software/PC_Application/Tools/impedancematchdialog.h
Normal file
28
Software/PC_Application/Tools/impedancematchdialog.h
Normal file
|
|
@ -0,0 +1,28 @@
|
|||
#ifndef IMPEDANCEMATCHDIALOG_H
|
||||
#define IMPEDANCEMATCHDIALOG_H
|
||||
|
||||
#include <QDialog>
|
||||
#include "Traces/tracemarkermodel.h"
|
||||
|
||||
namespace Ui {
|
||||
class ImpedanceMatchDialog;
|
||||
}
|
||||
|
||||
class ImpedanceMatchDialog : public QDialog
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
explicit ImpedanceMatchDialog(TraceMarkerModel &model, TraceMarker *marker = nullptr, QWidget *parent = nullptr);
|
||||
~ImpedanceMatchDialog();
|
||||
|
||||
private slots:
|
||||
void on_cSource_currentIndexChanged(int index);
|
||||
void calculateMatch();
|
||||
|
||||
private:
|
||||
static constexpr double Z0 = 50.0;
|
||||
Ui::ImpedanceMatchDialog *ui;
|
||||
};
|
||||
|
||||
#endif // IMPEDANCEMATCHDIALOG_H
|
||||
457
Software/PC_Application/Tools/impedancematchdialog.ui
Normal file
457
Software/PC_Application/Tools/impedancematchdialog.ui
Normal file
|
|
@ -0,0 +1,457 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>ImpedanceMatchDialog</class>
|
||||
<widget class="QDialog" name="ImpedanceMatchDialog">
|
||||
<property name="windowModality">
|
||||
<enum>Qt::ApplicationModal</enum>
|
||||
</property>
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>664</width>
|
||||
<height>497</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>Impedance Matching</string>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout">
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_3" stretch="0,1">
|
||||
<item>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_5">
|
||||
<item>
|
||||
<widget class="QGroupBox" name="groupBox_4">
|
||||
<property name="title">
|
||||
<string>Unmatched Impedance Z</string>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_3">
|
||||
<item>
|
||||
<widget class="QComboBox" name="cSource">
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Custom</string>
|
||||
</property>
|
||||
</item>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout">
|
||||
<item>
|
||||
<widget class="QRadioButton" name="rbSeries">
|
||||
<property name="text">
|
||||
<string>Series</string>
|
||||
</property>
|
||||
<property name="checked">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<attribute name="buttonGroup">
|
||||
<string notr="true">zGroup</string>
|
||||
</attribute>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QRadioButton" name="rbParallel">
|
||||
<property name="text">
|
||||
<string>Parallel</string>
|
||||
</property>
|
||||
<attribute name="buttonGroup">
|
||||
<string notr="true">zGroup</string>
|
||||
</attribute>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QFormLayout" name="formLayout_2">
|
||||
<item row="0" column="0">
|
||||
<widget class="QLabel" name="label">
|
||||
<property name="text">
|
||||
<string>Real:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="1">
|
||||
<widget class="SIUnitEdit" name="zReal"/>
|
||||
</item>
|
||||
<item row="1" column="0">
|
||||
<widget class="QLabel" name="label_5">
|
||||
<property name="text">
|
||||
<string>Imag:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="1">
|
||||
<widget class="SIUnitEdit" name="zImag"/>
|
||||
</item>
|
||||
<item row="2" column="0">
|
||||
<widget class="QLabel" name="frequencyLabel">
|
||||
<property name="text">
|
||||
<string>Frequency:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="1">
|
||||
<widget class="SIUnitEdit" name="zFreq"/>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QGroupBox" name="groupBox_3">
|
||||
<property name="title">
|
||||
<string>Matched Impedance</string>
|
||||
</property>
|
||||
<layout class="QFormLayout" name="formLayout">
|
||||
<item row="0" column="0">
|
||||
<widget class="QLabel" name="label_2">
|
||||
<property name="text">
|
||||
<string>Real:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="1">
|
||||
<widget class="SIUnitEdit" name="mReal">
|
||||
<property name="enabled">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="readOnly">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="0">
|
||||
<widget class="QLabel" name="label_3">
|
||||
<property name="text">
|
||||
<string>Imag:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="1">
|
||||
<widget class="SIUnitEdit" name="mImag">
|
||||
<property name="enabled">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="readOnly">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="0">
|
||||
<widget class="QLabel" name="label_4">
|
||||
<property name="text">
|
||||
<string>Return loss:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="1">
|
||||
<widget class="SIUnitEdit" name="mLoss">
|
||||
<property name="enabled">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="readOnly">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QGroupBox" name="groupBox_5">
|
||||
<property name="title">
|
||||
<string>Settings</string>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_6">
|
||||
<item>
|
||||
<widget class="QComboBox" name="cMatchType">
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Series C - Parallel L</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Parallel C - Series L</string>
|
||||
</property>
|
||||
</item>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_5">
|
||||
<item>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_2">
|
||||
<item>
|
||||
<widget class="QGroupBox" name="groupBox">
|
||||
<property name="title">
|
||||
<string>Inductor</string>
|
||||
</property>
|
||||
<layout class="QFormLayout" name="formLayout_3">
|
||||
<item row="0" column="0">
|
||||
<widget class="QRadioButton" name="lIdeal">
|
||||
<property name="text">
|
||||
<string>Ideal</string>
|
||||
</property>
|
||||
<property name="checked">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<attribute name="buttonGroup">
|
||||
<string notr="true">lGroup</string>
|
||||
</attribute>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="1">
|
||||
<widget class="QRadioButton" name="lE24">
|
||||
<property name="text">
|
||||
<string>E24</string>
|
||||
</property>
|
||||
<attribute name="buttonGroup">
|
||||
<string notr="true">lGroup</string>
|
||||
</attribute>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="0">
|
||||
<widget class="QRadioButton" name="lE6">
|
||||
<property name="text">
|
||||
<string>E6</string>
|
||||
</property>
|
||||
<attribute name="buttonGroup">
|
||||
<string notr="true">lGroup</string>
|
||||
</attribute>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="1">
|
||||
<widget class="QRadioButton" name="lE48">
|
||||
<property name="text">
|
||||
<string>E48</string>
|
||||
</property>
|
||||
<attribute name="buttonGroup">
|
||||
<string notr="true">lGroup</string>
|
||||
</attribute>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="0">
|
||||
<widget class="QRadioButton" name="lE12">
|
||||
<property name="text">
|
||||
<string>E12</string>
|
||||
</property>
|
||||
<attribute name="buttonGroup">
|
||||
<string notr="true">lGroup</string>
|
||||
</attribute>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="1">
|
||||
<widget class="QRadioButton" name="lE96">
|
||||
<property name="text">
|
||||
<string>E96</string>
|
||||
</property>
|
||||
<attribute name="buttonGroup">
|
||||
<string notr="true">lGroup</string>
|
||||
</attribute>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_4">
|
||||
<item>
|
||||
<widget class="QLabel" name="lL">
|
||||
<property name="text">
|
||||
<string>L:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="SIUnitEdit" name="lValue">
|
||||
<property name="enabled">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="readOnly">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_4">
|
||||
<item>
|
||||
<widget class="QGroupBox" name="groupBox_2">
|
||||
<property name="title">
|
||||
<string>Capacitor</string>
|
||||
</property>
|
||||
<layout class="QGridLayout" name="gridLayout_2">
|
||||
<item row="1" column="0">
|
||||
<widget class="QRadioButton" name="cE6">
|
||||
<property name="text">
|
||||
<string>E6</string>
|
||||
</property>
|
||||
<attribute name="buttonGroup">
|
||||
<string notr="true">cGroup</string>
|
||||
</attribute>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="0">
|
||||
<widget class="QRadioButton" name="cE12">
|
||||
<property name="text">
|
||||
<string>E12</string>
|
||||
</property>
|
||||
<attribute name="buttonGroup">
|
||||
<string notr="true">cGroup</string>
|
||||
</attribute>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="0">
|
||||
<widget class="QRadioButton" name="cIdeal">
|
||||
<property name="text">
|
||||
<string>Ideal</string>
|
||||
</property>
|
||||
<property name="checked">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<attribute name="buttonGroup">
|
||||
<string notr="true">cGroup</string>
|
||||
</attribute>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="1">
|
||||
<widget class="QRadioButton" name="cE24">
|
||||
<property name="text">
|
||||
<string>E24</string>
|
||||
</property>
|
||||
<attribute name="buttonGroup">
|
||||
<string notr="true">cGroup</string>
|
||||
</attribute>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="1">
|
||||
<widget class="QRadioButton" name="cE48">
|
||||
<property name="text">
|
||||
<string>E48</string>
|
||||
</property>
|
||||
<attribute name="buttonGroup">
|
||||
<string notr="true">cGroup</string>
|
||||
</attribute>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="1">
|
||||
<widget class="QRadioButton" name="cE96">
|
||||
<property name="text">
|
||||
<string>E96</string>
|
||||
</property>
|
||||
<attribute name="buttonGroup">
|
||||
<string notr="true">cGroup</string>
|
||||
</attribute>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_2">
|
||||
<item>
|
||||
<widget class="QLabel" name="lC">
|
||||
<property name="text">
|
||||
<string>C:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="SIUnitEdit" name="cValue">
|
||||
<property name="enabled">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="readOnly">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="Image">
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
<property name="scaledContents">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QDialogButtonBox" name="buttonBox">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="standardButtons">
|
||||
<set>QDialogButtonBox::Ok</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<customwidgets>
|
||||
<customwidget>
|
||||
<class>SIUnitEdit</class>
|
||||
<extends>QLineEdit</extends>
|
||||
<header>CustomWidgets/siunitedit.h</header>
|
||||
</customwidget>
|
||||
</customwidgets>
|
||||
<resources/>
|
||||
<connections>
|
||||
<connection>
|
||||
<sender>buttonBox</sender>
|
||||
<signal>accepted()</signal>
|
||||
<receiver>ImpedanceMatchDialog</receiver>
|
||||
<slot>accept()</slot>
|
||||
<hints>
|
||||
<hint type="sourcelabel">
|
||||
<x>248</x>
|
||||
<y>254</y>
|
||||
</hint>
|
||||
<hint type="destinationlabel">
|
||||
<x>157</x>
|
||||
<y>274</y>
|
||||
</hint>
|
||||
</hints>
|
||||
</connection>
|
||||
<connection>
|
||||
<sender>buttonBox</sender>
|
||||
<signal>rejected()</signal>
|
||||
<receiver>ImpedanceMatchDialog</receiver>
|
||||
<slot>reject()</slot>
|
||||
<hints>
|
||||
<hint type="sourcelabel">
|
||||
<x>316</x>
|
||||
<y>260</y>
|
||||
</hint>
|
||||
<hint type="destinationlabel">
|
||||
<x>286</x>
|
||||
<y>274</y>
|
||||
</hint>
|
||||
</hints>
|
||||
</connection>
|
||||
</connections>
|
||||
<buttongroups>
|
||||
<buttongroup name="zGroup"/>
|
||||
<buttongroup name="cGroup"/>
|
||||
<buttongroup name="lGroup"/>
|
||||
</buttongroups>
|
||||
</ui>
|
||||
Loading…
Add table
Add a link
Reference in a new issue