Lab042 cannot reuse the DSP from the earlier labs the way its specification assumed. Three blockers turned up on inspection: - importing lab018, lab019 or lab023 creates directories and writes .npy, .png and report files at module level, so importing them silently re-runs their experiments - build_radio_frame() takes no arguments and encodes a fixed text message - decode_radio_frame() returns a status string rather than the payload So the verified primitives move into a module that is safe to import and does no work of its own. Function bodies are carried over verbatim, and the source lab is named above each one: - from Lab023: bytes_to_bits, bits_to_bytes, bpsk_modulate, bpsk_demodulate, estimate_carrier_parameters, correct_phase_and_frequency - from Lab019: build_frame_marker, find_radio_frame - from Lab018: root_raised_cosine_taps build_radio_frame and parse_radio_frame are written fresh here to carry arbitrary payloads; the on-air structure is unchanged, still preamble, sync word, length, packet. Verified against the originals by loading their function definitions in isolation and comparing outputs: 31 comparisons, no divergence, including the CFO estimator over random phase and frequency offsets. End-to-end check with no hardware: a 5828-byte JPEG through fragments, packets, frames, shaping at 128 samples per symbol and matched filtering recovers 12 of 12 fragments and reassembles byte-identical. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
20 KiB
20 KiB