Fibonacci Linear Feedback Shift Register (Pseudo-Random Number Generator)
Dependents: SDP_K1_Rand FibonacciLFSR_LED_Demo
FibonacciLFSR.h@0:2038ff2b7de5, 2016-06-25 (annotated)
- 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?
User | Revision | Line number | New 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 |