SDR Setup Guide
Complete guide for setting up Software Defined Radio (SDR) receivers with EAS Station
Quick Navigation
- Hardware Guide - Choosing the right SDR
- Setup Flowchart - Visual overview
- Web UI Setup - Easiest configuration method
- SDR++ Server - NEW: Network/remote SDR via SDR++
- Troubleshooting - Fix common issues
Visual Setup Guide
For a complete visual overview of the SDR setup process:
Quick Start
What's Included
SoapySDR, RTL-SDR, and Airspy drivers are pre-installed in the installation:
- ✅ SoapySDR core libraries
- ✅ RTL-SDR drivers (default)
- ✅ Airspy drivers (default)
- ✅ USB device passthrough (pre-configured)
- ✅ No .env configuration needed
Setup Steps
Plug in your SDR device
# Verify device is detected on host lsusb | grep -i rtl # For RTL-SDR lsusb | grep -i airspy # For AirspyStart the containers
Verify SDR detection
# Check SoapySDR can see the device # Run diagnostic scriptConfigure in Web UI
- Open http://localhost (or your server IP)
- Navigate to Settings → Radio Receivers
- Click Discover Devices
- Click Add This Device on your SDR
- Apply a preset (NOAA Weather Radio recommended)
- Save and enable
Done! Your SDR should now show "Locked" status.
Hardware Requirements
Supported SDR Devices
| Device | Frequency Range | Sample Rate | Cost | Best For |
|---|---|---|---|---|
| RTL-SDR V3 | 24 MHz - 1.7 GHz | Up to 2.4 MSPS | $20-40 | NOAA Weather Radio, budget builds |
| Airspy Mini | 24 MHz - 1.7 GHz | Up to 6 MSPS | $100+ | Better sensitivity, professional use |
| Airspy R2 | 24 MHz - 1.7 GHz | Up to 10 MSPS | $200+ | Maximum performance |
| SDR++ Server | Any (depends on backend) | Varies | Free | Network SDR, shared receivers, remote monitoring |
Recommended starter: RTL-SDR Blog V3 ($30) with bias-tee for powered antennas
Antenna Requirements
For NOAA Weather Radio (162 MHz):
| Type | Performance | Cost | Notes |
|---|---|---|---|
| Telescoping whip | Good for testing | $5-10 | Included with most RTL-SDR kits |
| 1/4 wave ground plane | Excellent | $20-40 | ~19 inches, outdoor mount |
| Commercial scanner | Excellent | $30-80 | VHF optimized, weather-resistant |
Signal improvement tips:
- Place antenna near window or outdoors
- Higher is better (roof/attic mounting)
- Keep away from computers and USB hubs (RF interference)
- Use quality coaxial cable (low-loss RG-6 or LMR-400)
Software Installation
bare metal deployment (Recommended)
No installation needed! SoapySDR and all drivers are built into the installation.
The image includes:
- SoapySDR core libraries and Python bindings
- RTL-SDR and Airspy drivers (via
SOAPYSDR_DRIVERSbuild arg) - USB device support (
libusb) - NumPy for signal processing
devices:
- /dev/bus/usb:/dev/bus/usb
privileged: true
Optional: Customize driver installation
To reduce build time, install only the drivers you need in .env:
# Only RTL-SDR (faster builds)
SOAPYSDR_DRIVERS=rtlsdr
# Both RTL-SDR and Airspy (default)
SOAPYSDR_DRIVERS=rtlsdr,airspy
Verify USB Access
# 1. Check if SDR is detected on host
lsusb | grep -i rtl # Or grep -i airspy
# Expected output:
# Bus 001 Device 005: ID 0bda:2838 Realtek Semiconductor Corp. RTL2838 DVB-T
# 2. Verify container can access USB devices
# 3. Test SoapySDR inside container
Troubleshooting USB Issues
Problem: No devices found
Kernel driver conflict (RTL-SDR only)
The DVB-T TV tuner driver blocks RTL-SDR access:
# On host, create /etc/modprobe.d/blacklist-rtl.conf: sudo tee /etc/modprobe.d/blacklist-rtl.conf <<EOF blacklist dvb_usb_rtl28xxu blacklist rtl2832 blacklist rtl2830 EOF # Unload the module sudo modprobe -r dvb_usb_rtl28xxu # Reboot to make permanent sudo rebootContainer needs restart
USB device path changed
Using
/dev/bus/usb:/dev/bus/usb(already configured) handles this automatically.
Web UI Configuration
Easiest way to configure SDRs
Step-by-Step Setup
1. Access Radio Settings
- Log into EAS Station web interface
- Navigate to Settings → Radio Receivers
2. Run Diagnostics
- Click Run Diagnostics button
- Verify all checks pass:
- ✓ SoapySDR is installed
- ✓ NumPy is installed
- ✓ RTL-SDR or Airspy driver available
- ✓ At least 1 device detected
If diagnostics fail → Troubleshooting
3. Discover and Add Device
- Click Discover Devices
- Review detected SDRs
- Click Add This Device on your SDR
- Form pre-fills with device info
4. Apply Preset (Recommended)
- Click Use Preset
- Choose:
- NOAA Weather Radio (RTL-SDR) - For RTL-SDR dongles
- NOAA Weather Radio (Airspy) - For Airspy receivers
- NOAA Weather Radio (SDR++ Server) - For network SDR via SDR++
- Click Use This Preset
Note: For SDR++ Server, you'll need to set the Serial field to your server address (e.g.,
tcp://192.168.1.100:5259). See SDR++ Server section for setup details.
5. Set Your Local Frequency
Find your nearest NOAA Weather Radio station: https://www.weather.gov/nwr/station_listing
NOAA Frequencies:
| Channel | Frequency |
|---|---|
| WX1 | 162.400 MHz |
| WX2 | 162.425 MHz |
| WX3 | 162.450 MHz |
| WX4 | 162.475 MHz |
| WX5 | 162.500 MHz |
| WX6 | 162.525 MHz |
| WX7 | 162.550 MHz |
Convert to Hz: Multiply MHz × 1,000,000 Example: 162.550 MHz = 162550000 Hz
6. Enable and Monitor
- Check Enabled and Auto-start
- Click Save Receiver
- Wait for Locked status (green badge)
- Check signal strength (should be > 0.1 dBFS for good reception)
Manual Configuration
Configuration Fields
| Field | RTL-SDR Example | Airspy Example | SDR++ Server Example | Description |
|---|---|---|---|---|
| Display Name | Main NOAA Receiver |
Backup NOAA |
Remote SDR |
Friendly name |
| Identifier | rtlsdr_main |
airspy_backup |
sdrpp_remote |
Unique ID (no spaces) |
| Driver | rtlsdr |
airspy |
remote or sdrpp |
SoapySDR driver name |
| Serial | (empty) | (empty) | tcp://192.168.1.100:5259 |
SDR++ server address |
| Frequency (Hz) | 162550000 |
162550000 |
162550000 |
162.55 MHz |
| Sample Rate | 2400000 |
2500000 |
2500000 |
Match SDR++ setting |
| Gain (dB) | 49.6 |
21 |
(empty) | See gain guide below |
| Channel | 0 or empty |
0 or empty |
0 or empty |
Multi-channel SDRs only |
| Enabled | ✓ | ✓ | ✓ | Start on boot |
| Auto-start | ✓ | ✓ | ✓ | Restart if crashes |
Gain Settings Guide
RTL-SDR:
- Range: 0-50 dB
- Start with: 49.6 dB (maximum sensitivity)
- Adjust down if signal is too strong (> 1.0 dBFS)
Airspy:
- Range: 0-21 dB (linearity mode) or 0-15 dB (sensitivity mode)
- Start with: 21 dB
- Airspy has automatic gain control (AGC) option
SDR++ Server:
- Gain is controlled in SDR++ application, not EAS Station
- Leave the Gain field empty in EAS Station
- Adjust gain in SDR++'s GUI for best signal
Too much gain = Overload, distortion Too little gain = Weak signal, poor decoding
SDR++ Server (Network SDR)
Use SDR++ as a remote SDR source for EAS Station
SDR++ is a professional-grade SDR application with excellent visualization and can act as a network SDR server. This allows:
- Remote SDR Access: SDR hardware on one machine, EAS Station on another
- Shared SDR: Multiple clients sharing the same SDR device
- Better Visualization: Use SDR++'s advanced waterfall/spectrum display for tuning
- Hardware Isolation: Keep sensitive SDR hardware separate from the EAS Station container
Why Use SDR++ Server?
| Feature | Direct SDR (RTL-SDR/Airspy) | SDR++ Server |
|---|---|---|
| Setup Complexity | Simple (plug & play) | Moderate (requires SDR++ setup) |
| Visualization | Basic (EAS Station waterfall) | Advanced (SDR++ GUI) |
| Hardware Location | Same machine as EAS Station | Can be on different machine |
| Sharing | One application only | Multiple clients supported |
| USB Access | Required in container | Not needed (network only) |
| Best For | Simple deployments | Remote/distributed setups |
SDR++ Server Setup
1. Install SDR++ on the SDR Host Machine
Download SDR++ from: https://www.sdrpp.org/
Linux (Debian/Ubuntu):
# Visit https://github.com/AlexandreRouworxx/SDRPlusPlus/releases for the latest version
# Download the appropriate package for your distribution (AppImage, .deb, or tar.gz)
# Example for Ubuntu 22.04:
wget https://github.com/AlexandreRouworxx/SDRPlusPlus/releases/latest/download/sdrpp_ubuntu_jammy_amd64.deb
sudo dpkg -i sdrpp_ubuntu_jammy_amd64.deb
Windows: Download the installer from the SDR++ releases page
Raspberry Pi: Use the ARM64 build from the releases page or compile from source
2. Enable the SDR++ Server Module
- Launch SDR++
- Click Module Manager (in the left panel)
- Click Add and select
sdrpp_server - Configure the server:
- Listen Address:
0.0.0.0(to accept connections from any IP) - Port:
5259(default) - Click Start Server
- Listen Address:

3. Configure Your SDR in SDR++
- Select your SDR source (RTL-SDR, Airspy, etc.)
- Set the frequency (e.g., 162.550 MHz for NOAA WX7)
- Adjust gain for optimal signal
- Verify you can hear/see the signal in SDR++
4. Configure EAS Station to Connect
In EAS Station Web UI:
- Navigate to Settings → Radio Receivers
- Click Add Receiver
- Configure:
| Field | Value | Notes |
|---|---|---|
| Display Name | SDR++ Server |
Any descriptive name |
| Identifier | sdrpp_main |
Unique ID (no spaces) |
| Driver | remote or sdrpp |
Either works |
| Serial | tcp://192.168.1.100:5259 |
IP/hostname of SDR++ machine |
| Frequency | 162550000 |
162.55 MHz (match SDR++) |
| Sample Rate | 2500000 |
Match SDR++ sample rate |
| Gain | Leave empty | Controlled by SDR++ |
- Click Save Receiver
- Enable the receiver
Configuration Example
In .env (optional, for environment-based config):
# SDR++ Server connection (alternative to Web UI)
SDR_DRIVER=remote
SDR_SERIAL=tcp://192.168.1.100:5259
SDR_FREQUENCY=162550000
SDR_SAMPLE_RATE=2500000
Network Considerations
Firewall: Ensure port 5259 (or your chosen port) is open between machines
Bandwidth: SDR++ streams raw IQ data:
- 2.5 MSPS × 8 bytes (CF32) = ~20 MB/s
- Use on LAN or fast network connections
Latency: Negligible for EAS decoding (typically < 100ms)
SDR++ Server Troubleshooting
"Unable to connect to remote SDR"
Check connectivity:
# Test if port is reachable
nc -zv 192.168.1.100 5259
# Ping the SDR++ host
ping 192.168.1.100
Verify SDR++ server is running:
- Check SDR++ Module Manager shows server as "Running"
- Look for connection count indicator
"Connection drops frequently"
- Network stability - Use wired Ethernet instead of WiFi
- SDR++ CPU usage - Reduce sample rate if server is overloaded
- Firewall - Ensure persistent connections aren't being timed out
"No audio from SDR++ receiver"
- Frequency mismatch - Ensure EAS Station frequency matches SDR++
- Sample rate mismatch - Both must use the same sample rate
- SDR++ source - Verify SDR++ is receiving signal from the SDR hardware
Using SDR++ Preset
In the Web UI, you can use the built-in preset:
- Click Use Preset
- Select NOAA Weather Radio (SDR++ Server)
- Update the Serial field with your SDR++ server address
- Click Use This Preset
Testing and Verification
Using Diagnostic Tools
# Full diagnostic check
# Enumerate all devices
# Check driver capabilities
# Test sample capture (5 seconds at 162.55 MHz)
--test-capture --driver rtlsdr --frequency 162550000 --duration 5
# Show available presets
Web UI Status Check
- Navigate to Settings → Radio Receivers
- Check Receiver Status panel:
- Locked count > 0
- Green "Locked" badges in receiver table
- Signal strength displayed (dBFS)
Expected Signal Levels
| Signal Strength | Status | Notes |
|---|---|---|
| 0.1 - 1.0 dBFS | Excellent | Strong, clear lock |
| 0.01 - 0.1 dBFS | Fair | Works but may have dropouts |
| < 0.01 dBFS | Poor | Unlikely to decode properly |
| > 1.0 dBFS | Overload | Reduce gain to prevent distortion |
Troubleshooting
"No SDR Devices Found"
Possible causes and solutions:
SDR not plugged in
- Check USB connection
- Try different USB port (USB 2.0 often better than USB 3.0)
- Verify with
lsusbon host
Kernel driver conflict (RTL-SDR)
- Blacklist DVB-T drivers
Container needs rebuild
Restart containers after plugging in device
"Receiver shows 'No lock' status"
Wrong frequency
- Verify correct NOAA station: https://www.weather.gov/nwr/station_listing
- Double-check frequency entered in Hz (not MHz)
Weak signal
- Improve antenna (see Hardware Requirements)
- Move antenna to window or outdoors
- Increase gain (but watch for overload)
No antenna connected
- Ensure antenna is firmly attached to SMA connector
Interference
- Move SDR away from computers, power supplies
- Use shielded USB cable
- Try powered USB hub for better power delivery
"Signal strength is 0 or very low"
- Check antenna connection - Firm SMA connection
- Verify frequency - Matches local NOAA station
- Increase gain - Try 49.6 dB for RTL-SDR, 21 dB for Airspy
- Test with FM radio - Tune to 88-108 MHz to verify hardware works
"Permission denied" errors
devices:
- /dev/bus/usb:/dev/bus/usb
cap_add:
- SYS_RAWIO
If still having issues, add user to plugdev group:
sudo usermod -aG plugdev $USER
# Log out and back in
Advanced Topics
Multiple SDR Receivers
Run multiple SDRs simultaneously:
Use cases:
- Monitor multiple NOAA frequencies
- Redundancy (backup receivers)
- Different signal types (weather + FM broadcast)
Configuration:
- All SDRs will appear in Discover Devices
- Add each with unique names
- Configure different frequencies
- Each runs independently
Example setup:
- Receiver 1:
rtlsdr_wx→ 162.550 MHz (NOAA) - Receiver 2:
rtlsdr_fm→ 95500000 Hz (FM broadcast) - Receiver 3:
airspy_backup→ 162.550 MHz (backup)
Capture Modes
Configure in .env:
# IQ mode: Complex 32-bit I/Q samples (for offline analysis)
RADIO_CAPTURE_MODE=iq
# PCM mode: Float32 interleaved I/Q (for direct audio decoders)
RADIO_CAPTURE_MODE=pcm
Capture Duration
# Capture 30 seconds when SAME burst detected
RADIO_CAPTURE_DURATION=30
Signal Analysis Tools
Analyze captured IQ files with:
- GNU Radio - Signal processing and demodulation
- inspectrum - Visual spectrum analyzer
- Custom Python - NumPy/SciPy analysis
Performance Optimization
- Use USB 3.0 ports for higher sample rates
- Avoid USB hubs - Direct motherboard connection
- Monitor CPU usage - High sample rates increase CPU load
- Check for USB dropouts:
dmesg | grep -i usb
Security Considerations
For dedicated SDR stations:
/dev/bus/usb:/dev/bus/usbpassthrough is safe- No other sensitive USB devices connected
For shared systems:
- Consider specific device passthrough
- Use udev rules to restrict by vendor/product ID
Getting Help
If you're still having issues:
- Check logs:
sudo systemd logs app - Run diagnostics: Web UI or
python scripts/sdr_diagnostics.py - GitHub Issues: https://github.com/KR8MER/eas-station/issues
When reporting issues, include:
- SDR model and driver (RTL-SDR, Airspy, etc.)
- Output of
lsusbon host - Output of
SoapySDRUtil --findin container - Diagnostic script output
- Relevant log excerpts
Additional Resources
- SoapySDR Documentation: https://github.com/pothosware/SoapySDR/wiki
- RTL-SDR Guide: https://www.rtl-sdr.com/about-rtl-sdr/
- Airspy Documentation: https://airspy.com/
- SDR++ Software: https://www.sdrpp.org/
- NOAA Weather Radio: https://www.weather.gov/nwr/
- EAS/SAME Protocol: https://en.wikipedia.org/wiki/Specific_Area_Message_Encoding
Last Updated: 2025-11-30
This document is served from docs/hardware/SDR_SETUP.md in the EAS Station installation.