Signal Lab is a 10-part tutorial series on SigLab, GopherTrunk’s standalone signal-analysis workbench — the tool that runs entirely offline against a recorded IQ capture, no SDR and no daemon required. We start from your very first replay and climb, one post at a time, to lab-grade modulation measurement, blind signal identification, P25 PDU dissection, and demodulator regression benchmarking.

Every post is built for three ways of reading: a TL;DR + cheat-sheet up top for skimmers, bold section headers, tables, and diagrams for the medium read, and full prose with real command output for the deep read. You’ll meet Ada, a brand-new operator working her first capture, and Reese, the RF veteran who explains why each number matters.

This is one leg of the Lab Bench trilogy — three concurrent series on GopherTrunk’s analysis consoles: Signal Lab (this one), RF Scope, and Crypto Lab. A single mystery signal — Mercury — runs through all three.

New to radio first? Start with the Learn RF & SDR path, then come back.<ol class="post-list series-list"><li class="post-card"> <h2 class="post-card__title">Signal Lab, Part 1: Your First Capture — No Radio Required</h2> <p class="post-card__meta"> Tutorials </p><p class="post-card__desc">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.</p></li><li class="post-card"> <h2 class="post-card__title">Signal Lab, Part 2: Reading the Dashboard — Symbols, Baud, Lock & the 2% Rule</h2> <p class="post-card__meta"> Tutorials </p><p class="post-card__desc">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.</p></li><li class="post-card"> <h2 class="post-card__title">Signal Lab, Part 3: The Browser Console — siglab serve and Live Decode</h2> <p class="post-card__meta"> Tutorials </p><p class="post-card__desc">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.</p></li><li class="post-card"> <h2 class="post-card__title">Signal Lab, Part 4: Constellations & Eye Diagrams — Seeing Modulation Quality</h2> <p class="post-card__meta"> Tutorials </p><p class="post-card__desc">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.</p></li><li class="post-card"> <h2 class="post-card__title">Signal Lab, Part 5: PSD, Spectrogram & Spectral Occupancy</h2> <p class="post-card__meta"> Tutorials </p><p class="post-card__desc">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.</p></li><li class="post-card"> <h2 class="post-card__title">Signal Lab, Part 6: Synthesize — Building Ideal & Impaired References</h2> <p class="post-card__meta"> Tutorials </p><p class="post-card__desc">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.</p></li><li class="post-card"> <h2 class="post-card__title">Signal Lab, Part 7: VSA — Lab-Grade Modulation Quality</h2> <p class="post-card__meta"> Tutorials </p><p class="post-card__desc">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.</p></li><li class="post-card"> <h2 class="post-card__title">Signal Lab, Part 8: Naming the Unknown — Blind Signal-ID & the Wideband Survey</h2> <p class="post-card__meta"> Tutorials </p><p class="post-card__desc">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.</p></li><li class="post-card"> <h2 class="post-card__title">Signal Lab, Part 9: Dissecting P25 — TSBK PDUs, Receiver States & the Sync Landscape</h2> <p class="post-card__meta"> Tutorials </p><p class="post-card__desc">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.</p></li><li class="post-card"> <h2 class="post-card__title">Signal Lab, Part 10: The Demod Bench — siglab sweep, Regression & Export</h2> <p class="post-card__meta"> Tutorials </p><p class="post-card__desc">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.</p></li></ol><p class="blog-feed-link"> See all tutorials or subscribe via RSS. </p>