Who Built This
Developer Background
Phoenix Nest Modem was built by a software developer with 35 years of programming experience and 15+ years of hands-on HF operations in the Military Auxiliary Radio System (MARS).
This isn't a theoretical implementation of a spec document — it's built by someone who has actually passed military-affiliate HF traffic and knows what the waveform needs to do in real-world conditions.
Credentials
Why free? MARS exists to provide emergency communications when commercial infrastructure fails. The amateur and emergency comms community needs access to interoperable, standards-compliant tools — not paywalls. This is my contribution to that mission.
Phoenix Nest HF Modem
Software implementation of the MIL-STD-188-110A Appendix C waveform. Free for amateur, emergency, marine, and personal use. Interoperable with compliant military and commercial systems.
Waveform Specifications
MODULATION
- Type8PSK
- Symbol Rate2400 baud
- Bits/Symbol3
- Raw Rate7200 bps
- Carrier1800 Hz
- Bandwidth2400–3000 Hz
FORWARD ERROR CORRECTION
- CodingConvolutional
- Constraint LengthK=7
- Code Rate1/2
- PolynomialsG1=171, G2=133
- DecoderSoft Viterbi
- Coding Gain~5 dB
INTERLEAVING
- Short0.6 sec
- Long4.8 sec
- TypeBlock
- Rows (Short)40
- Rows (Long)320
- Columns36
SYNCHRONIZATION
- PreambleDoppler/Sync
- Known Data16 symbols/frame
- Sync PatternPer MIL-STD
- Acquisition<2 sec typ.
- Doppler Tol.±37.5 Hz
- Timing Tol.±100 ppm
Data Modes
| MODE | DATA RATE | BPS/SYMBOL | REPEAT | Eb/N0 REQ | SHORT INTLV | LONG INTLV | RECOMMENDED USE |
|---|---|---|---|---|---|---|---|
| 1 | 75 bps | 0.0625 | 16× | −3 dB | ✓ | ✓ | Extreme conditions, maximum reliability |
| 2 | 150 bps | 0.125 | 8× | 0 dB | ✓ | ✓ | Poor conditions, short messages |
| 3 | 300 bps | 0.25 | 4× | 3 dB | ✓ | ✓ | General purpose, most common |
| 4 | 600 bps | 0.5 | 2× | 6 dB | ✓ | ✓ | Fair conditions, file transfer |
| 5 | 1200 bps | 1 | 1× | 9 dB | ✓ | ✓ | Good conditions, larger files |
| 6 | 2400 bps | 2 | — | 12 dB | ✓ | ✓ | Very good conditions |
| 7 | 4800 bps | 4 | — | 15 dB | ✓ | ✓ | Excellent conditions, max throughput |
Note: Eb/N0 requirements are approximate for BER < 10⁻³ in AWGN. Real HF channels with fading may require 3–10 dB additional margin. Long interleave provides ~3 dB improvement in fading channels.
Frame Structure
287 sym
256 sym
256 sym
20 sym
K-1
Preamble (287 symbols)
Doppler estimation and symbol timing acquisition. Contains alternating tones for coarse frequency offset detection followed by sync pattern for frame alignment.
Data Frame (256 symbols)
240 data symbols + 16 known symbols for channel estimation. Known symbols enable adaptive equalization and coherent demodulation in fading channels.
TCP/IP Integration (MS-DMT Protocol)
Data Port: TCP 4998
Raw data transfer. Send bytes to transmit, receive decoded bytes. Buffered operation with flow control.
telnet localhost 4998
Control Port: TCP 4999
Command interface for modem control. Text-based protocol, CR/LF terminated.
telnet localhost 4999
Control Commands
| COMMAND | PARAMETERS | RESPONSE | DESCRIPTION |
|---|---|---|---|
| MODE | 1–7 | OK / ERROR | Set data rate mode |
| INTERLEAVE | SHORT / LONG | OK / ERROR | Set interleaver depth |
| PTT | ON / OFF | OK | Key/unkey transmitter |
| STATUS | — | JSON | Current state, SNR, sync status |
| ABORT | — | OK | Abort current transmission |
| RESET | — | OK | Reset modem to idle state |
Example: Python Integration
import socket
# Connect to control port
ctrl = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
ctrl.connect(('127.0.0.1', 4999))
# Configure modem
ctrl.send(b'MODE 3\r\n') # 300 bps
print(ctrl.recv(64).decode()) # OK
ctrl.send(b'INTERLEAVE LONG\r\n') # 4.8 sec interleaver
print(ctrl.recv(64).decode()) # OK
ctrl.send(b'STATUS\r\n')
print(ctrl.recv(1024).decode()) # {"state":"IDLE","mode":3,"snr":null,...}
# Connect to data port for TX/RX
data = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
data.connect(('127.0.0.1', 4998))
data.send(b'DE W1XYZ TEST MESSAGE 73')
# PTT handled automatically when data sent, or manually:
ctrl.send(b'PTT ON\r\n')
System Requirements
Interoperability
Phoenix Nest Modem implements MIL-STD-188-110A Appendix C and is designed to interoperate with:
- Harris AN/PRC-150, AN/PRC-152, RF-7800 series
- Rockwell Collins AN/ARC-210, AN/PRC-117G
- Thales AN/PRC-148
- Rohde & Schwarz M3SR series
- Other MIL-STD-188-110A Appendix C compliant modems
- STANAG 4539 compatible systems (extended waveform overlap)
Note: This software is not DoD-affiliated or certified. Interoperability is based on standard compliance, not formal testing with specific military hardware. Community testing results welcome—submit your results.
Download
CURRENT RELEASE
- Version1.0.0
- Released2025-01-15
- Size4.2 MB
- PlatformWindows x64
- LicenseFreeware
VERIFICATION
- SHA-256 [CHECKSUM_PLACEHOLDER]
Verify download integrity before installation. See verification instructions.
Active Development — Your Support Helps
Phoenix Nest Modem is under active development. The test results below show exactly where we are—what's working, what's not, and where we need to focus. This transparency helps you understand what you're getting and where your donations go.
Test Results — Build 65
✓ What's Working
- Clean/AWGN channels: 83% pass rate
- 150–1200 bps modes: 73–91% in good conditions
- MLSE equalizers: Best performers (L2, L3)
- Long interleave: Consistent improvement
- Low frequency offset (±1 Hz): 79% pass
- Multipath (48 sample): 77% pass
✗ Known Issues — Work Needed
- 75 bps mode: 0% — Completely broken
- Poor HF channel: 0% — Critical gap
- 5 Hz freq offset: 17% — AFC needs work
- 2400 bps modes: 45–73% — Unstable
- Moderate HF: 65% — Needs improvement
- Multipath (24 samp): 67% — EQ tuning
Performance by Channel Condition
Tests run across 11 simulated channel conditions. Pass = BER < threshold for the mode.
| CHANNEL | DESCRIPTION | PASSED | FAILED | PASS RATE | STATUS |
|---|---|---|---|---|---|
| clean | No impairments, ideal conditions | 70 | 14 | 83.3% | GOOD |
| awgn_15db | AWGN, 15 dB SNR | 70 | 14 | 83.3% | GOOD |
| awgn_20db | AWGN, 20 dB SNR | 70 | 14 | 83.3% | GOOD |
| awgn_25db | AWGN, 25 dB SNR | 70 | 14 | 83.3% | GOOD |
| awgn_30db | AWGN, 30 dB SNR | 70 | 14 | 83.3% | GOOD |
| foff_1hz | Frequency offset ±1 Hz | 66 | 18 | 78.6% | OK |
| mp_48samp | Multipath, 48 sample delay | 65 | 19 | 77.4% | OK |
| mp_24samp | Multipath, 24 sample delay | 56 | 28 | 66.7% | FAIR |
| moderate_hf | Simulated moderate HF fading | 55 | 29 | 65.5% | FAIR |
| foff_5hz | Frequency offset ±5 Hz | 14 | 70 | 16.7% | FAILING |
| poor_hf | Simulated poor HF (deep fading) | 0 | 84 | 0.0% | BROKEN |
Performance by Data Mode
Aggregated across all equalizers. Best equalizer shown for each mode.
| MODE | RATE | SHORT INTLV | LONG INTLV | BEST EQUALIZER | AVG BER | STATUS |
|---|---|---|---|---|---|---|
| 1 | 75 bps | 0% | 0% | — | 1.00 | BROKEN |
| 2 | 150 bps | 82–91% | 82–91% | DFE, MLSE_L2 | 9.09e-02 | GOOD |
| 3 | 300 bps | 82% | 82–91% | MLSE_L3 | 9.09e-02 | GOOD |
| 4 | 600 bps | 73–91% | 82–91% | MLSE_L3, NONE | 9.09e-02 | GOOD |
| 5 | 1200 bps | 73–91% | 82–91% | MLSE_L2, MLSE_L3 | 9.09e-02 | GOOD |
| 6 | 2400 bps | 45–73% | 55–82% | DFE, MLSE_L3 | 1.50e-01 | UNSTABLE |
| 7 | 4800 bps | Not yet implemented in test suite | ||||
Equalizer Performance Comparison
7 equalizer implementations tested. MLSE variants showing best overall results.
Development Roadmap
Fix 75 bps Mode
Symbol timing recovery failing at lowest data rate. Likely sync acquisition issue.
Poor HF Channel Support
0% pass rate in severe fading. Need improved channel estimation and long interleave effectiveness.
Improve AFC (Frequency Tracking)
5 Hz offset causes 83% failure. AFC loop needs tuning for real-world Doppler.
Stabilize 2400 bps Mode
Pass rates vary 45–82% depending on conditions. Equalizer selection logic needs work.
Implement 4800 bps Mode
Highest throughput mode not yet in test suite. Requires 16-QAM support.
Real HF On-Air Testing
Move beyond simulation to actual HF propagation tests with partner stations.
Help Us Get to 100%
Every donation goes directly toward development time, test equipment, and the AI coding tools that accelerate this work. You're not just supporting software—you're helping build free infrastructure for emergency and amateur communications.
Who Built This
Developer Background
Phoenix Nest Modem was built by a software developer with 35 years of programming experience and 15+ years of hands-on HF operations in the Military Auxiliary Radio System (MARS).
This isn't a theoretical implementation of a spec document — it's built by someone who has actually passed military-affiliate HF traffic and knows what the waveform needs to do in real-world conditions.
Credentials
Why free? MARS exists to provide emergency communications when commercial infrastructure fails. The amateur and emergency comms community needs access to interoperable, standards-compliant tools — not paywalls. This is my contribution to that mission.
Phoenix Nest HF Modem
Software implementation of the MIL-STD-188-110A Appendix C waveform. Free for amateur, emergency, marine, and personal use. Interoperable with compliant military and commercial systems.
Waveform Specifications
MODULATION
- Type8PSK
- Symbol Rate2400 baud
- Bits/Symbol3
- Raw Rate7200 bps
- Carrier1800 Hz
- Bandwidth2400–3000 Hz
FORWARD ERROR CORRECTION
- CodingConvolutional
- Constraint LengthK=7
- Code Rate1/2
- PolynomialsG1=171, G2=133
- DecoderSoft Viterbi
- Coding Gain~5 dB
INTERLEAVING
- Short0.6 sec
- Long4.8 sec
- TypeBlock
- Rows (Short)40
- Rows (Long)320
- Columns36
SYNCHRONIZATION
- PreambleDoppler/Sync
- Known Data16 symbols/frame
- Sync PatternPer MIL-STD
- Acquisition<2 sec typ.
- Doppler Tol.±37.5 Hz
- Timing Tol.±100 ppm
Data Modes
| MODE | DATA RATE | BPS/SYMBOL | REPEAT | Eb/N0 REQ | SHORT INTLV | LONG INTLV | RECOMMENDED USE |
|---|---|---|---|---|---|---|---|
| 1 | 75 bps | 0.0625 | 16× | −3 dB | ✓ | ✓ | Extreme conditions, maximum reliability |
| 2 | 150 bps | 0.125 | 8× | 0 dB | ✓ | ✓ | Poor conditions, short messages |
| 3 | 300 bps | 0.25 | 4× | 3 dB | ✓ | ✓ | General purpose, most common |
| 4 | 600 bps | 0.5 | 2× | 6 dB | ✓ | ✓ | Fair conditions, file transfer |
| 5 | 1200 bps | 1 | 1× | 9 dB | ✓ | ✓ | Good conditions, larger files |
| 6 | 2400 bps | 2 | — | 12 dB | ✓ | ✓ | Very good conditions |
| 7 | 4800 bps | 4 | — | 15 dB | ✓ | ✓ | Excellent conditions, max throughput |
Note: Eb/N0 requirements are approximate for BER < 10⁻³ in AWGN. Real HF channels with fading may require 3–10 dB additional margin. Long interleave provides ~3 dB improvement in fading channels.
Frame Structure
287 sym
256 sym
256 sym
20 sym
K-1
Preamble (287 symbols)
Doppler estimation and symbol timing acquisition. Contains alternating tones for coarse frequency offset detection followed by sync pattern for frame alignment.
Data Frame (256 symbols)
240 data symbols + 16 known symbols for channel estimation. Known symbols enable adaptive equalization and coherent demodulation in fading channels.
TCP/IP Integration (MS-DMT Protocol)
Data Port: TCP 4998
Raw data transfer. Send bytes to transmit, receive decoded bytes. Buffered operation with flow control.
telnet localhost 4998
Control Port: TCP 4999
Command interface for modem control. Text-based protocol, CR/LF terminated.
telnet localhost 4999
Control Commands
| COMMAND | PARAMETERS | RESPONSE | DESCRIPTION |
|---|---|---|---|
| MODE | 1–7 | OK / ERROR | Set data rate mode |
| INTERLEAVE | SHORT / LONG | OK / ERROR | Set interleaver depth |
| PTT | ON / OFF | OK | Key/unkey transmitter |
| STATUS | — | JSON | Current state, SNR, sync status |
| ABORT | — | OK | Abort current transmission |
| RESET | — | OK | Reset modem to idle state |
Example: Python Integration
import socket
# Connect to control port
ctrl = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
ctrl.connect(('127.0.0.1', 4999))
# Configure modem
ctrl.send(b'MODE 3\r\n') # 300 bps
print(ctrl.recv(64).decode()) # OK
ctrl.send(b'INTERLEAVE LONG\r\n') # 4.8 sec interleaver
print(ctrl.recv(64).decode()) # OK
ctrl.send(b'STATUS\r\n')
print(ctrl.recv(1024).decode()) # {"state":"IDLE","mode":3,"snr":null,...}
# Connect to data port for TX/RX
data = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
data.connect(('127.0.0.1', 4998))
data.send(b'DE W1XYZ TEST MESSAGE 73')
# PTT handled automatically when data sent, or manually:
ctrl.send(b'PTT ON\r\n')
System Requirements
Interoperability
Phoenix Nest Modem implements MIL-STD-188-110A Appendix C and is designed to interoperate with:
- Harris AN/PRC-150, AN/PRC-152, RF-7800 series
- Rockwell Collins AN/ARC-210, AN/PRC-117G
- Thales AN/PRC-148
- Rohde & Schwarz M3SR series
- Other MIL-STD-188-110A Appendix C compliant modems
- STANAG 4539 compatible systems (extended waveform overlap)
Note: This software is not DoD-affiliated or certified. Interoperability is based on standard compliance, not formal testing with specific military hardware. Community testing results welcome—submit your results.
Download
CURRENT RELEASE
- Version1.0.0
- Released2025-01-15
- Size4.2 MB
- PlatformWindows x64
- LicenseFreeware
VERIFICATION
- SHA-256 [CHECKSUM_PLACEHOLDER]
Verify download integrity before installation. See verification instructions.
Active Development — Your Support Helps
Phoenix Nest Modem is under active development. The test results below show exactly where we are—what's working, what's not, and where we need to focus. This transparency helps you understand what you're getting and where your donations go.
Test Results — Build 65
✓ What's Working
- Clean/AWGN channels: 83% pass rate
- 150–1200 bps modes: 73–91% in good conditions
- MLSE equalizers: Best performers (L2, L3)
- Long interleave: Consistent improvement
- Low frequency offset (±1 Hz): 79% pass
- Multipath (48 sample): 77% pass
✗ Known Issues — Work Needed
- 75 bps mode: 0% — Completely broken
- Poor HF channel: 0% — Critical gap
- 5 Hz freq offset: 17% — AFC needs work
- 2400 bps modes: 45–73% — Unstable
- Moderate HF: 65% — Needs improvement
- Multipath (24 samp): 67% — EQ tuning
Performance by Channel Condition
Tests run across 11 simulated channel conditions. Pass = BER < threshold for the mode.
| CHANNEL | DESCRIPTION | PASSED | FAILED | PASS RATE | STATUS |
|---|---|---|---|---|---|
| clean | No impairments, ideal conditions | 70 | 14 | 83.3% | GOOD |
| awgn_15db | AWGN, 15 dB SNR | 70 | 14 | 83.3% | GOOD |
| awgn_20db | AWGN, 20 dB SNR | 70 | 14 | 83.3% | GOOD |
| awgn_25db | AWGN, 25 dB SNR | 70 | 14 | 83.3% | GOOD |
| awgn_30db | AWGN, 30 dB SNR | 70 | 14 | 83.3% | GOOD |
| foff_1hz | Frequency offset ±1 Hz | 66 | 18 | 78.6% | OK |
| mp_48samp | Multipath, 48 sample delay | 65 | 19 | 77.4% | OK |
| mp_24samp | Multipath, 24 sample delay | 56 | 28 | 66.7% | FAIR |
| moderate_hf | Simulated moderate HF fading | 55 | 29 | 65.5% | FAIR |
| foff_5hz | Frequency offset ±5 Hz | 14 | 70 | 16.7% | FAILING |
| poor_hf | Simulated poor HF (deep fading) | 0 | 84 | 0.0% | BROKEN |
Performance by Data Mode
Aggregated across all equalizers. Best equalizer shown for each mode.
| MODE | RATE | SHORT INTLV | LONG INTLV | BEST EQUALIZER | AVG BER | STATUS |
|---|---|---|---|---|---|---|
| 1 | 75 bps | 0% | 0% | — | 1.00 | BROKEN |
| 2 | 150 bps | 82–91% | 82–91% | DFE, MLSE_L2 | 9.09e-02 | GOOD |
| 3 | 300 bps | 82% | 82–91% | MLSE_L3 | 9.09e-02 | GOOD |
| 4 | 600 bps | 73–91% | 82–91% | MLSE_L3, NONE | 9.09e-02 | GOOD |
| 5 | 1200 bps | 73–91% | 82–91% | MLSE_L2, MLSE_L3 | 9.09e-02 | GOOD |
| 6 | 2400 bps | 45–73% | 55–82% | DFE, MLSE_L3 | 1.50e-01 | UNSTABLE |
| 7 | 4800 bps | Not yet implemented in test suite | ||||
Equalizer Performance Comparison
7 equalizer implementations tested. MLSE variants showing best overall results.
Development Roadmap
Fix 75 bps Mode
Symbol timing recovery failing at lowest data rate. Likely sync acquisition issue.
Poor HF Channel Support
0% pass rate in severe fading. Need improved channel estimation and long interleave effectiveness.
Improve AFC (Frequency Tracking)
5 Hz offset causes 83% failure. AFC loop needs tuning for real-world Doppler.
Stabilize 2400 bps Mode
Pass rates vary 45–82% depending on conditions. Equalizer selection logic needs work.
Implement 4800 bps Mode
Highest throughput mode not yet in test suite. Requires 16-QAM support.
Real HF On-Air Testing
Move beyond simulation to actual HF propagation tests with partner stations.
Help Us Get to 100%
Every donation goes directly toward development time, test equipment, and the AI coding tools that accelerate this work. You're not just supporting software—you're helping build free infrastructure for emergency and amateur communications.