[feat](trx-rs): add configurable noise blanker for SoapySDR backend

IQ-domain impulse noise blanker using exponential-smoothing RMS tracker. Samples exceeding threshold × running RMS are replaced with the last clean sample. Configurable via [sdr.noise_blanker] in TOML config and runtime via POST /set_sdr_noise_blanker API.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Signed-off-by: Stan Grams <sjg@haxx.space>
This commit is contained in:
2026-03-22 13:54:17 +01:00
parent 01a6b331f6
commit 189d27bac8
15 changed files with 288 additions and 2 deletions
@@ -1069,6 +1069,30 @@ pub async fn set_sdr_squelch(
.await
}
#[derive(serde::Deserialize)]
pub struct SdrNoiseBlankerQuery {
pub enabled: bool,
pub threshold: f64,
pub rig_id: Option<String>,
}
#[post("/set_sdr_noise_blanker")]
pub async fn set_sdr_noise_blanker(
query: web::Query<SdrNoiseBlankerQuery>,
rig_tx: web::Data<mpsc::Sender<RigRequest>>,
) -> Result<HttpResponse, Error> {
let q = query.into_inner();
send_command(
&rig_tx,
RigCommand::SetSdrNoiseBlanker {
enabled: q.enabled,
threshold: q.threshold,
},
q.rig_id,
)
.await
}
#[derive(serde::Deserialize)]
pub struct WfmDeemphasisQuery {
pub us: u32,
@@ -1834,6 +1858,7 @@ pub fn configure(cfg: &mut web::ServiceConfig) {
.service(set_sdr_lna_gain)
.service(set_sdr_agc)
.service(set_sdr_squelch)
.service(set_sdr_noise_blanker)
.service(set_wfm_deemphasis)
.service(set_wfm_stereo)
.service(set_wfm_denoise)