M0LTE.Ms110d 0.4.1

dotnet add package M0LTE.Ms110d --version 0.4.1
                    
NuGet\Install-Package M0LTE.Ms110d -Version 0.4.1
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="M0LTE.Ms110d" Version="0.4.1" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="M0LTE.Ms110d" Version="0.4.1" />
                    
Directory.Packages.props
<PackageReference Include="M0LTE.Ms110d" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add M0LTE.Ms110d --version 0.4.1
                    
#r "nuget: M0LTE.Ms110d, 0.4.1"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package M0LTE.Ms110d@0.4.1
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=M0LTE.Ms110d&version=0.4.1
                    
Install as a Cake Addin
#tool nuget:?package=M0LTE.Ms110d&version=0.4.1
                    
Install as a Cake Tool

M0LTE.Ms110d

A managed MIL-STD-188-110D Appendix D 3 kHz serial-tone HF modem for .NET, extracted from the pdn-soundmodem packet-radio modem. Appendix D's NATO counterpart is STANAG 5069; this package implements most of its 3 kHz waveforms (WN0 to WN8 and WN13; not WN9 to WN12 or the wider bandwidths). It is not the older 3 kHz waveform of Appendix C and STANAG 4539. See Related standards. Give it bits and it gives you 9600 Hz audio on an 1800 Hz sub-carrier; give it audio and it gives you the bits back.

Type What it is
Ms110dModulator Bits to audio: autobaud preamble, scrambled data frames with mini-probes, EOM and EOT. Configured by Ms110dTxSettings (waveform number, short or long interleaver, K7 or K9 code, level, roll-off).
Ms110dDemodulator Audio to bits: preamble search, waveform identification, probe-trained decision-feedback equalisation with iterative turbo decoding. Raises BlockDecoded per interleaver block and BurstCompleted when a burst ends.
Ms110dMode, Ms110dTables The waveform table (WN0 to WN8 and WN13: Walsh, BPSK, QPSK, 8PSK, 16QAM) and the interop constants, transcribed from the standard.
Ms110dFraming, Ms110dInterleaver, Ms110dPuncture The bit pipeline on its own: EOM, tail-biting encode, puncture, interleave. Useful for scoring a received burst against what was sent.
  • Targets net10.0. Depends on M0LTE.Dsp and M0LTE.Fec. Its complex type, Complex32, is its own.
  • docs/waveforms.md lists every waveform's parameters (modulation, code rate, data rate, frame and probe lengths, interleaver spans, target SNRs) with page references into the standard.
  • Spec-first: every wire constant comes from the standard. Validated in simulation against the standard's own AWGN and Poor-channel performance masks, measured through M0LTE.HfChannel. Not yet proven against another implementation on air.
  • The public API is locked by a test and the package follows Semantic Versioning; see docs/versioning.md.

Install

dotnet add package M0LTE.Ms110d

Quick start

using M0LTE.Ms110d;

// Transmit: WN6 (QPSK, rate 1/2), short interleaver. Bits are bytes holding 0 or 1.
var tx = new Ms110dModulator(new Ms110dTxSettings { WaveformNumber = 6 });
float[] audio = tx.Modulate(payloadBits); // 9600 Hz, centred on 1800 Hz

// Receive: feed audio in any chunk size; decoded blocks arrive as events.
var rx = new Ms110dDemodulator();
rx.BlockDecoded += block => Consume(block.Bits);
rx.BurstCompleted += burst => Console.WriteLine($"burst over: {burst.Reason}");
rx.Process(audio);

The modem works at 9600 Hz only. Resample at the edges if your audio runs at another rate.

Licence

AGPL-3.0-or-later. See LICENSE and PROVENANCE.md.

Product Compatible and additional computed target framework versions.
.NET net10.0 is compatible.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (1)

Showing the top 1 NuGet packages that depend on M0LTE.Ms110d:

Package Downloads
pdn-soundmodem

Headless soundcard packet modem core: IL2P/AX.25 framing and FEC now; demodulators, KISS TCP and DCD to follow.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
0.4.1 67 10/30/2026
0.4.0 51 10/30/2026
0.3.0 165 10/26/2026
0.2.1 325 10/24/2026
0.2.0 169 10/24/2026
0.1.0 120 10/23/2026