23 #ifndef INCLUDED_ANALOG_LFSR_H
24 #define INCLUDED_ANALOG_LFSR_H
100 uint32_t r = x - ((x >> 1) & 033333333333)
101 - ((x >> 2) & 011111111111);
102 return ((r + (r >> 3)) & 030707070707) % 63;
107 : d_shift_register(seed),
110 d_shift_register_length(reg_len)
113 throw std::invalid_argument(
"reg_len must be <= 31");
118 unsigned char output = d_shift_register & 1;
119 unsigned char newbit = popCount( d_shift_register & d_mask )%2;
120 d_shift_register = ((d_shift_register>>1) | (newbit<<d_shift_register_length));
126 unsigned char output = d_shift_register & 1;
127 unsigned char newbit = (popCount( d_shift_register & d_mask )%2)^(input & 1);
128 d_shift_register = ((d_shift_register>>1) | (newbit<<d_shift_register_length));
134 unsigned char output = (popCount( d_shift_register & d_mask )%2)^(input & 1);
135 unsigned char newbit = input & 1;
136 d_shift_register = ((d_shift_register>>1) | (newbit<<d_shift_register_length));
143 void reset() { d_shift_register = d_seed; }
151 for(
int i=0; i<num; i++) {
156 int mask()
const {
return d_mask; }