From 71699d1bd736047f697ced6a310a789b64f2d919 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20K=C3=A4berich?= Date: Fri, 14 May 2021 20:55:54 +0200 Subject: [PATCH] Handle delta markers on graphs --- .../PC_Application/Traces/tracemarker.cpp | 51 +++++++++++++++++-- Software/PC_Application/Traces/tracemarker.h | 1 + Software/PC_Application/Traces/traceplot.cpp | 2 +- 3 files changed, 49 insertions(+), 5 deletions(-) diff --git a/Software/PC_Application/Traces/tracemarker.cpp b/Software/PC_Application/Traces/tracemarker.cpp index 28c40b7..1cb7a8a 100644 --- a/Software/PC_Application/Traces/tracemarker.cpp +++ b/Software/PC_Application/Traces/tracemarker.cpp @@ -258,13 +258,40 @@ QString TraceMarker::readableData(Format f) switch(type) { case Type::PeakTable: return "Found " + QString::number(helperMarkers.size()) + " peaks"; - case Type::Delta: - // TODO - return "TODO"; + case Type::Delta: { + if(!delta) { + return "Invalid delta marker"; + } + switch(f) { + case Format::dB: return "Δ:"+Unit::ToString(Unit::dB(data) - Unit::dB(delta->data), "dB", " ", 4); + case Format::dBAngle: { + QString ret = "Δ:"+Unit::ToString(Unit::dB(data) - Unit::dB(delta->data), "dB", " ", 4) + "/"; + auto phase = arg(data)*180/M_PI; + auto deltaphase = arg(delta->data)*180/M_PI; + auto phasediff = phase - deltaphase; + if(phasediff >= 2*M_PI) { + phasediff -= 2*M_PI; + } else if(phasediff <= -2*M_PI) { + phasediff += 2*M_PI; + } + ret += Unit::ToString(phasediff, "°", " ", 4); + return ret; + } + case Format::RealImag: return "Δ:"+Unit::ToString(data.real() - delta->data.real(), "", " ", 5) + "+"+Unit::ToString(data.imag() - delta->data.imag(), "", " ", 5)+"j"; + case Format::Impedance: { + auto impedance = 50.0 * (1.0 + data) / (1.0 - data); + auto delta_impedance = 50.0 * (1.0 + delta->data) / (1.0 - delta->data); + return "Δ:"+Unit::ToString(impedance.real() - delta_impedance.real(), "Ω", "m k", 5) + "+"+Unit::ToString(impedance.imag() - delta_impedance.imag(), "Ω", "m k", 5)+"j"; + } + case Format::Noise: return "Δ:"+Unit::ToString(parentTrace->getNoise(position) - delta->parentTrace->getNoise(delta->position), "dbm/Hz", " ", 3); + default: return "Invalid"; + } + } + break; default: switch(f) { case Format::dB: return Unit::ToString(Unit::dB(data), "dB", " ", 4); - case Format::dBAngle: return Unit::ToString(Unit::dB(data), "dB", " ", 4) + "/"+Unit::ToString(arg(data)*180/M_PI, "°", " ", 3); + case Format::dBAngle: return Unit::ToString(Unit::dB(data), "dB", " ", 4) + "/"+Unit::ToString(arg(data)*180/M_PI, "°", " ", 4); case Format::RealImag: return Unit::ToString(data.real(), "", " ", 5) + "+"+Unit::ToString(data.imag(), "", " ", 5)+"j"; case Format::Noise: return Unit::ToString(parentTrace->getNoise(position), "dbm/Hz", " ", 3); case Format::TOI: { @@ -335,6 +362,22 @@ QString TraceMarker::readableData(Format f) return "Invalid"; } +QString TraceMarker::readablePosition() +{ + auto pos = position; + QString ret; + if(type == Type::Delta && delta) { + pos -= delta->position; + ret += "Δ:"; + } + if(isTimeDomain()) { + ret += Unit::ToString(pos, "s", "pnum ", 6); + } else { + ret += Unit::ToString(pos, "Hz", " kMG", 6); + } + return ret; +} + QString TraceMarker::readableSettings() { if(isTimeDomain()) { diff --git a/Software/PC_Application/Traces/tracemarker.h b/Software/PC_Application/Traces/tracemarker.h index f6bc8a1..330b664 100644 --- a/Software/PC_Application/Traces/tracemarker.h +++ b/Software/PC_Application/Traces/tracemarker.h @@ -46,6 +46,7 @@ public: std::vector applicableFormats(); QString readableData(Format format = Format::Last); + QString readablePosition(); QString readableSettings(); QString tooltipSettings(); QString readableType(); diff --git a/Software/PC_Application/Traces/traceplot.cpp b/Software/PC_Application/Traces/traceplot.cpp index 2060352..e68fbc1 100644 --- a/Software/PC_Application/Traces/traceplot.cpp +++ b/Software/PC_Application/Traces/traceplot.cpp @@ -158,7 +158,7 @@ void TracePlot::paintEvent(QPaintEvent *event) hasMarkerData = true; auto textArea = QRect(width() - marginRight - marginMarkerData, y, width() - marginRight, y + 100); - p.drawText(textArea, 0, "Marker "+QString::number(m->getNumber())+m->getSuffix()+": "+Unit::ToString(m->getPosition(), "", "pnum kMG", 6), &usedArea); + p.drawText(textArea, 0, "Marker "+QString::number(m->getNumber())+m->getSuffix()+": "+m->readablePosition(), &usedArea); y += usedArea.height(); for(auto f : m->getGraphDisplayFormats()) {