Skip to main content

hubble-satnet-decoder

CI License

Hubble PHY v-1 / v1 preamble detector, FSK decoder, and spectrogram computation — extracted as a standalone, pip-installable library.

Install

pip install hubble-satnet-decoder

Or for development:

git clone https://github.com/hubblenetwork/hubble-satnet-decoder.git
cd hubble-satnet-decoder
pip install -e ".[dev]"

Quick start

import numpy as np
from hubble_satnet_decoder import decode_signal, configure

# (optional) override the default sample rate
configure(sample_rate=781_250)

# Load 1 second of IQ data (complex64)
iq = np.load("capture.npy")

packets, detections, attempts = decode_signal(iq)
for pkt in packets:
    print(f"Device 0x{pkt['ntw_id']:08X}  seq={pkt['seq_num']}  "
          f"chipset={pkt.get('chipset', 'v-1')}")

API reference

decode_signal(signal) -> (packets, detections, attempts)

Full dual-protocol decode pipeline on a 1-second IQ chunk.

detect_preambles(spec_img, t_det, f_det) -> (time, freq, scores, phy_ver)

Dual-template preamble detection via OpenCV + NMS.

compute_spec_chunk(iq_chunk) -> Sxx_dB

Compute a visualisation spectrogram (freq × time) for an IQ chunk.

configure(sample_rate=None)

Recompute all sample-rate-dependent derived values.

Constants

from hubble_satnet_decoder import (
    SYNTH_RES,             # per-chipset synthesiser resolution (Hz)
    CHANNEL_SPACING,       # nominal channel spacing (Hz)
    DEVICE_CHANNEL_SPACING,# actual per-device channel spacing
    HOPPING_SEQS,          # frequency hopping sequences
    RS_N_V1, RS_K_V1,      # Reed-Solomon block sizes (v1)
    PREAMBLE_CODE_V1,      # v1 preamble code [63,0,63,0,63,0,63,63]
)

Chipset statistics

from hubble_satnet_decoder import get_chipset_stats, reset_chipset_stats

stats = get_chipset_stats()   # {"nordic": {"detected": 5, "ok": 4, ...}, ...}
reset_chipset_stats()

Releasing

  1. Bump the version in pyproject.toml (e.g. version = "1.0.2")
  2. Write release notes in release-notes.md — categorise commits since the last tag under Added, Fixed, Documentation, Tests, and Maintenance headings
  3. Commit:
    git add pyproject.toml release-notes.md
    git commit -m "chore: release X.Y.Z"
    
  4. Tag and push:
    git tag vX.Y.Z
    git push origin main
    git push origin vX.Y.Z
    
  5. Approve the publish — the tag push triggers the GitHub Actions workflow which runs tests, builds the package, and publishes to PyPI. Approve the publish step in the GitHub Actions UI (the pypi environment gate).

Tip: The /release Claude Code skill automates steps 1–4.

License

Apache-2.0 — see LICENSE.

Metadata

Release files for hubble-satnet-decoder 1.2.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for hubble-satnet-decoder 1.2.1
File Size Uploaded
hubble_satnet_decoder-1.2.1.tar.gz 21.5 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for hubble-satnet-decoder 1.2.1
File Interpreter ABI Platform
hubble_satnet_decoder-1.2.1-py3-none-any.whl Python 3 none any Details

Total release size: 45.6 kB

Release files / hubble_satnet_decoder-1.2.1.tar.gz

Download URL hubble_satnet_decoder-1.2.1.tar.gz
Size 21.5 kB
Tags Source
SHA-256 checksum
How to use checksums
cbd52a36b7928c061908c9504f84af3b97f2ebd7d377c7ac42c6a667b7887d55
BLAKE2b-256 checksum
How to use checksums
ae9f361fc214e2b3fd2e71540ac7d59d41678a49ab3a6dd0414c40ed40e3f518
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Aug 31, 2026.

Transparency log

Release files / hubble_satnet_decoder-1.2.1-py3-none-any.whl

Download URL hubble_satnet_decoder-1.2.1-py3-none-any.whl
Size 24.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
13b4c5c05425aeadf90f72e0b341d1877cfc8a0bb52efeabe8fa835d379a4322
BLAKE2b-256 checksum
How to use checksums
6a13caee2e0bad7999bbc480b7147705ad88f8eb78e650d98a13dcaabe292e97
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Aug 31, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

1.2.1 This release

2 release files

1.2.0

2 release files

1.1.2

2 release files

1.1.1

2 release files

1.0.1

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page