Is there a complete and programming language independent specification available for the FT8 digital mode? Detailed enough to implement both transmit and receive SDR software from scratch in two different programming languages?

If not, for what popular digital modes are full (programming language and computer independent) specifications available?

The goal is to have a target for an advanced SDR programming exercise in an any arbitrary (Turing and computationally complete) programming language (such as Perl or Swift or Basic or ARM m0 assembly, etc.). This would be for the software equivalent of building ones own radio from basic components (L, C, R, FETs, tubes, wires, etc. -> lines-of-code of elementary ops)

Added: A specification for reliable very-weak-signal (below the noise floor) protocol that is legal to use in within the U.S. amateur bands is preferred. A specification that requires advanced programming and DSP knowledge is not a problem. I do not consider code (other than platform-agnostic algorithmic pseudo-code) or precompiled binaries to be a proper specification. It would be desirable to have the specification complete enough that two independent teams using two different programming languages and platforms could interoperate (communicate) using their implementations of the specified protocol.


I do have the specification for JT9 if that is of interest to you. It is currently in the form of a pdf. Would you like it emailed to you?

Or would you prefer I paste it on this forum as ASCII text (where the formatting is a bit strange, but...


The closest I could find to a specification for FT-8 was on the Wikipedia page for WSJT.

In answer to your second question. I lead an open source project that is designing an implementation of the DVB-S2 and DVB-S2X protocols for amateur terrestrial and space use. The uplink is frequency-division-multiple-access. The downlink is the time-division-multiplexed DVB signal. Advanced SDRs are pretty much a requirement here for both development and deployment.

The transport layer is not MPEG, but is another standard from DVB called GSE, for generic stream encapsulation. This allows IP data to be shipped over the DVB-S2/X link at much lower overhead, and allows for the operator to use voice, voice memo, text, image, video, or any other data that the application layer prepares. We will not be building in a low-rate codec. We have not been happy with codec performance in any amateur digital product. We recommend high rate CODEC2 or Opus, decided at the application layer.

We have really liked working with and learning about DVB-S2/X. You can find our project website at https://phase4ground.github.io/

Many amateur television enthusiasts have switched to DVB-T, so that's another substantial and completely specified open standard available to amateur radio experimenters.

All of these specifications (and many more) are open and available at https://www.dvb.org/

Our uplink is ~75kHz channels of M-ary minimum shift keying. The channels are received by a polyphase filter bank, which in and of itself is a wonderful area to work on.

There are channel assignments and we use Adaptive Coding and Modulation (this is included in the specification along with Constant Coding and Modulation and Variable Coding and Modulation modes). Your station will get as much throughput as possible depending on reported signal-to-noise ratios. Adjustments to coding and modulation will be autonomous.

It isn't necessary to limit research consideration to narrowband weak signal modes that I believe would require some reverse engineering to fully specify.


I don't believe FT8 has a complete specification besides the source code, which is openly available.

RTTY is an option. It doesn't need much of a specification since it's so damn simple.

PSK-31 is marginally less simple. ARRL hosts a specification, among others. The QPSK variant has very basic FEC.

On HF, I don't know what more exists which may qualify as "popular". If "you can find it on the air sometimes" is popular enough, then you have some more options:

There's FreeDV, though the modulation isn't really much more interesting than PSK-31 and there's no FEC. All the complexity here is in the codec.

There's a little Digital Radio Mondiale activity on HF, from WinDRM and EasyPAL. Ostensibly. I'm not sure if these programs really follow the DRM specification. You could always tune in to DRM broadcasters outside the amateur bands.

VHF has a few more options, kinda. DMR is well-specified, but uses AMBE, a proprietary codec. I can't find an official looking specification for D-STAR, but if you don't mind piecing some things together it's out there. It also uses AMBE. Finally there's P25: its standards seem to be downloadable if you search around. Again, proprietary codec.

I don't know about DMR and P25, but D-STAR has a bit in the header which indicates a raw data rather than voice payload. I don't know if you'll find any of this on the air, though I've heard of hams deploying it in special situations. Might be a possibility if you want something you can implement fully without proprietary components.

Alternately, you can offload the AMBE coding to a ThumbDV.

  • $\begingroup$ @hotpaw2 Absent other specification, "exercise" sounds like a very basic thing is wanted. I'd suggest tweaking the wording of your question. $\endgroup$ – Kevin Reid AG6YO Mar 1 '18 at 0:31
  • 2
    $\begingroup$ @hotpaw2 Well I can take out a sentence containing "beginner", but if you want a "modern mode", you really should edit the question to specify what "modern" means. And also realize that the intersection of "amateur radio" and "modern" is very small, and among that subset are mostly snowflake "amateur" implementations of ill-specified schemes. So you might not like what you get. $\endgroup$ – Phil Frost - W8II Mar 1 '18 at 1:33

Your Answer

By clicking "Post Your Answer", you acknowledge that you have read our updated terms of service, privacy policy and cookie policy, and that your continued use of the website is subject to these policies.

Not the answer you're looking for? Browse other questions tagged or ask your own question.