Я написал действительно простой C-подобный код для линейного сдвигового регистра пакета обратной связи в массиве логических значений на основе следующих документов:
http://courses.cse.tamu.edu/walker/csce680/lfsr_table.pdf https://www.xilinx.com/support/documentation/application_notes/xapp052.pdf
n= 63
Код:
#include <stdio.h>
#include <stdint.h>
#include <math.h>
int main() {
bool lfsr[63] = {true};
const int iterations = 16384 * 8;
int deviation = 0;
///*
for(int bit = 0; bit <= 62; bit++) {
int x = 0, y = 0;
for(int j = 0; j < iterations; j++) {
bool feedback = lfsr[62] ^ lfsr[61];
for(int k = 62; k >= 1; k--)
lfsr[k] = lfsr[k - 1];
lfsr[0] = feedback;
if(lfsr[bit])
x++;
else
y++;
}
deviation += y - x;
printf("bit %d \t= %d <-> %d (deviation: %d)\r\n", bit, y, x, y - x);
}
printf("Total deviation: %d\r\n", deviation);
}
Результат:
bit 2 = 76565 <-> 54507 (deviation: 22058)
bit 3 = 68863 <-> 62209 (deviation: 6654)
...
bit 58 = 65636 <-> 65436 (deviation: 200)
bit 59 = 65155 <-> 65917 (deviation: -762)
bit 60 = 65030 <-> 66042 (deviation: -1012)
bit 61 = 65654 <-> 65418 (deviation: 236)
bit 62 = 64667 <-> 66405 (deviation: -1738)
Total deviation: 306364
Дело в том, что, как вы видите, распределение едва ли является равномерным / равномерным.На самом деле, отклонение слишком велико для моей цели.
Я допустил ошибку или что-то, чего я не знаю о LFSR?