X-Git-Url: https://code.octet-stream.net/m17rt/blobdiff_plain/2798b7a8f62b73aa2a88d4b34e861debd6462015..1a444762d8fd7d48e4f56a87c6bd77f837522d5d:/m17core/src/decode.rs?ds=sidebyside diff --git a/m17core/src/decode.rs b/m17core/src/decode.rs index 6c8e02b..911d673 100755 --- a/m17core/src/decode.rs +++ b/m17core/src/decode.rs @@ -3,8 +3,8 @@ use crate::{ fec::{self, p_1, p_2, p_3}, interleave::interleave, protocol::{ - LsfFrame, PacketFrame, PacketFrameCounter, StreamFrame, BERT_SYNC, LSF_SYNC, PACKET_SYNC, - STREAM_SYNC, + LsfFrame, PacketFrame, PacketFrameCounter, StreamFrame, BERT_SYNC, END_OF_TRANSMISSION, + LSF_SYNC, PACKET_SYNC, PREAMBLE, STREAM_SYNC, }, random::random_xor, }; @@ -33,6 +33,8 @@ pub(crate) enum SyncBurst { Bert, Stream, Packet, + Preamble, + EndOfTransmission, } impl SyncBurst { @@ -42,6 +44,8 @@ impl SyncBurst { Self::Bert => BERT_SYNC, Self::Stream => STREAM_SYNC, Self::Packet => PACKET_SYNC, + Self::Preamble => PREAMBLE, + Self::EndOfTransmission => END_OF_TRANSMISSION, } } } @@ -54,8 +58,8 @@ 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 { - 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; @@ -65,7 +69,7 @@ pub(crate) fn sync_burst_correlation(target: [i8; 8], samples: &[f32]) -> (f32, 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); }