LFSR (linear-feedback shift register) adalah metode matematis untuk menghasilkan sebuah bilangan yang linear dengan bilangan sebelumnya.
Fungsi matematis ini digunakan sebagai:
- menghasilkan bilangan acak (random generator)
- Menghasilkan bilangan tersusun yang berulang sehingga bisa dimanfaatkan sebagai pembangkit suara gangguan (noise) seperti di tv/radio dengan siaran acak ketika tidak siaran.
sketch/program arduino LFSR:
metode Fibonacci
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | uint16_t LFSRBuffer; void setup() { Serial.begin(9600); Serial.println( "LFSR metode Fibonacci" ); uint16_t nilaiAwal = analogRead(0); LFSRFibonacci(nilaiAwal); //LFSRFibonacci(100); } void loop() { uint16_t bilanganLFSR = LFSRFibonacci(); Serial.println(bilanganLFSR); delay(1000); } void LFSRFibonacci( uint16_t nilaiAwal) { LFSRBuffer = nilaiAwal; } uint16_t LFSRFibonacci() { uint16_t bit; bit = ((LFSRBuffer >> 0) ^ (LFSRBuffer >> 2) ^ (LFSRBuffer >> 3) ^ (LFSRBuffer >> 5)) & 1; LFSRBuffer = (LFSRBuffer >> 1) | (bit << 15); return LFSRBuffer; } |
metode Galois
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | uint16_t LFSRBuffer; void setup() { Serial.begin(9600); Serial.println( "LFSR metode Galois" ); uint16_t nilaiAwal = analogRead(0); LFSRGalois(nilaiAwal); //LFSRGalois(100); } void loop() { uint16_t bilanganLFSR = LFSRGalois(); Serial.println(bilanganLFSR); delay(1000); } void LFSRGalois( uint16_t nilaiAwal) { LFSRBuffer = nilaiAwal; } uint16_t LFSRGalois() { unsigned lsb = LFSRBuffer & 1; LFSRBuffer >>= 1; if (lsb) { LFSRBuffer ^= 0xB400; } return LFSRBuffer; } |