/*---------------------------------------------------------------------------* * IT++ * *---------------------------------------------------------------------------* * Copyright (c) 1995-2001 by Tony Ottosson, Thomas Eriksson, Pål Frenger, * * Tobias Ringström, and Jonas Samuelsson. * * * * Permission to use, copy, modify, and distribute this software and its * * documentation under the terms of the GNU General Public License is hereby * * granted. No representations are made about the suitability of this * * software for any purpose. It is provided "as is" without expressed or * * implied warranty. See the GNU General Public License for more details. * *---------------------------------------------------------------------------*/ /*! \file \brief Definitions of a Reed-Solomon codec class \author Pål Frenger 1.7 2003/05/22 08:55:18 */ #ifndef __reedsolomon_h #define __reedsolomon_h #include "base/vec.h" #include "comm/galois.h" namespace itpp { //---------------------- Reed-Solomon -------------------------------------- /*! \ingroup fec \brief Reed-Solomon Codes. Uses the Berlkamp-Massey algorithm for decoding as described in: S. B. Wicker, "Error Control Systems for digital communication and storage," Prentice Hall. The code is \f$2^m\f$ - ary of length \f$2^m-1\f$ capable of correcting \f$t\f$ errors. */ class Reed_Solomon { public: //! Class constructor for the \f$2^m\f$ - ary, \f$t\f$ error correcting RS-code. Reed_Solomon(int in_m, int in_t); //! Encoder function. bvec encode(const bvec &uncodedbits); //! Decoder function bvec decode(const bvec &codedbits); //! Gets the rate of the RS-code. double get_rate() { return double(k)/double(n); } protected: //! Internal encoder/decoder parameters int m, t, k, n, q; //! The generator polynomial of the RS code GFX g; }; } //namespace itpp #endif // __reedsolomon_h