SweepEngine (SoapySDR) → IQ Samples
↓
AudioDemodulator (AM/FM/SSB) → PCM Audio
├→ AudioOutputManager (PortAudio) → Speakers
├→ VoiceActivityDetector (multi-feature)
│ ├→ WhisperTranscriber (local AI STT)
│ └→ EMFCorrelator ← EMFSerialReader (GQ EMF-390)
│ └→ CorrelatedEvents (EMF + Voice + Transcription)
└→ SessionRecorder (WAV + JSONL + CSV archival)
USBDeviceManager → SensorHub (command center brain)
SoapySDR multi-device abstraction. 6 demodulation modes (AM, NFM, WFM, USB, LSB, RAW IQ). Configurable frequency sweeps with band definitions and dwell times (10-100ms). Pre-built profiles for AM broadcast, FM broadcast, VHF, and full spectrum. Dynamic tuning without stopping sweeps.
Local Whisper.cpp speech-to-text. Zero cloud dependency, complete field privacy. Multi-feature Voice Activity Detection combining RMS energy, zero-crossing rate, and spectral flatness. Confidence scoring (0.0-1.0). Duration gating (100ms minimum). 2-second audio snippet capture for analysis. Async processing via QtConcurrent.
GQ EMF-390 full serial interface. Electromagnetic field (milliGauss), electric field (V/m), and RF power density (mW/cm²). Spike detection with configurable threshold. Rolling 100-sample baseline tracking. 10 readings per second. USB auto-discovery for GQ devices.
Configurable time window (500ms default) for multi-sensor event matching. When an EMF spike coincides with voice detection during a temperature drop, SpiritBox flags it as a correlated anomaly with timestamped evidence. Transcriptions retroactively linked to EMF events.
Complete chain-of-custody evidence archival. WAV audio (full sweep + individual snippets). JSONL event streams for real-time indexing. CSV timelines for spreadsheet analysis. JSON records for transcriptions, anomalies, and correlations. Every reading timestamped and attributed.
Universal sensor abstraction for any USB device. 9 sensor categories: RF, EMF, audio, visual, thermal, environmental, motion, geomagnetic, custom. Hot-plug USB monitoring with auto-discovery and classification. Investigation session state machine (Idle → Configuring → Recording → Paused → Reviewing).
| Device | Category | Detection |
|---|---|---|
| RTL-SDR / HackRF / Airspy / SDRplay | RF Receiver | SoapySDR abstraction |
| GQ EMF-390 | EMF Meter | USB Serial (115200 baud) |
| Any USB Audio Interface | Audio Capture | PortAudio / CoreAudio |
| USB Cameras | Visual Capture | USB enumeration |
| FLIR USB | Thermal | Temperature mapping |
| Arduino Sensors | Environmental | USB Serial (JSON data) |
| PIR Motion Sensors | Motion | Digital event detection |
| Magnetometers | Geomagnetic | Baseline deviation |
SpectraSentry and SpiritBox are designed as companion applications. Each handles what it does best:
| Component | SpectraSentry | SpiritBox |
|---|---|---|
| Primary Focus | RF spectrum analysis, TSCM | AI voice detection, multi-sensor correlation |
| GQ EMF-390 | DeviceIOWorker driver | EMFSerialReader driver |
| Audio Demod | RTL-SDR internal | AudioDemodulator (AM/FM/SSB) |
| Correlation | Anomaly detector (RF-focused) | EMFCorrelator (multi-sensor) |
| AI | Not included | Whisper.cpp local STT |
| Data Storage | SQLite database | File-based (WAV/JSONL/CSV) |
| IPC | Shared memory ring buffer + Unix domain socket (JSON) | |
C++20, Qt6 (Widgets, Multimedia, SerialPort, Charts, Concurrent), CMake 3.21+
whisper.cpp (local offline STT), PortAudio 19+ (real-time playback), lock-free SPSC audio ring buffer
SoapySDR 0.8+ (RTL-SDR, HackRF, Airspy, SDRplay). GQ EMF-390 serial protocol. USB hot-plug discovery.