реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Расширенный БЧХ-код (extended BCH code)
roman73
сообщение May 27 2011, 12:10
Сообщение #1





Группа: Участник
Сообщений: 13
Регистрация: 25-05-11
Пользователь №: 65 262



Хочу разобраться с расширенным кодом БЧХ(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).
Вот как работать с расширенным кодом - непонятно.
Прошу помощи клуба.
Go to the top of the page
 
+Quote Post
SKov
сообщение May 27 2011, 12:27
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 812
Регистрация: 22-01-05
Из: SPb
Пользователь №: 2 119



Цитата(roman73 @ May 27 2011, 16:10) *
Хочу разобраться с расширенным кодом БЧХ(1020, 998).
Замечу, что (x^2+1) = (x+1)(x+1).
В чем смысл добавления двух одинаковых множителей?
Что делать с двумя дополнительными проверочными битами?
Вот как работать с расширенным кодом - непонятно.
Прошу помощи клуба.

Обычно добавляется один множитель. Откуда взялся квадрат - непонятно.
Возьмите свой старый проект (нерасширенного кода БЧХ). И без всяких полевых изворотов тупо добавьте проверку
на четность по всему кодовому слову (один проверочный бит). Декодируете все по старому (не учитывая новый проверочный бит).
После декодирования проверяете, сколько ошибок было исправлено. Если их было (d-1)/2, то проверяете , выполняется ли проверка на четность
после исправления найденных ошибок. Если нет - вы обнаружили неисправимую комбинацию ошибок.
Как-то так.
Go to the top of the page
 
+Quote Post
roman73
сообщение May 27 2011, 12:45
Сообщение #3





Группа: Участник
Сообщений: 13
Регистрация: 25-05-11
Пользователь №: 65 262



Цитата(SKov @ May 27 2011, 16:27) *
Обычно добавляется один множитель. Откуда взялся квадрат - непонятно.

Из спецификации. sad.gif

Цитата(SKov @ May 27 2011, 16:27) *
Возьмите свой старый проект (нерасширенного кода БЧХ). И без всяких полевых изворотов тупо добавьте проверку
на четность по всему кодовому слову (один проверочный бит). Декодируете все по старому (не учитывая новый проверочный бит).
После декодирования проверяете, сколько ошибок было исправлено. Если их было (d-1)/2, то проверяете , выполняется ли проверка на четность
после исправления найденных ошибок. Если нет - вы обнаружили неисправимую комбинацию ошибок.
Как-то так.

Ну это первое, что приходит в голову. Возможно, дополнительную избыточность можно как-нибудь использовать более продуктивно...
Go to the top of the page
 
+Quote Post
SKov
сообщение May 27 2011, 13:03
Сообщение #4


Знающий
****

Группа: Свой
Сообщений: 812
Регистрация: 22-01-05
Из: SPb
Пользователь №: 2 119



Цитата(roman73 @ May 27 2011, 16:45) *
Из спецификации. sad.gif

Если не секрет, из какой?

Цитата
Ну это первое, что приходит в голову. Возможно, дополнительную избыточность можно как-нибудь использовать более продуктивно...

Тут все зыбко. Строго говоря, когда вы добавляете нулевой корень, то у вас просто увеличивается на единицу число проверочных символов кода, а число информационных уменьшается на столько же. А у вас длина меняется? - или я не понял вашей задачи?
Go to the top of the page
 
+Quote Post
roman73
сообщение May 27 2011, 13:10
Сообщение #5





Группа: Участник
Сообщений: 13
Регистрация: 25-05-11
Пользователь №: 65 262



Цитата(SKov @ May 27 2011, 17:03) *
Если не секрет, из какой?

G.975.1 I9
Цитата(SKov @ May 27 2011, 17:03) *
Тут все зыбко. Строго говоря, когда вы добавляете нулевой корень, то у вас просто увеличивается на единицу число проверочных символов кода, а число информационных уменьшается на столько же. А у вас длина меняется? - или я не понял вашей задачи?

Расширенные коды тем и отличаются, что увеличивают длину кодового слова.
Нулевой корень (вернее alpha(0)) - это просто код не "в узком смысле" (синдромы нумеруются не с 1).
Go to the top of the page
 
+Quote Post
roman73
сообщение May 30 2011, 10:54
Сообщение #6





Группа: Участник
Сообщений: 13
Регистрация: 25-05-11
Пользователь №: 65 262



Цитата(SKov @ May 27 2011, 17:03) *
Тут все зыбко. Строго говоря, когда вы добавляете нулевой корень, то у вас просто увеличивается на единицу число проверочных символов кода, а число информационных уменьшается на столько же. А у вас длина меняется? - или я не понял вашей задачи?

Да, от прочитанного у меня какая-то каша в голове.

Добавление множителя (x+1)(x+1) дает не биты четности, а новые синдромы (причем, со значениями из GF(2)).

Добавление множителя к генератору, как я понял, называется "выбрасывание" ("expurgation").
То есть, часть прежних кодовых слов перестают считаться таковыми.
Возможно, это то, что мне нужно (хотя в спеках четко написано "extended code")...
Как мне объяснили, вся эта чехарда с расширениями-укорочениями задумана для обратной совместимости формата кадра с кодом RS(255,239). Думаю, что дописывать проверочные биты, чтобы их сразу выкинуть смысла нет.

Вызывают трудности два момента:
1) Что делать с дополнительным коэффициентом/коэффициентами синдрома, локатора и т.д.
2) Степени корней (с учетом дополнительного множителя) не всегда идут попорядку.
(x+1) - это минимальный многочлен alpha(0) (тут вроде всё нормально, но корень двойной).
Есть еще один код, с генератором
gh(x) = x^30*m1(x^-1)*m3(x^-1)*m5(x^-1)*(x^2+x+1).
Его корни: lcm(min_poly(alpha(1017)), ... , min_poly(alpha(1022))) = lcm(min_poly(alpha(-1)), ... , min_poly(alpha(-6))).
Но дополнительный множитель (x^2+x+1) - это минимальный многочлен alpha(341) и alpha(682).
В определении же кодов БЧХ четко сказано, что степени должны идти попорядку...

Go to the top of the page
 
+Quote Post
Gold777
сообщение Nov 14 2012, 17:51
Сообщение #7


Частый гость
**

Группа: Участник
Сообщений: 118
Регистрация: 28-10-11
Из: Москва
Пользователь №: 68 022



Не пойму что-то почему код БЧХ(1020,988) является расширенным (и в рекомендации, указанной в этой теме G.975 I.9 они именуются как extended BCH code)? Вроде как это укороченный код от БЧХ(1023, 991). Или в рекомендации как-то по-другому понимается понятие укороченного кода?

Сообщение отредактировал Gold777 - Nov 14 2012, 17:55
Прикрепленные файлы
Прикрепленный файл  T_REC_G.975.1_200402_I__PDF_E.pdf ( 1.31 мегабайт ) Кол-во скачиваний: 166
 
Go to the top of the page
 
+Quote Post
Denisnovel
сообщение Jan 15 2014, 11:55
Сообщение #8


Частый гость
**

Группа: Свой
Сообщений: 108
Регистрация: 31-12-07
Из: Фрязино М.О.
Пользователь №: 33 753



Кто нибудь выяснил, чем отличается расширенный код от обычного?
Go to the top of the page
 
+Quote Post
miroshnikov-mai
сообщение Feb 25 2015, 15:06
Сообщение #9





Группа: Участник
Сообщений: 9
Регистрация: 23-07-13
Пользователь №: 77 654



Почитал стандарт - остались непонятны два момента:

1) Как все-таки декодировать код с полиномом gh(x) = x^30*m1(x^-1)*m3(x^-1)*m5(x^-1)*(x^2+x+1)?
2) Как добыть проверочные биты pH и pS для первого и второго кодеров из той мутаты, которая там вместо проверочных бит?
Go to the top of the page
 
+Quote Post
andyp
сообщение Feb 27 2015, 23:37
Сообщение #10


Местный
***

Группа: Участник
Сообщений: 453
Регистрация: 23-07-08
Пользователь №: 39 163



Цитата(miroshnikov-mai @ Feb 25 2015, 18:06) *
1) Как все-таки декодировать код с полиномом gh(x) = x^30*m1(x^-1)*m3(x^-1)*m5(x^-1)*(x^2+x+1)?


Могу ошибаться, но:

Легко показать, что этот код является подкодом кода БЧХ с полиномомx x^30*m1(x^-1)*m3(x^-1)*m5(x^-1) - если кодовые слова делятся на gh(x), то они делятся и на x^30*m1(x^-1)*m3(x^-1)*m5(x^-1). Причем ,кодовое расстояние подкода осталось таким же как было у кода БЧХ (это уже не совсем очевидно, но про это написано в гугле при поиске BCH (1020, 988), где про него говорят, что он triple error correcting sm.gif)

Таким образом, вырисовывается следующая схема декодирования:
1. декодируем кодовые слова декодером кода БЧХ, исправляющим 3 ошибки
2. в случае успешного декодирования проверяем на равенство нулю два синдрома S(a^341) и S(a^682) (фактически, это проверка на принадлежность слова подкоду) - ну или еще каким способом убеждаемся, что кодовое слово после исправления ошибок делится на (x^2+x+1)
Go to the top of the page
 
+Quote Post
andyp
сообщение Feb 28 2015, 09:13
Сообщение #11


Местный
***

Группа: Участник
Сообщений: 453
Регистрация: 23-07-08
Пользователь №: 39 163



ps на счет точного равенство кодового расстояния могу и наврать - для подкода оно могло увеличиться на 1
Go to the top of the page
 
+Quote Post
miroshnikov-mai
сообщение Mar 3 2015, 13:10
Сообщение #12





Группа: Участник
Сообщений: 9
Регистрация: 23-07-13
Пользователь №: 77 654



Спасибо, именно так сделал с первым полиномом g(x)= m1(x)*m3(x)*m5(x)*(x^2+1). Сгенерил полином функциями gfconv, сгенерил в матлабе тестовую последовательность, поделил на m1(x)*m3(x)*m5(x)*(x^2+1) и на x^30*m1(x^-1)*m3(x^-1)*m5(x^-1), получив две группы проверочных бит. В первом случае поступил как вы и советовали, а во втором смутило (x^-1) и (x^2+x+1).
И все-таки пока осталось непонятно как добыть проверочные биты.
Go to the top of the page
 
+Quote Post
andyp
сообщение Mar 3 2015, 14:02
Сообщение #13


Местный
***

Группа: Участник
Сообщений: 453
Регистрация: 23-07-08
Пользователь №: 39 163



Цитата(miroshnikov-mai @ Mar 3 2015, 16:10) *
Спасибо, именно так сделал с первым полиномом g(x)= m1(x)*m3(x)*m5(x)*(x^2+1). Сгенерил полином функциями gfconv, сгенерил в матлабе тестовую последовательность, поделил на m1(x)*m3(x)*m5(x)*(x^2+1) и на x^30*m1(x^-1)*m3(x^-1)*m5(x^-1), получив две группы проверочных бит. В первом случае поступил как вы и советовали, а во втором смутило (x^-1) и (x^2+x+1).


Ну все эти x^-1 и x^30 имеют отношение к т.н. reciprocal polynomials. Про них неплохая статья в википедии со сслыками на еще более хорошую книжку Pless, Vera, Introduction to the Theory of Error Correcting Codes

статья из вики:
http://en.wikipedia.org/wiki/Reciprocal_polynomial

книжку можно скачать здесь
http://bookzz.org/md5/c2cdbc18909140a2918271ecfc07b452

Цитата
И все-таки пока осталось непонятно как добыть проверочные биты.


Я этим стандартом не занимался, так что ничем особо помочь не могу.
Go to the top of the page
 
+Quote Post
miroshnikov-mai
сообщение Mar 3 2015, 14:31
Сообщение #14





Группа: Участник
Сообщений: 9
Регистрация: 23-07-13
Пользователь №: 77 654



Спасибо, вы и так очень помогли, пойду читать
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th July 2025 - 18:00
Рейтинг@Mail.ru


Страница сгенерированна за 0.01603 секунд с 7
ELECTRONIX ©2004-2016