fix: Improved Time domain rendering - #29
Merged
Merged
Conversation
- Fixed an issue that would cause the spectrogram view to lag when requesting time domain plots. Time domain rendering is now done with a seperate OS process for much smoother viewing - Fixed a bug that caused false-negative error reporting for packets that were cutoff by the decode window. Signed-off-by: hunterhubble <hunter@hubble.com>
hunterhubble
requested review from
HongNguyen635,
buckleypaul,
ceolin,
hubble-art and
mason-hubble
July 13, 2026 16:09
6 tasks
- Before it wouldn't repeat numbers, even if that packet was transmitted twice. Now it does Signed-off-by: hunterhubble <hunter@hubble.com>
hunterhubble
force-pushed
the
error-reporting
branch
from
July 14, 2026 22:45
3b67cb5 to
08e3d04
Compare
HongNguyen635
approved these changes
Jul 16, 2026
hunterhubble
added a commit
to hubble-art/sdr-docker
that referenced
this pull request
Aug 28, 2026
The spectrum-analyzer view was rendering inline in processor_main, alongside decode -- the same GIL-contention problem that time-domain plot rendering had before it was split into td_renderer.py (see HubbleNetwork#29). A background thread doesn't help; matplotlib rendering holds the GIL too long, so it needs true process-level parallelism like TD got. Adds spectrum_renderer.py, mirroring td_renderer.py's pattern: a dedicated OS process fed by a single-slot job queue, whose result carries an "img" merged into the same result_queue the spectrogram already uses. processor_main hands off spectrum-view frames to it via _submit_spectrum_render instead of calling render_spectrum_image inline; app.py wires it in as a third watchdog-supervised worker.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fixed an issue that would cause the spectrogram view to lag when requesting time-domain plots. When looking for errors, or searching for a plot by device ID, satellite packets that transmit at a set interval visibly looked staggered. Time-domain rendering is now done in a separate OS process (td_renderer.py) instead of inline in processor.py.
Fixed a bug that caused false-positive error reporting for packets cut off by the decode window.
Fixed a bug where a strong, valid packet's own payload could trip a phantom detection that was falsely reported as a failure.
Fixed a bug where packets decoded across two decode windows didn't appear in the time-domain viewer when searching by device ID.
These were fixed with a cross-cycle state machine in the processor:
For cutoff/incomplete packets, it now waits for the next decode window before declaring a failure — if the packet decodes on the second window, it's not reported as an error.
For device-ID and near-edge matches, it now sources candidates from raw decode attempts (not the de-duplicated display list) and retries a match across windows instead of dropping it, then hands processor.py the start/end sample to plot.
Also added a test suite
test_td_capture.pycovering the state machine without needing a Pluto.