Recently, someone had mentioned to me that the thing they liked most about convolutional codes was the ability to just send data in any amount. With convolutional codes, an internal state determines what encoded bits to send. This gives close to a rate M/N code, depending on the puncturing schedule. An additional C points are added at the end to allow the last bits to have sufficient error correction.
Later, I began to wonder about variable length Reed-Solomon codes. It didn’t take that much time to realize that there is at least one easy solution. The RS encoder/decoder ignores leading zeros. Thus the encoder can simple stop reading input data and generate the parity any time before the end of a normal codeword.
From a previous article, I show how a syndrome decoder can also work in this context. The syndrome decoder, doesn’t need to receive the unused 0’s to work correctly. The remainder of the decoder can be the same. The only change might be to the Chein Search, as certain roots might now be invalid and would flag the codeword as an error. For example, a word that would set one of the leading 0’s to a non-zero value.
At this point, the user can choose how to implement the encoder to get different desired rates. There are a variety of schemes, but the main two would be to send M full codewords followed by a small codeword, or to send M codewords of reduced length.
Because the same number of parity check elements are generated in both schemes, the shorter data packets have better error correction performance. For this reason, it might make sense to make some codewords shorter. For example, any error detection coding or critical data that could cause severe failure modes if incorrect.