• Romain Beurdouche's avatar
    fix(nrLDPC_coding): Miscellaneous fixes · f3daf0ed
    Romain Beurdouche authored
    1. nrLDPC_coding_segment_encoder: pointer not aligned on 64 bits
       An undefined behavior was happening because of a shift on a __m64 which
       was actually a uint32_t which was not aligned on 64 bits.
       This commit suggests a fix by properly loading into a __m64 with _mm_set_pi32
       before performing the shift.
    
    2. nr_rate_matching: Filler bits detection
       Previously, if the bit selection was reaching Ncb and restarting selection from the beginning of encoded data, the filler bits were detected by testing the bytes again NR_NULL which was equal to 2.
       But on this branch the bits of up to 8 segments are stored in one byte while doing rate matching so that one byte could be tested to be a filler while it is not.
       So this commit changes the way to test filler bits.
       Instead of relying on NR_NULL, bit selection now relies on the offset and size of filler bits.
    
    3. nr_ulsch_coding: missing filling f with zeros
       The array `f` of the UE UL HARQ process was not filled with zeros between transmissions.
       This is a problem if the encoder does not properly overwrite its output.
       In order to avoid such situation, this commit adds a memset to fill `f` with zeros before passing it to the encoder.
    
    4. nrLDPC_coding_segment_encoder: missing init of f to zeros
       In the encoder, `f` is not filled with zeros before being used.
       `f` is instead somehow filled with arbitrary values.
       When writing to `output` by 64 bit vectors, some arbitrary bits may be added after the segment.
       Then the arbitrary added ones are not overwritten when writing the next segment because of writing with a logical or.
       This commit properly fills `f` and `f2` with zeros.
    
    5. nr_ulschsim & nr_dlschsim: Adapt modulation to new encoder output
       The QPSK symbols that are feed to the channel model of nr_dlschsim were determined based on the bytes of the encoder output.
       With the new output of the encoder, it had to be reworked to determine the QPSK symbols based on the bits of the encoder output.
    f3daf0ed
dlschsim.c 20.5 KB