All Projects → tavildar → Ldpc

tavildar / Ldpc

C and MATLAB implementation for LDPC encoding and decoding

Projects that are alternatives of or similar to Ldpc

Fast ber
A C++11 ASN.1 BER Encoding and Decoding Library
Stars: ✭ 54 (-28.95%)
Mutual labels:  encoding, decoding
Hashids.net
A small .NET package to generate YouTube-like hashes from one or many numbers. Use hashids when you do not want to expose your database ids to the user.
Stars: ✭ 470 (+518.42%)
Mutual labels:  encoding, decoding
Libmorton
C++ header-only library with methods to efficiently encode/decode Morton codes in/from 2D/3D coordinates
Stars: ✭ 373 (+390.79%)
Mutual labels:  encoding, decoding
Xmorse
🌞 ~1.5Kb morse code library for all. 一个支持 Unicode 中文摩斯密码编码的 Javascript 库。
Stars: ✭ 266 (+250%)
Mutual labels:  encoding, decoding
Encoding
Go package containing implementations of efficient encoding, decoding, and validation APIs.
Stars: ✭ 705 (+827.63%)
Mutual labels:  encoding, decoding
Serpent
A protocol to serialize Swift structs and classes for encoding and decoding.
Stars: ✭ 281 (+269.74%)
Mutual labels:  encoding, decoding
Anycodable
Type-erased wrappers for Encodable, Decodable, and Codable values
Stars: ✭ 811 (+967.11%)
Mutual labels:  encoding, decoding
avro ex
An Avro Library that emphasizes testability and ease of use.
Stars: ✭ 47 (-38.16%)
Mutual labels:  encoding, decoding
Decodify
Detect and decode encoded strings, recursively.
Stars: ✭ 670 (+781.58%)
Mutual labels:  encoding, decoding
Pbf
A low-level, lightweight protocol buffers implementation in JavaScript.
Stars: ✭ 618 (+713.16%)
Mutual labels:  encoding, decoding
AnimatedGif
📼 A high performance .NET library for reading and creating animated GIFs
Stars: ✭ 106 (+39.47%)
Mutual labels:  encoding, decoding
Rust Multibase
Multibase in rust
Stars: ✭ 30 (-60.53%)
Mutual labels:  encoding, decoding
scure-base
Secure, audited & 0-deps implementation of bech32, base64, base32, base16 & base58
Stars: ✭ 27 (-64.47%)
Mutual labels:  encoding, decoding
Stegify
🔍 Go tool for LSB steganography, capable of hiding any file within an image.
Stars: ✭ 927 (+1119.74%)
Mutual labels:  encoding, decoding
velvet-video
Java library for encoding / decoding / muxing / demuxing video and audio in various formats
Stars: ✭ 32 (-57.89%)
Mutual labels:  encoding, decoding
Go Geom
Package geom implements efficient geometry types for geospatial applications.
Stars: ✭ 456 (+500%)
Mutual labels:  encoding, decoding
go-fixedwidth
Encoding and decoding for fixed-width formatted data
Stars: ✭ 64 (-15.79%)
Mutual labels:  encoding, decoding
sirdez
Glorious Binary Serialization and Deserialization for TypeScript.
Stars: ✭ 20 (-73.68%)
Mutual labels:  encoding, decoding
Flac
Free Lossless Audio Codec
Stars: ✭ 593 (+680.26%)
Mutual labels:  encoding, decoding
Scodec
Scala combinator library for working with binary data
Stars: ✭ 709 (+832.89%)
Mutual labels:  encoding, decoding

LDPC codes

This repository provides C and MATLAB implementations for LDPC codes.

For an overview of LDPC codes, please see: LDPC Wikipedia page or the book Modern Coding Theory by Tom Richardson and Rüdiger Urbanke.

Overview of what is provided

  • WiFi (IEEE 802.11n) LDPC code construction

  • Encoding by back-substitution for WiFi LDPC codes

  • Iterative belief propagation (BP) Decoding (including min-sum)

  • AWGN simulations for BPSK, 4-ASK, 8-ASK (equivalently QPSK, 16-QAM, and 64-QAM)

It is worth emphasizing the code is not necessarily specification compliant with IEEE 802.11n. In particular, aspects such as puncturing, padding, and stream parsing are not implemented.

Decoding performance

WiFi LDPC performance over QPSK WiFi LDPC performance over 16-QAM WiFi LDPC performance over 64-QAM

The figure above shows the performance of LDPC codes for various rates and constellation choices over AWGN channel.

The results are using LdpcC code, and are based on 50K runs.

Runtime performance C and MATLAB

The run time comparison is as follows (run on a single macbook pro 2015):

Comparison of number of runs per second
Parameters LdpcC LdpcM Speedup C/M
N = 648, rate = 1/2 67 12 5.5x
N = 1296, rate = 1/2 31 5.5 5.5x
N = 1944, rate = 1/2 21 2.81 7.5x

The above numbers are based on 20 iterations of the BP decoder without early termination. So, typically, one should see much better performance.

Code Interface

The key code is in class LdpcCode (C and MATLAB). The interface to this class is as follows:

  • load_wifi_ldpc

    • Input: block_length (= N), rate (or rate_index)
    • Output: None
    • Function: creates WiFi LDPC code with specified parameters.
  • encode

    • Inputs: info bits (length = K)
    • Output: coded bits (length = N)
    • Function: perform encoding by back substitution (the code is inspired from the code in simgunz)
  • decode

    • Input: llr vector, max iterations, min_sum algorithm
    • Output: decoded codeword (for WiFi codes, first K bits are the information bits)
    • Function: BP decoder (see Richardson-Urbanke)

Note that for speed up of simulation, it is assumed in the main file that if a given run (as in info bit and noise realizations) is decoded for a lower EbNo value, then it will be decoded for a higher EbNo value.

Bugs and support

The LdpcC code will not compile with libstdc++. The code only works with libc++.

The code is provided as is without any warranty (implicit or explicit) and without guarantee of correctness.

References

  1. Tom Richardson and Rudiger Urbanke, "Modern Coding Theory" https://www.amazon.com/Modern-Coding-Theory-Tom-Richardson/dp/0521852293
  2. simgunz 802.11n-ldpc Git repository https://github.com/simgunz/802.11n-ldpc
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].