  Polar codes asymptotically achieve the symmetric capacity of memoryless
channels, yet their error-correcting performance under successive-cancellation
(SC) decoding for short and moderate length codes is worse than that of other
modern codes such as low-density parity-check (LDPC) codes. Of the many methods
to improve the error-correction performance of polar codes, list decoding
yields the best results, especially when the polar code is concatenated with a
cyclic redundancy check (CRC). List decoding involves exploring several
decoding paths with SC decoding, and therefore tends to be slower than SC
decoding itself, by an order of magnitude in practical implementations. In this
paper, we present a new algorithm based on unrolling the decoding tree of the
code that improves the speed of list decoding by an order of magnitude when
implemented in software. Furthermore, we show that for software-defined radio
applications, our proposed algorithm is faster than the fastest software
implementations of LDPC decoders in the literature while offering comparable
error-correction performance at similar or shorter code lengths.
