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 #ifndef FIBONACCI_LFSR
electromotivated 0:2038ff2b7de5 2 #define FIBONACCI_LFSR
electromotivated 0:2038ff2b7de5 3
electromotivated 1:a1207d543967 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 1:a1207d543967 13 References:
electromotivated 0:2038ff2b7de5 14 https://en.wikipedia.org/wiki/Linear-feedback_shift_register
electromotivated 0:2038ff2b7de5 15 */
electromotivated 1:a1207d543967 16 // TODO: Consider making this class static
electromotivated 0:2038ff2b7de5 17
electromotivated 0:2038ff2b7de5 18 #include "mbed.h"
electromotivated 0:2038ff2b7de5 19
electromotivated 0:2038ff2b7de5 20 class FibonacciLFSR{
electromotivated 0:2038ff2b7de5 21 public:
electromotivated 0:2038ff2b7de5 22 typedef enum SIZE{
electromotivated 0:2038ff2b7de5 23 LFSR_2 = 2, LFSR_4 = 4,
electromotivated 0:2038ff2b7de5 24 LFSR_8 = 8, LFSR_16 = 16
electromotivated 0:2038ff2b7de5 25 }LFSR_SIZE_t;
electromotivated 1:a1207d543967 26 /**
electromotivated 0:2038ff2b7de5 27 Constructor of Fibonacci Linear Feedback Shift Register Objects.
electromotivated 0:2038ff2b7de5 28 Preconditions: None
electromotivated 0:2038ff2b7de5 29 @param size Number of bits for LFSR
electromotivated 0:2038ff2b7de5 30 */
electromotivated 0:2038ff2b7de5 31 FibonacciLFSR(LFSR_SIZE_t size);
electromotivated 0:2038ff2b7de5 32
electromotivated 1:a1207d543967 33 /**
electromotivated 0:2038ff2b7de5 34 Generate and return new random number
electromotivated 0:2038ff2b7de5 35 @return A new random value
electromotivated 0:2038ff2b7de5 36 */
electromotivated 0:2038ff2b7de5 37 uint16_t getRandom();
electromotivated 0:2038ff2b7de5 38
electromotivated 0:2038ff2b7de5 39 private:
electromotivated 0:2038ff2b7de5 40 LFSR_SIZE_t size; // The number of bits representing the LFSR
electromotivated 0:2038ff2b7de5 41 int lfsr_period; // Period of LFSR register (number of random values before repeating)
electromotivated 0:2038ff2b7de5 42 uint16_t lfsr;
electromotivated 0:2038ff2b7de5 43 uint16_t feedback_bit;
electromotivated 0:2038ff2b7de5 44 };
electromotivated 0:2038ff2b7de5 45 #endif