From 7ffd1ccd6aa2de0b25f2ab31e549c6c6160b98fe Mon Sep 17 00:00:00 2001 From: Stan Grams Date: Fri, 27 Mar 2026 14:48:03 +0100 Subject: [PATCH] [fix](trx-backend-soapysdr): use peak IQ magnitude for signal strength display Co-Authored-By: Claude Opus 4.6 Signed-off-by: Stan Grams --- .../trx-backend-soapysdr/src/dsp/channel.rs | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/src/trx-server/trx-backend/trx-backend-soapysdr/src/dsp/channel.rs b/src/trx-server/trx-backend/trx-backend-soapysdr/src/dsp/channel.rs index dce3c05..7b8ad61 100644 --- a/src/trx-server/trx-backend/trx-backend-soapysdr/src/dsp/channel.rs +++ b/src/trx-server/trx-backend/trx-backend-soapysdr/src/dsp/channel.rs @@ -740,13 +740,14 @@ impl ChannelDsp { } } - let signal_power = decimated - .iter() - .map(|s| s.re * s.re + s.im * s.im) - .sum::() - / decimated.len() as f32; + let (signal_power_mean, signal_power_peak) = + decimated.iter().fold((0.0_f32, 0.0_f32), |(sum, peak), s| { + let p = s.re * s.re + s.im * s.im; + (sum + p, peak.max(p)) + }); + let signal_power = signal_power_mean / decimated.len() as f32; let signal_db = 10.0 * signal_power.max(1e-12).log10(); - self.last_signal_db = signal_db; + self.last_signal_db = 10.0 * signal_power_peak.max(1e-12).log10(); const WFM_OUTPUT_GAIN: f32 = 0.50; let mut audio = if let Some(decoder) = self.wfm_decoder.as_mut() { let mut out = decoder.process_iq(decimated);