Tropospheric Ducting - How It Works ← Live Status

Tropospheric Ducting

How it works, what data drives the score, and how it ties to your Meshtastic network

What is Tropospheric Ducting?

Radio signals normally travel in straight lines and gradually spread out into space. Under certain atmospheric conditions, the lower atmosphere can act almost like a pipe or waveguide, trapping radio energy and bending it back toward the earth's surface. Instead of escaping into space, the signal follows the curvature of the earth far beyond where it would normally reach, sometimes hundreds of miles.

For Meshtastic (operating in the 900Mhz ISM band), this means nodes that would ordinarily be completely out of range can suddenly appear in your network as if they were nearby.

What Causes It?

Ducting happens when the atmosphere is layered in a specific way: warm, dry air sitting on top of cooler, moist air close to the ground. This creates a temperature inversion. Normally temperature drops as you go up, but during an inversion it rises. At the same time, humidity drops sharply with altitude.

Together, these conditions make radio waves refract (bend) downward instead of going straight. The stronger and sharper that temperature/humidity transition, the more pronounced the ducting effect.

What Data Does Open-Meteo Provide?

Open-Meteo is a free weather forecast API. For each location queried, it returns a hourly atmospheric profile which includes measurements at multiple altitudes simultaneously, not just at the surface.

Variable What it represents
temperature_2m Air temperature at 2 metres (ground level)
dewpoint_2m Dewpoint at surface, a direct measure of moisture
temperature_Xhpa Air temperature at pressure level X (seven levels sampled)
relative_humidity_Xhpa Relative humidity at pressure level X

The pressure levels sampled are 1000, 975, 950, 925, 900, 875, and 850 hPa, corresponding roughly to altitudes from ~130m up to ~1500m above the surface. These cover the lowest portion of the troposphere where ducting actually occurs. Going higher than ~1500m isn't relevant because ducting is a near-surface phenomenon.

Why HRRR?

The forecast model used is NOAA's HRRR (High-Resolution Rapid Refresh). It updates hourly and covers the continental US at ~3 km resolution. Data is typically under an hour old. HRRR publishes every hour with a ~45-minute processing lag, compared to 6+ hours for the global GFS model, making it far more useful for detecting fast-changing atmospheric conditions.

How Is the Ducting Score Calculated?

Raw weather data is converted into a physics-based score using ITU-R P.453-14; an international telecommunications standard specifically designed to model how radio waves refract through the atmosphere.

Modified Refractivity (M)

The core concept is Modified Refractivity, denoted M. M is a single number that captures how much a given parcel of air bends radio waves, accounting for temperature, moisture (water vapor pressure), atmospheric pressure, and altitude all at once. Higher M generally means less bending; lower M means more.

  1. Build an atmospheric profile.
    An M value is computed for each altitude level: surface, 130m, 300m, 500m, 800m, 1000m, 1250m, and 1500m. Relative humidity is first converted to dewpoint using the Magnus formula, and dewpoint is used to calculate water vapor pressure. Both of which are standard meteorological methods.
  2. Compute the M-gradient between each pair of adjacent layers.
    What matters for ducting isn't the absolute M value at any single level, but how rapidly M changes with altitude, measured in M-units per kilometre. This tells us whether conditions in that layer bend radio waves up, down, or not at all.
  3. Classify each layer and assign a score.
    Each layer is classified based on its M-gradient and scored accordingly (see below). The score is then weighted by altitude. Layers closer to the ground matter more, because surface-level ducting is more effective at trapping signals from ground-level antennas. Two 900 MHz-specific adjustments are applied: the surface layer (10-130 m) is excluded entirely, because nocturnal radiation cooling creates a shallow inversion every clear night that looks like ducting but is far too thin to trap 900 MHz signals; and layers between 130-500 m have their altitude weight capped at 0.5, because inversions in that range are common in the morning but rarely produce sustained long-range paths at this frequency. The 500 m layer and above receive full altitude weighting, as those inversions are more likely to represent genuine synoptic-scale events.
  4. The best single layer score becomes the ducting score, capped at 10.

M-Gradient Classification

Normal
M increases with altitude at >78 M-units/km. Radio waves spread out as expected. No ducting, score contribution: 0.
Super-refraction
M increases more slowly than normal (0 to 78 M-units/km). Waves bend slightly toward earth; modest range enhancement. Score: 0-3.
Ducting
M actually decreases with altitude (negative gradient). Waves are continuously bent back downward; the condition that produces long-range propagation. Score: 3-7+.

Score Reference

0-1
1-3
3-5
5-7
7-10
Negligible Weak Moderate Strong Excellent

The practical ceiling of this algorithm is approximately 5.25/10 under normal atmospheric conditions. The altitude weighting is intentionally conservative; layers below 500 m are capped to suppress false positives from common nocturnal inversions that are too shallow to trap 900 MHz signals. The Strong and Excellent bands represent the algorithm's theoretical envelope and will only be approached during exceptional events.

Regional Sampling

The local score only describes the atmosphere directly above your location. Ducting is a path phenomenon, it depends on conditions along the entire route between you and a distant station. So ducting scores are also computed at points 50 and 100 miles out in each of the 8 compass directions.

NW
N
NE
W
QTH
E
SW
S
SE

That's 16 sample points total, fetched in a single batch API request to avoid rate limiting. The highest score found across all points becomes the regional max score. Any compass direction where at least one sample meets or exceeds the correlation threshold is tracked as an elevated direction, a heading from which distant nodes are likely to appear.

Node Correlation

When a node appears in the mesh that hasn't been seen in the past 24 hours, the script checks four criteria before attributing its arrival to ducting:

If all four criteria are met, the node is flagged as ducting-correlated. Meaning its arrival in the mesh is consistent with the atmospheric conditions the model predicted. These nodes appear on the Grafana geomap and are counted in the alert message.

Putting It All Together

The system is essentially doing what a trained RF engineer would do manually; looking at a vertical slice of the atmosphere, checking whether the temperature and humidity profile creates the conditions that trap radio waves near the ground, and quantifying how strong that effect is.

Open-Meteo provides the raw atmospheric measurements. The ITU-R standard provides the physics to convert those measurements into a prediction of radio behavior. And the node correlation closes the loop by checking whether what the network is actually observing matches what the atmosphere predicts.