mwickert / scikit-dsp-comm

A collection of functions and classes to support signal processing and communications theory teaching and research
BSD 2-Clause "Simplified" License
187 stars 52 forks source link

Viterbi decoding of depunctured bits #52

Open usmandroid opened 1 year ago

usmandroid commented 1 year ago

After depuncturing (inserting NULL or zeros) at the punctured location indicating "erasures", how does the branch metric takes this into account in case of 'hard' decoding as here: https://github.com/usmandroid/scikit-dsp-comm/blob/2888bc8e65e44d31d2aaf85aeb51381c0bd0534f/sk_dsp_comm/fec_conv.py#L418 ?

The problem arises since the function only takes {0,1} binary input therefore there is no way to indicate the erased bit. Alternatively, 'unquant' could be used with {+1,-1} and 0 indicating LLR of 0.

When using 'soft' it is possible to indicate to the decoder where the erasure occurred, but in the case of 'hard' or 'unquant' in the current implementation, it is not allowed. This must be corrected for accurate results of decoding punctured bits.

DmitryYenkov commented 1 year ago

Here is the decoding results of punctured code for any type of decoder - soft, hard and unquant. image Select any and you get a huge amount of errors. Input and output data never match.

But it looks like this problem may be solved by the following tweaks: image Input and output data always match.

Hope this helps anyone using punctured codes with this repo.