Directional ADS-B (1090 MHz)
The signal
Section titled “The signal”ADS-B (Automatic Dependent Surveillance-Broadcast) operates at 1090 MHz. Aircraft continuously broadcast their GPS-derived position, altitude, velocity, and identification in short 112-microsecond bursts called Extended Squitters. These are unencrypted, omnidirectional, and received by anyone with a compatible receiver.
Standard ADS-B ground stations use omnidirectional or vertically polarized collinear antennas and achieve typical reception ranges of 150-200 nautical miles, limited by line of sight and receiver sensitivity. A directional antenna pointed at a specific sector of sky trades coverage breadth for range — the dish gain extends detection in the pointing direction while rejecting signals from elsewhere.
This experiment uses the dish not to track individual aircraft (dump1090 handles that fine with a simple antenna) but as a measurement tool: mapping how reception range varies with direction, using aircraft at known positions as calibration sources for the positioner’s pointing accuracy, and detecting aircraft that are invisible to omnidirectional setups.
Why aircraft make good calibration targets
Section titled “Why aircraft make good calibration targets”An aircraft broadcasting ADS-B provides three things simultaneously: a known position (from its GPS-derived latitude, longitude, and altitude), a known frequency (1090 MHz), and a relatively constant transmit power. This combination makes aircraft function as cooperative calibration sources scattered across the sky. Unlike satellites (which require TLE propagation and have uncertain transmit patterns), an ADS-B-equipped aircraft tells you exactly where it is at the moment you receive its signal.
Link budget
Section titled “Link budget”| Parameter | Value | Notes |
|---|---|---|
| Aircraft EIRP | ~21 dBW (125 W) | Typical ADS-B transponder into omni antenna |
| Range (standard) | ~200 NM / 370 km | Omnidirectional ground station |
| Range (target) | ~400 NM / 740 km | With dish gain, line-of-sight permitting |
| Free-space path loss (370 km) | ~144 dB | At 1090 MHz |
| Free-space path loss (740 km) | ~150 dB | At 1090 MHz, doubled range |
| Dish gain (est.) | ~10 dBi | The dish is only ~3 wavelengths across at 1090 MHz |
| LNA noise figure | 1.0 dB | Filtered 1090 MHz LNA |
| Gain advantage over omni | ~8 dB | Directional vs. 2 dBi omni whip |
At 1090 MHz, the 84 cm dish aperture is about 3 wavelengths across. The gain is modest — roughly 10 dBi compared to the 2 dBi of a typical quarter-wave whip. That 8 dB advantage translates to roughly 2.5x range extension (all else equal), pushing theoretical detection from 200 NM to about 500 NM. In practice, Earth curvature limits line of sight to about 250-300 NM for aircraft at typical cruising altitudes (35,000-40,000 ft), so the dish gain helps most for detecting aircraft at lower altitudes or greater distances along the horizon.
Hardware requirements
Section titled “Hardware requirements”See SDR Hardware Setup for the full signal chain, feed mounting, and bias tee safety details.
| Component | Recommendation | Notes |
|---|---|---|
| Feed | Half-wave dipole or patch antenna | Simple to build. Vertically polarized to match aircraft antennas |
| LNA | 1090 MHz filtered LNA | Many ADS-B-specific options. Cavity or SAW filter strongly recommended |
| SDR | RTL-SDR V4 | Standard ADS-B receiver. 1090 MHz well within range |
| Tracking mode | Step-and-dwell | Not satellite tracking — fixed pointings with timed dwells |
A dipole feed for 1090 MHz is about 13.8 cm (5.4 inches) tip to tip — small enough to mount easily at the focal point. A patch antenna is another option and offers cleaner illumination of the reflector. Either way, the feed construction is straightforward.
Feed illumination considerations
Section titled “Feed illumination considerations”At 1090 MHz, the dish is electrically small — only about 3 wavelengths across. This means the beam is broad and the feed’s illumination pattern matters less than at higher frequencies. A simple dipole will under-illuminate the dish edges (reducing efficiency) but won’t create severe sidelobe problems. A patch antenna with a ground plane can better control the illumination taper, but the improvement over a dipole may be marginal given the dish’s small electrical size at this wavelength. Start with a dipole for simplicity and upgrade to a patch if the measured antenna pattern reveals room for improvement.
Proposed procedure
Section titled “Proposed procedure”Directional coverage survey
Section titled “Directional coverage survey”The primary experiment: map ADS-B detection range as a function of dish pointing direction.
-
Prepare the hardware chain. Mount the dipole or patch feed, connect through the filtered 1090 MHz LNA, run coax to the RTL-SDR. Ensure the LNB bias tee is disconnected or blocked (see SDR Hardware Setup).
-
Start dump1090 in network mode.
Terminal window dump1090 --device-index 0 --net --net-sbs-port 30003 --quietThis decodes ADS-B messages and outputs position reports on TCP port 30003 in SBS (BaseStation) format.
-
Start the Birdcage rotctld server.
Terminal window birdcage serve --port /dev/ttyUSB2 --baud 115200 -
Define a survey grid. Choose an azimuth sweep range (e.g., 0 to 355 degrees in 5-degree steps) and one or two elevation angles (5 degrees above the EL floor of 18 degrees, and perhaps 30 degrees for comparison).
-
Point the dish at the first position and dwell.
Terminal window # Via rotctldecho "P 0 20" | nc 127.0.0.1 4533Dwell for 2-5 minutes at each position. Log all ADS-B messages received during the dwell with timestamps.
-
Step to the next azimuth and repeat. A full 360-degree survey at 5-degree steps with 3-minute dwells takes about 3.6 hours. Running at night (when air traffic patterns are more stable) may produce cleaner data.
-
Collate the results. For each dwell position, calculate: number of unique aircraft detected, maximum range of any detection, average signal level. Plot these as polar maps (AZ angle vs. range or count).
Pointing calibration using aircraft
Section titled “Pointing calibration using aircraft”Aircraft at known positions (from decoded ADS-B) provide a way to verify and calibrate the dish’s pointing accuracy.
-
Pick a distant aircraft at a known position. From the dump1090 output, select an aircraft with a stable track at a large range (100+ NM). Its decoded ADS-B position gives you the true AZ/EL from your ground station.
-
Calculate expected AZ/EL. From the aircraft’s reported lat/lon/altitude and your ground station coordinates, compute the expected azimuth and elevation.
-
Point the dish at the calculated AZ/EL. Record the signal strength (dump1090 reports RSSI per message).
-
Scan around the calculated position. Offset the dish by +/- a few degrees in AZ and EL, recording signal strength at each offset. The peak should correspond to the true direction of the aircraft.
-
Compare peak position to calculated position. Any systematic offset reveals pointing error in the Birdcage positioner at 1090 MHz.
Software pipeline
Section titled “Software pipeline”| Tool | Purpose | Project |
|---|---|---|
| dump1090 | ADS-B message decoding | FlightAware |
| readsb | Enhanced ADS-B decoder (dump1090 fork) | wiedehopf |
| tar1090 | Web-based ADS-B map visualization | wiedehopf |
| Virtual Radar Server | ADS-B logging and range plotting | VRS |
dump1090 (or readsb) handles the decoding. tar1090 provides a live map in a browser. Virtual Radar Server can generate polar range plots from logged data — exactly what this experiment needs for the coverage survey.
For the calibration use case, a simple Python script that reads SBS-format messages, computes expected AZ/EL from aircraft position, and correlates with dish pointing is all that’s needed. The SBS format is CSV with fields for ICAO hex code, callsign, altitude, ground speed, track, latitude, longitude, and vertical rate — everything needed to compute the aircraft’s bearing and elevation from a known ground station.
Data logging approach
Section titled “Data logging approach”For the step-and-dwell survey, each dwell period needs to be tagged with the dish’s current AZ/EL. One approach:
- Query the dish position via rotctld (
echo "p" | nc 127.0.0.1 4533) at the start of each dwell - Log the position and timestamp to a CSV file
- Correlate with the SBS output from dump1090 by timestamp
A wrapper script that steps the dish, waits for settling, queries position, and records the dwell boundaries automates the entire survey. The Birdcage CLI’s pos subcommand also works for position readback.
Expected results
Section titled “Expected results”-
Directional range map. A polar plot showing maximum ADS-B detection range as a function of azimuth. Expect to see clear directional gain — aircraft detectable at 300+ NM in the dish’s pointing direction, fading to near-zero off-axis. Terrain obstructions will show as range shadows.
-
Range extension. With the ~8 dB gain advantage over an omnidirectional antenna, detection of high-altitude aircraft at 300-400 NM should be achievable where line of sight permits. Low-altitude aircraft or those near the horizon benefit most from the gain improvement.
-
Pointing accuracy measurement. The calibration procedure should reveal any systematic AZ/EL offset in the positioner. Sub-degree accuracy should be verifiable using distant aircraft as point sources.
-
Multipath signatures. At low elevation angles, ground reflections create multipath interference. The directional antenna may show elevation-dependent signal level variations that trace out the dish’s vertical beam pattern convolved with the ground reflection geometry.
-
Terrain mapping. The directional range map effectively encodes the local terrain profile. Directions with nearby hills or buildings will show reduced range (RF shadow), while directions with clear line of sight to the horizon will show maximum range. Overlaying the range map on a topographic map should show strong correlation.
-
Time-of-day variation. Running the survey at different times reveals how air traffic patterns shape the detection statistics. Overnight surveys may detect fewer aircraft but with less variability per direction, while daytime surveys near major airports show dense traffic in specific corridors.
Open questions
Section titled “Open questions”-
Optimal dwell time. ADS-B squitters repeat roughly once per second, but aircraft density varies by time and direction. Is 2 minutes enough for a statistically meaningful sample at each azimuth, or does 5 minutes produce significantly better range statistics?
-
Elevation angle selection. The dish’s minimum EL is 18 degrees. Most distant aircraft are near the horizon (low EL). How much does the 18-degree floor limit the effective range extension compared to a ground-level omnidirectional antenna that can see down to 0 degrees?
-
Gain at 1090 MHz. The estimated 10 dBi gain assumes reasonable aperture efficiency with a simple dipole feed. The actual gain depends on the feed’s illumination pattern — an improperly positioned dipole may under-illuminate the dish or cause excessive spillover. Only measurement will tell.
-
Beam width. At 1090 MHz, the 3 dB beam width is roughly 25-30 degrees. The 5-degree survey step size is finer than the beam, which is good for mapping but means adjacent positions are not independent samples. How should the analysis account for this overlap?
-
Simultaneous reference antenna. Running a standard omnidirectional ADS-B receiver alongside the dish provides a control dataset. Aircraft detected by both antennas give direct A/B comparisons of signal level. Aircraft detected only by the dish (at extreme range) confirm the directional gain advantage. Is a second RTL-SDR feeding a separate dump1090 instance the cleanest way to implement this?