Files
openairinterface5g/openair1/PHY/CODING
Romain BeurdoucheandLaurent Thomas 06c81030dc fix(nrLDPC_coding_segment_encoder): address review
1. nrLDPC_coding_segment_encoding: Clarifying encoder parameters
   The way the encoder implementation params was used could be made clearer:
   * `macro_num` was always used in order to calculate segment indexes.
     It is clearer to pass directly the first segment index.
   * The initialisation of a common implementation parameters structure can be made clearer.

2. nrLDPC_coding_segment_encoder: Remove multi segment dimension in encoder output
   The output of `LDPCencoder` was a 2D unsigned char array.
   But all the segments were actually packed in the first segment, 8 bits of different segments per byte of the first segment.
   So the first dimension was useless. This commit removes this dimension.

3. nrLDPC_coding_segment_encoder: Rename `nrLDPC_prepare_TB_encoding` into `nrLDPC_launch_TB_encoding`

4. nrLDPC_coding_segment_encoder: Remove the useless second rate matching for E2, one rate matching with max(E, E2) does the job.

5. nr_interleaving_ldpc: cleanup
   Rewrite code to use different SIMD sizes in a linear fashion.
   This means cascading preprocessor directives are used to start from a high SIMD size an decrease it progressively.

6. ldpc_encoder_optim8segmulti: linear usage of SIMD
   Use cascading preprocessor directives to include different SIMD sizes and types depending on which are available on the system.
   The different loops use a common index that is progressively incremented.
   Also add AVX512 version of bits distribution from 8 segments into one byte.

Co-authored-by: Laurent Thomas <laurent.thomas@open-cells.com>
2025-05-13 14:08:33 +00:00
..
2023-06-01 12:07:26 +02:00
2019-01-07 16:22:28 +01:00
2021-10-24 14:47:24 +02:00
2019-01-07 16:22:28 +01:00
2019-01-07 16:22:28 +01:00
2019-01-07 16:22:28 +01:00
2019-01-07 16:22:28 +01:00
2021-11-01 17:57:04 +01:00

PHY/CODING
----------


This directory contains the transport channel coding/decoding functions for both OpenAirInterface and a subset of LTE/WiMAX/WIFI MODEMS.
They can only be compiled on x86 platforms (at least sse,sse2 are required).

Files
------


crc_byte.c                     : 3GPP CRC routines (8,16,24 bit, LTE - 36-212 and WCDMA 25-212)
ccoding_byte.c                 : WIFI/WIMAX rate 1/2 convolutional code
ccoding_byte_lte.c             : 3GPP LTE rate 1/3 tail-biting convolutional code with CRC embedding
3gpplte.c                      : 3GPP LTE rate 1/3 turbo code
3gpp_turbo_decoder.c           : 3GPP/LTE turbo decoder (non-optimized)
3gpplte_turbo_decoder_sse.c    : 3GPP/LTE turbo decoder (optimized for SSE2/SSE3)
lte_interleaver.h              : 3GPP/LTE interleaver coefficient table (from 3GPP 36-212)
lte_interleaver_inline.h       : 3GPP/LTE Interleaver inline functions (from 3GPP 36-212)
lte_tf.m                       : 3GPP/LTE transport format size calculator
rate_matching.c                : OpenAirInterface pseudo-random rate matching
viterbi.c                      : WIFI/WIMAX rate 1/2 Viterbi decoder (non-optimized and optimized versions)
viterbi_lte.c                  : 3GPP LTE Viterbi decoder (SIMD optimized)
lte_rate_matching.c            : 3GPP/LTE Rate (de)matching and sub-block (de)interleaving routines (strict compliance with 3GPP 36-212, Release 8, 2009-03)
Makefile		       : Generates simple unitary tests for the three coding formats.  Note this doesn't do a performance evaluation.


Directories
-----------

TESTBENCH                      : Testbench for channel coding/decoding



Use of unitary tests
--------------------

Three tests can be compiled with "make".  They are standalone and do not require the rest of openair1.
They only test the following files:

crc_byte.c
ccoding_byte.c
ccdoing_byte_lte.c
3gpp_turbo_decoder_sse.c
3gpplte.c
viterbi.c
viterbi_lte.c

After "make", you should have three executables, turbo_test, rate13cc_test and rate12cc_test which should 
all have executed and printed proof of correct execution (at least for the default block lengths).  Further 
tests should be performed with the performance tests in TESTBENCH, which require the rest of openair1.