This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
Introduction
FPV Detect is a PortaPack application for detecting analog FPV (first-person view) video signals and identifying their channel across the 5.8 GHz band. It covers all standard FPV bands — A, B, E, F, and R — used by most analog drone video transmitters (VTX) and goggles. The app can scan a single selected band or run AutoScan across all 40 channels simultaneously.
Its use is not limited to drone racing — it can be used to locate any analog FPV carrier in the 5.6–5.9 GHz range.
Controls
Top row:
- LNA: Low Noise Amplifier gain (0–40 dB).
- VGA: Variable Gain Amplifier / baseband gain (0–62 dB).
- AMP: RF preamplifier — 0 = off, 1 = on (+14 dB). Use with caution near strong signals.
- VOL: Audio output volume.
Second row:
- Band selector: Choose which band to scan —
Band A,Band B,Band E,Band F,Band R, orAutoScan(default). AutoScan steps through all 5 bands × 8 channels = 40 channels in order. - Frequency display: Shows the current channel being monitored in the format
B3 5771 MHz(band letter, channel number, frequency).
Third row:
- State badge: Current detection state —
SCANNING,VERIFY FPV, orDRONE FOUND(red when locked). - Conf X%: Detection confidence percentage (0–99%). Increases during verification and lock.
- Thr> / threshold field: Detection threshold in dBm, adjustable from −100 to +20. Default: −38 dB. Only signals above this level trigger detection. Increase to reduce false positives in noisy environments; decrease if signals are weak.
Fourth row:
- RSSI min/avg/max: Scrolling RSSI bar graph (256 columns) showing min, average, and maximum received levels.
- PWR X dB: Current peak channel power in dB.
Status lines:
- Status text: Human-readable summary — band/channel/frequency when verifying or locked.
- Detail text: During scanning: shows the threshold requirement. During verification: shows average dB, peak dB, hit/sample counts. During lock: shows locked channel, confidence, and hold counter.
The lower part of the screen shows the scrolling RSSI history graph and a vertical peak-hold RSSI indicator on the right.
Detection algorithm
The app uses a three-state machine. The key insight is that a real FPV carrier is a narrow peak — it stands out clearly from adjacent channels. Broadband interference (Wi-Fi, noise) does not, so it gets filtered out during the neighbor check in the Candidate state.
stateDiagram-v2
[*] --> Scanning
Scanning --> Candidate : power ≥ threshold (default −38 dB)\nbeep 1150 Hz / 60 ms
Candidate --> Locked : ≥4/5 hits AND conf ≥72%\nAND center ≥ neighbors+3 dB\nbeep 1850 Hz / 180 ms
Candidate --> Scanning : verification failed\n(too few hits or weak neighbor margin)
Locked --> Scanning : hold counter reaches 0\n(power stays below threshold−6 dB)\nbeep 650 Hz / 90 ms
state Scanning {
[*] --> stepping
stepping --> stepping : 1 frame dwell per channel\nAutoscan: 40 ch total\nSingle band: 8 ch
}
state Candidate {
[*] --> sampling
sampling --> neighbor_check : after 2nd sample
neighbor_check --> sampling : retune left+right neighbors\nto measure their power
sampling --> lock_decision : 5 samples collected
}
state Locked {
[*] --> holding
holding --> holding : power ≥ threshold−6 dB\nhold counter stays at 12\nconf++ (up to 99%)
holding --> draining : power < threshold−6 dB\nhold counter-- per frame
}
Scanning — the receiver steps through channels one by one, dwelling for 1 frame per channel. When power exceeds the detection threshold, it enters Candidate.
Candidate — the app stays on the suspected channel and collects up to 5 power samples. After the 2nd sample it briefly re-tunes to the adjacent channels (left neighbor, then right neighbor) to measure their current power. A confidence score is computed from: average power above threshold, peak margin, hit/miss ratio, and neighbor margin (center power minus the strongest adjacent channel). Lock requires all three: ≥4 hits out of 5 samples, confidence ≥72%, and center channel at least 3 dB above neighbors. A fast-lock path fires earlier if peak exceeds threshold by ≥8 dB and confidence ≥80%.
Locked — the app stays on the confirmed channel, shows DRONE FOUND in red, and emits a long beep. A hold counter (max 12) prevents brief signal fades from unlocking immediately — each frame below the unlock threshold (= detection threshold − 6 dB) decrements the counter; unlock only occurs when it reaches zero.
FPV channel frequencies
All 40 standard channels covered by the app:
| Ch | Band A (MHz) | Band B (MHz) | Band E (MHz) | Band F (MHz) | Band R (MHz) |
|---|---|---|---|---|---|
| 1 | 5865 | 5733 | 5705 | 5740 | 5658 |
| 2 | 5845 | 5752 | 5685 | 5760 | 5695 |
| 3 | 5825 | 5771 | 5665 | 5780 | 5732 |
| 4 | 5805 | 5790 | 5645 | 5800 | 5769 |
| 5 | 5785 | 5809 | 5885 | 5820 | 5806 |
| 6 | 5765 | 5828 | 5905 | 5840 | 5843 |
| 7 | 5745 | 5847 | 5925 | 5860 | 5880 |
| 8 | 5725 | 5866 | 5945 | 5880 | 5917 |
The receive bandwidth is 750 kHz per channel (IQ capture mode, no audio demodulation during scanning).
Note: Band E channels 5–8 (5885–5945 MHz) and Band R channel 8 (5917 MHz) fall outside the standard 5.725–5.875 GHz ISM band. These are legal to receive but may not be legal to transmit on in all regions.
⚠️ False positives
FPV Detect can trigger false positives, particularly indoors or in urban environments where the 5.8 GHz band is crowded with non-FPV sources. Detection is based on signal power, not video content analysis — any sufficiently strong narrow emission near an FPV channel frequency can cause a lock. Common interference sources include Wi-Fi 5/6 routers (5.725–5.825 GHz overlap), ISM band devices (wireless cameras, baby monitors), wireless HDMI senders, and harmonic emissions from other transmitters.
If false locks occur frequently: raise the detection threshold, select a specific band instead of AutoScan, or move to an area with less RF congestion. When locked, the audio output lets you verify: an actual FPV analog video carrier produces a characteristic buzz, while interference typically sounds like noise or silence.
Settings persistence
The detection threshold value is saved automatically and restored on next launch. Settings are stored in SETTINGS/rx_fpv.ini on the SD card.e.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
Start here
Contributors
How to collaborate
Contributing Guidelines
How to ask questions correctly
Hardware
- PortaPack Versions (which one to buy)
- Features
- HackRF Versions
- Description of the hardware
- Enclosure/cases
- Repairs
- Mods
User manual
Intended use and Legality
- Usage cautions
- First steps
- Firmware update procedure
- User interface
- Powering the PortaPack
- Troubleshooting
- Won't boot
- Config Menu
- Firmware upgrade
- Diagnose firmware update in Windows
- Receive Quality Issues
- No TX/RX
- TX Carrier Only
- H2+ speaker modifications
- Dead Coin Cell Battery
- Factory Defaults
- SD card not recognized by PC with the SD-card over USB selected
- DFU overlay
- Full reset
- SolveBoard
- How to Format SDCard
- What if I don't like some of the apps
Applications
- 📥 Receivers
- 📤 Transmitters
- ADS-B(S) TX
- Adult Toys
- APRS TX
- BHT Xy/EP
- BLE TX
- BLESpam
- Burger Pager
- CVS Spam
- EPIRB
- FlipperTX
- GPS Sim
- Hopper
- Jammer
- KeeLoq TX
- Key fob TX
- LGE Tool
- MDC-1200 TX
- Morse TX
- OOK
- OOK Brute
- OOK Editor
- P25 TX
- POCSAG TX
- RDS
- RTTY TX
- SAME TX
- Signal gen
- Soundboard
- Spectrum Painter
- SSTV
- TEDI/LCR
- TouchTunes
- TPMS TX
- 🔄 Transceivers
- 🟡 Recon
- 🔴 Capture
- ▶️ Replay
- 🖲️ Remote
- 🔍 Looking Glass
- 🛠️ Utilities
- 🎮 Games
- ⚙️ Settings
- 💻 HackRF Mode
Misc
Developer Manual
- Compilation of the firmware
- Compile on WSL with ninja
- How to compile on Windows faster with WSL 2
- Using Docker and Kitematic
- Docker command-line reference
- Using Buddyworks and other CI platforms
- Notes for Buddy.Works (and other CI platforms)
- Using ARM on Debian host
- All in one script for ARM on Debian host
- Compile on Arch based distro (exclude Asahi), or other weird distros
- Dev build versions
- Notes About ccache
- Create a custom map
- Code formatting
- PR process
- Description of the Structure
- Software Dev Guides
- Tools
- Research
- UI Screenshots
- Maintaining
- Creating a prod/stable release (Maintainers only)
- Maintaining rules
- Development States Notes
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
Note
The wiki is incomplete. Please add content and collaborate.
Important
- This is a public wiki. Everything is visible to everyone. Don't use it for personal notes.
- Avoid linking to external tutorials/articles; they may become outdated or contain false information.