GNU Radio 3.7.1 C++ API
|
Fibonacci Linear Feedback Shift Register using specified polynomial mask. More...
#include <lfsr.h>
Public Member Functions | |
lfsr (uint32_t mask, uint32_t seed, uint32_t reg_len) | |
unsigned char | next_bit () |
unsigned char | next_bit_scramble (unsigned char input) |
unsigned char | next_bit_descramble (unsigned char input) |
void | reset () |
void | pre_shift (int num) |
int | mask () const |
Fibonacci Linear Feedback Shift Register using specified polynomial mask.
Generates a maximal length pseudo-random sequence of length 2^degree-1
Constructor: digital::lfsr(int mask, int seed, int reg_len);
mask | - polynomial coefficients representing the locations of feedback taps from a shift register which are xor'ed together to form the new high order bit. |
Some common masks might be: x^4 + x^3 + x^0 = 0x19 x^5 + x^3 + x^0 = 0x29 x^6 + x^5 + x^0 = 0x61
seed | - the initialization vector placed into the register durring initialization. Low order bit corresponds to x^0 coefficient -- the first to be shifted as output. |
reg_len | - specifies the length of the feedback shift register to be used. Durring each iteration, the register is rightshifted one and the new bit is placed in bit reg_len. reg_len should generally be at least order(mask) + 1 |
see http://en.wikipedia.org/wiki/Linear_feedback_shift_register for more explanation.
next_bit() - Standard LFSR operation
Perform one cycle of the LFSR. The output bit is taken from the shift register LSB. The shift register MSB is assigned from the modulo 2 sum of the masked shift register.
next_bit_scramble(unsigned char input) - Scramble an input stream
Perform one cycle of the LFSR. The output bit is taken from the shift register LSB. The shift register MSB is assigned from the modulo 2 sum of the masked shift register and the input LSB.
next_bit_descramble(unsigned char input) - Descramble an input stream
Perform one cycle of the LFSR. The output bit is taken from the modulo 2 sum of the masked shift register and the input LSB. The shift register MSB is assigned from the LSB of the input.
See http://en.wikipedia.org/wiki/Scrambler for operation of these last two functions (see multiplicative scrambler.)
gr::digital::lfsr::lfsr | ( | uint32_t | mask, |
uint32_t | seed, | ||
uint32_t | reg_len | ||
) | [inline] |
int gr::digital::lfsr::mask | ( | ) | const [inline] |
unsigned char gr::digital::lfsr::next_bit | ( | ) | [inline] |
Referenced by pre_shift().
unsigned char gr::digital::lfsr::next_bit_descramble | ( | unsigned char | input | ) | [inline] |
unsigned char gr::digital::lfsr::next_bit_scramble | ( | unsigned char | input | ) | [inline] |
void gr::digital::lfsr::pre_shift | ( | int | num | ) | [inline] |
Rotate the register through x number of bits where we are just throwing away the results to get queued up correctly
References next_bit().
void gr::digital::lfsr::reset | ( | ) | [inline] |
Reset shift register to initial seed value