File: egolay.h

package info (click to toggle)
libitpp 4.0.4-2
  • links: PTS, VCS
  • area: main
  • in suites: lenny
  • size: 7,520 kB
  • ctags: 6,341
  • sloc: cpp: 51,608; sh: 9,248; makefile: 636; fortran: 8
file content (83 lines) | stat: -rw-r--r-- 2,879 bytes parent folder | download
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
/*!
 * \file
 * \brief Definition of the Extended Golay Code (24, 12, 8)
 * \author Tony Ottosson
 *
 * -------------------------------------------------------------------------
 *
 * IT++ - C++ library of mathematical, signal processing, speech processing,
 *        and communications classes and functions
 *
 * Copyright (C) 1995-2008  (see AUTHORS file for a list of contributors)
 *
 * This program 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 2 of the License, or
 * (at your option) any later version.
 *
 * This program 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 this program; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
 *
 * -------------------------------------------------------------------------
 */

#ifndef EGOLAY_H
#define EGOLAY_H

#include <itpp/base/vec.h>
#include <itpp/base/mat.h>
#include <itpp/comm/channel_code.h>


namespace itpp {

  /*!
    \ingroup fec
    \brief Extended Golay code (24,12,8).
    \author Tony Ottosson

    The code is given in systematic form with the information bits
    first, followed by the parity check bits. The decoder uses the
    arithmetic decoding algorithm that is for example described in
    Wicker "Error Control Systems for Digital Communication and
    Storage", Prentice Hall, 1995 (page 143).
  */
  class Extended_Golay : public Channel_Code {
  public:
    //! Constructor
    Extended_Golay();
    //! Destructor
    virtual ~Extended_Golay(){ }

    //! Encoder. Will truncate some bits if not \a length = \c integer * 12
    virtual void encode(const bvec &uncoded_bits, bvec &coded_bits);
    //! Encoder. Will truncate some bits if not \a length = \c integer * 12
    virtual bvec encode(const bvec &uncoded_bits);

    //! Decoder. Will truncate some bits if not \a length = \c integer * 24
    virtual void decode(const bvec &coded_bits, bvec &decoded_bits);
    //! Decoder. Will truncate some bits if not \a length = \c integer * 24
    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 0.5; };

    //! Gets the generator matrix for the code (also the parity check matrix)
    bmat get_G() const { return G; }
  private:
    bmat B,G;
  };

} // namespace itpp

#endif // #ifndef EGOLAY_H