]> code.octet-stream.net Git - m17rt/blobdiff - m17core/src/decode.rs
Reduce the number of samples being moved around for sync burst detection
[m17rt] / m17core / src / decode.rs
index 76c40d37cb99a60a44cbc69f667604ed90baa839..86567d9a6a4d4488228d3d62f61acf7a3090ac68 100755 (executable)
@@ -54,17 +54,18 @@ pub(crate) fn sync_burst_correlation(target: [i8; 8], samples: &[f32]) -> (f32,
     let mut pos_max: f32 = f32::MIN;
     let mut neg_max: f32 = f32::MAX;
     for i in 0..8 {
     let mut pos_max: f32 = f32::MIN;
     let mut neg_max: f32 = f32::MAX;
     for i in 0..8 {
-        pos_max = pos_max.max(samples[i * 10]);
-        neg_max = neg_max.min(samples[i * 10]);
+        pos_max = pos_max.max(samples[i]);
+        neg_max = neg_max.min(samples[i]);
     }
     let gain = (pos_max - neg_max) / 2.0;
     let shift = pos_max + neg_max;
     if gain < SYNC_MIN_GAIN {
         return (f32::MAX, gain, shift);
     }
     }
     let gain = (pos_max - neg_max) / 2.0;
     let shift = pos_max + neg_max;
     if gain < SYNC_MIN_GAIN {
         return (f32::MAX, gain, shift);
     }
+
     let mut diff = 0.0;
     for i in 0..8 {
     let mut diff = 0.0;
     for i in 0..8 {
-        let sym_diff = (((samples[i * 10] - shift) / gain) - target[i] as f32).abs();
+        let sym_diff = (((samples[i] - shift) / gain) - target[i] as f32).abs();
         if sym_diff > SYNC_BIT_THRESHOLD {
             return (f32::MAX, gain, shift);
         }
         if sym_diff > SYNC_BIT_THRESHOLD {
             return (f32::MAX, gain, shift);
         }
@@ -143,8 +144,8 @@ pub(crate) fn parse_packet(frame: &[f32] /* length 192 */) -> Option<PacketFrame
     };
     // TODO: the spec is inconsistent about which bit in packet[25] is EOF
     // https://github.com/M17-Project/M17_spec/issues/147
     };
     // TODO: the spec is inconsistent about which bit in packet[25] is EOF
     // https://github.com/M17-Project/M17_spec/issues/147
-    let final_frame = (packet[25] & 0x04) > 0;
-    let number = packet[25] >> 3;
+    let final_frame = (packet[25] & 0x80) > 0;
+    let number = (packet[25] >> 2) & 0x1f;
     let counter = if final_frame {
         PacketFrameCounter::FinalFrame {
             payload_len: number as usize,
     let counter = if final_frame {
         PacketFrameCounter::FinalFrame {
             payload_len: number as usize,