JG25 · The development story

A signal for voice radios.
A packet built for JSQ.

JG25 grew from two questions: how much useful data could travel through an ordinary FM microphone and speaker path, and how little packet overhead did JSQ actually need?

One part of the work shaped the tones around the radio. The other shaped the packet around the services. Error protection connected the two: a short, fast packet still had to arrive intact.

Part one · The tone story

Make the signal work through the radio we already have.

The constraint came first: use ordinary FM voice audio, including microphone pre-emphasis and receiver de-emphasis. A flat high-speed data port could not be a requirement.

Traditional 1,200-bit/s packet offered a starting point. Its two tones carry one bit per symbol. Four tones could carry two, giving 1,600 raw bit/s at only 800 symbols per second. That opened room to improve speed while adjusting how long the receiver had to recognize each symbol.

The first simulations showed the tradeoff immediately. Faster symbols produced more mistakes. With one fixed tone plan, the raw bit error rate rose from 0.030% at 800 symbols/s to 1.293% at 1,200 symbols/s. Those results narrowed the search, but the signal still had to survive the radio’s filters.

See the early speed comparison

Longer symbols made fewer raw bit errors

Lower is better · Raw bit errors (%)

  1. 800 symbols/s · 1,600 raw bit/s0.030%
  2. 960 symbols/s · 1,920 raw bit/s0.162%
  3. 1000 symbols/s · 2,000 raw bit/s0.225%
  4. 1200 symbols/s · 2,400 raw bit/s1.293%

Early simulation · 30,000 symbols per point · −2 dB sample-domain SNR · perfect timing and independent tone-energy decisions.

The audio path changed which tones worked.

Voice-radio audio is not flat. Its filters and emphasis change the relative strength of the tones, and the usable passband limits where they can sit. A four-tone plan that beat Bell 202 in one simulation lost that advantage when the modeled audio path narrowed.

So the search varied tone placement, spacing, and symbol rate together. Packing the tones too closely made them harder for the detector to separate. Moving them farther apart eventually pushed more energy toward the radio’s audio limits. The useful result was a family of seven tone plans, covering 1,200–2,400 raw bit/s.

Compare the early waveforms through two audio passbands

Scroll the table sideways to see every column. Keyboard: focus the table, then use the arrow keys.

Narrow audio filtering could erase the early advantage
Early waveformTypical-path bit errorsNarrow-path bit errors
Bell 2020.307%0.394%
4-FSK 16000.228%2.753%
4-FSK 19200.666%3.676%
4-FSK 20000.789%4.026%
4-FSK 24002.620%5.975%

Early simulation · −2 dB sample-domain SNR · 18,000 symbols × 3 runs per point · original 550/1,250/1,950/2,650-Hz four-tone plan, before later tone optimization. These are bit errors, not whole-packet losses.

See the spacing tests and selected tone plans

At 1,200 symbols/s, one sweep produced 10.110% bit errors with 350-Hz spacing, 1.337% at 700 Hz, and 1.548% at 750 Hz. Short ramps between tones also increased errors in a later channel simulation. These results apply to the tested receiver and settings.

Scroll the table sideways to see every column. Keyboard: focus the table, then use the arrow keys.

Selected FM tone plans: mode numbers are raw bit rates, not baud
ModeSymbols/s (baud)Tone centers (Hz)Adjacent spacing (Hz)
JG1200600500 / 1100 / 1700 / 2300600
JG1400700725 / 1275 / 1825 / 2375550
JG1600800775 / 1325 / 1875 / 2425550
JG1800900475 / 1125 / 1775 / 2425650
JG20001000525 / 1175 / 1825 / 2475650
JG22001100475 / 1125 / 1775 / 2425650
JG24001200500 / 1200 / 1900 / 2600700

Tone span is not occupied bandwidth. Later rendered-audio measurements placed 99% of the power in roughly 2.47–2.53 kHz for the three slowest modes, and up to 3.17 kHz for JG2400. These are audio bandwidths, not an FM transmitter’s occupied RF bandwidth.

Test methods and results · PDF p. 13

Real recordings revealed a receiver problem, too.

Recordings from an FT-8800-to-FT-817 path showed that higher tones were progressively weaker. Receive filtering could restore their levels, but simply making the tones equally loud was not enough. The filter’s timing behavior could also smear one symbol into the next.

That changed the direction of the work. Before replacing the tones, the same recorded packets were replayed through revised filters. Keeping the level correction almost identical but changing from a linear-phase to a minimum-phase filter raised successful decodes from one of 36 frames to 34 of 36. Much of the missing information was still in the recording.

A filter change recovered 34 of 36 recorded frames

More decoded frames is better

  1. Linear-phase +61 / 36 decoded
  2. Minimum-phase +634 / 36 decoded
  3. Minimum-phase +7.536 / 36 decoded

Saved-radio replay · the same 36 frames through each filter. The +6 comparisons keep tone-level correction nearly identical; +7.5 changes it too, so its final two recoveries cannot be attributed only to phase.

A phase-aware detector then used continuity across symbols, recovering all 18 previously failed JG2400 bodies while retaining the 21 successful controls. Improving the receiver made the existing transmitted signal more useful.

See the receiver replay results

The recorded path showed roughly −4.3 to −4.4 dB of receive tilt per octave. Initial receive conditioning recovered 8/8 JG2000-F1, 8/8 JG2000-F2, and 12/12 JG2400-F1 frames that had failed without it.

JG2400 body replay with the phase-aware detector
Recorded populationEarlier energy detectorPhase-aware detector
Previously failed JG2400 bodies (18 bodies)0 / 1818 / 18
Prior successful JG2400 controls (21 bodies)21 / 2121 / 21

Continuous packet detection, audio capture, and transmitter-keying fixes addressed separate faults. These are different replay populations; their counts cannot be pooled into an on-air reception rate.

Test methods and results · PDF p. 26

With the receiver repaired, the tones got another test.

Some higher tone plans had helped the earlier receiver. After the repairs, the selected JG1800 and JG2400 plans needed less signal than either candidate on all three modeled radio paths. JG2200 was close. The receiver changes had removed much of the reason to alter those transmitted tones.

JG2000 remained an exception. A 700 / 1,250 / 1,800 / 2,350-Hz candidate needed 1.7–2.4 dB less signal in simulation. The receiver fixes were retained, while the tone change was deferred pending radio testing. Keeping the existing format preserved compatibility; it did not make the candidate’s advantage disappear.

See all 90%-delivery thresholds for the retune comparison

These are SNR thresholds for 90% delivery of long F0 frames through fitted channel models; lower is better. They are simulations, not calibrated measurements at a radio’s RF input.

The WYN model was fitted to a recorded packet’s opening at the remote station. The median and per-frame models were fitted to FT-8800-to-FT-817 recordings: one uses a median radio response, the other individual frame responses.

Scroll the table sideways to see every column. Keyboard: focus the table, then use the arrow keys.

90%-delivery thresholds after receiver repairs: lower is better
ModeFitted channelSelected tones (dB)Candidate A (dB)Candidate B (dB)
JG1800WYN fit9.611.111.8
JG1800Median fit9.510.710.4
JG1800Per-frame fits9.69.910.0
JG2000WYN fit11.913.710.0
JG2000Median fit11.413.39.7
JG2000Per-frame fits11.912.99.5
JG2200WYN fit10.010.710.4
JG2200Median fit9.89.99.9
JG2200Per-frame fits9.99.810.0
JG2400WYN fit13.814.415.7
JG2400Median fit11.813.613.9
JG2400Per-frame fits12.713.913.8
See the exact candidate tone plans

Scroll the table sideways to see every column. Keyboard: focus the table, then use the arrow keys.

A and B are specific to each symbol rate
Symbols/sCandidateTone centers (Hz)
900A900 / 1350 / 1800 / 2250
900B925 / 1400 / 1875 / 2350
1000A1000 / 1500 / 2000 / 2500
1000B700 / 1250 / 1800 / 2350
1100A650 / 1250 / 1850 / 2450
1100B700 / 1300 / 1900 / 2500
1200A750 / 1325 / 1950 / 2600
1200B700 / 1350 / 2000 / 2650

Test methods and results · PDF p. 31

The tone work established how to carry bits through voice-radio audio. The packet work addressed what those bits needed to contain.

Part two · The packet and FEC story

Build the packet around what JSQ needs to do.

AX.25 already gave OpenJSQ a way to carry its services. AX1200 puts a JSQ envelope inside an AX.25 packet, preserving compatibility with existing packet equipment and digipeaters.

The native JG25 format offered a chance to examine that arrangement field by field. The aim was to strip the format down to the information the services actually needed: who sent the packet, where it was going, what operation it represented, and the identifiers or fragment information needed to handle it.

Those fields could live in one native envelope. Type-specific fields carry what each operation needs, with room for extensions. Addressing, integrity checks, and service information stayed; the separate AX.25 wrapper and general-purpose OFQ2 header did not have to travel with them.

Packet format comparison

From AX.25 to a native JG25 frame.

AX1200JSQ inside an AX.25 UI frame
Start flag
AX.25 link headerDestination · Source
Optional digipeaters
Control · PID
AX.25 information field
OFQ2 headerType · Flags · IDs
Sequence · Length
Optional fields
JSQ service dataChat · Mail · Files
Station actions
CRC-32CEnvelope check
FCSAX.25 check
End flag

AX.25 link fields wrap a separate OFQ2 service envelope. Existing AX.25 digipeaters can carry it.

JG25One native envelope for JSQ
Preamble + syncFind the packet
Protected radio headerSpeed · FEC · Body length
CRC-16 + header FEC
Native JG25 frame body · selectable FEC
Native headerVersion · Type · Addresses
Fields needed by this service
Optional extensions
JSQ service dataChat · Mail · Files
Station actions
CRC-32CBody check

One native envelope carries the addressing and service information. The modem supplies acquisition and error protection.

Schematic field groups in transmission order; widths do not represent bytes or airtime. The bearers encode shared services differently. JG25 header FEC is always present; F0 omits body FEC and F1–F3 add it. JG25 requires a compatible decoder.

AX1200 / OFQ2 format · Native JG25 format

A lean body still needed a dependable introduction.

A receiver must find the packet and learn how to decode it before the service data can matter. JG25 begins with a known preamble and sync pattern, followed by a short radio header carrying the speed, FEC setting, and body length.

Early tests could find the beginning but lose the header. Slowing and protecting this small part of the packet improved reception while leaving the body fast. At −6 dB in the isolated-header simulation, the selected 350-symbol/s header decoded 96.7% of the time, compared with 33.8% at 600 symbols/s.

See the header experiments and acquisition timings

A slower four-tone header beat longer alternatives

Higher is better · Headers decoded (%)

  1. 4-FSK 60033.8%
  2. 4-FSK 35096.7%
  3. 2-FSK 60054.2%
  4. 4-FSK 600 ×290.4%

Early simulation · isolated headers at −6 dB sample-domain SNR · same encoded information. This measures header success, not complete packets.

Scroll the table sideways to see every column. Keyboard: focus the table, then use the arrow keys.

Header airtime and decoding results
HeaderAirtime (ms)Decoded at −6 dBDecoded at −4 dB
4-FSK 60063.333.8%90.7%
4-FSK 42589.483.6%99.8%
4-FSK 40095.089.8%100.0%
4-FSK 375101.395.6%100.0%
4-FSK 350 — selected108.696.7%100.0%
2-FSK 600126.754.2%99.6%
4-FSK 600, repeat ×2126.790.4%100.0%

The opening uses 48 preamble symbols in NORMAL or 96 in ROBUST, plus 20 sync symbols, at 600 symbols/s. With the 38-symbol header at 350 symbols/s, that takes about 222 or 302 ms before the body, excluding keying delays.

In one separate burst-interference simulation at −6 dB, complete acquisition rose from 19.6% with NORMAL to 57.1% with ROBUST. Finding the whole opening is a different test from decoding an isolated header. No false starts were seen in 320 simulated recordings without packets; that finite run does not establish a zero false-alarm rate.

The header carries 16 information bits, CRC-16, and error-correcting redundancy with encoder termination: 76 coded bits in 38 four-tone symbols. Either acquisition profile can be received independently of the station’s transmit setting.

Test methods and results · PDF p. 19

Choose where extra bits are worth the airtime.

Making the packet lean did not mean removing protection. A damaged header can make the whole packet unreadable, so the header always has FEC. The body offers a choice: F0 for lower overhead, or F1–F3 to add error-correcting redundancy.

Interleaving spreads neighboring coded bits apart, helping the decoder cope with brief bursts of damage. The receiver also keeps confidence information about its decisions. CRC-32C then checks the decoded body for corruption. FEC attempts repair; the CRC checks the result, and JSQ file services can request another copy of blocks that still fail.

The experiments put a limit on a simple assumption: more coding did not always mean better reception. F3 needed the least signal at every speed in the later simulations, but F1 and F2 did not consistently improve on F0. Their extra airtime has to earn its place on the actual path.

See the FEC and interleaving comparisons

Spreading errors cut losses in this direct-waveform test

Lower is better · Frames lost (%)

  1. No interleaving54.7% failed
  2. 32-row interleaving20.3% failed

Early direct waveform/filter/decoder simulation · JG1800-F2 · −5 dB in that test’s SNR convention. This is frame error rate, not raw bit errors.

Scroll the table sideways to see every column. Keyboard: focus the table, then use the arrow keys.

The four body-protection choices
ProfileNominal codingResult in the later reference simulations
F0No body FEC; keeps an error-detection check (CRC-32C)Highest payload rate on clean paths.
F1About 3 data bits for every 4 coded bitsAbove JG1200, little improvement over F0; some speeds needed more signal.
F2About 2 data bits for every 3 coded bitsSome gains, with extra airtime; not consistently better at every speed.
F3About 1 data bit for every 2 coded bitsLowest signal threshold at every JG speed in the later reference sweep.

F1–F3 share a convolutional code. F1 and F2 omit selected coded bits to reduce overhead. The header interleaver uses 8 rows; coded bodies use 32. Direct tests of 64-, 128-, 256-, and 512-byte bodies favored 256 bytes as a practical compromise; the early estimate favoring 512 bytes did not hold up in direct tests.

Test methods and results · PDF p. 22

The two stories come together

More useful data, with choices for the path.

The result combined a four-tone signal fitted to voice-radio audio with a native packet carrying the information JSQ services need. A protected header and selectable body FEC let the receiver read each frame at the speed and protection it announces.

In the reference calculation, JG2400/F0 carried about 1,881 bit/s of useful payload over a complete waveform, compared with 926 bit/s for AX1200. That result reflects the waveform and packet format together; it does not isolate the savings from removing the AX.25 wrapper.

JG2400/F0 carries about twice AX1200’s waveform payload rate

Higher is better · Payload bit/s

  1. AX1200926 bit/s
  2. JG2400/F01,881.3 bit/s
  3. JG2400/F31,044.8 bit/s

Calculated over complete reference waveforms · 256-byte payloads · no retries or turnaround overhead. These are not measured whole-file transfer speeds.

Speed had a cost. On three fitted voice-radio models, JG2400/F0 needed about 3.4–3.9 dB more signal than AX1200 at 90% delivery. F3 reduced much of that gap while using more airtime. A lower mode number did not always need less signal with this receiver, so profile choice still depends on the path.

Compare payload rate and signal requirements at all seven speeds

Scroll the table sideways to see every column. Keyboard: focus the table, then use the arrow keys.

Protection changes both the rate and the signal needed
ModeF0 payload bit/sF0 threshold (dB)F3 payload bit/sF3 threshold (dB)
JG12001,047.46.33553.7-1.31
JG14001,199.32.00639.60.50
JG16001,345.74.91723.82.43
JG18001,486.83.43806.42.20
JG20001,622.95.88887.43.67
JG22001,754.44.50966.83.89
JG24001,881.36.751,044.85.60

Production-code simulation · 256-byte payloads · thresholds are medians across seven channel models at 90% delivery. Lower threshold is better. The median of seven thresholds is not a delivery guarantee on an individual channel. The complete F0/F1/F2/F3 matrices are in the PDF.

Compare JG25 and AX1200 on the three fitted radio channels

These are the WYN preamble model and the median and per-frame FT-8800-to-FT-817 models described in the retune comparison.

Scroll the table sideways to see every column. Keyboard: focus the table, then use the arrow keys.

The fast default paid a sensitivity cost on fitted voice-radio paths
Fitted channelAX1200 (dB)JG2400/F0 (dB)JG2400/F3 (dB)
WYN preamble fit8.9412.8010.90
Median radio fit8.4312.149.00
Per-frame radio fits8.4011.779.00

These rates include the packet opening, header, checks, and coding, but exclude turnarounds, acknowledgements, keying delays, retries, and application overhead. The thresholds come from software simulations, not calibrated RF sensitivity measurements. Most fitted models draw on one radio pair. This history covers FM development; it does not establish HF performance.

Each frame retains its own opening and protected header. Operators select the transmit speed and FEC, while JSQ services handle their transactions above the modem. The separation leaves room to improve the radio link without rebuilding the services that use it.

Test methods and results · PDF p. 35

Tests, methods, and sources

Follow the evidence further.

The report records the simulations, radio recordings, and receiver changes behind this story, using application snapshot 1cd39dea4441. Later builds may produce different results. The detailed tables above retain the reported values.

How to read the tests
Simulation

A computer model tests a controlled idea. A model fitted to a real radio is still a simulation.

Radio replay

A saved radio recording is decoded again. This isolates receiver changes without transmitting a new packet.

Over-air test

Radios transmit and receive new packets. Results depend on the radios, settings, and path tested.

A waveform is the sound sent over the radio; the receiver software turns it back into data. Both affect whether a packet arrives intact.

Read the results within each test. Bit error rate counts wrong bits; packet delivery counts complete, checked packets. Signal-to-noise ratio (SNR) describes signal strength relative to noise. Early sample-based SNR and later audio-band SNR use different definitions and cannot be compared directly.

Development timeline · August–October 2026

Scroll the table sideways to see every column. Keyboard: focus the table, then use the arrow keys.

JG25 development timeline
WhenQuestion or changeEvidence
15–16 AugCompare four-tone speeds and tone placementEarly simulation
18–20 AugInvestigate unequal tone levels and timing in radio audioRadio recordings and replay
26 AugIntegrate the modem and its seven-speed formatImplementation checks
31 AugImprove receive filtering without changing the transmitted signalRecorded-audio replay and follow-up bench tests
3–4 SepImprove packet detection and phase tracking; choose the F0 defaultRecorded-audio replay; default selection
8–10 SepKeep the transmitter keyed for the complete packetVirtual audio cable and on-air feedback
22–25 SepCompare receiver repairs with changes to the tonesRecorded-audio replay and radio-channel simulation
26 Sep–22 OctCompare all speeds and error-protection settingsRepeatable simulations using the modem code

Test methods and results · PDF p. 4

See the complete FM design summary

Scroll the table sideways to see every column. Keyboard: focus the table, then use the arrow keys.

JG25 FM design summary
PartSelected designPurpose
SoundContinuous-phase four-tone FSK; Gray mapping 00 / 01 / 11 / 10Two coded bits per symbol while preserving the carrier’s continuous cycle.
Speed family600–1,200 symbols/s; 1,200–2,400 raw coded bit/sProvide several rate and robustness choices.
Opening48 or 96 preamble symbols, plus 20 sync symbolsFind the packet and estimate how the radio has changed it.
Header350 symbols/s on 950 / 1,350 / 1,750 / 2,150-Hz tonesRead the instructions reliably before decoding the faster body.
Checks and codingHeader CRC-16, body CRC-32C, and optional F1–F3 FECDetect corrupted packets and offer error repair when useful.
Interleaving8-row header; 32-row coded bodySpread concentrated damage before error correction.
ReceiverConditioning, timing search, phase-aware detection, and channel compensationUse more of the information that survived the radio.
Speed-first defaultJG2400/F0Favor fast delivery on strong paths; retain other profiles for other conditions.
A short glossary
Baud / symbol rate
The number of timed symbol choices sent each second. Four-tone JG25 carries two coded bits in each symbol.
FSK
Frequency-shift keying: choosing among tones to represent data.
Preamble and sync
Known patterns that help the receiver locate and align a packet.
FEC
Forward error correction: extra structured bits that can repair some errors.
CRC
A cyclic redundancy check that detects accidental corruption after decoding.
Equalization / conditioning
Receiver processing that compensates for predictable changes introduced by the channel.
Phase
Where a signal is within its repeating cycle. Preserving it can help separate fast continuous-phase symbols.
SNR
Signal-to-noise ratio. Compare dB numbers only when tests use the same measurement convention.
Goodput
Useful data actually delivered per second, after all overhead, retries, and delays.

The reference simulations used the modem’s transmit and receive code, matched packets and noise seeds, and seven FM channel models. Their noise is measured in the 300–3,000-Hz audio band, with a documented exception for the double-de-emphasis model. They omit the measured transmit third harmonic; thresholds were interpolated from finite packet counts.

The full illustrated report

Read the methods, graphs, and comparison tables. The PDF is public; some links to underlying application files require repository access.

Read the report · PDFReturn to the overview

Source notes and methods · PDF p. 44 · JG25 specification · Back to JG25