Найти многочлен LFSR и создать таблицу поиска в Stack Overflow

у меня есть это ЛРСОС и я не уверен, как найти полином, связанный с ним. Я пытаюсь создать таблицу поиска _static _flash с переменными uint8_t, чтобы сэкономить на вычислительных циклах. Единственная проблема, я не уверен, как реализовать LFSR в C ++.

Ура,
Hearny

-2

Решение

Защелки обозначены цифрами от 0 до 6. Защелки смещены вправо на 1 защелку, и значение, которое было в защелке 6 до сдвига, помещается в защелку 0 и пересекается с защелкой 4 (значение, которое заканчивается в защелке 4, представляет собой xor предыдущей защелки 3 и защелки 6).

Для полинома неясно, считается ли левый или правый фиксатор наиболее значимым фиксатором (битом). Аппаратная диаграмма показывает сдвиг вправо, но эту диаграмму можно перевернуть, сдвинув влево вместо права, все еще используя D6 для xor в поток битов данных.

Диаграмма немного сбивает с толку, поскольку она показывает D0, D4 и D7, но есть только 7 битов, а не 8.

Этот LFSR будет циклически перебирать все 127 возможных ненулевых 7-битных значений перед повторением. Вот таблица шаблона цикла, показанная в шестнадцатеричном формате:

01,44,22,11,4c,26,13,4d,62,31,5c,2e,17,4f,63,75
7e,3f,5b,69,70,38,1c,0e,07,47,67,77,7f,7b,79,78
3c,1e,0f,43,65,76,3b,59,68,34,1a,0d,42,21,54,2a
15,4e,27,57,6f,73,7d,7a,3d,5a,2d,52,29,50,28,14
0a,05,46,23,55,6e,37,5f,6b,71,7c,3e,1f,4b,61,74
3a,1d,4a,25,56,2b,51,6c,36,1b,49,60,30,18,0c,06
03,45,66,33,5d,6a,35,5e,2f,53,6d,72,39,58,2c,16
0b,41,64,32,19,48,24,12,09,40,20,10,08,04,02

Код C для реализации одного цикла этого lfsr с использованием переменной int i:

    i = ((i&1)<<6)^((i&1)<<2)^(i>>1);

Вы не включили начальное значение, а просто предполагаете, что это шестнадцатеричное значение 01, как показано в моей таблице примеров. Данные шифруются или дешифруются путем xor’ing защелки D6 от lfsr с помощью битов символьных данных, от младшего бита данных к старшему биту данных. Я думаю, что вам нужно всего лишь создать таблицу из 127 n-битных шаблонов. Я подтвердил, что это верно для 8-битных и 16-битных данных. Таблица для 8-битных данных:

c9,f2,0e,7f,dc,28,7d,15
da,73,6a,06,5b,17,13,81
64,79,87,3f,6e,94,be,0a
ed,39,35,83,ad,8b,89,40
b2,bc,c3,1f,37,4a,5f,85
f6,9c,9a,c1,d6,c5,44,20
59,de,e1,8f,1b,a5,af,42
7b,4e,cd,60,eb,62,22,90
2c,ef,f0,c7,8d,d2,57,a1
3d,a7,66,b0,75,31,11,48
96,77,f8,e3,46,e9,ab,d0
9e,53,33,d8,ba,98,08,24
cb,3b,fc,71,a3,f4,55,68
cf,a9,19,6c,5d,4c,04,92
e5,1d,fe,b8,51,fa,2a,b4
e7,d4,0c,b6,2e,26,02

В качестве попытки объяснить многочлен, переверните LFSR, так что D [6] слева, а D [0] справа. Начните с начального значения 1000000 и выполните полиномиальное деление Галуа (xor используется вместо вычитания) на 10010001 (D ^ 7 + D ^ 4 + 1), добавляя нули по мере необходимости для циклического перемещения (сдвига) LFSR

10010001 | 1000000        (01 reversed)
10010001       (D^7 + D^4 + 1)
-------
0010001       (44 reversed)
0100010      (22 reversed)
1000100     (11 reversed)
10010001    (D^7 + D^4 + 1)
-------
0011001    (4c reversed)
0

Другие решения


По вопросам рекламы [email protected]