Алгоритм Берлекэмпа – Мэсси
Алгоритм Берлекэмпа – Мэсси — это алгоритм , который находит кратчайший регистр сдвига с линейной обратной связью (LFSR) для заданной двоичной выходной последовательности. Алгоритм также найдет минимальный полином линейно рекуррентной последовательности в произвольном поле . Требование к полю означает, что алгоритм Берлекэмпа – Мэсси требует, чтобы все ненулевые элементы имели мультипликативный обратный. [ 1 ] Ридс и Слоан предлагают расширение для работы с кольцом . [ 2 ]
Элвин Берлекамп изобрел алгоритм декодирования кодов Бозе-Чаудхури-Хоквенгема (BCH) . [ 3 ] [ 4 ] Джеймс Мэсси осознал его применение к регистрам сдвига с линейной обратной связью и упростил алгоритм. [ 5 ] [ 6 ] Мэсси назвал этот алгоритм алгоритмом синтеза LFSR (итеративный алгоритм Берлекэмпа). [ 7 ] но теперь он известен как алгоритм Берлекэмпа – Мэсси.
Описание алгоритма
[ редактировать ]Алгоритм Берлекэмпа – Мэсси является альтернативой декодеру Рида – Соломона Петерсона для решения системы линейных уравнений. Его можно резюмировать как поиск коэффициентов Λ j многочлена Λ( x ), чтобы для всех позиций i во входном потоке S :
В приведенных ниже примерах кода C ( x ) является потенциальным экземпляром Λ ( x ). Полином локатора ошибок C ( x ) для ошибок L определяется как:
или наоборот:
Цель алгоритма — определить минимальную степень L и C ( x ), которая приводит к появлению всех синдромов.
быть равным 0:
Алгоритм: C ( x ) инициализируется значением 1, L — текущее количество предполагаемых ошибок и инициализируется нулем. N – общее количество синдромов. n используется в качестве основного итератора и для индексации синдромов от 0 до N -1. B ( x ) — копия последнего C ( x ), поскольку L был обновлен и инициализирован значением 1. b — копия последнего несоответствия d (поясняется ниже), поскольку L было обновлено и инициализировано значением 1. m — количество итераций, поскольку L , B ( x ) и b были обновлены и инициализированы значением 1.
Каждая итерация алгоритма вычисляет несоответствие d . На итерации k это будет:
Если d равно нулю, алгоритм предполагает, что C ( x ) и L верны на данный момент, увеличивает m и продолжает работу.
Если d не равно нулю, алгоритм корректирует C ( x ) так, чтобы перерасчет d был равен нулю:
х м термин сдвигает B(x) так, что он следует синдромам, соответствующим b . Если предыдущее обновление L произошло на итерации j , то m = k − j , и пересчитанное несоответствие будет:
Это изменит пересчитанное расхождение на:
Алгоритму также необходимо увеличивать L (количество ошибок) по мере необходимости. Если L равно фактическому количеству ошибок, то во время итерационного процесса расхождения станут равными нулю до того, как n станет больше или равно 2 L . В противном случае L обновляется, и алгоритм обновляет B ( x ), b , увеличивает L и сбрасывает m = 1. Формула L = ( n + 1 − L ) ограничивает L количеством доступных синдромов, используемых для расчета несоответствий, а также обрабатывает случай, когда L увеличивается более чем на 1.
Псевдокод
[ редактировать ]Алгоритм Мэсси (1969 , стр. 124) для произвольного поля:
polynomial(field K) s(x) = ... /* coeffs are s_j; output sequence as N-1 degree polynomial) */
/* connection polynomial */
polynomial(field K) C(x) = 1; /* coeffs are c_j */
polynomial(field K) B(x) = 1;
int L = 0;
int m = 1;
field K b = 1;
int n;
/* steps 2. and 6. */
for (n = 0; n < N; n++) {
/* step 2. calculate discrepancy */
field K d = s_n + ;
if (d == 0) {
/* step 3. discrepancy is zero; annihilation continues */
m = m + 1;
} else if (2 * L <= n) {
/* step 5. */
/* temporary copy of C(x) */
polynomial(field K) T(x) = C(x);
C(x) = C(x) - d B(x);
L = n + 1 - L;
B(x) = T(x);
b = d;
m = 1;
} else {
/* step 4. */
C(x) = C(x) - d B(x);
m = m + 1;
}
}
return L;
В случае двоичного кода GF(2) BCH невязка d будет равна нулю на всех нечетных шагах, поэтому можно добавить проверку, чтобы избежать ее вычисления.
/* ... */
for (n = 0; n < N; n++) {
/* if odd step number, discrepancy == 0, no need to calculate it */
if ((n&1) != 0) {
m = m + 1;
continue;
}
/* ... */
См. также
[ редактировать ]- Исправление ошибок Рида – Соломона
- Алгоритм Ридса – Слоана , расширение для последовательностей над целыми числами по модулю n
- Регистр сдвига с нелинейной обратной связью (NLFSR)
Ссылки
[ редактировать ]- ^ Ридс и Слоан 1985 , с. 2
- ^ Ридс, Дж.А.; Слоан, NJA (1985), «Синтез сдвиговых регистров (по модулю n)» (PDF) , SIAM Journal on Computing , 14 (3): 505–513, CiteSeerX 10.1.1.48.4652 , doi : 10.1137/0214038
- ^ Берлекамп, Элвин Р. (1967), Недвоичное декодирование BCH , Международный симпозиум по теории информации, Сан-Ремо, Италия
{{citation}}
: CS1 maint: отсутствует местоположение издателя ( ссылка ) - ^ Берлекамп, Элвин Р. (1984) [1968], Теория алгебраического кодирования (пересмотренная редакция), Лагуна-Хиллз, Калифорния: Aegean Park Press, ISBN 978-0-89412-063-3 . Предыдущее издательство McGraw-Hill, Нью-Йорк, штат Нью-Йорк.
- ^ Мэсси, Дж. Л. (январь 1969 г.), «Синтез сдвиговых регистров и декодирование BCH» (PDF) , Транзакции IEEE по теории информации , IT-15 (1): 122–127, doi : 10.1109/TIT.1969.1054260 , S2CID 9003708
- ^ Бен Атти, Надя; Диас-Тока, Хема М.; Ломбарди, Анри (апрель 2006 г.), «Возвращение к алгоритму Берлекэмпа – Мэсси» , Применимая алгебра в инженерии, коммуникациях и вычислениях , 17 (1): 75–82, arXiv : 2211.11721 , CiteSeerX 10.1.1.96.2743 , doi : 10.1007/s00200-005-0190-z , S2CID 14944277
- ^ Мэсси 1969 , с. 124
Внешние ссылки
[ редактировать ]- «Алгоритм Берлекэмпа-Мэсси» , Математическая энциклопедия , EMS Press , 2001 [1994]
- Алгоритм Берлекэмпа – Мэсси в PlanetMath .
- Вайсштейн, Эрик В. «Алгоритм Берлекэмпа – Мэсси» . Математический мир .
- Реализация GF(2) в системе Mathematica
- (на немецком языке) Апплет Алгоритм Берлекампа – Мэсси
- Онлайн калькулятор GF(2) Берлекэмпа-Месси