Key takeaways
- graphs1090 is your measuring instrument: wiedehopf’s statistics tool records message rate, aircraft, range, signal level and system values over periods from two hours to several years.
- Set the gain by the share of strong signals: The red area “Messages > -3dBFS” shows overloaded messages. wiedehopf recommends 0.5 to 5 percent, about 2 percent if in doubt.
- Polar plot instead of a single value: The actual range outline in tar1090 shows for each direction how far you heard in the last 24 hours – dents reveal obstructions.
- Heywhatsthat provides the yardstick: The panorama calculation shows how far you can theoretically hear from your location. With getupintheair.sh this line lands directly on your tar1090 map.
- Measure first, then change: After every change to the antenna, cable or gain, observe for at least one day, preferably several, before you judge.
Contents
The antenna is up, the stick is running, the map is teeming with aircraft – but how good is your station, really? “Feels like more than yesterday” does not help when you want to know whether the new cable, the preamplifier or the extra half meter of mast height paid off. There are three tools for that, and they complement each other perfectly: graphs1090 for statistics over time, the range outline in tar1090 as a polar plot per compass direction, and the Heywhatsthat forecast as a theoretical upper limit. This guide shows you how to set up all three and what the curves reveal about your receiver.
From receiver straight to sighting
With Planetrack you log every sighting with photo, registration, type, airline, airport and spot – and sighting alerts tell you when a watched registration is on approach. Planetrack is launching soon – join the waitlist and get early access.
The short answer
You measure your ADS-B receiver’s reception performance by installing graphs1090 and watching the charts for message rate, aircraft, range and signal level over several days. You set the gain so that 0.5 to 5 percent of messages are stronger than -3 dBFS. For directional dependence you look at the actual range outline in tar1090, and as a yardstick you load the theoretical range from Heywhatsthat onto the same map with getupintheair.sh. Where the two lines are far apart, there is potential for improvement.
Installing graphs1090
graphs1090 comes from the developer wiedehopf, who also maintains readsb and tar1090. The tool reads your decoder’s stats.json file, stores the values in RRD databases with collectd and draws charts from them. The prerequisite is readsb, dump1090-fa or another dump1090 variant. How to set up the base is shown in Installing readsb and tar1090; if you use PiAware, you already have a suitable decoder in dump1090-fa.
Installation takes a single command:
sudo bash -c "$(curl -L -o - https://github.com/wiedehopf/graphs1090/raw/master/install.sh)"
Then you open http://<your-pi-ip>/graphs1090 in the browser. According to the project page, /perf or port 8542 also work. If your receiver runs in the sdr-enthusiasts Ultrafeeder container, you do not need to install anything: graphs1090 is already built in there and sits at /graphs1090/ on the map port – more on that in Feeding multiple ADS-B networks with Ultrafeeder.
Two settings you should change right away
The configuration is in /etc/default/graphs1090. Two options are handy for spotters in Central Europe:
| Option | Default | Recommendation |
|---|---|---|
range |
nautical (nautical miles) |
metric for kilometers |
colorscheme |
default |
dark if you look at it at night |
After saving, sudo systemctl restart graphs1090 applies the change. In the same file you can also set the size of the charts and fixed upper limits for individual axes – useful if you want to compare before-and-after images and the automatic scaling would otherwise fool you.
No location, no range
The range chart only works if your receiver’s position is stored in the decoder. If it is missing, the curve stays empty. Enter latitude and longitude in the readsb or dump1090-fa configuration; with PiAware images you set the location on your statistics page at FlightAware.
One detail on data safety: by default graphs1090 keeps the data in memory and writes it to the SD card once a day to spare it. That survives restarts without a problem, but a sudden power outage can cost you the values since the last write. So shut the Pi down cleanly before pulling the plug. In addition, the tool creates weekly backups, which it keeps for eight weeks.
Reading the most important charts
At the top of the page you choose the time period: from 2 hours through 24 hours, 7 and 30 days up to several years. For judging a change, 48 hours and 7 days are usually the most meaningful views. Four charts matter most for reception quality:
| Chart | What it shows | How to recognize good values |
|---|---|---|
| Message Rate | messages per second, plus the share of strong signals | high rate over the course of the day, red share in the target range |
| Aircraft Seen / Tracked | total aircraft, broken down by ADS-B, MLAT and TIS-B position and without position | few aircraft without position relative to the total |
| Range | maximum range, median distance, nearest aircraft, quartile range | stable maximum values, no sudden drop |
| Signal Level | median level, weakest and strongest signal, with readsb also noise | weakest signal at about -25 to -30 dBFS |
Message Rate: your station’s pulse
The message rate is the most honest metric because it counts every single decoded Mode S message. It follows the traffic: at night it drops sharply, during the day it rises with the waves of long-haul arrivals and departures. What matters is therefore not the absolute value but the comparison of equal periods – Tuesday against Tuesday, not Sunday night against Friday noon.
This chart also contains the red area “Messages > -3dBFS” with a percentage figure. It marks messages that arrive so strongly that the stick reaches its limit. This value is your most important lever for the gain – more on that in a moment. Background on the message types is provided by Transponder Mode A, C and S explained.
Aircraft Seen: positions and gaps
The aircraft chart distinguishes where a position comes from: ADS-B, MLAT or TIS-B. Aircraft without position are aircraft whose transponder you do hear, but which either do not transmit a position themselves or from which too few messages arrive. A high share without position is a good reason to take part in MLAT: how multilateration calculates positions from several stations is explained in MLAT/multilateration.
Range: maximum, median, quartiles
The range chart shows more than just the maximum distance. Besides the max range you see the median distance of all aircraft and an area for the range between the first and third quartile. The maximum alone is deceptive: a single aircraft at high altitude during unusual weather can set a record that has little to do with everyday reception. It is more meaningful whether the median and the quartiles move upward after a change.
Good to know: by default graphs1090 evaluates only ADS-B positions for range. Positions from other sources such as ADS-C or HFDL can, according to the repository, be included with a small change to a graphs1090 script, which has to be redone after every update – for judging your 1090 MHz antenna, though, you are better off sticking with the default.
Signal Level: understanding dBFS
The signal level is given in dBFS – decibels relative to the full scale of the analog-to-digital converter. 0 dBFS is the maximum, everything below is negative. The chart shows the average median level, the weakest and the strongest signal and, with readsb, the noise. If the strongest signal sits permanently at the upper edge, you are overloading. If the weakest signal is very close to the noise, you lack gain or your cable swallows too much.
Spotted a rarity on your map?
With Planetrack you set up sighting alerts for registrations, types, airlines and special liveries and find out when they are on approach or landing. Planetrack is launching soon – join the waitlist and get early access.
Optimizing gain with graphs1090
Many stations run with too much gain. That sounds paradoxical, because more amplification sounds like more range. In practice, though, nearby aircraft then overload the stick, and strong signals drown out weak ones. wiedehopf explicitly points out that the RTL-SDR’s hardware AGC does not work as hoped for ADS-B and effectively sets a very high gain.
His gain guide gives clear target values for the share of messages above -3 dBFS:
| Situation | Target value |
|---|---|
| Normal case | 0.5 to 5 percent |
| Unsure | about 2 percent |
| Right at the airport | up to about 10 percent acceptable, 5 percent or less preferred |
| Focus on low-flying aircraft nearby | 0.5 percent or below |
As a second check, the signal chart helps: the weakest signal should be roughly between -25 and -30 dBFS, and down to -35 dBFS if you focus on the near range.
Here is how to proceed:
1. Read the starting value
Note the percentage next to “Messages > -3dBFS” in the Message Rate chart. It applies since the decoder’s last restart.
2. Change the gain by one step
If the share is too high, lower the gain by one step; if it is too low, raise it. The RTL-SDR has fixed steps up to 49.6.
3. Wait and check again
After about five minutes you see a first trend; the value becomes reliable after one to two days.
4. Cross-check the message rate
Compare Message Rate and Range with the same weekday before. If both rise or stay stable, the setting is right.
If you want to save yourself the trial and error, use readsb’s autogain function. According to the documentation it is tuned for ADS-B and is activated with --gain=auto; with --gain=auto-verbose it logs its changes. This is something different from the stick’s hardware AGC. Which sticks can be controlled well at all is compared in SDR sticks for ADS-B compared; if you work with an Airspy, you will find the particulars in Airspy Mini/R2 for ADS-B.
Polar plot: range per compass direction
graphs1090 tells you how far you hear – but not in which direction. That is exactly what a polar plot shows: for every bearing it plots the greatest measured distance, so an outline forms around your location. With a perfect all-round view it would be an even circle. In reality the line has spikes, bulges and dents – and those are exactly what is interesting.
The actual range outline in tar1090
readsb keeps such an outline automatically. By default the decoder stores the data of the last 24 hours; with the --range-outline-hours option you can change the period. tar1090 draws the line as a dynamic “actual range outline” over the map. In the tar1090 configuration you set the color, line width and whether the line is visible on first load.
The URL parameter ?pTracks is also worthwhile: it shows the tracks of the last hours – eight hours by default according to the tar1090 documentation – and so makes visible where your coverage is dense and where the tracks break off. With the altitude filter you can also see whether, in one direction, you are mainly missing low-flying aircraft. How to use tar1090 on a PC as a full-fledged radar is explained in Flight tracking on a PC with tar1090 and Virtual Radar.
Other programs also offer range displays, such as Virtual Radar Server or the local interface of the Plane Finder client. For all of them the same applies: measure with the data of your own antenna only. A merged data stream with MLAT results or data from other stations artificially inflates the line.
What the shape reveals
| Pattern in the polar plot | Probable cause |
|---|---|
| sharp, narrow notch | chimney, mast, neighboring building close to the antenna |
| wide, dented sector | slope, high-rise, roof surface, your own house wall |
| uniformly small all around | antenna too low, cable losses, too little or far too much gain |
| one direction clearly farther | clear view over plains or water, often toward the main traffic flow |
| range fluctuates over the year | foliage on trees, wet vegetation, weather conditions |
Heywhatsthat: the theoretical yardstick
A dent in the polar plot does not mean you are doing something wrong. Maybe there is simply a mountain there. To tell the difference you need your location’s theoretical range. That is provided by heywhatsthat.com: from terrain data of the 2000 SRTM Shuttle mission, the service calculates a panorama of everything visible from your location. The “up in the air” function uses it to work out how far aircraft at a given altitude stand above the horizon.
Because 1090 MHz signals need a clear line of sight, this line is a good forecast of the maximum. The tar1090 guide names two limitations, though: obstacles closer than about 100 feet to the antenna are not factored in, and trees are not taken into account. The coarse elevation grid also does not reliably represent individual buildings.
Creating a panorama
- On heywhatsthat.com choose “New Panorama”.
- Set the antenna location exactly – by clicking on the map or via coordinates.
- Enter the height above ground. The default is six feet, i.e. eye level; for a rooftop antenna you enter the actual mounting height.
- Submit and wait until the calculation is done.
- Below the map, use “up in the air” to display the outlines for different flight altitudes.
The URL of the finished panorama contains an ID. You need it for the next step.
Showing the forecast in tar1090
tar1090 comes with a small script that loads the data directly from Heywhatsthat:
sudo /usr/local/share/tar1090/getupintheair.sh YOUR-ID
Without further arguments the script fetches the line for 12,192 meters, i.e. 40,000 feet. For a comparison with lower traffic you load two lines:
sudo /usr/local/share/tar1090/getupintheair.sh YOUR-ID 3048,12192
That shows the limits for 10,000 and 40,000 feet. The script queries the data with a refraction factor of 0.25, so it accounts for the slight curvature of radio waves in the atmosphere. In the Ultrafeeder container you instead enter the panorama ID in the HEYWHATSTHAT_PANORAMA_ID environment variable.
Comparing measurement and forecast
Now two lines lie on top of each other: the measured outline from readsb and the theoretical one from Heywhatsthat. The comparison is where the real insight comes from:
- Measured close to the 40,000 ft line: Your station gets out what the terrain allows. More range only comes with more height.
- Measured clearly inside, but evenly: The technology is holding you back. Candidates are cable losses, a missing preamplifier or a wrongly set gain. Solutions are described in Boosting ADS-B range with LNA and filter.
- Measured inside in individual sectors only: A local obstacle that Heywhatsthat does not know – buildings, trees, your own roof surface. Often a different mounting location is enough here; how to find it is shown in Finding the best antenna location.
- Measured outside in one direction: Occurs in unusual weather with enhanced propagation, or when foreign positions get into your data. Check whether you really evaluate only your own ADS-B data.
The rule of thumb for the radio horizon from our location guide also helps with perspective: the range in kilometers is roughly 4.12 × (√antenna height + √flight altitude), both in meters. Heywhatsthat does nothing different, only with real terrain instead of a smooth sphere.
Strengths of the combination
- cleanly separates terrain limits from technical problems
- makes improvements visible over weeks
- all tools are free and either open source or free to use
Limits
- Heywhatsthat does not reliably represent trees and buildings
- Maximum values fluctuate with weather and traffic
- Comparisons need patience and equal periods
A measurement log for antenna experiments
When you compare antennas – say the home-built spider against a coax collinear from Build your own 1090 MHz antenna – keep a small log. Before every change, note the date, gain, percentage of strong signals, average message rate at peak traffic time, median distance and a screenshot of the outline. Then change exactly one thing and measure for at least one full day, preferably a week. Anyone who changes two things at once does not know afterward what worked.
For spotters, a well-measured station has a very practical benefit: you know how far your own map is reliable and can estimate when an approach to your home airport shows up – whether at the Munich Airport visitors’ hill with a view of Munich Airport or at the Affenfelsen in Hamburg. Later you match your photos against the recorded data; how that works is explained in Matching sightings with ADS-B logs.
Is your station properly measured?
- graphs1090 is running and shows range in kilometers.
- The receiver location is entered in the decoder.
- The share of messages above -3 dBFS is between 0.5 and 5 percent.
- The actual range outline is visible in tar1090.
- The Heywhatsthat lines for 10,000 and 40,000 feet are loaded.
- You noted a starting value before changing anything.
Data becomes sightings
Post your sightings with photo, registration and airport in Planetrack, collect them in the hangar with a wish list and exchange ideas with the community. Planetrack is launching soon – join the waitlist and get early access.
Conclusion
Measuring reception performance is not rocket science, but it takes the right tools and a bit of patience. graphs1090 gives you the history of message rate, range and signal level and, with the share of strong signals, shows whether your gain is right. The range outline in tar1090 reveals in which direction your antenna is blind, and Heywhatsthat tells you whether that is down to the terrain or to your setup. Anyone who looks at these three layers together optimizes purposefully instead of by guesswork – and ends up with a station whose limits he knows exactly.
In short
Install graphs1090, enter your location, set range to kilometers, trim the gain to 0.5 to 5 percent strong signals, compare the outline in tar1090 with the Heywhatsthat forecast and measure every change over several days.
Summary
- graphs1090 collects your decoder’s statistics via collectd and displays them in the browser at /graphs1090.
- The most important charts for reception quality are Message Rate, Aircraft Seen, Range and Signal Level.
- readsb keeps a range outline that tar1090 displays as a polar plot over the map; Heywhatsthat supplies the theoretical limit to go with it.
- Comparing measurement and forecast shows whether terrain, buildings, cable or gain is limiting your range.
Frequently asked questions
What is graphs1090?
graphs1090 is an open-source tool by wiedehopf that stores the statistics of readsb, dump1090-fa and related decoders in RRD databases with collectd and displays them as charts in the browser. Among other things you see your receiver’s message rate, number of aircraft, range, signal level, CPU load and temperature.
How do I install graphs1090?
On a system with readsb or dump1090-fa, the installation script from the GitHub repository is enough: sudo bash -c "$(curl -L -o - https://github.com/wiedehopf/graphs1090/raw/master/install.sh)". Afterward you reach the charts at http://<IP>/graphs1090. In the Ultrafeeder container, graphs1090 is already included.
Why does my range chart show nothing?
The range chart needs your receiver’s location. If no position is stored in the decoder, graphs1090 cannot calculate distances. Enter latitude and longitude in the readsb or dump1090-fa configuration; with PiAware images you set the location on your statistics page at FlightAware.
What percentage of strong signals is right?
wiedehopf’s gain guide gives 0.5 to 5 percent of messages above -3 dBFS as the target range. If you are unsure, aim for about 2 percent. Right next to an airport, higher values can also make sense; if you mainly want to see low-flying aircraft nearby, go for 0.5 percent or below.
What does the Heywhatsthat range forecast show?
Heywhatsthat uses elevation data from the SRTM mission to calculate which terrain is visible from your location. From that, the “up in the air” function shows how far you theoretically have aircraft at a given altitude in line of sight. The calculation does not reliably account for trees and individual buildings.
How do I get the Heywhatsthat line onto my tar1090 map?
On heywhatsthat.com you create a panorama for your exact antenna location and note the ID from the URL. Then you run sudo /usr/local/share/tar1090/getupintheair.sh YOUR-ID. Without further arguments the script loads the line for 40,000 feet; with 3048,12192 as the second parameter you also get 10,000 feet.
How long should I measure after a change?
For the gain setting, a first look after about five minutes is enough, and it gets more accurate after one to two days. For antenna or location changes, a comparison over several days is worthwhile, because traffic volume, weather and time of day make the values fluctuate considerably.
Read more in ADS-B, MLAT & receivers
- Receiving ACARS messages with an SDR: acarsdec and ACARS Hub
- Build your own 1090 MHz antenna: spider, collinear and ground plane
- Receiving and sharing ADS-B data: what is allowed in Germany, Austria and Switzerland?
- Running an ADS-B receiver outdoors: enclosure, cooling, surge protection and power
- Build your own ADS-B receiver: Raspberry Pi, stick and antenna
- What feeders get in return: free subscriptions from FR24, FlightAware, AirNav Radar and Plane Finder
Related airports & manufacturers
Airports, manufacturers, airline groups and alliances – who is behind them and what you should know as a spotter.
Munich Airport
Germany’s second-largest airport and Lufthansa’s second hub: two parallel 4,000-meter runways in the Erdinger Moos, a Terminal 2 just for Lufthansa and Star Alliance – and, with the visitors’ park, one of the most convenient spotting places in the country.
AirportHamburg Airport
In the middle of the city, in the same place since 1911, with two runways that cross: Hamburg is not a hub, but an airport with plenty of European traffic, Emirates long-haul, Lufthansa Technik next door – and the Affenfelsen as its best-known spotting spot.
Related spotting locations
Specific vantage points with the runway configuration, light times, coordinates and an honest take on whether the trip is worth it.
Munich Airport visitors’ hill (Besucherhügel)
The best-known vantage point at Lufthansa’s Munich hub: from the visitors’ hill in the Besucherpark you look out over the airport grounds from above – with its own S-Bahn stop right next door.
Spotting hillAffenfelsen (“Monkey Rock”) at Hamburg Airport
The best-known spotting point at Hamburg Airport: from the Affenfelsen on Holtkoppel you look over the fence onto runway 15/33 without a ladder – with a kiosk café right next door and the morning sun at your back.
You might also like
Finding the best antenna location: height, line of sight, cable and loss
The antenna makes the difference between 50 and 400 kilometers of range. How to find the best spot, why height and line of sight are everything, which cable to use and how to keep signal loss under control.
ADS-B, MLAT & receiversBoosting ADS-B range: LNA, 1090 MHz filter, gain and cable choice
Your station is running, but there is more to get? Here is how to squeeze out the last kilometers with properly set gain, the right 1090 MHz filter, a preamplifier in the right place and the right cable – and avoid typical bad buys.
ADS-B, MLAT & receiversInstall readsb and tar1090: your own local live map for your ADS-B receiver
A Pi, an SDR stick and an antenna become your own live map: how to install the readsb decoder and the tar1090 web interface, set gain and location, use filters, tracks and URL parameters, and fix typical errors.



