GSoC is coming to an end, and fortunately I have been able to finish my last algorithm I had planned. It's a codebit-to-codebit Max-Log-Map Decoder, that means it gets codebit Log-Likelihood-Ratios (LLR) as an input and outputs updated codebit LLR at his output. It can handle rate 1/n codes and also RSC codes (as opposed to my viterbi implementation).
To handle RSC Codes it's decoder object has an additional shuffle matrix.
Codespeedup has not been as good as the viterbi code. This is due to the MAP decoders structure. First benchmarks provided these results.
|Transition Probabilities [us]||1,466||3.131|
|Forward Recursion [us]||160||260|
|Backward Recursion/LLR decoding [us]||890||1028|
The poor speedup of the Backward Recursion kernel is due to the nature of the llr decoding. For every codebit one has to find the maximum out of 2^(number_of_states-1) metrics twice. Available SSE instructions provided no solution, so right now it is implemented with normal C code. Overall a speedup of ~20% is archived, resulting in ~6*10^6 decoded codebits per second.
So right now I am doing examples and documentation. I will see if I can fit in my two decoders into GNU Radios FEC-API. And I'm looking forward to GRCON14, which takes place between 15. Sept-19.-Sept. in Washington D.C. It sure will be a blast.