Fix impedance renormalization and honor new reference impedance for traces
This commit is contained in:
parent
542b07f52c
commit
358872904e
@ -151,7 +151,7 @@ void Trace::addData(const Trace::Data &d, const DeviceDriver::SASettings &s, int
|
|||||||
addData(d, domain, 50.0, index);
|
addData(d, domain, 50.0, index);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Trace::addDeembeddingData(const Trace::Data &d, int index)
|
void Trace::addDeembeddingData(const Trace::Data &d, double reference_impedance, int index)
|
||||||
{
|
{
|
||||||
bool wasAvailable = deembeddingAvailable();
|
bool wasAvailable = deembeddingAvailable();
|
||||||
if(index >= 0) {
|
if(index >= 0) {
|
||||||
@ -179,6 +179,7 @@ void Trace::addDeembeddingData(const Trace::Data &d, int index)
|
|||||||
deembeddingData.insert(lower, d);
|
deembeddingData.insert(lower, d);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
deembedded_reference_impedance = reference_impedance;
|
||||||
if(deembeddingActive) {
|
if(deembeddingActive) {
|
||||||
emit outputSamplesChanged(index, index + 1);
|
emit outputSamplesChanged(index, index + 1);
|
||||||
}
|
}
|
||||||
@ -687,8 +688,12 @@ void Trace::setModel(TraceModel *model)
|
|||||||
|
|
||||||
double Trace::getReferenceImpedance() const
|
double Trace::getReferenceImpedance() const
|
||||||
{
|
{
|
||||||
|
if(deembeddingActive) {
|
||||||
|
return deembedded_reference_impedance;
|
||||||
|
} else {
|
||||||
return reference_impedance;
|
return reference_impedance;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
const std::vector<Trace::MathInfo>& Trace::getMathOperations() const
|
const std::vector<Trace::MathInfo>& Trace::getMathOperations() const
|
||||||
{
|
{
|
||||||
@ -1316,6 +1321,10 @@ bool Trace::deembeddingAvailable()
|
|||||||
|
|
||||||
void Trace::setDeembeddingActive(bool active)
|
void Trace::setDeembeddingActive(bool active)
|
||||||
{
|
{
|
||||||
|
if(active == deembeddingActive) {
|
||||||
|
// no change
|
||||||
|
return;
|
||||||
|
}
|
||||||
deembeddingActive = active;
|
deembeddingActive = active;
|
||||||
if(deembeddingAvailable()) {
|
if(deembeddingAvailable()) {
|
||||||
if(active) {
|
if(active) {
|
||||||
@ -1330,6 +1339,7 @@ void Trace::setDeembeddingActive(bool active)
|
|||||||
void Trace::clearDeembedding()
|
void Trace::clearDeembedding()
|
||||||
{
|
{
|
||||||
deembeddingData.clear();
|
deembeddingData.clear();
|
||||||
|
setDeembeddingActive(false);
|
||||||
deembeddingChanged();
|
deembeddingChanged();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -46,7 +46,7 @@ public:
|
|||||||
void clear(bool force = false);
|
void clear(bool force = false);
|
||||||
void addData(const Data& d, DataType domain, double reference_impedance = 50.0, int index = -1);
|
void addData(const Data& d, DataType domain, double reference_impedance = 50.0, int index = -1);
|
||||||
void addData(const Data& d, const DeviceDriver::SASettings &s, int index = -1);
|
void addData(const Data& d, const DeviceDriver::SASettings &s, int index = -1);
|
||||||
void addDeembeddingData(const Data& d, int index = -1);
|
void addDeembeddingData(const Data& d, double reference_impedance = 50.0, int index = -1);
|
||||||
void setName(QString name);
|
void setName(QString name);
|
||||||
void setVelocityFactor(double v);
|
void setVelocityFactor(double v);
|
||||||
void fillFromTouchstone(Touchstone &t, unsigned int parameter);
|
void fillFromTouchstone(Touchstone &t, unsigned int parameter);
|
||||||
@ -288,6 +288,7 @@ private:
|
|||||||
// de-embedding variables
|
// de-embedding variables
|
||||||
std::vector<Data> deembeddingData;
|
std::vector<Data> deembeddingData;
|
||||||
bool deembeddingActive;
|
bool deembeddingActive;
|
||||||
|
double deembedded_reference_impedance;
|
||||||
|
|
||||||
std::vector<MathInfo> mathOps;
|
std::vector<MathInfo> mathOps;
|
||||||
TraceMath *lastMath;
|
TraceMath *lastMath;
|
||||||
|
@ -314,7 +314,7 @@ void TraceModel::addVNAData(const DeviceDriver::VNAMeasurement& d, TraceMath::Da
|
|||||||
if(!deembedded) {
|
if(!deembedded) {
|
||||||
t->addData(td, datatype, d.Z0, index);
|
t->addData(td, datatype, d.Z0, index);
|
||||||
} else {
|
} else {
|
||||||
t->addDeembeddingData(td, index);
|
t->addDeembeddingData(td, d.Z0, index);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -46,7 +46,7 @@ void ImpedanceRenormalization::transformDatapoint(DeviceDriver::VNAMeasurement &
|
|||||||
for(auto i=1;i<=ports;i++) {
|
for(auto i=1;i<=ports;i++) {
|
||||||
auto S11name = "S"+QString::number(i)+QString::number(i);
|
auto S11name = "S"+QString::number(i)+QString::number(i);
|
||||||
auto S11 = p.measurements[S11name];
|
auto S11 = p.measurements[S11name];
|
||||||
transformed[S11name] = Sparam(ABCDparam(Sparam(S11, 0.0, 0.0, 1.0), p.Z0), impedance).m11;
|
transformed[S11name] = Sparam(ABCDparam(Sparam(S11, 0.1, 0.1, 1.0), p.Z0), impedance).m11;
|
||||||
for(auto j=i+1;j<=ports;j++) {
|
for(auto j=i+1;j<=ports;j++) {
|
||||||
auto S12name = "S"+QString::number(i)+QString::number(j);
|
auto S12name = "S"+QString::number(i)+QString::number(j);
|
||||||
auto S21name = "S"+QString::number(j)+QString::number(i);
|
auto S21name = "S"+QString::number(j)+QString::number(i);
|
||||||
|
@ -94,10 +94,6 @@ VNA::VNA(AppWindow *window, QString name)
|
|||||||
|
|
||||||
connect(calLoad, &QAction::triggered, [=](){
|
connect(calLoad, &QAction::triggered, [=](){
|
||||||
LoadCalibration();
|
LoadCalibration();
|
||||||
if(window->getDevice() && !cal.validForDevice(window->getDevice()->getSerial())) {
|
|
||||||
InformationBox::ShowMessage("Invalid calibration", "The selected calibration was created for a different device. You can still load it but the resulting "
|
|
||||||
"data likely isn't useful.");
|
|
||||||
}
|
|
||||||
if(cal.getCaltype().type != Calibration::Type::None) {
|
if(cal.getCaltype().type != Calibration::Type::None) {
|
||||||
if(InformationBox::AskQuestion("Adjust span?", "Do you want to adjust the span to match the loaded calibration file?", false)) {
|
if(InformationBox::AskQuestion("Adjust span?", "Do you want to adjust the span to match the loaded calibration file?", false)) {
|
||||||
SpanMatchCal();
|
SpanMatchCal();
|
||||||
@ -510,6 +506,10 @@ VNA::VNA(AppWindow *window, QString name)
|
|||||||
calApplyToTraces->setEnabled(true);
|
calApplyToTraces->setEnabled(true);
|
||||||
bMatchCal->setEnabled(true);
|
bMatchCal->setEnabled(true);
|
||||||
saveCal->setEnabled(true);
|
saveCal->setEnabled(true);
|
||||||
|
if(window->getDevice() && !cal.validForDevice(window->getDevice()->getSerial())) {
|
||||||
|
InformationBox::ShowMessage("Invalid calibration", "The selected calibration was created for a different device. You can still load it but the resulting "
|
||||||
|
"data likely isn't useful.");
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
tb_cal->addWidget(cbType);
|
tb_cal->addWidget(cbType);
|
||||||
|
Loading…
Reference in New Issue
Block a user