Skip to content
radio-tuner logo

Radio Tuner for WaveCap-SDR

radio-tuner

Adjust SDR radio settings (frequency, gain, squelch, bandwidth, filters, AGC) in WaveCap-SDR. Use when changing tuning parameters, optimizing reception, or configuring channels.

SKILL.md

Full skill instructions

Radio Tuner for WaveCap-SDR

This skill provides tools to adjust SDR radio settings including frequency, gain, squelch, bandwidth, filters, and AGC parameters.

When to Use This Skill

Use this skill when:

  • Changing the tuned frequency
  • Adjusting gain for optimal signal level
  • Setting squelch threshold to eliminate noise
  • Configuring channel bandwidth
  • Enabling/​disabling filters (deemphasis, notch, etc.)
  • Adjusting AGC parameters
  • Changing demodulation mode

Available Settings

Capture Settings (SDR-level)

SettingDescriptionRange
centerHzCenter frequency1 MHz - 6 GHz
sampleRateSample rateDevice-dependent
gainRF gain-100 to 100 dB
bandwidthIF bandwidth0 to sample_rate
ppmFrequency correction-1000 to 1000
antennaAntenna portDevice-dependent

Channel Settings (Demodulator-level)

SettingDescriptionRange
modeDemodulation modewbfm, nbfm, am, ssb, raw, p25, dmr
offsetHzOffset from capture center-50 MHz to +50 MHz
squelchDbSquelch threshold-120 to 0 dB
audioRateOutput audio rate8000 to 192000 Hz

Filter Settings

SettingDescriptionDefault
enableDeemphasisFM de-emphasis filtertrue (WBFM)
deemphasisTauUsDe-emphasis time constant75 µs (US), 50 µs (EU)
enableAgcAutomatic gain controltrue
agcTargetDbAGC target level-20 dB
agcAttackMsAGC attack time10 ms
agcReleaseMsAGC release time500 ms
notchFrequenciesNotch filter frequencies[]

Usage Instructions

Step 1: List Current Settings

Get current capture and channel settings:

# Get capture settings
curl http://127.0.0.1:8087/​api/​v1/​captures/​c1 | jq

# Get channel settings
curl http://127.0.0.1:8087/​api/​v1/​channels/​ch1 | jq

Or use the helper script:

PYTHONPATH=backend backend/​.venv/​bin/​python .claude/​skills/​radio-tuner/​adjust_settings.py \
  --capture c1 --show

Step 2: Adjust Capture Settings

Change frequency:

curl -X PATCH http://127.0.0.1:8087/​api/​v1/​captures/​c1 \
  -H "Content-Type: application/​json" \
  -d '{"centerHz": 90300000}'

Change gain:

curl -X PATCH http://127.0.0.1:8087/​api/​v1/​captures/​c1 \
  -H "Content-Type: application/​json" \
  -d '{"gain": 35.0}'

Or use the helper script:

PYTHONPATH=backend backend/​.venv/​bin/​python .claude/​skills/​radio-tuner/​adjust_settings.py \
  --capture c1 \
  --frequency 90.3 \
  --gain 35

Step 3: Adjust Channel Settings

Change squelch:

curl -X PATCH http://127.0.0.1:8087/​api/​v1/​channels/​ch1 \
  -H "Content-Type: application/​json" \
  -d '{"squelchDb": -50}'

Change mode:

curl -X PATCH http://127.0.0.1:8087/​api/​v1/​channels/​ch1 \
  -H "Content-Type: application/​json" \
  -d '{"mode": "nbfm"}'

Enable/​disable AGC:

curl -X PATCH http://127.0.0.1:8087/​api/​v1/​channels/​ch1 \
  -H "Content-Type: application/​json" \
  -d '{"enableAgc": true, "agcTargetDb": -20, "agcAttackMs": 10, "agcReleaseMs": 500}'

Step 4: Add Notch Filters

Remove interference at specific frequencies:

curl -X PATCH http://127.0.0.1:8087/​api/​v1/​channels/​ch1 \
  -H "Content-Type: application/​json" \
  -d '{"notchFrequencies": [1000, 2000, 3000]}'

Helper Script Reference

# Show current settings
python adjust_settings.py --capture c1 --show

# Change frequency (MHz)
python adjust_settings.py --capture c1 --frequency 90.3

# Change gain (dB)
python adjust_settings.py --capture c1 --gain 35

# Change bandwidth (Hz)
python adjust_settings.py --capture c1 --bandwidth 200000

# Change squelch (dB)
python adjust_settings.py --channel ch1 --squelch -50

# Change mode
python adjust_settings.py --channel ch1 --mode nbfm

# Multiple settings at once
python adjust_settings.py --capture c1 --frequency 90.3 --gain 35 --bandwidth 200000

Demodulation Modes

ModeDescriptionTypical Use
wbfmWide-band FM (200 kHz)FM broadcast radio
nbfmNarrow-band FM (12.5-25 kHz)Two-way radio, amateur
amAmplitude modulationAviation, AM broadcast
ssbSingle sidebandAmateur radio, marine
rawNo demodulationDigital modes, ISM
p25Project 25 digitalPublic safety
dmrDigital Mobile RadioCommercial two-way

Optimal Settings by Application

FM Broadcast Radio

{
  "sampleRate": 1024000,
  "bandwidth": 200000,
  "mode": "wbfm",
  "enableDeemphasis": true,
  "deemphasisTauUs": 75,
  "squelchDb": -60
}

VHF Marine / Aviation

{
  "sampleRate": 2000000,
  "bandwidth": 25000,
  "mode": "nbfm",
  "squelchDb": -50,
  "enableAgc": true
}

Amateur Radio SSB

{
  "mode": "ssb",
  "ssbMode": "usb",
  "enableSsbBandpass": true,
  "ssbBandpassLowHz": 300,
  "ssbBandpassHighHz": 3000,
  "squelchDb": -60
}

Configuration Warnings

WaveCap-SDR automatically detects problematic configurations and displays warnings in the UI. Check configWarnings in capture API responses to see current warnings.

Check Current Warnings

curl -s http://127.0.0.1:8087/​api/​v1/​captures/​c1 | jq '.configWarnings'

Warning Types

CodeSeverityDescriptionResolution
rtl_unstable_sample_ratewarningRTL-SDR sample rate <900kHz causes IQ overflowsUse 1.024 MHz, 2.048 MHz, or 2.4 MHz
bandwidth_exceeds_sample_ratewarningBandwidth > sample rate violates NyquistReduce bandwidth or increase sample rate
bandwidth_near_sample_rateinfoBandwidth >90% of sample rate causes edge aliasingUse bandwidth ≤80% of sample rate
sdrplay_high_sample_rateinfoSDRplay >8 MHz may cause USB issuesLower sample rate if experiencing dropouts
zero_gaininfoGain set to 0 dBIncrease gain if signals are weak

Best Practices to Avoid Warnings

  1. RTL-SDR Sample Rates: Use 1.024 MHz, 2.048 MHz, or 2.4 MHz

    curl -X PATCH http://127.0.0.1:8087/​api/​v1/​captures/​c1 \
      -H "Content-Type: application/​json" \
      -d '{"sampleRate": 1024000}'
    
  2. Bandwidth/​Sample Rate Ratio: Keep bandwidth ≤80% of sample rate

    # For 2 MHz sample rate, use ≤1.6 MHz bandwidth
    curl -X PATCH http://127.0.0.1:8087/​api/​v1/​captures/​c1 \
      -H "Content-Type: application/​json" \
      -d '{"sampleRate": 2000000, "bandwidth": 1600000}'
    
  3. SDRplay Sample Rates: Stay ≤8 MHz for reliable USB throughput

    curl -X PATCH http://127.0.0.1:8087/​api/​v1/​captures/​c1 \
      -H "Content-Type: application/​json" \
      -d '{"sampleRate": 6000000}'
    

Common Issues

Issue: Audio Too Quiet

Solutions:

  • Increase gain on capture
  • Increase agcTargetDb (e.g., -15 instead of -20)
  • Check antenna connection

Issue: Audio Distorted

Solutions:

  • Reduce gain on capture
  • Lower agcTargetDb (e.g., -25 instead of -20)
  • Enable de-emphasis for FM

Issue: Too Much Background Noise

Solutions:

  • Increase squelchDb (less negative, e.g., -40 instead of -60)
  • Add notch filters for specific interference
  • Enable noise blanker

Issue: Signal Cutting In/​Out

Solutions:

  • Lower squelchDb (more negative)
  • Adjust AGC attack/​release times
  • Check if frequency offset is correct

Issue: IQ Overflows (RTL-SDR)

Solutions:

  • Use stable sample rate (1.024 MHz, 2.048 MHz, or 2.4 MHz)
  • Avoid sample rates below 900 kHz
  • Check USB connection quality

Issue: Aliasing at Spectrum Edges

Solutions:

  • Reduce bandwidth to ≤80% of sample rate
  • Increase sample rate if wider bandwidth needed
  • Use appropriate IF filter settings

Files in This Skill

  • SKILL.md: This file - instructions for using the skill
  • adjust_settings.py: Helper script for adjusting radio settings

More Other skills

Delegate independent tasks to specialized agents working concurrently with isolated context.

295.4K 206.3K
View

Applies Anthropic's official brand colors and typography to any sort of artifact that may benefit from having Anthropic's look-and-feel. Use it when brand colors or style guidelines, visual formatting, or company design standards apply.

179.7K 100.1K
View

Toolkit for styling artifacts with a theme. These artifacts can be slides, docs, reportings, HTML landing pages, etc. There are 10 pre-set themes with colors/fonts that you can apply to any artifact that has been creating, or can generate a new theme on-the-fly.

179.7K 89.5K
View

A set of resources to help me write all kinds of internal communications, using the formats that my company likes to use. Claude should use this skill whenever asked to write some sort of internal communications (status reports, leadership updates, 3P updates, company newsletters, FAQs, incident reports, project updates, etc.).

179.7K 76.1K
View

Fundamental design principles for writing maintainable, testable Python code.

40.2K 21.9K
View

Modern responsive layouts using container queries, fluid typography, CSS Grid, and mobile-first strategies.

40.2K 20K
View

Generate Playwright tests from scenarios using interactive browser exploration and validation.

39.7K 18.2K
View

Modern React state management with Redux Toolkit, Zustand, Jotai, and React Query for every state category.

40.2K 14.7K
View

GDPR-compliant data handling with consent management, data subject rights, and privacy controls.

40.2K 14.3K
View

Python error handling patterns including input validation, exception hierarchies, and partial failure handling. Use when implementing validation logic, designing exception strategies, handling batch processing failures, or building robust APIs.

40.2K 13.5K
View

Detailed multi-file refactor planning with safety checks and rollback guidance.

39.7K 13K
View