Skip to content
GopherTrunk
    • What is GopherTrunk?
    • Get started
    • Basics
    • Intermediate
    • Advanced
    • All learning paths
    • RF & SDR
    • Git & GitHub
    • Intro to Software Dev
    • Digital Trunking
    • Intro to Hardware
    • Field Guide overview
    • RF & SDR
    • RF & signal fundamentals
    • Modulation
    • SDR & DSP
    • Algorithms
    • Cryptography & cryptanalysis
    • Trunked radio
    • Protocols & standards
    • Voice coding
    • Hardware
    • People
    • Organizations
    • Software Development
    • Programming languages
    • Language internals & execution
    • Concurrency & execution models
    • Paradigms & design patterns
    • Principles & code quality
    • Testing, tooling & delivery
    • Hardware (computers & devices)
    • Hardware foundations
    • Servers & hosting
    • Personal computers
    • Mobile devices
    • Single-board computers
    • Microcontrollers
    • Networking & connectivity
    • Storage & memory
    • GPUs, FPGAs & accelerators
    • People
    • Organizations & makers
    • The Story of GopherTrunk
    • Forum
    • Account
    • All posts
    • Announcements
    • Releases
    • Deep dives
    • Series: SDR Internals
    • Series: RF Front End
    • Tutorials
    • Series: Signal Lab
    • Series: RF Scope
    • Series: Crypto Lab
    • Solution Postmortem
    • Downloads
    • Hardware
    • Linux install
    • macOS install
    • Windows install
    • Launcher
    • Windows user guide
    • TUI
    • Web console
    • Live edits
    • Import (PDF / CSV)
    • Bookmarks
    • CC Activity
    • Radio IDs
    • Plots (signal scopes)
    • Constellation
    • Symbol scope
    • Eye diagram
    • Tuning (receiver meters)
    • Symbol histogram
    • Hunt (discover systems)
    • SigLab (offline workbench)
    • RF Scope (protocol-agnostic scene analysis)
    • rigctld integration
    • Hardening
    • Architecture
    • Vocoders
    • Voice calibration
    • DMR encryption
    • POCSAG paging
    • APRS / AX.25
    • Opt-in features
    • Status
    • Roadmap
    • Cutting a release
    • Support
  • Account
  1. Home
  2. Blog
  3. Blog: Tutorials
  • Signal Lab, Part 10: The Demod Bench — siglab sweep, Regression & Export

    July 15, 2026

    Signal Lab's demod benchmark, gophertrunk siglab sweep, synthesizes P25 Phase 1 across an SNR ladder on both the c4fm and cqpsk/lsm demod paths, decodes through the production pipeline, and prints measured demod quality against a theoretical symbol-error-rate reference with CSV export.

  • RF Scope, Part 10: Advanced — Tuning Segmentation, Selective Analyzers & Pipelines

    July 15, 2026

    The advanced rfscope guide — run a subset of analyzers with dependencies auto-pulled, tune segmentation for unusual bands, emit machine formats (json/jsonl/yaml/csv) for pipelines, and close the reverse-engineering loop from -frames-out into cryptolab, with a note on how rfscope's downconverter relates to GopherTrunk's DSP paths.

  • Crypto Lab, Part 10: The Subject Framework, alias & the Mercury Reveal

    July 15, 2026

    Crypto Lab's pluggable subject framework and its alias tool recover length-seeded, keyless byte obfuscators through four incremental, resumable modes — gauge, structure, cells, and fromseed — and finally reveal that the Mercury signal was never encryption at all, graded BROKEN, with the moral that obfuscation is not encryption.

  • Signal Lab, Part 9: Dissecting P25 — TSBK PDUs, Receiver States & the Sync Landscape

    July 14, 2026

    Signal Lab's deepest P25 view — collect_pdus surfaces every TSBK signaling block (decoded and CRC-failed) as a field-level dissection with a csv-pdus export, plus the C4FM and CQPSK receiver-state series, the soft-eye verdict, and the sync-landscape heatmap.

  • RF Scope, Part 9: The Scene Cockpit — Live TUI & Web Console

    July 14, 2026

    rfscope cockpit is a full-screen Bubbletea terminal dashboard and rfscope serve is a browser console — both render the same live Scene (header, hierarchy tree, channel I/O sparklines, top talkers, conversations, severity-colored expert info) over a capture or a live SDR, with a Crypto Lab hand-off built in.

  • Crypto Lab, Part 9: The Web Console, Live-Capture Bridge & External Ciphers

    July 14, 2026

    Crypto Lab's serve command launches a schema-driven web console that auto-renders a form for every tool, mounts inside the daemon when built with the cryptolab tag, feeds ks and assess from a live decoder bridge, and drives operator-supplied external ciphers as CLI-only subprocesses behind a strict safety boundary.

  • Signal Lab, Part 8: Naming the Unknown — Blind Signal-ID & the Wideband Survey

    July 13, 2026

    Signal Lab identifies an unknown capture by ranking protocol candidates, names undecodable carriers from a blind symbol-rate and modulation estimate against an offline signal-ID reference database, and surveys a wide capture in the Wideband tab — where the Mercury signal finally gets a best guess but no lock.

  • RF Scope, Part 8: Expert Info — Anomalies & What They Mean

    July 13, 2026

    rfscope's expert analyzer is the RF analog of Wireshark's Expert Information — rule-based anomaly flags at note, warn, and alert severity for frequency hoppers, intermittent emitters, abnormally wide or narrow carriers, noise-like spectra, and the encrypted or obfuscated findings the entropy triage produced.

  • Crypto Lab, Part 8: Analog Voice Descrambling — Inversion, Split-Band, Rolling Code

    July 13, 2026

    Crypto Lab's descramble tool undoes analog voice privacy — frequency inversion, split-band inversion, and rolling-code hopping — operating on raw 16-bit PCM audio, and shows why analog scrambling is fundamentally weaker than digital encryption.

  • Signal Lab, Part 7: VSA — Lab-Grade Modulation Quality

    July 10, 2026

    Signal Lab's vector signal analyzer measures modulation quality like bench gear — carrier-frequency error, RMS and peak EVM split into magnitude and phase error, I/Q gain imbalance and quadrature skew, origin offset, an EVM-vs-symbol trace, and an error-vector spectrum.

  • RF Scope, Part 7: Entropy & Encryption Triage — The Crypto Lab Bridge

    July 10, 2026

    rfscope's entropy analyzer triages unidentified digital emitters — blind-demodulating a representative payload, running the cryptolab randomness battery and classify-auto measurements, and returning a verdict from plaintext to strong-encrypted with a recommended cryptolab command, plus a -frames-out file that hands the bytes to Crypto Lab.

  • Crypto Lab, Part 7: CRC Recovery & the Recipe Pipeline

    July 10, 2026

    Crypto Lab's crc recover reconstructs a protocol's CRC parameters — width, polynomial, init, reflection, and xorout — from sample frames, while recipe run chains transform and analysis operations into a CyberChef-style reusable pipeline for de-obfuscating RF payloads.

  • Signal Lab, Part 6: Synthesize — Building Ideal & Impaired References

    July 9, 2026

    Signal Lab's synthesis engine generates an idealized IQ capture and then injects controlled impairments — SNR, carrier offset and drift, multipath, DC, and I/Q imbalance — so you can build a clean reference or a known-bad regression fixture and overlay them in the Compare tab.

  • RF Scope, Part 6: Topology — Emitters, Frequency Hoppers & Conversations

    July 9, 2026

    rfscope's topology analyzer is the RF analog of Wireshark's Conversations and Endpoints — it clusters bursts into emitters by RF fingerprint, collapses a frequency hopper's scattered bursts into one logical source, links emitters into conversations, and defers to hunt's authoritative map when a trunking control channel decodes.

  • Crypto Lab, Part 6: The assess Battery — Attacking P25/DMR/TETRA

    July 9, 2026

    Crypto Lab's assess crypto harness runs every applicable attack against captured P25, DMR, and TETRA frames and grades each — cipher-strength, a published-weakness knowledge base, IV reuse, known-plaintext, weak/default keys against the real ciphers, and reduced-keyspace brute — landing on a RESISTANT, PARTIAL, or BROKEN verdict.

  • Signal Lab, Part 5: PSD, Spectrogram & Spectral Occupancy

    July 8, 2026

    Signal Lab's frequency-domain views — the power spectral density, the spectrogram/waterfall, and the spectral-occupancy metrics computed off the PSD: 99% occupied bandwidth, channel power, adjacent-channel power ratio (ACPR), and spectral flatness.

  • RF Scope, Part 5: Timing & Periodicity — Recovering the TDMA Frame

    July 8, 2026

    rfscope's timing analyzer builds burst-length and inter-arrival histograms per channel and recovers a TDMA or frame period by autocorrelating each channel's occupancy series, keeping only peaks above a minimum confidence — the time-domain counterpart to cryptolab's byte-period detection.

  • Crypto Lab, Part 5: Keystream Reuse — Many-Time-Pad & Crib-Dragging

    July 8, 2026

    Crypto Lab's ks tool exploits keystream reuse — the core real-world break against additive stream ciphers like P25 DES-OFB, ADP/RC4, and TETRA AIE — detecting IV/MI collisions with ks reuse and recovering plaintext with ks mtp via known-plaintext or crib-dragging, no key recovery required.

  • Signal Lab, Part 4: Constellations & Eye Diagrams — Seeing Modulation Quality

    July 7, 2026

    Signal Lab's constellation, eye diagram, and symbol scope — how to read clean versus noisy C4FM (four rails) and CQPSK modulation, what opening and closing eyes mean, and how these plots make EVM and SNR visible.

  • RF Scope, Part 4: The I/O Graph — Per-Channel Activity Over Time

    July 7, 2026

    rfscope's timeline analyzer is the RF analog of Wireshark's I/O Graphs — it groups bursts by frequency into channels and fills each with a 100-bin occupancy and power series plus duty cycle, occupancy percentage, burst rate, dominant class, and the sparkline the cockpit renders.

  • Crypto Lab, Part 4: Classical Ciphers — Brute XOR, Caesar, Vigenère, Substitution

    July 7, 2026

    Crypto Lab's brute tool recovers classical ciphers — repeating XOR, Caesar shift, Vigenère, and monoalphabetic substitution — using an embedded English trigram language model and optional cribs, with lfsr recovering the keystream of a linear scrambler.

  • Signal Lab, Part 3: The Browser Console — siglab serve and Live Decode

    July 6, 2026

    Signal Lab's browser console, gophertrunk siglab serve — a fully offline web app at 127.0.0.1:8099 with Captures, Synthesize, Identify, Wideband, and Compare tabs, upload-configure-run workflow, and a live SSE decode event stream.

  • RF Scope, Part 3: Protocol Hierarchy — What's on the Air

    July 6, 2026

    rfscope's hierarchy analyzer is the RF analog of Wireshark's Protocol Hierarchy — it groups bursts by modulation class, then occupied-bandwidth bucket, then names the protocol of the longest digital burst with siglab, attaching burst counts, airtime, spectrum share, and symbol volume to every node.

  • Crypto Lab, Part 3: Randomness — NIST SP 800-22 & the LFSR Signature

    July 6, 2026

    Crypto Lab's randomness battery runs a NIST SP 800-22 subset over a keystream bitstream — monobit, block frequency, runs, longest run, binary-matrix rank, spectral DFT, approximate entropy, serial, cumulative sums, and linear complexity — to tell strong keyed encryption from an exploitable LFSR scrambler.

  • Signal Lab, Part 2: Reading the Dashboard — Symbols, Baud, Lock & the 2% Rule

    July 3, 2026

    Signal Lab's terminal dashboard, field by field — protocol, symbols, effective baud versus expected, lock status and latency, symbol histogram, IQ imbalance, decode-error rate, EVM, and SNR — plus the ~2% baud-deviation rule that catches a wrong sample rate.

  • RF Scope, Part 2: From IQ to Bursts — The Segmentation Pre-Pass

    July 3, 2026

    rfscope's segmentation pre-pass turns a wideband IQ span into bursts — discovering carriers with a wideband FFT, estimating a robust noise floor, downconverting each carrier to a narrow baseband, and slicing onset→offset bursts with per-burst spectral metrics and a blind modulation class.

  • Crypto Lab, Part 2: First Triage — classify auto and stats scan

    July 3, 2026

    Crypto Lab's classify auto emits a ranked verdict for an unknown RF payload — plaintext, substitution, repeating-XOR, periodic scrambler, LFSR, or strong-encrypted — each with the exact next command, backed by the stats scan and stats period statistical triage.

  • Signal Lab, Part 1: Your First Capture — No Radio Required

    July 2, 2026

    Signal Lab is GopherTrunk's offline signal-analysis workbench — replay, identify, synthesize, and grade recorded IQ captures through the exact production decode pipeline with no SDR, no daemon, and no network attached.

  • RF Scope, Part 1: Wireshark for the RF Physical Layer

    July 2, 2026

    rfscope is GopherTrunk's protocol-agnostic RF network analyzer — point it at any band, recorded IQ or a live SDR, with no prior knowledge of the technology, modulation, framing, or encryption, and get a structured Scene of what is on the air and how it behaves.

  • Crypto Lab, Part 1: Breaking It Is the Test

    July 2, 2026

    Crypto Lab is GopherTrunk's byte-oriented cryptographic-research toolkit for security-testing RF encryption — shipped inside the binary but excluded from the default install behind a build tag, it attempts decryption by every applicable method and grades how far each one got.

  • Build in the Open, Part 14: The CLI Workflow & Claude Code as Your Daily Driver

    July 1, 2026

    Tie the whole idea-to-release journey into one repeatable loop using the gh CLI and Claude Code — CLAUDE.md, slash commands, hooks, MCP servers, and web sessions.

  • Build in the Open, Part 13: Advanced Git & GitHub Features

    June 30, 2026

    Level up beyond commit and push — interactive rebase, cherry-pick, bisect, reflog, worktrees, conflict resolution, plus Discussions, Codespaces, GHCR, and Environments.

  • Build in the Open, Part 12: Optimizing & Securing Your Repository

    June 29, 2026

    How to make your GitHub repo discoverable and safe — About box, badges, branch protection, secret scanning, Dependabot, SECURITY.md, and least-privilege tokens.

  • Build in the Open, Part 11: Releases — Cadence, Pre-Release vs. Release, SemVer & Changelogs

    June 28, 2026

    How to ship software releases the right way — Semantic Versioning, pre-releases, git tags, Keep a Changelog notes, and automated, checksummed builds.

  • Build in the Open, Part 10: Websites, Support Pages & GitHub Pages

    June 27, 2026

    How to give a project a free website — enabling GitHub Pages, a Jekyll static site, a custom domain via CNAME, support and sponsor pages, and a drip-released blog.

  • Build in the Open, Part 9: Documentation Done Right — What Lives Where

    June 26, 2026

    How to organize project documentation — README, CONTRIBUTING, SECURITY, CHANGELOG, in-repo docs — using the Diátaxis framework so docs are findable and don't rot.

  • Build in the Open, Part 8: Testing — How to Build and Write Tests

    June 25, 2026

    How to test software well — the testing pyramid, table-driven tests, golden files, race detection, coverage limits, and writing tests with Claude Code.

  • Build in the Open, Part 7: GitHub Actions — Which Workflows to Create and Why

    June 24, 2026

    Which GitHub Actions workflows most projects need — CI, security scanning, release automation, docs build, scheduled jobs — and how to gate merges with them.

  • Build in the Open, Part 6: Planning & Tracking Work — and Inviting Contributors

    June 23, 2026

    How to plan work with GitHub Issues, labels, milestones, and Projects, link issues to PRs, and onboard contributors with CONTRIBUTING, templates, and roles.

  • Build in the Open, Part 5: Branching & the Three Ways to Merge to Main

    June 22, 2026

    How to use Git branches and pick the right GitHub merge strategy — merge commit, squash & merge, or rebase & merge — with a clear "use this when" for each.

  • Build in the Open, Part 4: Git & GitHub Fundamentals (Using the Web Interface)

    June 21, 2026

    A beginner's Git mental model — commits, branches, remotes, the staging area — and how to create a repo, edit files, and open your first pull request entirely in the GitHub web UI.

  • Build in the Open, Part 3: Brainstorming Features with Claude & Writing the README as Your Roadmap

    June 20, 2026

    How to research a domain and brainstorm features with Claude Code, then write a README that doubles as a living roadmap — plus what CLAUDE.md is for.

  • Build in the Open, Part 2: Choosing Your Language, Platforms & Tech Stack

    June 19, 2026

    How to choose a programming language and tech stack — let your constraints (platforms, performance, distribution, team skills) decide, with GopherTrunk as a worked example.

  • Build in the Open, Part 1: Picking What to Build — How Pros Decide

    June 18, 2026

    How experienced developers choose what software to build — validating demand, scoping a first version, and avoiding the build-trap, with GopherTrunk as a worked example.

See all posts or subscribe via RSS.

Start scanning in minutes

GopherTrunk turns a cheap RTL-SDR dongle into a full digital-trunking scanner — P25, DMR, TETRA, NXDN and more, decoded by one pure-Go static binary with nothing else to install. Download the latest build and follow your first system tonight.

Download GopherTrunk v0.7.0 →

Help keep GopherTrunk growing

GopherTrunk is free, open source, and built in spare time. If it's earned a spot in your shack, a small tip funds the next protocol, feature, and guide — and keeps it all free for everyone.

Buy me a coffee GitHub Sponsors
Edit this page on GitHub →

Join the GopherTrunk community

Stuck on a system, IDing a mystery signal, or have a feature in mind? Swap notes with other operators on Discord and Reddit — questions get answered fast.

Join the Discord r/GopherTrunk

Project

  • README
  • License
  • Changelog
  • Security

Community

  • Discord
  • Reddit — r/GopherTrunk
  • GitHub Sponsors
  • Ko-fi
  • Issues
  • More ways to help

Built with

  • Jekyll + GitHub Pages
  • Custom layout, no theme
  • Apache 2.0 licensed
© 2026 GopherTrunk contributors. Site map · Page generated by GitHub Pages.