LCENJ: understand I/Q with an offline file

Requirement: Python3 standard library. No pip packages, receiver or network.
Run these commands in the directory containing iq_demo.py:
    python iq_demo.py
    python -m unittest -v test_iq_demo.py

The generated directory contains:
  tone.csv: n,time_s,I,Q, with decimal normalized values.
  tone.cf32le: exactly1024 I/Q pairs,8192bytes, headerless little-endian
    float32, I0,Q0,I1,Q1,... . This explicit format is not a claim that every
    SDR device/file uses it. Settings are in metadata.json.
  metadata.json:8000complexsamples/s,1000Hz offset, amplitude0.5,
    duration0.128s. These are synthetic numbers, not a radio recording.

Expected report: estimated_offset_hz=1000.0;
offset_after_negating_Q_hz=-1000.0; binary_file_bytes=8192.
The estimator assumes one nonzero, unmodulated, noiseless tone strictly
inside (-Fs/2,Fs/2). It does not recover aliased frequencies, calibrate RF
power or detect arbitrary multiple signals. I/Q order and sign conventions
must be checked separately in any real instrument.

Qualification21Oct2026: code executed and10 software tests passed.
See TEST-RESULTS.json. No RF hardware, antenna, receive or transmit test.
No radio/transmit APIs, capture commands or network requests are present.
MIT licence covers original code; the article's photo has a separate licence.
