On Thu, 2009-02-12 at 14:29 -0500, Marcus D. Leech wrote:
I’m looking at building a quick prototype narrowband QAM16 transceiver
with error-correction. I’m looking at the CCSDS 27
blocks, and the encode looks to me like it takes bytes in, and bytes
But the decoder is different.
Yes, the encoder takes packed bits (bytes) and outputs unpacked bits
(bytes, with LSBs carrying the interleaved G0 and G1 code bits). So one
byte in creates 16 bytes out.
The decoder takes floating point soft symbols in the range of 0-255, and
outputs packed bits. It consumes 16 bytes of demodulator output data
and outputs 1 byte of packed bits.
There reason for these very specific types is that these blocks do
nothing but wrap GNU Radio blocks around a version of Phil Karn’s libfec
library R1/2, K=7 encoder and Viterbi decoder, which only consume and
produce these types. The one place I successfully used these was in a
non-packetized, continuously transmitting, BPSK satellite downlink.
These blocks aren’t suitable for packetized transmission as they don’t
provide any means of resetting the Viterbi decoder at the start of each
I recommend you look at CMU’s SPIRAL project for machine generated
Viterbi decoders that might be easier to wrap and/or call directly to do
what you need. I wasn’t aware of this when I did the above, but my the
next generation of that project will use it.