Files
SDR-Rover/tests/test_video004_viterbi.py

35 lines
1.3 KiB
Python

"""Побитовая эквивалентность JIT и исходного Витерби."""
from __future__ import annotations
import numpy as np
import pytest
pytest.importorskip("numba")
from protocol import punctured_fec
from protocol.video004_viterbi import decode_soft
from tools.video004_benchmark import load_fixture, decode_stream
@pytest.mark.parametrize("rate", ["1/2", "2/3", "3/4"])
@pytest.mark.parametrize("byte_count", [13, 256, 1012])
def test_jit_matches_legacy_under_noise(rate: str, byte_count: int) -> None:
generator = np.random.default_rng(4004 + byte_count)
bits = generator.integers(0, 2, byte_count * 8, dtype=np.uint8)
coded = punctured_fec.encode(bits, rate)
soft = 2.0 * coded.astype(np.float64) - 1.0
soft += generator.normal(0, 0.8, len(soft))
expected = punctured_fec.decode_soft(soft, len(bits), rate)
actual = decode_soft(soft, len(bits), rate)
assert np.array_equal(actual, expected)
def test_canonical_qpsk_decisions_fec_crc_and_packets_are_equal() -> None:
received, manifest = load_fixture()
before = decode_stream(received, "legacy")
after = decode_stream(received, "numba")
assert before == after
assert len(after) == 32
assert [row["packet_sha256"] for row in after] == manifest["expected_packet_sha256"]