GNU Radio 3.7.2git-29-g7516b6dd C++ API
lfsr_15_1_0.h
Go to the documentation of this file.
1
/* -*- c++ -*- */
2
/*
3
* Copyright 2004 Free Software Foundation, Inc.
4
*
5
* This file is part of GNU Radio
6
*
7
* GNU Radio is free software; you can redistribute it and/or modify
8
* it under the terms of the GNU General Public License as published by
9
* the Free Software Foundation; either version 3, or (at your option)
10
* any later version.
11
*
12
* GNU Radio is distributed in the hope that it will be useful,
13
* but WITHOUT ANY WARRANTY; without even the implied warranty of
14
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15
* GNU General Public License for more details.
16
*
17
* You should have received a copy of the GNU General Public License
18
* along with GNU Radio; see the file COPYING. If not, write to
19
* the Free Software Foundation, Inc., 51 Franklin Street,
20
* Boston, MA 02110-1301, USA.
21
*/
22
23
#ifndef INCLUDED_GRI_LFSR_15_1_0_H
24
#define INCLUDED_GRI_LFSR_15_1_0_H
25
26
#include <
gnuradio/blocks/api.h
>
27
28
namespace
gr {
29
namespace
blocks {
30
31
/*!
32
* \brief Linear Feedback Shift Register using primitive polynomial x^15 + x + 1
33
* \ingroup misc
34
*
35
* \details
36
* Generates a maximal length pseudo-random sequence of length
37
* 2^15 - 1 bits.
38
*/
39
class
BLOCKS_API
lfsr_15_1_0
40
{
41
private
:
42
unsigned
long
d_sr;
// shift register
43
44
public
:
45
lfsr_15_1_0
() { reset(); }
46
47
void
reset
() { d_sr = 0x7fff; }
48
49
int
next_bit()
50
{
51
d_sr = ((((d_sr >> 1) ^ d_sr) & 0x1) << 14) | (d_sr >> 1);
52
return
d_sr & 0x1;
53
}
54
55
int
next_byte ()
56
{
57
int
v = 0;
58
for
(
int
i = 0; i < 8; i++) {
59
v >>= 1;
60
if
(next_bit ())
61
v |= 0x80;
62
}
63
return
v;
64
}
65
};
66
67
}
/* namespace blocks */
68
}
/* namespace gr */
69
70
#endif
/* INCLUDED_GRI_LFSR_15_1_0_H */
gnuradio
gr-blocks
include
gnuradio
blocks
lfsr_15_1_0.h
Generated by
1.8.1.1