Fibonacci Linear Feedback Shift Register (Pseudo-Random Number Generator)

Dependents:   SDP_K1_Rand FibonacciLFSR_LED_Demo

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers FibonacciLFSR.cpp Source File

FibonacciLFSR.cpp

00001 #include "FibonacciLFSR.h"
00002 #include "mbed.h"
00003 
00004 FibonacciLFSR::FibonacciLFSR(LFSR_SIZE_t size){
00005     this->size = size;
00006     this->lfsr_period = (1 << size) - 1;    // Number of random numbers
00007     this->lfsr = 0x0001;
00008 }
00009 
00010 uint16_t FibonacciLFSR::getRandom(){
00011     switch (size){
00012         case LFSR_2:
00013             feedback_bit = ((lfsr >> 1) ^ (lfsr >> 0)) & 0x01;
00014             break;
00015         case LFSR_4:
00016             feedback_bit = ((lfsr >> 3) ^ (lfsr >> 2)) & 0x01;
00017             break;
00018         case LFSR_8:
00019             feedback_bit = ((lfsr >> 7) ^ (lfsr >> 5) ^ (lfsr >> 4) ^ (lfsr >> 3)) & 0x01;
00020             break;
00021         case LFSR_16:
00022             feedback_bit = ((lfsr >> 15) ^ (lfsr >> 14) ^ (lfsr >> 12) ^ (lfsr >> 3)) & 0x01;
00023             break;
00024         default: 
00025             break;
00026     }
00027     
00028     // Shift, add feedback, AND zero extra MSb's leaving only "size" number of bits representing lfsr
00029     lfsr = ((lfsr << 1) | feedback_bit) & ((1 << size) - 1); 
00030     return lfsr;
00031 }