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

Dependents:   SDP_K1_Rand FibonacciLFSR_LED_Demo

Committer:
electromotivated
Date:
Sat Jun 25 03:19:45 2016 +0000
Revision:
0:2038ff2b7de5
Child:
1:a1207d543967
Fibonacci Linear Feedback Shift Register Pseudo-Random Number Generator; ;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
electromotivated 0:2038ff2b7de5 1 #ifndef FIBONACCI_LFSR
electromotivated 0:2038ff2b7de5 2 #define FIBONACCI_LFSR
electromotivated 0:2038ff2b7de5 3
electromotivated 0:2038ff2b7de5 4 /*
electromotivated 0:2038ff2b7de5 5 Library for Fibonacci Linear Feedback Shift Register pseudo-random number
electromotivated 0:2038ff2b7de5 6 generator. The uniqueness of the Fibonacci LFSR is that all permutations
electromotivated 0:2038ff2b7de5 7 (values) are explored except zero, ensuring at least one bit in the LFSR
electromotivated 0:2038ff2b7de5 8 is always HIGH.
electromotivated 0:2038ff2b7de5 9
electromotivated 0:2038ff2b7de5 10 Applications: Random Number Generation, LED Faux Candles, LED lighting
electromotivated 0:2038ff2b7de5 11 effects, etc.
electromotivated 0:2038ff2b7de5 12
electromotivated 0:2038ff2b7de5 13 References: (Press "Ctrl" and click link to open in browser)
electromotivated 0:2038ff2b7de5 14 https://en.wikipedia.org/wiki/Linear-feedback_shift_register
electromotivated 0:2038ff2b7de5 15
electromotivated 0:2038ff2b7de5 16 TODO: Consider making this class static
electromotivated 0:2038ff2b7de5 17 */
electromotivated 0:2038ff2b7de5 18
electromotivated 0:2038ff2b7de5 19 #include "mbed.h"
electromotivated 0:2038ff2b7de5 20
electromotivated 0:2038ff2b7de5 21 class FibonacciLFSR{
electromotivated 0:2038ff2b7de5 22 public:
electromotivated 0:2038ff2b7de5 23 typedef enum SIZE{
electromotivated 0:2038ff2b7de5 24 LFSR_2 = 2, LFSR_4 = 4,
electromotivated 0:2038ff2b7de5 25 LFSR_8 = 8, LFSR_16 = 16
electromotivated 0:2038ff2b7de5 26 }LFSR_SIZE_t;
electromotivated 0:2038ff2b7de5 27 /*
electromotivated 0:2038ff2b7de5 28 Constructor of Fibonacci Linear Feedback Shift Register Objects.
electromotivated 0:2038ff2b7de5 29 Preconditions: None
electromotivated 0:2038ff2b7de5 30 @param size Number of bits for LFSR
electromotivated 0:2038ff2b7de5 31 */
electromotivated 0:2038ff2b7de5 32 FibonacciLFSR(LFSR_SIZE_t size);
electromotivated 0:2038ff2b7de5 33
electromotivated 0:2038ff2b7de5 34 /*
electromotivated 0:2038ff2b7de5 35 Generate and return new random number
electromotivated 0:2038ff2b7de5 36 @return A new random value
electromotivated 0:2038ff2b7de5 37 */
electromotivated 0:2038ff2b7de5 38 uint16_t getRandom();
electromotivated 0:2038ff2b7de5 39
electromotivated 0:2038ff2b7de5 40 private:
electromotivated 0:2038ff2b7de5 41 LFSR_SIZE_t size; // The number of bits representing the LFSR
electromotivated 0:2038ff2b7de5 42 int lfsr_period; // Period of LFSR register (number of random values before repeating)
electromotivated 0:2038ff2b7de5 43 uint16_t lfsr;
electromotivated 0:2038ff2b7de5 44 uint16_t feedback_bit;
electromotivated 0:2038ff2b7de5 45 };
electromotivated 0:2038ff2b7de5 46 #endif