[feat](trx-rs): map VDES positions and restore burst gating

Publish decoded VDES positions into the map and revert the VDES burst detector to its original gating thresholds.

Co-authored-by: Stan Grams <sjg@haxx.space>
Signed-off-by: Stan Grams <sjg@haxx.space>
This commit is contained in:
2026-03-03 01:27:33 +01:00
parent c454f2218d
commit 67c7b5d1d3
4 changed files with 126 additions and 20 deletions
+6 -19
View File
@@ -20,9 +20,8 @@ use num_complex::Complex;
use trx_core::decode::VdesMessage;
const VDES_SYMBOL_RATE: f32 = 76_800.0;
const MIN_BURST_MS: f32 = 1.5;
const BURST_END_MS: f32 = 0.35;
const MAX_BURST_MS: f32 = 45.0;
const MIN_BURST_MS: f32 = 2.0;
const BURST_END_MS: f32 = 0.4;
const MIN_BURST_SYMBOLS: usize = 64;
const TER_MCS1_100_BURST_SYMBOLS: usize = 1_984;
const TER_MCS1_100_RAMP_SYMBOLS: usize = 32;
@@ -36,10 +35,10 @@ const TER_MCS1_100_SYNC_BITS: &[u8; TER_MCS1_100_SYNC_SYMBOLS] = b"1111110011010
const PI4_QPSK_DIBITS: [u8; 4] = [0b00, 0b01, 0b11, 0b10];
const MIN_SYNC_CANDIDATE_SCORE: f32 = 0.20;
const MIN_SYNC_PARSE_SCORE: f32 = 0.50;
const BURST_TRIGGER_NOISE_MULT: f32 = 3.0;
const BURST_TRIGGER_FLOOR: f32 = 1.0e-10;
const BURST_SUSTAIN_NOISE_MULT: f32 = 1.15;
const BURST_SUSTAIN_FLOOR: f32 = 1.0e-11;
const BURST_TRIGGER_NOISE_MULT: f32 = 8.0;
const BURST_TRIGGER_FLOOR: f32 = 2.0e-4;
const BURST_SUSTAIN_NOISE_MULT: f32 = 3.0;
const BURST_SUSTAIN_FLOOR: f32 = 1.2e-4;
#[derive(Debug, Clone)]
pub struct VdesDecoder {
@@ -74,8 +73,6 @@ impl VdesDecoder {
((self.sample_rate * (MIN_BURST_MS / 1000.0)).round() as usize).max(16);
let quiet_limit =
((self.sample_rate * (BURST_END_MS / 1000.0)).round() as u32).max(4);
let max_burst_samples =
((self.sample_rate * (MAX_BURST_MS / 1000.0)).round() as usize).max(min_burst_samples);
for &sample in samples {
let power = sample.norm_sqr();
@@ -99,16 +96,6 @@ impl VdesDecoder {
self.quiet_run = 0;
}
if self.burst_samples.len() >= max_burst_samples {
if let Some(msg) = self.finalize_burst(channel) {
out.push(msg);
}
self.in_burst = false;
self.quiet_run = 0;
self.burst_samples.clear();
continue;
}
if self.quiet_run >= quiet_limit {
if self.burst_samples.len() >= min_burst_samples {
if let Some(msg) = self.finalize_burst(channel) {