/usr/include/itpp/comm/bch.h is in libitpp-dev 4.3.1-7.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 | /*!
* \file
* \brief Definition of a BCH encoder/decoder class
* \author Pal Frenger, Steve Peters, Adam Piatyszek and Stephan Ludwig
*
* -------------------------------------------------------------------------
*
* Copyright (C) 1995-2010 (see AUTHORS file for a list of contributors)
*
* This file is part of IT++ - a C++ library of mathematical, signal
* processing, speech processing, and communications classes and functions.
*
* IT++ is free software: you can redistribute it and/or modify it under the
* terms of the GNU General Public License as published by the Free Software
* Foundation, either version 3 of the License, or (at your option) any
* later version.
*
* IT++ is distributed in the hope that it will be useful, but WITHOUT ANY
* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
* details.
*
* You should have received a copy of the GNU General Public License along
* with IT++. If not, see <http://www.gnu.org/licenses/>.
*
* -------------------------------------------------------------------------
*/
#ifndef BCH_H
#define BCH_H
#include <itpp/comm/galois.h>
#include <itpp/comm/channel_code.h>
#include <itpp/itexports.h>
namespace itpp
{
/*!
\addtogroup fec
*/
//---------------------- 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,ivec("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 ITPP_EXPORT BCH : public Channel_Code
{
public:
/*!
* \brief Initialize a (n,k)-code that can correct t errors
*
* \note Do not call this constructor with e.g. BCH bch(31, 21, 2, "3 5 5 1")
* but with BCH bch(31, 21, 2, ivec("3 5 5 1")) instead. Otherwise the
* complier will complain.
*/
BCH(int in_n, int in_k, int in_t, const ivec &genpolynom, bool sys = false);
/*!
* \brief Initialize a (n,k)-code that can correct t errors
* \author Stephan Ludwig
*
* The generator polynomial is automatically generated from the (n, t)
* parameters of the BCH code. The constructor generates the generator
* polynomial (and determines k) according to the method described in:
*
* [Wic95] S. B. Wicker, "Error control systems for digital communication
* and storage", Prentice-Hall, 1995
*/
BCH(int in_n, int in_t, bool sys = false);
//! Destructor
virtual ~BCH() { }
//! Encode a bvec of indata
virtual void encode(const bvec &uncoded_bits, bvec &coded_bits);
//! Encode a bvec of indata
virtual bvec encode(const bvec &uncoded_bits);
/*!
* \brief Decode the BCH code bits. Return false if there has been any decoding failure.
*
* The \c coded_bits are block-wise decoded into \c decoded_message messages. If
* there has been any decoding failure, the function will return \c false.
* If this happened in the n-th block, then \c cw_isvalid(n) will be set
* to \c false (zero-indexed). In case of a systematic code the systematic bits will be
* extracted and presented in the corresponding block of \c decoded_message.
* This is better than just presenting zeros, which is done in case of a
* decoding failure of non-systematic codes.
*/
virtual bool decode(const bvec &coded_bits, bvec &decoded_message, bvec &cw_isvalid);
//! Decode a bvec of coded data. This function is kept for backward compatibility. Better use \code bool decode(const bvec &coded_bits, bvec &decoded_message, bvec &cw_isvalid) \endcode.
virtual void decode(const bvec &coded_bits, bvec &decoded_bits);
//! Decode a bvec of coded data. This function is kept for backward compatibility. Better use \code bool decode(const bvec &coded_bits, bvec &decoded_message, bvec &cw_isvalid)\endcode.
virtual bvec decode(const bvec &coded_bits);
// Soft-decision decoding is not implemented
virtual void decode(const vec &received_signal, bvec &output);
virtual bvec decode(const vec &received_signal);
//! Get the code rate
virtual double get_rate() const {
return static_cast<double>(k) / n;
}
//! Get cardinality of code k
virtual int get_k() const {
return k;
}
//! Dummy assignment operator - MSVC++ warning C4512
BCH & operator= (const BCH &) {
return *this;
}
private:
int n, k, t;
GFX g;
const bool systematic;
};
} // namespace itpp
#endif // #ifndef BCH_H
|