diff --git a/src/algorithms/telemetry_decoder/libs/viterbi_decoder_sbas.cc b/src/algorithms/telemetry_decoder/libs/viterbi_decoder_sbas.cc index 02c27e28b..6f42fd4e3 100644 --- a/src/algorithms/telemetry_decoder/libs/viterbi_decoder_sbas.cc +++ b/src/algorithms/telemetry_decoder/libs/viterbi_decoder_sbas.cc @@ -101,6 +101,15 @@ float Viterbi_Decoder_Sbas::decode_continuous(const double sym[], // do add compare select do_acs(sym, nbits_requested); + // Keep accumulating trellis history until a complete traceback is + // available. do_traceback() can clamp the requested depth, but + // do_tb_and_decode() expects that same depth to be present and advances + // its deque iterators by traceback_depth. + if (traceback_depth > static_cast(d_trellis_paths.size())) + { + nbits_decoded = 0; + return d_indicator_metric; + } // the ML sequence in the newest part of the trellis can not be decoded // since it depends on the future values -> traceback, but don't decode const int state = do_traceback(traceback_depth); diff --git a/tests/unit-tests/signal-processing-blocks/telemetry_decoder/sbas_l1_telemetry_decoder_test.cc b/tests/unit-tests/signal-processing-blocks/telemetry_decoder/sbas_l1_telemetry_decoder_test.cc index aac495880..35e8cafef 100644 --- a/tests/unit-tests/signal-processing-blocks/telemetry_decoder/sbas_l1_telemetry_decoder_test.cc +++ b/tests/unit-tests/signal-processing-blocks/telemetry_decoder/sbas_l1_telemetry_decoder_test.cc @@ -31,7 +31,6 @@ TEST(SbasL1TelemetryDecoderTest, TimestampMatchesFirstBitWhenFullyAligned) EXPECT_DOUBLE_EQ(first_bit_stamp_s, message_stamp_s); } - TEST(SbasL1TelemetryDecoderTest, TimestampCorrectionIsBoundedBySymbolPeriod) { // The correction is always a whole number of code periods, and spans at