Statistics
| Branch: | Tag: | Revision:

root / gnuradio-core / src / lib / general / gri_lfsr_32k.h @ e36dc98e

History | View | Annotate | Download (1.7 kB)

1 5d69a524 jcorgan
/* -*- c++ -*- */
2 5d69a524 jcorgan
/*
3 5d69a524 jcorgan
 * Copyright 2004 Free Software Foundation, Inc.
4 5d69a524 jcorgan
 * 
5 5d69a524 jcorgan
 * This file is part of GNU Radio
6 5d69a524 jcorgan
 * 
7 5d69a524 jcorgan
 * GNU Radio is free software; you can redistribute it and/or modify
8 5d69a524 jcorgan
 * it under the terms of the GNU General Public License as published by
9 937b719d eb
 * the Free Software Foundation; either version 3, or (at your option)
10 5d69a524 jcorgan
 * any later version.
11 5d69a524 jcorgan
 * 
12 5d69a524 jcorgan
 * GNU Radio is distributed in the hope that it will be useful,
13 5d69a524 jcorgan
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 5d69a524 jcorgan
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15 5d69a524 jcorgan
 * GNU General Public License for more details.
16 5d69a524 jcorgan
 * 
17 5d69a524 jcorgan
 * You should have received a copy of the GNU General Public License
18 5d69a524 jcorgan
 * along with GNU Radio; see the file COPYING.  If not, write to
19 86f5c924 eb
 * the Free Software Foundation, Inc., 51 Franklin Street,
20 86f5c924 eb
 * Boston, MA 02110-1301, USA.
21 5d69a524 jcorgan
 */
22 5d69a524 jcorgan
23 5d69a524 jcorgan
#ifndef INCLUDED_GRI_LFSR_32k_H
24 5d69a524 jcorgan
#define INCLUDED_GRI_LFSR_32k_H
25 5d69a524 jcorgan
26 5d69a524 jcorgan
#include <gri_lfsr_15_1_0.h>
27 5d69a524 jcorgan
28 5d69a524 jcorgan
/*!
29 5d69a524 jcorgan
 * \brief generate pseudo-random sequence of length 32768 bits.
30 ed236703 eb
 * \ingroup misc
31 5d69a524 jcorgan
 *
32 5d69a524 jcorgan
 * This is based on gri_lfsr_15_1_0 with an extra 0 added at the end
33 5d69a524 jcorgan
 * of the sequence.
34 5d69a524 jcorgan
 */
35 5d69a524 jcorgan
36 5d69a524 jcorgan
class gri_lfsr_32k {
37 5d69a524 jcorgan
  gri_lfsr_15_1_0        d_lfsr;
38 5d69a524 jcorgan
  unsigned int                d_count;
39 5d69a524 jcorgan
40 5d69a524 jcorgan
 public:
41 5d69a524 jcorgan
  gri_lfsr_32k () { reset (); }
42 5d69a524 jcorgan
43 5d69a524 jcorgan
  void reset (){
44 5d69a524 jcorgan
    d_lfsr.reset ();
45 5d69a524 jcorgan
    d_count = 0;
46 5d69a524 jcorgan
  }
47 5d69a524 jcorgan
    
48 5d69a524 jcorgan
  int next_bit (){
49 5d69a524 jcorgan
    if (d_count == 32767){
50 5d69a524 jcorgan
      d_count = 0;
51 5d69a524 jcorgan
      return 0;
52 5d69a524 jcorgan
    }
53 5d69a524 jcorgan
    d_count++;
54 5d69a524 jcorgan
    return d_lfsr.next_bit ();
55 5d69a524 jcorgan
  }
56 5d69a524 jcorgan
57 5d69a524 jcorgan
  int next_byte (){
58 5d69a524 jcorgan
    int        v = 0;
59 5d69a524 jcorgan
    for (int i = 0; i < 8; i++){
60 5d69a524 jcorgan
      v >>= 1;
61 5d69a524 jcorgan
      if (next_bit ())
62 5d69a524 jcorgan
        v |= 0x80;
63 5d69a524 jcorgan
    }
64 5d69a524 jcorgan
    return v;
65 5d69a524 jcorgan
  }
66 5d69a524 jcorgan
67 5d69a524 jcorgan
  int next_short (){
68 5d69a524 jcorgan
    int        v = 0;
69 5d69a524 jcorgan
    for (int i = 0; i < 16; i++){
70 5d69a524 jcorgan
      v >>= 1;
71 5d69a524 jcorgan
      if (next_bit ())
72 5d69a524 jcorgan
        v |= 0x8000;
73 5d69a524 jcorgan
    }
74 5d69a524 jcorgan
    return v;
75 5d69a524 jcorgan
  }
76 5d69a524 jcorgan
77 5d69a524 jcorgan
};
78 5d69a524 jcorgan
79 5d69a524 jcorgan
#endif /* INCLUDED_GRI_LFSR_32k_H */