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
uint16_t LFSRBuffer; void setup() { Serial.begin(9600); Serial.println("LFSR metode Fibonacci"); Serial.println("https://www.project.semesin.com"); 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
uint16_t LFSRBuffer; void setup() { Serial.begin(9600); Serial.println("LFSR metode Galois"); Serial.println("https://www.project.semesin.com"); 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; }