Эти примеры LFSR будут циклически проходить через (2^24) -1 числа (все 2^24 числа, но ноль). Первый пример - Galois LFSR, который затем сдвигает xor с (полином обратной связи). Второй пример - Galois LFSR, который сдвигается затем на xor с (полином обратной связи >> 1). Третий пример - LFSR Фибоначчи. Обратите внимание, что с start_state 0x000001 значение бит для всех трех примеров следует за одним и тем же шаблоном, хотя Galois LFSR и Fibonacci LFSR будут следовать различным шаблонам. 0x100001b - наименьший обратный полином, а 0x1c20001 - наибольший 4-кратный ответный полином для циклов (2^24) -1.
В этом примере следует вики Galios LFSR пример с исключающего сделал первый:
int main(int argc, char *argv[])
{
unsigned int period, bit, lfsr, start_state;
period = 0;
lfsr = start_state = 0x000001;
do
{
bit = lfsr&1; /* get bit */
lfsr ^= (0-bit)&0x100001b; /* toggle taps if bit was 1 */
lfsr >>= 1; /* shift lfsr */
++period;
}while(lfsr != start_state);
printf("%x\n", period); /* period will == 0xffffff */
return(0);
}
В этом примере следует вики-Galios LFSR пример с сдвига сделал первый:
int main(int argc, char *argv[])
{
unsigned int period, bit, lfsr, start_state;
period = 0;
lfsr = start_state = 0x000001;
do
{
bit = lfsr & 1; /* get bit */
lfsr >>= 1; /* shift lfsr */
lfsr ^= (0-bit)&0x80000d; /* toggle taps if bit was 1 */
++period;
} while (lfsr != start_state);
printf("%x\n", period); /* period will == 0xffffff */
return(0);
}
Этот пример следует за wiki Fibonacci Пример LFSR:
int main(int argc, char *argv[])
{
unsigned int period, bit, lfsr, start_state;
period = 0;
lfsr = start_state = 0x000001;
do
{
/* taps: 24 4 3 1 */
/* feedback polynomial: x^24 + x^4 + x^3 + x + 1 = 0x100001b */
bit = ((lfsr>>(24-24))^(lfsr>>(24-4))^(lfsr>>(24-3))^(lfsr>>(24-1)))&1;
lfsr = (lfsr >> 1) | (bit << 23);
++period;
} while (lfsr != start_state);
printf("%x\n", period); /* period will == 0xffffff */
return(0);
}
'int' не гарантирует 32 бит. Вместо этого используйте 'stdint.h' типы! – Olaf
Что вы хотите выполнить с помощью 'lfsr | = 0x000000;'? – Olaf
Я думаю, что LFSR означает [Линейный регистр сдвига обратной связи] (https://en.wikipedia.org/wiki/Linear_feedback_shift_register). В статье, посвященной WIkipedia, описываются периоды, которые меньше 1 степени 2. Почему вы ожидаете период 2^24? (Пожалуйста, разместите ссылку, объясняющую теорию) – anatolyg