Хочу разобраться с расширенным кодом БЧХ(1020, 998).
Генератор кода g(x)= m1(x)*m3(x)*m5(x)*(x^2+1), где m1(x) = x^10+x^3 + 1 m3(x) = x^10+x^3+x^2+x+1 m5(x) = x^10+x^8+x^3+x^2+1
Перелопатил тонны литературы. В основном пишут про расширение линейного кода в терминах проверочной матрицы. или что к g(x) добавляется множитель (x+1), который есть ни что иное, как бит четности.
Как декодировать такой код нигде не написано. (есть про расширенный Рид-Соломон - но это другое - там добавляется целый проверочный СИМВОЛ). У Блейхута описание идет в частотной области. ничего не понятно.
В книге "L.Hanzo, T.H.Liew, B.L.Yeap - Turbo Coding, Turbo Equalisation and Space-Time Coding for Transmission over Wireless Channels" Декодирование расширенных коды довольно поднобно описано. Но там мягкое декодирование. Какие-то манипуляции с аналоговым сигналом. Жестокая жесть. Мне в общем нужет жесткий декодер. Ну может быть с поддержкой стираний (так как будет использоваться в составе каскадного кода).
Замечу, что (x^2+1) = (x+1)(x+1). В чем смысл добавления двух одинаковых множителей? Что делать с двумя дополнительными проверочными битами?
Занимаюсь ECC-кодами около года. Сделал классический декодер кодов Рида-Соломона и БЧХ. Декодер нерасширенного БЧХ сделан как прототип к текущему проекту. g(x) = m1(x)*m3(x)*m5(x). Это код БЧХ "в узком смысле" (narrow sense): lcm(min_poly(alpha(1)), ... , min_poly(alpha(6))). Работает и выдает неплохую производительность.
Кодирование, как я понял, делается обычным порядком - в проверочные позиции записывается остаток от деления на g(x). Вот как работать с расширенным кодом - непонятно. Прошу помощи клуба.
|