Fibonacci Linear Feedback Shift Register (Pseudo-Random Number Generator)
Dependents: SDP_K1_Rand FibonacciLFSR_LED_Demo
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 }
Generated on Wed Jul 13 2022 07:52:32 by
1.7.2