new marker type: negative peak table
This commit is contained in:
parent
5ad44c780c
commit
0dbf362f57
@ -192,6 +192,7 @@ std::vector<Marker::Format> Marker::applicableFormats()
|
|||||||
case Type::Maximum:
|
case Type::Maximum:
|
||||||
case Type::Minimum:
|
case Type::Minimum:
|
||||||
case Type::PeakTable:
|
case Type::PeakTable:
|
||||||
|
case Type::NegativePeakTable:
|
||||||
if(Trace::isSAParameter(parentTrace->liveParameter())) {
|
if(Trace::isSAParameter(parentTrace->liveParameter())) {
|
||||||
ret.push_back(Format::dBm);
|
ret.push_back(Format::dBm);
|
||||||
ret.push_back(Format::dBuV);
|
ret.push_back(Format::dBuV);
|
||||||
@ -225,6 +226,7 @@ std::vector<Marker::Format> Marker::applicableFormats()
|
|||||||
case Type::Maximum:
|
case Type::Maximum:
|
||||||
case Type::Minimum:
|
case Type::Minimum:
|
||||||
case Type::PeakTable:
|
case Type::PeakTable:
|
||||||
|
case Type::NegativePeakTable:
|
||||||
if(Trace::isSAParameter(parentTrace->liveParameter())) {
|
if(Trace::isSAParameter(parentTrace->liveParameter())) {
|
||||||
ret.push_back(Format::dBm);
|
ret.push_back(Format::dBm);
|
||||||
ret.push_back(Format::dBuV);
|
ret.push_back(Format::dBuV);
|
||||||
@ -441,6 +443,7 @@ QString Marker::readableData(Format f)
|
|||||||
case Trace::DataType::TimeZeroSpan:
|
case Trace::DataType::TimeZeroSpan:
|
||||||
switch(type) {
|
switch(type) {
|
||||||
case Type::PeakTable:
|
case Type::PeakTable:
|
||||||
|
case Type::NegativePeakTable:
|
||||||
return "Found " + QString::number(helperMarkers.size()) + " peaks";
|
return "Found " + QString::number(helperMarkers.size()) + " peaks";
|
||||||
case Type::Delta: {
|
case Type::Delta: {
|
||||||
if(!delta) {
|
if(!delta) {
|
||||||
@ -647,6 +650,7 @@ QString Marker::readableSettings()
|
|||||||
case Type::Bandpass:
|
case Type::Bandpass:
|
||||||
return Unit::ToString(cutoffAmplitude, "db", " ", 3);
|
return Unit::ToString(cutoffAmplitude, "db", " ", 3);
|
||||||
case Type::PeakTable:
|
case Type::PeakTable:
|
||||||
|
case Type::NegativePeakTable:
|
||||||
return Unit::ToString(peakThreshold, "db", " ", 3);
|
return Unit::ToString(peakThreshold, "db", " ", 3);
|
||||||
case Type::TOI:
|
case Type::TOI:
|
||||||
return "none";
|
return "none";
|
||||||
@ -712,6 +716,7 @@ QString Marker::tooltipSettings()
|
|||||||
case Type::Bandpass:
|
case Type::Bandpass:
|
||||||
return "Cutoff amplitude (relativ to peak)";
|
return "Cutoff amplitude (relativ to peak)";
|
||||||
case Type::PeakTable:
|
case Type::PeakTable:
|
||||||
|
case Type::NegativePeakTable:
|
||||||
return "Peak threshold";
|
return "Peak threshold";
|
||||||
case Type::PhaseNoise:
|
case Type::PhaseNoise:
|
||||||
return "Frequency offset";
|
return "Frequency offset";
|
||||||
@ -1016,6 +1021,7 @@ std::set<Marker::Type> Marker::getSupportedTypes()
|
|||||||
supported.insert(Type::Minimum);
|
supported.insert(Type::Minimum);
|
||||||
supported.insert(Type::Delta);
|
supported.insert(Type::Delta);
|
||||||
supported.insert(Type::PeakTable);
|
supported.insert(Type::PeakTable);
|
||||||
|
supported.insert(Type::NegativePeakTable);
|
||||||
supported.insert(Type::Flatness);
|
supported.insert(Type::Flatness);
|
||||||
if(!parentTrace->isReflection()) {
|
if(!parentTrace->isReflection()) {
|
||||||
supported.insert(Type::Lowpass);
|
supported.insert(Type::Lowpass);
|
||||||
@ -1315,6 +1321,7 @@ nlohmann::json Marker::toJSON()
|
|||||||
j["delta_marker"] = delta->toHash();
|
j["delta_marker"] = delta->toHash();
|
||||||
break;
|
break;
|
||||||
case Type::PeakTable:
|
case Type::PeakTable:
|
||||||
|
case Type::NegativePeakTable:
|
||||||
j["peak_threshold"] = peakThreshold;
|
j["peak_threshold"] = peakThreshold;
|
||||||
break;
|
break;
|
||||||
case Type::Lowpass:
|
case Type::Lowpass:
|
||||||
@ -1377,6 +1384,7 @@ void Marker::fromJSON(nlohmann::json j)
|
|||||||
// Instead it will be correctly assigned in TraceMarkerModel::fromJSON()
|
// Instead it will be correctly assigned in TraceMarkerModel::fromJSON()
|
||||||
break;
|
break;
|
||||||
case Type::PeakTable:
|
case Type::PeakTable:
|
||||||
|
case Type::NegativePeakTable:
|
||||||
peakThreshold = j.value("peak_threshold", -40);
|
peakThreshold = j.value("peak_threshold", -40);
|
||||||
break;
|
break;
|
||||||
case Type::Lowpass:
|
case Type::Lowpass:
|
||||||
@ -1576,6 +1584,7 @@ SIUnitEdit *Marker::getSettingsEditor()
|
|||||||
ret->setValue(cutoffAmplitude);
|
ret->setValue(cutoffAmplitude);
|
||||||
break;
|
break;
|
||||||
case Type::PeakTable:
|
case Type::PeakTable:
|
||||||
|
case Type::NegativePeakTable:
|
||||||
ret = new SIUnitEdit("db", " ", 3);
|
ret = new SIUnitEdit("db", " ", 3);
|
||||||
ret->setValue(peakThreshold);
|
ret->setValue(peakThreshold);
|
||||||
break;
|
break;
|
||||||
@ -1707,6 +1716,7 @@ void Marker::adjustSettings(double value)
|
|||||||
cutoffAmplitude = value;
|
cutoffAmplitude = value;
|
||||||
break;
|
break;
|
||||||
case Type::PeakTable:
|
case Type::PeakTable:
|
||||||
|
case Type::NegativePeakTable:
|
||||||
peakThreshold = value;
|
peakThreshold = value;
|
||||||
break;
|
break;
|
||||||
case Type::PhaseNoise:
|
case Type::PhaseNoise:
|
||||||
@ -1778,9 +1788,10 @@ void Marker::update()
|
|||||||
case Type::Minimum:
|
case Type::Minimum:
|
||||||
setPosition(parentTrace->findExtremum(false, xmin, xmax));
|
setPosition(parentTrace->findExtremum(false, xmin, xmax));
|
||||||
break;
|
break;
|
||||||
case Type::PeakTable: {
|
case Type::PeakTable:
|
||||||
|
case Type::NegativePeakTable: {
|
||||||
deleteHelperMarkers();
|
deleteHelperMarkers();
|
||||||
auto peaks = parentTrace->findPeakFrequencies(100, peakThreshold, 3.0, xmin, xmax);
|
auto peaks = parentTrace->findPeakFrequencies(100, peakThreshold, 3.0, xmin, xmax, type == Type::NegativePeakTable);
|
||||||
char suffix = 'a';
|
char suffix = 'a';
|
||||||
for(auto p : peaks) {
|
for(auto p : peaks) {
|
||||||
auto helper = new Marker(model, number, this);
|
auto helper = new Marker(model, number, this);
|
||||||
|
@ -96,6 +96,7 @@ public:
|
|||||||
Minimum,
|
Minimum,
|
||||||
Delta,
|
Delta,
|
||||||
PeakTable,
|
PeakTable,
|
||||||
|
NegativePeakTable,
|
||||||
Lowpass,
|
Lowpass,
|
||||||
Highpass,
|
Highpass,
|
||||||
Bandpass,
|
Bandpass,
|
||||||
@ -176,6 +177,7 @@ private:
|
|||||||
case Type::Minimum: return "Minimum";
|
case Type::Minimum: return "Minimum";
|
||||||
case Type::Delta: return "Delta";
|
case Type::Delta: return "Delta";
|
||||||
case Type::PeakTable: return "Peak Table";
|
case Type::PeakTable: return "Peak Table";
|
||||||
|
case Type::NegativePeakTable: return "Negative Peak Table";
|
||||||
case Type::Lowpass: return "Lowpass";
|
case Type::Lowpass: return "Lowpass";
|
||||||
case Type::Highpass: return "Highpass";
|
case Type::Highpass: return "Highpass";
|
||||||
case Type::Bandpass: return "Bandpass";
|
case Type::Bandpass: return "Bandpass";
|
||||||
|
@ -1361,12 +1361,15 @@ double Trace::findExtremum(bool max, double xmin, double xmax)
|
|||||||
return freq;
|
return freq;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<double> Trace::findPeakFrequencies(unsigned int maxPeaks, double minLevel, double minValley, double xmin, double xmax)
|
std::vector<double> Trace::findPeakFrequencies(unsigned int maxPeaks, double minLevel, double minValley, double xmin, double xmax, bool negativePeaks)
|
||||||
{
|
{
|
||||||
if(lastMath->getDataType() != DataType::Frequency) {
|
if(lastMath->getDataType() != DataType::Frequency) {
|
||||||
// not in frequency domain
|
// not in frequency domain
|
||||||
return vector<double>();
|
return vector<double>();
|
||||||
}
|
}
|
||||||
|
if(negativePeaks) {
|
||||||
|
minLevel = -minLevel;
|
||||||
|
}
|
||||||
using peakInfo = struct peakinfo {
|
using peakInfo = struct peakinfo {
|
||||||
double frequency;
|
double frequency;
|
||||||
double level_dbm;
|
double level_dbm;
|
||||||
@ -1380,6 +1383,9 @@ std::vector<double> Trace::findPeakFrequencies(unsigned int maxPeaks, double min
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
double dbm = Util::SparamTodB(d.y);
|
double dbm = Util::SparamTodB(d.y);
|
||||||
|
if(negativePeaks) {
|
||||||
|
dbm = -dbm;
|
||||||
|
}
|
||||||
if((dbm >= max_dbm) && (min_dbm <= dbm - minValley)) {
|
if((dbm >= max_dbm) && (min_dbm <= dbm - minValley)) {
|
||||||
// potential peak frequency
|
// potential peak frequency
|
||||||
frequency = d.x;
|
frequency = d.x;
|
||||||
|
@ -81,7 +81,7 @@ public:
|
|||||||
* To detect the next peak, the signal first has to drop at least minValley below the peak level.
|
* To detect the next peak, the signal first has to drop at least minValley below the peak level.
|
||||||
*/
|
*/
|
||||||
std::vector<double> findPeakFrequencies(unsigned int maxPeaks = 100, double minLevel = -100.0, double minValley = 3.0,
|
std::vector<double> findPeakFrequencies(unsigned int maxPeaks = 100, double minLevel = -100.0, double minValley = 3.0,
|
||||||
double xmin = std::numeric_limits<double>::lowest(), double xmax = std::numeric_limits<double>::max());
|
double xmin = std::numeric_limits<double>::lowest(), double xmax = std::numeric_limits<double>::max(), bool negativePeaks = false);
|
||||||
enum class SampleType {
|
enum class SampleType {
|
||||||
Frequency,
|
Frequency,
|
||||||
TimeImpulse,
|
TimeImpulse,
|
||||||
|
Loading…
Reference in New Issue
Block a user