/*---------------------------------------------------------------------------* * IT++ * *---------------------------------------------------------------------------* * Copyright (c) 1995-2004 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 Definition of a BCH encoder/decoder class \author Pål Frenger 1.8 2004/08/17 09:04:07 */ #ifndef _bch_h #define _bch_h #include "comm/galois.h" namespace itpp { /*! \defgroup fec Forward Error Correcting Codes */ //---------------------- BCH -------------------------------------- /*! \ingroup fec \brief Class for binary, narrow-sense BCH codes. The notation used is found in S. B. Wicker, "Error control systems for digital communication and storage", Appendix E, Prentice-Hall, 1995. Example: \code BCH bch(31,21,2,"3 5 5 1") \endcode uses the generator polynomial \f$g(x) = x^{10} + x^9 + x^8 + x^6 + x^5 + x^3 + 1\f$, and is capable of correcting 2 errors with \a n = 31 and \a k = 21. */ class BCH { public: //! Initialize a (n,k)-code that can correct t errors BCH(int in_n, int in_k, int in_t, ivec genpolynom); //! Encode a bvec of indata void encode(const bvec &uncodedbits, bvec &codedbits); //! Encode a bvec of indata bvec encode(const bvec &uncodedbits); //! Decode a bvec of coded data. void decode(const bvec &codedbits, bvec &decodedbits); //! Decode a bvec of coded data bvec decode(const bvec &codedbits); //! Get the code rate double get_rate() {return double(k)/double(n); } //protected: private: int n, k, t; GFX g; }; } //namespace itpp #endif // _bch_h