Web app for spectrum analyzers.
Visit patrykorwat.github.io/web-spectrum to access the app.
The application has two features:
- Spectrum analyzer
- Data decoding
Supported devices:
- tinySA Ultra
- RTL-SDR with RTL2832U (includes V4)
- SDRPlay (tested with RSPduo) (via WebSocket-based bridge)
Supported environments:
- Chrome
- Edge
- Opera
See more: caniuse.com/web-serial, caniuse.com/webusb
Spectrum analyzer allows for showing available spectrum for requested frequencies.
Data decode sets a trigger and upon detection of a signal, the device captures it for decoding purposes.
The current implementation is able to decode 1 message at a given time of size around 24 bits.
Two modes available:
Uses industry-standard GNSS-SDR software with RTL-SDR dongles:
- ✅ Works with any RTL-SDR dongle (~$25-40)
- ✅ Professional-grade GPS signal processing
- ✅ Real satellite tracking with C/N0 measurements
- ✅ Automatic WebSocket integration
- ✅ Single-command operation
📚 Documentation: RTL-SDR GNSS Setup
Quick Start:
# Install GNSS-SDR (one-time setup)
cd gnss-sdr
./install_gnss_sdr.sh
# Start GNSS-SDR with RTL-SDR
./start_gnss_rtlsdr.sh
# Browser:
# 1. Open http://localhost:3005
# 2. Go to SDRPlay Decoder page
# 3. Click "Listen & Decode"
# 4. See satellites in decode table!Direct browser-based signal processing for ADS-B and ISM protocols:
- ADS-B (aircraft tracking)
- ISM GateTX
- Basic GNSS (GPS L1, Galileo E1, GLONASS L1OF, BeiDou B1I)
Two modes available:
Uses industry-standard GNSS-SDR software for professional-grade signal processing:
- ✅ Accurate C/N0 measurements (dB-Hz)
- ✅ Real positioning (PVT solutions)
- ✅ Better jamming detection
- ✅ Multi-constellation support
- ✅ Battle-tested algorithms
- ✅ Single-command operation (auto-starts GNSS-SDR + SDRPlay streamer)
📚 Documentation:
- Complete Setup Guide - START HERE for full installation
- Quick Setup - Basic setup guide
- Troubleshooting - Common issues and fixes
Quick Start:
# Install GNSS-SDR (one-time setup, ~30-40 min)
cd gnss-sdr
./install_gnss_sdr.sh
# Terminal 1: Start web UI (from repo root)
npm start
# Opens at http://localhost:3005
# Terminal 2: Run bridge with auto-start (starts GNSS-SDR + SDRPlay streamer!)
cd gnss-sdr
./run_gnss_sdr_bridge.sh
# Browser:
# 1. Go to SDRPlay Decoder page
# 2. Select "Professional Mode (GNSS-SDR)" at the top
# 3. Click "Listen & Decode"Alternative: File-Based Processing (works immediately, no web UI needed)
cd gnss-sdr
# Record 60 seconds of GPS samples
python3 record_iq_samples.py /tmp/gps_iq_samples.dat 60
# Process with GNSS-SDR
gnss-sdr --config_file=gnss_sdr_file.conf
# You should see satellite tracking messages!Streams raw IQ samples to browser for JavaScript-based correlation:
⚠️ Simplified algorithms⚠️ Limited accuracy⚠️ Higher bandwidth
Setup: Follow SDRPlay Quickstart and SDRPlay Setup
Supported GNSS Constellations:
- GPS L1 C/A (USA)
- Galileo E1 (Europe)
- GLONASS L1OF (Russia)
- BeiDou B1I (China)
YT videos with explanations and tests:
- Web (r)evolution in lab electronics? Building a Web Spectrum Analyzer for TinySA Ultra
- Signal decoding with TinySA Ultra
- RTL-SDR signal decoding in a web application
In the project directory, you can run:
Runs the app in the development mode.
Open http://localhost:3005 to view it in your browser.
The page will reload when you make changes.
You may also see any lint errors in the console.
Launches the test runner in the interactive watch mode.
See the section about running tests for more information.
Builds the app for production to the build folder.
It correctly bundles React in production mode and optimizes the build for the best performance.
The build is minified and the filenames include the hashes.
Your app is ready to be deployed!
See the section about deployment for more information.



