1 |
1 |
1 |
1 |
0 |
1 |
1 |
1 |
1 |
0 |
1 |
1 |
0 |
1 |
0 |
1 |
1 |
0 |
1 |
0 |
1 |
1 |
0 |
1 |
0 |
1 |
1 |
0 |
0 |
0 |
1 |
1 |
1 |
0 |
0 |
1 |
0 |
1 |
0 |
0 |
0 |
0 |
1 |
0 |
0 |
0 |
0 |
1 |
1 |
0 |
0 |
0 |
1 |
1 |
0 |
0 |
1 |
1 |
1 |
0 |
Вихідною послідовністю буде рядок молодших значущих бітів: 111101011001000....
n-бітовий РЗЛЗЗ може знаходитися в одному з 2n-1 внутрішніх станів. Це означає, що теоретично такий регістр може генерувати псевдовипадкову послідовність з періодом 2n-1 бітів. (Число внутрішніх станів і період рівні 2n-1, тому що заповнення РЗЛЗЗ нулями, приведе до того, що регістр зрушення буде видавати нескінченну послідовність нулів, що абсолютно даремно.) Тільки при визначених відвідних послідовностях РЗЛЗЗ циклічно пройде через усі 2n-1 внутрішніх станів, такі РЗЛЗЗ є РЗЛЗЗ із максимальним періодом. Результат, що вийшов, називається m-послідовністю. [6]
Для того, щоб конкретний РЗЛЗЗ мав максимальний період, поліном, утворений з відвідної послідовності і константи 1, повинний бути примітивним по модулю 2. Ступіньполінома є довжиною регістра зрушення. Примітивний поліном ступеня п – поліном, що неприводиться, якщо є дільником , але не є дільником xd+1 для всіх d, що є дільниками 2n-1 (див. розділ 4).
У загальному випадку не існує простого способу генерувати примітивні поліноми даного ступеня по модулю 2. Найпростіше вибирати поліном випадковим чином і перевіряти, чи не є він примітивним. Це чимось схоже на перевірку, чи не є простим випадково обране число.
Деякі, але, звичайно ж не всі, поліноми різних ступенів, примітивні по модулю 2, приведені в таблиці 5.2.
Приклад 5.3.1. Запис (32, 7, 5, 3, 2, 1, 0) означає, що наступний поліном примітивний по модулю 2:
х32+х7+х5+х3+х2+х+1
Це можна легко узагальнити для РЗЛЗЗ із максимальним періодом. Першим числом є довжина РЗЛЗЗ. Останнє число завжди дорівнює 0, і його можна опустити. Усі числа, за винятком 0, задають відвідну послідовність, відлічувану від лівого краю регістра зрушення. Тобто, члени полінома з меншим ступенем відповідають позиціям ближче до правого краю регістра. [1]
Продовжуючи приклад, запис (32, 7, 5, 3, 2, 1, 0) означає, що для узятого 32-бітового регістра зрушення новий біт новий біт генерується за допомогою XOR тридцять першого, сьомого, п'ятого, третього, другого, першого і нульового бітів (див. мал. 5.4), що виходить РЗЛЗЗ і буде мати максимальну довжину, циклічно проходячи до повторення через 232 – 1 значень.
Код для цього РЗЛЗЗ мовою C++ виглядає так:
int LFSR ()
{
static unsigned long ShiftRegister = 1;
ShiftRegister=((((ShiftRegister >> 31)
^(ShiftRegister>>7)^(ShiftRegister>>5)
^(ShiftRegister>>3)^(ShiftRegister>>2)
^ShiftRegister>>1)^ShiftRegister))&0x00000001)<<31)
|(ShiftRegister>>1);
return ShiftRegister&0x00000001;
}
Якщо РЗЛЗЗ довше комп'ютерного слова, код ускладнюється, але не набагато.
Рис. 5.4. 32-бітний РЗЛЗЗ із максимальною довжиною. |
Табл. 5.2. Деякі примітивні поліноми по модулю 2
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.