It is time for another project update. So here it is.
This week I dived into C++ and FECAPI. I implemented a polar encoder for
FECAPI. Of course this includes all the necessary tests. I decided to go
with packed bits in the encoder definition. Though I implemented a mode
which deals with unpacked bits too.
I did some rough performance tests. Just set up a flowgraph with a head
block and let 2^32 unpacked bytes go through. Then I measured the time
it needed to process all those samples. For a first implementation with
unpacked bits I could achieve a throughput of about 60Mbit/s. This goes
up to 280Mbit/s for unpacked bits which are packed internally and then
encoded then unpacked again. And roughly 350Mbit/s for packed bits.
Those are just rough tests and may be biased. It should serve as a first
Also, some profiling revealed that the computationally intensive part is
moving info bits to the correct position. Rougly three times more time
is spent on this than on the actual encoding procedure. I had some
thoughts on how I could interweave this with encoding in the hope that
this would save some time. But I haven’t found a solution for that yet.
It always interferes with encoding too deeply.
FECAPI is very convenient when it comes to code implementation. It just
takes care of everything around your code implementation.
Also, I worked on a decoder. But it is not yet completed. I intend to
have at least two different ones. A simple successive cancellation
decoder which shall serve as a reference and a more sophisticated
successive cancellation list decoder. According to some papers, they
perform very well in terms of error rate.
For the upcoming week my focus will be on decoders. I will implement
them in C++ and do all the necessary testing. I am curious how well they
More info and current project progress can be found in  and .