Merged r8195:8205 from jcorgan/ecc into trunk. Adds convolutional encoder
authorjcorgan <jcorgan@221aa14e-8319-0410-a670-987f0aec2ac5>
Tue, 15 Apr 2008 21:31:29 +0000 (21:31 +0000)
committerjcorgan <jcorgan@221aa14e-8319-0410-a670-987f0aec2ac5>
Tue, 15 Apr 2008 21:31:29 +0000 (21:31 +0000)
commita52f9a19581901beabc9111917965b9817231014
tree5e12980ed7d22dbc8c0f963579e3855b88df5897
parent42b48770e756f1c082f5dfc9e757fafe69263496
Merged r8195:8205 from jcorgan/ecc into trunk.  Adds convolutional encoder
and decoder corresponding to the R=1/2, K=7 CCSDS standard ("Voyager").

This code is a GNU Radio wrapper around a 1995-era KA9Q portable-C
implementation, and is designed for continuous streaming data, not packets.

The encoder takes MSB packed bytes and outputs channel symbols 0 or 1.

The decoder uses soft-decision Viterbi decoding on a floating point stream of
(possibly noise corrupted) [1.0, 1.0] symbols, and outputs MSB packed
decoded bytes.

Benchmarking on a 2.16 GHz Intel Core 2 Duo shows 4.7 Mbps decoding rate at
100% CPU usage (single core).  (There is a newer KA9Q library that implements
SIMD speed ups with correspondingly faster performance.)

The KA9Q library is placed into src/lib/viterbi.  It could use some cleanup,
file/function renaming, and refactoring, or even replacement with the newer
libfec code that is available.

git-svn-id: http://gnuradio.org/svn/gnuradio/trunk@8206 221aa14e-8319-0410-a670-987f0aec2ac5
19 files changed:
config/grc_gnuradio_core.m4
gnuradio-core/src/lib/Makefile.am
gnuradio-core/src/lib/general/Makefile.am
gnuradio-core/src/lib/general/general.i
gnuradio-core/src/lib/general/gr_decode_ccsds_27_fb.cc [new file with mode: 0644]
gnuradio-core/src/lib/general/gr_decode_ccsds_27_fb.h [new file with mode: 0644]
gnuradio-core/src/lib/general/gr_decode_ccsds_27_fb.i [new file with mode: 0644]
gnuradio-core/src/lib/general/gr_encode_ccsds_27_bb.cc [new file with mode: 0644]
gnuradio-core/src/lib/general/gr_encode_ccsds_27_bb.h [new file with mode: 0644]
gnuradio-core/src/lib/general/gr_encode_ccsds_27_bb.i [new file with mode: 0644]
gnuradio-core/src/lib/viterbi/Makefile.am [new file with mode: 0644]
gnuradio-core/src/lib/viterbi/decode.cc [new file with mode: 0644]
gnuradio-core/src/lib/viterbi/encode.cc [new file with mode: 0644]
gnuradio-core/src/lib/viterbi/metrics.c [new file with mode: 0644]
gnuradio-core/src/lib/viterbi/tab.c [new file with mode: 0644]
gnuradio-core/src/lib/viterbi/viterbi.c [new file with mode: 0644]
gnuradio-core/src/lib/viterbi/viterbi.h [new file with mode: 0644]
gnuradio-core/src/python/gnuradio/gr/Makefile.am
gnuradio-core/src/python/gnuradio/gr/qa_ecc_ccsds_27.py [new file with mode: 0755]