There are a lot of interesting things hiding in plain sight on a P25 control channel.

Most people think of control channels as the place where trunking assignments, affiliations, and system housekeeping live. That’s true, but they also carry something surprisingly useful for experimenters and infrastructure nerds: time.

P25Time is a single-binary tool built from DSD-Neo that listens to a P25 Phase 1 control channel, decodes the Synchronization Broadcast messages, reconstructs UTC from the over-the-air timing data, and serves it out as an NTP source on your network.

In other words, it turns a live radio system into a usable clock.

What P25Time Does

At a high level, P25Time:

Once synchronized, it behaves like a local stratum-1 style source for lab use and experimentation.

That’s a fun sentence to write: your NTP server is now disciplined by a trunked radio control channel.

Why This Is Interesting

GPS gets all the attention when people talk about accurate time, and for good reason. But GPS is not always convenient:

P25 systems often carry stable time information as part of their own network synchronization model. If you’re already monitoring a control channel with solid reception, that timing data can be repurposed into something useful.

That makes P25Time interesting for:

It’s not a substitute for a PPS-disciplined lab standard, but it is a remarkably practical way to get very good network time from infrastructure that may already be on the air around you.

Running It

The binary is intentionally simple:

sudo ./P25Time -i rtl:0:771.18125M

By default, it binds its embedded NTP server to UDP/123, which is exactly what you want if you intend to point Linux time clients at it directly.

Once it has valid radio time, you can query it from another machine or from the same host with your preferred NTP tooling.

You can even sanity-check that it’s answering with a raw UDP query using nc:

(printf '\x23'; dd if=/dev/zero bs=1 count=47 2>/dev/null) | nc -u -w1 127.0.0.1 123 | wc -c

A correct NTP reply comes back as 48 bytes.

Real Uses for a Radio-Derived Time Source

This is where P25Time gets genuinely useful.

A control-channel-derived clock can help with:

  1. Network Time for Monitoring Systems

If you have one or more SDR hosts collecting recordings, event logs, or metadata, a shared local time source makes it much easier to align activity across machines.

  1. Multi-Site Correlation

Running several receivers at once is common in modern radio monitoring. If all of them are pointed at the same local NTP source, log correlation gets much cleaner.

  1. Indoor or GPS-Difficult Environments

If GPS reception is unreliable indoors, but a strong P25 control channel is available, P25Time can serve as a practical alternative timing reference.

  1. Backup Time Source

Even in systems that already use GPS or public NTP, redundancy matters. P25Time can make a good secondary or holdover-adjacent source for lab and hobby environments.

  1. Radio Network Analysis

Because the clock comes from the radio system itself, it also becomes a tool for observing the system’s timing quality. Comparing radio-derived UTC against GPS or another trusted source can reveal drift, offsets, or anomalies.

P25Time can be downloaded from: https://github.com/SarahRoseLives/P25Time