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

Dependents:   SDP_K1_Rand FibonacciLFSR_LED_Demo

Committer:
electromotivated
Date:
Sat Jun 25 17:03:12 2016 +0000
Revision:
1:a1207d543967
Parent:
0:2038ff2b7de5
Generated Documentation;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
electromotivated 0:2038ff2b7de5 1 #include "FibonacciLFSR.h"
electromotivated 0:2038ff2b7de5 2 #include "mbed.h"
electromotivated 0:2038ff2b7de5 3
electromotivated 0:2038ff2b7de5 4 FibonacciLFSR::FibonacciLFSR(LFSR_SIZE_t size){
electromotivated 0:2038ff2b7de5 5 this->size = size;
electromotivated 0:2038ff2b7de5 6 this->lfsr_period = (1 << size) - 1; // Number of random numbers
electromotivated 0:2038ff2b7de5 7 this->lfsr = 0x0001;
electromotivated 0:2038ff2b7de5 8 }
electromotivated 0:2038ff2b7de5 9
electromotivated 0:2038ff2b7de5 10 uint16_t FibonacciLFSR::getRandom(){
electromotivated 0:2038ff2b7de5 11 switch (size){
electromotivated 0:2038ff2b7de5 12 case LFSR_2:
electromotivated 0:2038ff2b7de5 13 feedback_bit = ((lfsr >> 1) ^ (lfsr >> 0)) & 0x01;
electromotivated 0:2038ff2b7de5 14 break;
electromotivated 0:2038ff2b7de5 15 case LFSR_4:
electromotivated 0:2038ff2b7de5 16 feedback_bit = ((lfsr >> 3) ^ (lfsr >> 2)) & 0x01;
electromotivated 0:2038ff2b7de5 17 break;
electromotivated 0:2038ff2b7de5 18 case LFSR_8:
electromotivated 0:2038ff2b7de5 19 feedback_bit = ((lfsr >> 7) ^ (lfsr >> 5) ^ (lfsr >> 4) ^ (lfsr >> 3)) & 0x01;
electromotivated 0:2038ff2b7de5 20 break;
electromotivated 0:2038ff2b7de5 21 case LFSR_16:
electromotivated 0:2038ff2b7de5 22 feedback_bit = ((lfsr >> 15) ^ (lfsr >> 14) ^ (lfsr >> 12) ^ (lfsr >> 3)) & 0x01;
electromotivated 0:2038ff2b7de5 23 break;
electromotivated 0:2038ff2b7de5 24 default:
electromotivated 0:2038ff2b7de5 25 break;
electromotivated 0:2038ff2b7de5 26 }
electromotivated 0:2038ff2b7de5 27
electromotivated 0:2038ff2b7de5 28 // Shift, add feedback, AND zero extra MSb's leaving only "size" number of bits representing lfsr
electromotivated 0:2038ff2b7de5 29 lfsr = ((lfsr << 1) | feedback_bit) & ((1 << size) - 1);
electromotivated 0:2038ff2b7de5 30 return lfsr;
electromotivated 0:2038ff2b7de5 31 }