1
0
mirror of https://github.com/f4exb/sdrangel.git synced 2025-06-27 06:25:45 -04:00

SSB demod DNR API support

This commit is contained in:
f4exb 2023-11-05 12:24:32 +01:00
parent 179cd71c54
commit 91815cc87e
10 changed files with 390 additions and 33 deletions

View File

@ -542,6 +542,21 @@ void SSBDemod::webapiUpdateChannelSettings(
if (channelSettingsKeys.contains("agcThresholdGate")) { if (channelSettingsKeys.contains("agcThresholdGate")) {
settings.m_agcThresholdGate = response.getSsbDemodSettings()->getAgcThresholdGate(); settings.m_agcThresholdGate = response.getSsbDemodSettings()->getAgcThresholdGate();
} }
if (channelSettingsKeys.contains("dnr")) {
settings.m_dnr = response.getSsbDemodSettings()->getDnr() != 0;
}
if (channelSettingsKeys.contains("dnrAboveAvgFactor")) {
settings.m_dnrAboveAvgFactor = response.getSsbDemodSettings()->getDnrAboveAvgFactor();
}
if (channelSettingsKeys.contains("dnrSigmaFactor")) {
settings.m_dnrSigmaFactor = response.getSsbDemodSettings()->getDnrSigmaFactor();
}
if (channelSettingsKeys.contains("dnrNbPeaks")) {
settings.m_dnrNbPeaks = response.getSsbDemodSettings()->getDnrNbPeaks();
}
if (channelSettingsKeys.contains("dnrAlpha")) {
settings.m_dnrAlpha = response.getSsbDemodSettings()->getDnrAlpha();
}
if (channelSettingsKeys.contains("rgbColor")) { if (channelSettingsKeys.contains("rgbColor")) {
settings.m_rgbColor = response.getSsbDemodSettings()->getRgbColor(); settings.m_rgbColor = response.getSsbDemodSettings()->getRgbColor();
} }
@ -610,6 +625,12 @@ void SSBDemod::webapiFormatChannelSettings(SWGSDRangel::SWGChannelSettings& resp
response.getSsbDemodSettings()->setAgcTimeLog2(settings.m_agcTimeLog2); response.getSsbDemodSettings()->setAgcTimeLog2(settings.m_agcTimeLog2);
response.getSsbDemodSettings()->setAgcPowerThreshold(settings.m_agcPowerThreshold); response.getSsbDemodSettings()->setAgcPowerThreshold(settings.m_agcPowerThreshold);
response.getSsbDemodSettings()->setAgcThresholdGate(settings.m_agcThresholdGate); response.getSsbDemodSettings()->setAgcThresholdGate(settings.m_agcThresholdGate);
response.getSsbDemodSettings()->setDnr(settings.m_dnr ? 1 : 0);
response.getSsbDemodSettings()->setDnrScheme(settings.m_dnrScheme);
response.getSsbDemodSettings()->setDnrAboveAvgFactor(settings.m_dnrAboveAvgFactor);
response.getSsbDemodSettings()->setDnrSigmaFactor(settings.m_dnrSigmaFactor);
response.getSsbDemodSettings()->setDnrNbPeaks(settings.m_dnrNbPeaks);
response.getSsbDemodSettings()->setDnrAlpha(settings.m_dnrAlpha);
response.getSsbDemodSettings()->setRgbColor(settings.m_rgbColor); response.getSsbDemodSettings()->setRgbColor(settings.m_rgbColor);
if (response.getSsbDemodSettings()->getTitle()) { if (response.getSsbDemodSettings()->getTitle()) {
@ -812,6 +833,21 @@ void SSBDemod::webapiFormatChannelSettings(
if (channelSettingsKeys.contains("agcThresholdGate") || force) { if (channelSettingsKeys.contains("agcThresholdGate") || force) {
swgSSBDemodSettings->setAgcThresholdGate(settings.m_agcThresholdGate); swgSSBDemodSettings->setAgcThresholdGate(settings.m_agcThresholdGate);
} }
if (channelSettingsKeys.contains("dnr")) {
swgSSBDemodSettings->setDnr(settings.m_dnr ? 1 : 0);
}
if (channelSettingsKeys.contains("dnrAboveAvgFactor")) {
swgSSBDemodSettings->setDnrAboveAvgFactor(settings.m_dnrAboveAvgFactor);
}
if (channelSettingsKeys.contains("dnrSigmaFactor")) {
swgSSBDemodSettings->setDnrSigmaFactor(settings.m_dnrSigmaFactor);
}
if (channelSettingsKeys.contains("dnrNbPeaks")) {
swgSSBDemodSettings->setDnrNbPeaks(settings.m_dnrNbPeaks);
}
if (channelSettingsKeys.contains("dnrAlpha")) {
swgSSBDemodSettings->setDnrAlpha(settings.m_dnrAlpha);
}
if (channelSettingsKeys.contains("rgbColor") || force) { if (channelSettingsKeys.contains("rgbColor") || force) {
swgSSBDemodSettings->setRgbColor(settings.m_rgbColor); swgSSBDemodSettings->setRgbColor(settings.m_rgbColor);
} }

View File

@ -1473,6 +1473,19 @@ margin-bottom: 20px;
"type" : "integer", "type" : "integer",
"description" : "Synchronous AM sidebands mode (DSB, USB, LSB)" "description" : "Synchronous AM sidebands mode (DSB, USB, LSB)"
}, },
"frequencyMode" : {
"type" : "integer",
"description" : "(0 for Offset, 1 for MW, 2 for 25k, 3 for 8.33k)"
},
"frequency" : {
"type" : "integer",
"format" : "int64",
"description" : "Channel center frequency"
},
"snap" : {
"type" : "integer",
"description" : "Snap channel marker to channel center frequencies"
},
"streamIndex" : { "streamIndex" : {
"type" : "integer", "type" : "integer",
"description" : "MIMO channel. Not relevant when connected to SI (single Rx)." "description" : "MIMO channel. Not relevant when connected to SI (single Rx)."
@ -13603,6 +13616,33 @@ margin-bottom: 20px;
"type" : "integer", "type" : "integer",
"description" : "Audio squelch gate in ms" "description" : "Audio squelch gate in ms"
}, },
"dnr" : {
"type" : "integer",
"description" : "Toggle noise reduction:\n * 0 - Noise reduction off\n * 1 - Noise reduction on\n"
},
"dnrScheme" : {
"type" : "integer",
"description" : "Noise reduction scheme:\n * 0 - Average of magnitudes\n * 1 - Average and standard deviation of magnitudes\n * 2 - Magnitude maxima (peaks)\n"
},
"dnrAboveAvgFactor" : {
"type" : "number",
"format" : "float",
"description" : "Multiplier of the average to deteermine magnitude threshold in average scheme"
},
"dnrSigmaFactor" : {
"type" : "number",
"format" : "float",
"description" : "Standard deviation (sigma) multiplier to deteermine magnitude threshold in average and standard deviation scheme"
},
"dnrNbPeaks" : {
"type" : "integer",
"description" : "Number of magnitude peak maxima selected in peaks scheme"
},
"dnrAlpha" : {
"type" : "number",
"format" : "float",
"description" : "Smoothing constant (alpha) of the exponential smoothing filter. Must be between 0 and 1."
},
"rgbColor" : { "rgbColor" : {
"type" : "integer" "type" : "integer"
}, },
@ -58361,7 +58401,7 @@ except ApiException as e:
</div> </div>
<div id="generator"> <div id="generator">
<div class="content"> <div class="content">
Generated 2023-10-26T10:32:08.802+02:00 Generated 2023-11-05T10:45:45.965+01:00
</div> </div>
</div> </div>
</div> </div>

View File

@ -37,6 +37,16 @@ AMDemodSettings:
syncAMOperation: syncAMOperation:
description: Synchronous AM sidebands mode (DSB, USB, LSB) description: Synchronous AM sidebands mode (DSB, USB, LSB)
type: integer type: integer
frequencyMode:
description: (0 for Offset, 1 for MW, 2 for 25k, 3 for 8.33k)
type: integer
frequency:
description: Channel center frequency
type: integer
format: int64
snap:
description: Snap channel marker to channel center frequencies
type: integer
streamIndex: streamIndex:
description: MIMO channel. Not relevant when connected to SI (single Rx). description: MIMO channel. Not relevant when connected to SI (single Rx).
type: integer type: integer

View File

@ -57,6 +57,34 @@ SSBDemodSettings:
agcThresholdGate: agcThresholdGate:
description: Audio squelch gate in ms description: Audio squelch gate in ms
type: integer type: integer
dnr:
type: integer
description: >
Toggle noise reduction:
* 0 - Noise reduction off
* 1 - Noise reduction on
dnrScheme:
type: integer
description: >
Noise reduction scheme:
* 0 - Average of magnitudes
* 1 - Average and standard deviation of magnitudes
* 2 - Magnitude maxima (peaks)
dnrAboveAvgFactor:
type: number
format: float
description: Multiplier of the average to deteermine magnitude threshold in average scheme
dnrSigmaFactor:
type: number
format: float
description: Standard deviation (sigma) multiplier to deteermine magnitude threshold in average and standard deviation scheme
dnrNbPeaks:
type: integer
description: Number of magnitude peak maxima selected in peaks scheme
dnrAlpha:
type: number
format: float
description: Smoothing constant (alpha) of the exponential smoothing filter. Must be between 0 and 1.
rgbColor: rgbColor:
type: integer type: integer
title: title:

View File

@ -57,6 +57,34 @@ SSBDemodSettings:
agcThresholdGate: agcThresholdGate:
description: Audio squelch gate in ms description: Audio squelch gate in ms
type: integer type: integer
dnr:
type: integer
description: >
Toggle noise reduction:
* 0 - Noise reduction off
* 1 - Noise reduction on
dnrScheme:
type: integer
description: >
Noise reduction scheme:
* 0 - Average of magnitudes
* 1 - Average and standard deviation of magnitudes
* 2 - Magnitude maxima (peaks)
dnrAboveAvgFactor:
type: number
format: float
description: Multiplier of the average to deteermine magnitude threshold in average scheme
dnrSigmaFactor:
type: number
format: float
description: Standard deviation (sigma) multiplier to deteermine magnitude threshold in average and standard deviation scheme
dnrNbPeaks:
type: integer
description: Number of magnitude peak maxima selected in peaks scheme
dnrAlpha:
type: number
format: float
description: Smoothing constant (alpha) of the exponential smoothing filter. Must be between 0 and 1.
rgbColor: rgbColor:
type: integer type: integer
title: title:

View File

@ -1473,6 +1473,19 @@ margin-bottom: 20px;
"type" : "integer", "type" : "integer",
"description" : "Synchronous AM sidebands mode (DSB, USB, LSB)" "description" : "Synchronous AM sidebands mode (DSB, USB, LSB)"
}, },
"frequencyMode" : {
"type" : "integer",
"description" : "(0 for Offset, 1 for MW, 2 for 25k, 3 for 8.33k)"
},
"frequency" : {
"type" : "integer",
"format" : "int64",
"description" : "Channel center frequency"
},
"snap" : {
"type" : "integer",
"description" : "Snap channel marker to channel center frequencies"
},
"streamIndex" : { "streamIndex" : {
"type" : "integer", "type" : "integer",
"description" : "MIMO channel. Not relevant when connected to SI (single Rx)." "description" : "MIMO channel. Not relevant when connected to SI (single Rx)."
@ -13603,6 +13616,33 @@ margin-bottom: 20px;
"type" : "integer", "type" : "integer",
"description" : "Audio squelch gate in ms" "description" : "Audio squelch gate in ms"
}, },
"dnr" : {
"type" : "integer",
"description" : "Toggle noise reduction:\n * 0 - Noise reduction off\n * 1 - Noise reduction on\n"
},
"dnrScheme" : {
"type" : "integer",
"description" : "Noise reduction scheme:\n * 0 - Average of magnitudes\n * 1 - Average and standard deviation of magnitudes\n * 2 - Magnitude maxima (peaks)\n"
},
"dnrAboveAvgFactor" : {
"type" : "number",
"format" : "float",
"description" : "Multiplier of the average to deteermine magnitude threshold in average scheme"
},
"dnrSigmaFactor" : {
"type" : "number",
"format" : "float",
"description" : "Standard deviation (sigma) multiplier to deteermine magnitude threshold in average and standard deviation scheme"
},
"dnrNbPeaks" : {
"type" : "integer",
"description" : "Number of magnitude peak maxima selected in peaks scheme"
},
"dnrAlpha" : {
"type" : "number",
"format" : "float",
"description" : "Smoothing constant (alpha) of the exponential smoothing filter. Must be between 0 and 1."
},
"rgbColor" : { "rgbColor" : {
"type" : "integer" "type" : "integer"
}, },
@ -58361,7 +58401,7 @@ except ApiException as e:
</div> </div>
<div id="generator"> <div id="generator">
<div class="content"> <div class="content">
Generated 2023-10-26T10:32:08.802+02:00 Generated 2023-11-05T10:45:45.965+01:00
</div> </div>
</div> </div>
</div> </div>

View File

@ -621,3 +621,4 @@ SWGAMDemodSettings::isSet(){
return isObjectUpdated; return isObjectUpdated;
} }
} }

View File

@ -60,6 +60,18 @@ SWGSSBDemodSettings::SWGSSBDemodSettings() {
m_agc_power_threshold_isSet = false; m_agc_power_threshold_isSet = false;
agc_threshold_gate = 0; agc_threshold_gate = 0;
m_agc_threshold_gate_isSet = false; m_agc_threshold_gate_isSet = false;
dnr = 0;
m_dnr_isSet = false;
dnr_scheme = 0;
m_dnr_scheme_isSet = false;
dnr_above_avg_factor = 0.0f;
m_dnr_above_avg_factor_isSet = false;
dnr_sigma_factor = 0.0f;
m_dnr_sigma_factor_isSet = false;
dnr_nb_peaks = 0;
m_dnr_nb_peaks_isSet = false;
dnr_alpha = 0.0f;
m_dnr_alpha_isSet = false;
rgb_color = 0; rgb_color = 0;
m_rgb_color_isSet = false; m_rgb_color_isSet = false;
title = nullptr; title = nullptr;
@ -124,6 +136,18 @@ SWGSSBDemodSettings::init() {
m_agc_power_threshold_isSet = false; m_agc_power_threshold_isSet = false;
agc_threshold_gate = 0; agc_threshold_gate = 0;
m_agc_threshold_gate_isSet = false; m_agc_threshold_gate_isSet = false;
dnr = 0;
m_dnr_isSet = false;
dnr_scheme = 0;
m_dnr_scheme_isSet = false;
dnr_above_avg_factor = 0.0f;
m_dnr_above_avg_factor_isSet = false;
dnr_sigma_factor = 0.0f;
m_dnr_sigma_factor_isSet = false;
dnr_nb_peaks = 0;
m_dnr_nb_peaks_isSet = false;
dnr_alpha = 0.0f;
m_dnr_alpha_isSet = false;
rgb_color = 0; rgb_color = 0;
m_rgb_color_isSet = false; m_rgb_color_isSet = false;
title = new QString(""); title = new QString("");
@ -166,6 +190,12 @@ SWGSSBDemodSettings::cleanup() {
@ -237,6 +267,18 @@ SWGSSBDemodSettings::fromJsonObject(QJsonObject &pJson) {
::SWGSDRangel::setValue(&agc_threshold_gate, pJson["agcThresholdGate"], "qint32", ""); ::SWGSDRangel::setValue(&agc_threshold_gate, pJson["agcThresholdGate"], "qint32", "");
::SWGSDRangel::setValue(&dnr, pJson["dnr"], "qint32", "");
::SWGSDRangel::setValue(&dnr_scheme, pJson["dnrScheme"], "qint32", "");
::SWGSDRangel::setValue(&dnr_above_avg_factor, pJson["dnrAboveAvgFactor"], "float", "");
::SWGSDRangel::setValue(&dnr_sigma_factor, pJson["dnrSigmaFactor"], "float", "");
::SWGSDRangel::setValue(&dnr_nb_peaks, pJson["dnrNbPeaks"], "qint32", "");
::SWGSDRangel::setValue(&dnr_alpha, pJson["dnrAlpha"], "float", "");
::SWGSDRangel::setValue(&rgb_color, pJson["rgbColor"], "qint32", ""); ::SWGSDRangel::setValue(&rgb_color, pJson["rgbColor"], "qint32", "");
::SWGSDRangel::setValue(&title, pJson["title"], "QString", "QString"); ::SWGSDRangel::setValue(&title, pJson["title"], "QString", "QString");
@ -325,6 +367,24 @@ SWGSSBDemodSettings::asJsonObject() {
if(m_agc_threshold_gate_isSet){ if(m_agc_threshold_gate_isSet){
obj->insert("agcThresholdGate", QJsonValue(agc_threshold_gate)); obj->insert("agcThresholdGate", QJsonValue(agc_threshold_gate));
} }
if(m_dnr_isSet){
obj->insert("dnr", QJsonValue(dnr));
}
if(m_dnr_scheme_isSet){
obj->insert("dnrScheme", QJsonValue(dnr_scheme));
}
if(m_dnr_above_avg_factor_isSet){
obj->insert("dnrAboveAvgFactor", QJsonValue(dnr_above_avg_factor));
}
if(m_dnr_sigma_factor_isSet){
obj->insert("dnrSigmaFactor", QJsonValue(dnr_sigma_factor));
}
if(m_dnr_nb_peaks_isSet){
obj->insert("dnrNbPeaks", QJsonValue(dnr_nb_peaks));
}
if(m_dnr_alpha_isSet){
obj->insert("dnrAlpha", QJsonValue(dnr_alpha));
}
if(m_rgb_color_isSet){ if(m_rgb_color_isSet){
obj->insert("rgbColor", QJsonValue(rgb_color)); obj->insert("rgbColor", QJsonValue(rgb_color));
} }
@ -525,6 +585,66 @@ SWGSSBDemodSettings::setAgcThresholdGate(qint32 agc_threshold_gate) {
this->m_agc_threshold_gate_isSet = true; this->m_agc_threshold_gate_isSet = true;
} }
qint32
SWGSSBDemodSettings::getDnr() {
return dnr;
}
void
SWGSSBDemodSettings::setDnr(qint32 dnr) {
this->dnr = dnr;
this->m_dnr_isSet = true;
}
qint32
SWGSSBDemodSettings::getDnrScheme() {
return dnr_scheme;
}
void
SWGSSBDemodSettings::setDnrScheme(qint32 dnr_scheme) {
this->dnr_scheme = dnr_scheme;
this->m_dnr_scheme_isSet = true;
}
float
SWGSSBDemodSettings::getDnrAboveAvgFactor() {
return dnr_above_avg_factor;
}
void
SWGSSBDemodSettings::setDnrAboveAvgFactor(float dnr_above_avg_factor) {
this->dnr_above_avg_factor = dnr_above_avg_factor;
this->m_dnr_above_avg_factor_isSet = true;
}
float
SWGSSBDemodSettings::getDnrSigmaFactor() {
return dnr_sigma_factor;
}
void
SWGSSBDemodSettings::setDnrSigmaFactor(float dnr_sigma_factor) {
this->dnr_sigma_factor = dnr_sigma_factor;
this->m_dnr_sigma_factor_isSet = true;
}
qint32
SWGSSBDemodSettings::getDnrNbPeaks() {
return dnr_nb_peaks;
}
void
SWGSSBDemodSettings::setDnrNbPeaks(qint32 dnr_nb_peaks) {
this->dnr_nb_peaks = dnr_nb_peaks;
this->m_dnr_nb_peaks_isSet = true;
}
float
SWGSSBDemodSettings::getDnrAlpha() {
return dnr_alpha;
}
void
SWGSSBDemodSettings::setDnrAlpha(float dnr_alpha) {
this->dnr_alpha = dnr_alpha;
this->m_dnr_alpha_isSet = true;
}
qint32 qint32
SWGSSBDemodSettings::getRgbColor() { SWGSSBDemodSettings::getRgbColor() {
return rgb_color; return rgb_color;
@ -698,6 +818,24 @@ SWGSSBDemodSettings::isSet(){
if(m_agc_threshold_gate_isSet){ if(m_agc_threshold_gate_isSet){
isObjectUpdated = true; break; isObjectUpdated = true; break;
} }
if(m_dnr_isSet){
isObjectUpdated = true; break;
}
if(m_dnr_scheme_isSet){
isObjectUpdated = true; break;
}
if(m_dnr_above_avg_factor_isSet){
isObjectUpdated = true; break;
}
if(m_dnr_sigma_factor_isSet){
isObjectUpdated = true; break;
}
if(m_dnr_nb_peaks_isSet){
isObjectUpdated = true; break;
}
if(m_dnr_alpha_isSet){
isObjectUpdated = true; break;
}
if(m_rgb_color_isSet){ if(m_rgb_color_isSet){
isObjectUpdated = true; break; isObjectUpdated = true; break;
} }

View File

@ -93,6 +93,24 @@ public:
qint32 getAgcThresholdGate(); qint32 getAgcThresholdGate();
void setAgcThresholdGate(qint32 agc_threshold_gate); void setAgcThresholdGate(qint32 agc_threshold_gate);
qint32 getDnr();
void setDnr(qint32 dnr);
qint32 getDnrScheme();
void setDnrScheme(qint32 dnr_scheme);
float getDnrAboveAvgFactor();
void setDnrAboveAvgFactor(float dnr_above_avg_factor);
float getDnrSigmaFactor();
void setDnrSigmaFactor(float dnr_sigma_factor);
qint32 getDnrNbPeaks();
void setDnrNbPeaks(qint32 dnr_nb_peaks);
float getDnrAlpha();
void setDnrAlpha(float dnr_alpha);
qint32 getRgbColor(); qint32 getRgbColor();
void setRgbColor(qint32 rgb_color); void setRgbColor(qint32 rgb_color);
@ -181,6 +199,24 @@ private:
qint32 agc_threshold_gate; qint32 agc_threshold_gate;
bool m_agc_threshold_gate_isSet; bool m_agc_threshold_gate_isSet;
qint32 dnr;
bool m_dnr_isSet;
qint32 dnr_scheme;
bool m_dnr_scheme_isSet;
float dnr_above_avg_factor;
bool m_dnr_above_avg_factor_isSet;
float dnr_sigma_factor;
bool m_dnr_sigma_factor_isSet;
qint32 dnr_nb_peaks;
bool m_dnr_nb_peaks_isSet;
float dnr_alpha;
bool m_dnr_alpha_isSet;
qint32 rgb_color; qint32 rgb_color;
bool m_rgb_color_isSet; bool m_rgb_color_isSet;