All Projects → robmaunder → Polar 3gpp Matlab

robmaunder / Polar 3gpp Matlab

Licence: gpl-3.0
Matlab simulations of the encoder and SCL decoder for the New Radio polar code from 3GPP Release 15

Programming Languages

matlab
3953 projects

Projects that are alternatives of or similar to Polar 3gpp Matlab

Iced
Blazing fast and correct x86/x64 disassembler, assembler, decoder, encoder for .NET, Rust, Python, JavaScript
Stars: ✭ 1,102 (+1544.78%)
Mutual labels:  decoder, encoder
Json Rust
JSON implementation in Rust
Stars: ✭ 395 (+489.55%)
Mutual labels:  decoder, encoder
Tiny Utf8
Unicode (UTF-8) capable std::string
Stars: ✭ 322 (+380.6%)
Mutual labels:  decoder, encoder
He
A robust HTML entity encoder/decoder written in JavaScript.
Stars: ✭ 2,973 (+4337.31%)
Mutual labels:  decoder, encoder
Ffjpeg
a simple jpeg codec.
Stars: ✭ 58 (-13.43%)
Mutual labels:  decoder, encoder
Keras Transformer
Transformer implemented in Keras
Stars: ✭ 273 (+307.46%)
Mutual labels:  decoder, encoder
Ffmpegcommand
FFmpegCommand适用于Android的FFmpeg命令库,实现了对音视频相关的处理,能够快速的处理音视频,大概功能包括:音视频剪切,音视频转码,音视频解码原始数据,音视频编码,视频转图片或gif,视频添加水印,多画面拼接,音频混音,视频亮度和对比度,音频淡入和淡出效果等
Stars: ✭ 394 (+488.06%)
Mutual labels:  decoder, encoder
AnimatedGif
📼 A high performance .NET library for reading and creating animated GIFs
Stars: ✭ 106 (+58.21%)
Mutual labels:  encoder, decoder
Py Ubjson
Universal Binary JSON draft-12 serializer for Python
Stars: ✭ 30 (-55.22%)
Mutual labels:  decoder, encoder
Xmlcoder
Easy XML parsing using Codable protocols in Swift
Stars: ✭ 460 (+586.57%)
Mutual labels:  decoder, encoder
Encore
Synonym of angkor
Stars: ✭ 19 (-71.64%)
Mutual labels:  decoder, encoder
Jave2
The JAVE (Java Audio Video Encoder) library is Java wrapper on the ffmpeg project
Stars: ✭ 570 (+750.75%)
Mutual labels:  decoder, encoder
Flask Session Cookie Manager
🍪 Flask Session Cookie Decoder/Encoder
Stars: ✭ 257 (+283.58%)
Mutual labels:  decoder, encoder
Ultrajson
Ultra fast JSON decoder and encoder written in C with Python bindings
Stars: ✭ 3,504 (+5129.85%)
Mutual labels:  decoder, encoder
IkigaJSON
A high performance JSON library in Swift
Stars: ✭ 316 (+371.64%)
Mutual labels:  encoder, decoder
Flif
Free Lossless Image Format
Stars: ✭ 3,668 (+5374.63%)
Mutual labels:  decoder, encoder
morse-pro
Library for manipulating Morse code text and sound. Understands prosigns and Farnsworth speed. Can create WAV files and analyse input from the microphone or audio files.
Stars: ✭ 85 (+26.87%)
Mutual labels:  encoder, decoder
schifra
C++ Reed Solomon Error Correcting Library https://www.schifra.com
Stars: ✭ 28 (-58.21%)
Mutual labels:  encoder, decoder
Utf8.js
A robust JavaScript implementation of a UTF-8 encoder/decoder, as defined by the Encoding Standard.
Stars: ✭ 449 (+570.15%)
Mutual labels:  decoder, encoder
Paseto
Platform-Agnostic Security Tokens implementation in GO (Golang)
Stars: ✭ 461 (+588.06%)
Mutual labels:  decoder, encoder

polar-3gpp-matlab

Matlab simulations of the encoder and Successive Cancellation List (SCL) decoder for the New Radio polar code from 3GPP Release 15, as defined in TS38.212 V15.2.0 and used in the Public Broadcast Channel (PBCH), Physical Downlink Control Channel (PDCCH) and Physical Uplink Control Channel (PUCCH).

This code is intended to provide a reference model for the standard and has been written with a focus on correctness, rather than on simulation speed. This code is also intended to provide a platform for research on enhancements to the New Radio polar code. This motivates the inclusion of the custom1_encoder and custom1_decoder, alongside encoders and decoders for the New Radio PBCH, PDCCH and PUCCH channels. In particular, custom1_encoder and custom1_decoder adapt the New Radio polar code for general purpose applications, enabling support for arbitrarily-high information block lengths A. By contrast, the longest block lengths supported in the New Radio PBCH, PDCCH and PUCCH channels are 32, 140 and 1706 bits, respectively.

Block Diagram

PBCH Plot of Block Error Rate (BLER) versus channel Signal to Noise Ratio (SNR) Es/N0 for the Public Broadcast Channel (PBCH) polar code of 3GPP New Radio, when using Quadrature Phase Shift Keying (QPSK) for communication over an Additive White Gaussian Noise (AWGN) channel. Here, A is the number of bits in each information block, E is the number of bits in each encoded block and L is the list size used during min-sum Successive Cancellation List (SCL) decoding. The simulation of each SNR was continued until 1000 block errors were observed. Capacity plots are provided by the O(n−2) metaconverse PPV upper bound. PDCCH Plot of Signal to Noise Ratio (SNR) Es/N0 required to achieve a Block Error Rate (BLER) of 10-3 versus number bits in each information block A for the Physical Downlink Control Channel (PDCCH) polar code of 3GPP New Radio, when using Quadrature Phase Shift Keying (QPSK) for communication over an Additive White Gaussian Noise (AWGN) channel. Here, E is the number of bits in each encoded block and L is the list size used during min-sum Successive Cancellation List (SCL) decoding. The simulation of each SNR was continued until 100 block errors were observed. Capacity plots are provided by the O(n−2) metaconverse PPV upper bound.
PUCCH Plot of Signal to Noise Ratio (SNR) Es/N0 required to achieve a Block Error Rate (BLER) of 10-3 versus number bits in each information block A for the Physical Uplink Control Channel (PUCCH) polar code of 3GPP New Radio, when using Quadrature Phase Shift Keying (QPSK) for communication over an Additive White Gaussian Noise (AWGN) channel. Here, G is the number of bits in each encoded block and L is the list size used during min-sum Successive Cancellation List (SCL) decoding. The simulation of each SNR was continued until 100 block errors were observed. Capacity plots are provided by the O(n−2) metaconverse PPV upper bound.

The capacity plots in the Figures above were obtained using the O(n−2) metaconverse PPV upper bound from the SPECTRE Short Packet Communication Toolbox. If you use these results, please acknowledge them with a reference to...

T. Erseghe, "Coding in the Finite-Blocklength Regime: Bounds Based on Laplace Integrals and Their Asymptotic Approximations", IEEE Transactions on Information Theory, vol. 62, no. 12, pp. 6854 - 6883, Dec. 2016.

Section of TS38.212 Implemented in Comment
5.1 components/get_crc_generator_matrix.m The CRC bits are generated using b = [a, mod(a*G_P, 2)].
5.2.1 PUCCH_encoder.m The first and second segments are obtained as a(1:floor(A/C)) and a(floor(A/C)+1:A), respectively.
5.3.1 components/get_3GPP_N.m
5.3.1.1 components/get_3GPP_crc_interleaver_pattern.m Interleaving is implemented using c_prime = c(Pi).
5.3.1.2 Q0N-1 components/get_3GPP_sequence_pattern.m The elements of Q0N-1 are incremented by 1, since indices begin at 1 in Matlab.
5.3.1.2 QPCN components/get_PC_bit_pattern.m Provides a vector of N elements, in which the elements with the indices QPCN are set to true and all other elements are set to false.
5.3.1.2 u components/PCCA_polar_encoder.m Other components/*_polar_encoder.m files are also useful for special cases without PC bits, without CRC bits or with distributed CRC bits.
5.3.1.2 GN components/get_G_N.m Encoding is implemented using d = mod(u*G_N, 2).
5.4.1.1 P(i) components/get_3GPP_rate_matching_pattern.m
5.4.1.1 QIN components/get_3GPP_info_bit_pattern.m Provides a vector of N elements, in which the elements with the indices QIN are set to true and all other elements are set to false.
5.4.1.2 components/get_3GPP_rate_matching_pattern.m Rate matching is implemented using e = d(rate_matching_pattern).
5.4.1.3 components/get_3GPP_channel_interleaver_pattern.m Interleaving is implemented using f = e(channel_interleaver_pattern).
5.5 PUCCH_encoder.m The first and second segments are concatenated using f = [f, ...].
6.3.1.2.1 PUCCH_encoder.m
6.3.1.3.1 PUCCH_encoder.m
6.3.1.4.1 PUCCH_encoder.m Rate matching is implemented, but not the determination of EUCI.
6.3.1.5 PUCCH_encoder.m
6.3.2.2.1 PUCCH_encoder.m
6.3.2.3.1 PUCCH_encoder.m
6.3.2.4.1 PUCCH_encoder.m Rate matching is implemented, but not the determination of EUCI.
6.3.2.5 PUCCH_encoder.m
7.1.3 PBCH_encoder.m
7.1.4 PBCH_encoder.m
7.1.5 PBCH_encoder.m
7.3.1 PDCCH_encoder.m Only implements the zero padding of DCI formats, to increase their length to 12 bits.
7.3.2 PDCCH_encoder.m
7.3.3 PDCCH_encoder.m
7.3.4 PDCCH_encoder.m

Each of the *_encoder.m files has corresponding *_decoder.m files, for performing the corresponding operation of the receiver.

Many thanks to my colleagues at AccelerComm, who have spent lots of time double checking that this code matches the standard.

Have fun! Rob.

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].