Handle delta markers on graphs

This commit is contained in:
Jan Käberich 2021-05-14 20:55:54 +02:00
parent ba3527d7b6
commit 71699d1bd7
3 changed files with 49 additions and 5 deletions

View File

@ -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()) {

View File

@ -46,6 +46,7 @@ public:
std::vector<Format> applicableFormats();
QString readableData(Format format = Format::Last);
QString readablePosition();
QString readableSettings();
QString tooltipSettings();
QString readableType();

View File

@ -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()) {