FreqOut is a UHF spectrum survey tool for production sound. You sweep a venue before deploying radio microphones, see what is already occupying the band, and pick clear frequencies with confidence. Get FreqOut on the App Store.
| Item | Purpose |
|---|---|
| iPhone or iPad (iOS 17+) | Runs the app |
| RTL-SDR dongle (e.g. NESDR SMArt v5) | The receiver hardware |
| Antenna | Supplied with most dongles; a half-wave whip is fine for surveys |
| A way to run rtl_tcp | Any Mac, Windows PC, Linux machine, or Raspberry Pi on the same network |
The app does not talk to the dongle directly — it connects to rtl_tcp, a
lightweight server that streams raw IQ samples over the network. Anything
that can run rtl_tcp and reach the iPhone or iPad over Wi-Fi works as a back end:
| Back end | How to get rtl_tcp |
|---|---|
| Mac | brew install librtlsdr or build from source |
| Raspberry Pi | sudo apt install rtl-sdr |
| Linux PC/laptop | sudo apt install rtl-sdr (Debian/Ubuntu) |
| Windows PC | Download the Zadig rtl-sdr release; rtl_tcp.exe is included |
In every case the server command is the same:
rtl_tcp -a 0.0.0.0 -p 1234 -b 4
Run it on whichever machine has the dongle plugged in, then point the app at that machine's IP address.
rtl_tcp -a 0.0.0.0 -p 1234 -b 4
You should see “Found Rafael Micro R820T tuner” and “Tuned to 100000000 Hz.”Tip: Some rtl_tcp builds crash when the app disconnects. On a Mac or Linux machine, run it in a loop so it restarts by itself:
while true; do rtl_tcp -a 0.0.0.0 -p 1234 -b 4; sleep 1; done
The Pi rig is a Raspberry Pi with the dongle attached, broadcasting its own Wi-Fi hotspot. You power it from a USB battery pack and carry it to any venue.
[RTL-SDR] → USB → [Pi] → Wi-Fi hotspot "FreqOut" → iPhone/iPad
freqout-pi, SSH, and your home Wi-Fi in the
Imager settings so you can SSH in for setup.sudo apt update && sudo apt install -y rtl-sdr
echo 'blacklist dvb_usb_rtl28xxu' | sudo tee /etc/modprobe.d/blacklist-rtl.conf
sudo rebootsudo nano /etc/systemd/system/rtl-tcp.service
Paste:
[Unit]
Description=rtl_tcp SDR server for FreqOut
After=network.target
[Service]
ExecStart=/usr/bin/rtl_tcp -a 0.0.0.0 -p 1234 -b 4
Restart=always
RestartSec=2
[Install]
WantedBy=multi-user.target
Save (Ctrl+X, Y, Enter), then:
sudo systemctl enable --now rtl-tcpsudo nmcli con add type wifi ifname wlan0 con-name FreqOutAP autoconnect yes ssid FreqOut mode ap
sudo nmcli con modify FreqOutAP \
802-11-wireless-security.key-mgmt wpa-psk \
802-11-wireless-security.psk "freqout1" \
ipv4.method shared ipv4.addresses 10.42.0.1/24
sudo nmcli con modify FreqOutAP 802-11-wireless.band a 802-11-wireless.channel 36
sudo nmcli con up FreqOutAP
The Pi's Wi-Fi switches to the hotspot; SSH drops (expected). Choose your
own password in place of freqout1 if you like.freqout1).10.42.0.1, port 1234.sudo nmcli con down FreqOutAP # drops hotspot, Pi rejoins your home Wi-Fi
ssh pi@freqout-pi.local # SSH in from your computer
sudo apt update && sudo apt upgrade -y
sudo nmcli con up FreqOutAP # restore hotspot when done
Set the frequency range. For UK radio microphone work the key range is 606–614 MHz (TV Channel 38, covered by the Ofcom UK-wide PMSE shared licence). You can widen to 470–614 MHz for a full survey of the UHF mic band.
Tap Sweep. The app divides the range into 1.92 MHz segments, retunes the dongle through each, and stitches the results into a single trace. A Ch 38 sweep takes a few seconds; the full 470–1000 MHz range takes about two minutes.
Successive sweeps update a max-hold trace (amber) that keeps the highest reading seen in each bin across all passes. The live trace (cyan) shows the current pass. Between them you see both the instantaneous state and the worst-case occupancy since you started.
Reset max hold clears the amber trace and starts fresh — useful after you have moved position or switched antennas.
The upper panel shows power in dBFS on the vertical axis and frequency on the horizontal axis.
| Colour | Meaning |
|---|---|
| Cyan | Live trace — current sweep pass |
| Amber | Max-hold — highest level seen in each bin across all passes |
Grid lines mark the per-band power thresholds. Frequency labels and band overlays (e.g. “Ch 38 UK shared licence”) appear automatically based on the UK band plan.
Zooming in. Pinch to zoom the spectrum horizontally; drag left or right to pan when zoomed. Double-tap the spectrum (or tap Fit in the status bar) to return to the full swept range. The waterfall zooms in lockstep. Zoom resets automatically whenever you run a new sweep.
A narrow spike is a classic analog FM wireless transmitter (Lectrosonics, Sennheiser G-series, etc.) — all the power in one or two bins.
A wide, flat-topped block is a digital wireless transmitter (Audio Ltd A10, Zaxcom, Shure Axient Digital, etc.) — power spread across ~200 kHz. The block reads ~20 dB lower per bin than an analog carrier of the same total power; this is normal and expected, not a weak signal. The app uses channel power (integrated over 200 kHz) to score all transmitters fairly, so a digital block is detected and ranked correctly regardless of how low its individual bins appear.
Below the spectrum, the waterfall shows time running downward — the most recent sweep is at the top, older sweeps scroll down. Colour encodes power: dark blue = quiet, cyan = moderate, yellow/orange = strong. A persistent vertical stripe is a continuous occupant; a brief flash is intermittent.
A row of chips below the waterfall shows one verdict per TV channel (and other key bands) in the swept range:
| Colour | Meaning |
|---|---|
| Green | Clear — safe to use |
| Amber | Caution — some activity, monitor carefully |
| Red | Busy — occupied, avoid |
The number on each chip is the peak power in dBFS for that channel. Verdicts use both per-bin peak and 200 kHz channel power, so digital transmitters flip a band to amber or red just as reliably as analog carriers.
Below the chips, Avoid: lists the specific frequencies of the strongest occupied regions, ranked by channel power. These are the frequencies to steer clear of when coordinating. FM-harmonic ghost images (tuner artefacts at multiples of local FM broadcast stations) are tagged (FM?) and should be verified before being relied upon.
Laptops, USB hubs, monitors and comms gear radiate narrow lines that a nearby receiver picks up just as the survey antenna does. In testing, a MacBook Pro put lines at 607.8, 608.5 and 613.8 MHz into a dongle plugged into its right-hand USB ports; the left-hand ports, or a hub 30 cm away, were clean.
From the next update, signals less than 15 dB above the noise floor are listed separately, in grey, as Weak — avoid if receivers sit near computers, so local noise doesn't crowd real transmitters out of the Avoid list.
Survey with your own transmitters switched off. You are measuring what is already in the band — other productions, permanent installations, DTT broadcast leakage. Your own rig is what you are trying to fit around everyone else.
Narrow spikes on the spectrum. Require clean spectrum with no intermodulation products landing within ~150 kHz of your chosen channel. Standard coordination tools (FreqFinder, IAS) handle these well.
Wide flat-topped blocks ~200 kHz wide. Their receivers tolerate IM products landing on-channel — error correction absorbs them as extra noise. This means:
Pack your digital channels on a tight uniform grid at one end of the band. Coordinate your analog channels in the remaining spectrum, checking IM products from all transmitters (digital + analog) against the analog receiver frequencies only. FreqFinder: enter only the analog channels; ignore warnings about products landing on digital frequencies.
The 8 MHz TV channel 38 is the primary UK PMSE allocation, covered by Ofcom's UK-wide shared licence. Up to ~10 channels fit in typical venue conditions. A practical mixed-rig starting plan (6× digital + 4× analog):
| Channels | Frequencies | Notes |
|---|---|---|
| Digital ×6 | 606.6, 607.0, 607.4, 607.8, 608.2, 608.6 MHz | 400 kHz uniform grid |
| Analog ×2 (Lectro) | 611.3, 613.7 MHz | 100 kHz Lectro raster |
| Analog ×2 (G4) | 611.9, 613.0 MHz |
This plan has been verified clean: worst-case 2T3O margin 300 kHz, 2T5O/3T3O margin 100 kHz against all four analog channels from all ten transmitters. Substitute frequencies as needed based on your sweep results.
The default tuner gain of about 21 dB suits a passive whip antenna in a typical venue. If you see signals approaching 0 dBFS (the top of the display), reduce gain in ⚙ — an overloaded front end raises the apparent noise floor and creates intermodulation products inside the dongle itself, making quiet spectrum look busier than it is. In a quiet venue, work up from there until the noise floor is stable and no wanted signals clip.
With source set to Demo, the app sweeps simulated signals. No hardware is required. Data displayed in demo mode carries a DEMO watermark.
| Symptom | Likely cause / fix |
|---|---|
| “No rtl_tcp server found” | Server not running, wrong IP, or firewall blocking port 1234 |
| Connected but no sweep / instant sweep | Stale samples in the buffer — disconnect and reconnect; the server may need restarting |
| Noise floor suddenly much higher | Tuner overload from strong nearby signals — reduce gain; switch transmitters off during survey |
| Analog carriers hard to see / digital blocks very wide | Gain too high — same fix |
| Lines that move or vanish when the dongle moves | Noise from a nearby computer or hub — keep the antenna 30 cm away, try another USB port or a hub; survey from the receiver position with that kit running |
| FM? tags in avoid list | Tuner harmonic images of local FM stations — fit an FM band-stop filter on the antenna to eliminate at source |
| App shows DEMO watermark | Source picker is set to Demo — change to rtl_tcp in ⚙ |
| Pi rig: can't SSH after enabling hotspot | Join the FreqOut Wi-Fi from your computer and SSH to 10.42.0.1, or run nmcli con down FreqOutAP on the Pi first |