This codec uses the quasi-cyclic (QC) LCPC checksum arrays used in IEEE Std 802.11-2016, Annex F. These are currently used for forward error correction for 802.11 n, ac, and h devices. Why? Not only because they have of course been tested extensively, but the spec also has test data to validate any new software implementation.
The codec uses the Log Likelihood Sum-Product algorithm, so should prove to be very effective in signal reconstruction and sensitivity.
npm i --save https://github.com/ishmal/ldpc
import { Ldpc } from "ldpc";
const codec = new Ldpc.LdpcCodec();
codec.withCrc = true/false; //defaults to true
codec.setCode("1/2", "648"); // default
codec.setCode("1/2", "1296");
codec.setCode("1/2", "1944");
codec.setCode("2/3", "648");
codec.setCode("2/3", "1296");
codec.setCode("2/3", "1944");
codec.setCode("3/4", "648");
codec.setCode("3/4", "1296");
codec.setCode("3/4", "1944");
codec.setCode("3/4", "648");
codec.setCode("3/4", "1296");
codec.setCode("3/4", "1944");
codec.encodeBytes(byteArray);
or
codec.encodeText(string);
will break the input data into chunks that fit in codewords, encode each one, are return an array of bit arrays for transmitting over an AWGN channel.
This kind of transport is called a "binary input channel." What comes out of the encoder as 1's and 0's is turned into analog levels for transmission.
On the receiving side, we expect arrays of floats for each message, centered around 0, < 0 for 1, >= 0 for 0.
codec.decode(array of bits); //returns an array of bytes
or
codec.decodeText(array of bits); // returns a string
- Look at the tests to see how it is done.
- Feel free to ask me any questions.
Hope that this helps you in your signal processing project. If you have any ideas on how to improve this library, please let me know.
Thanks!