|
|
  |
БЧХ декодер - поясните |
|
|
|
May 7 2011, 21:00
|
Профессионал
    
Группа: Свой
Сообщений: 1 284
Регистрация: 9-04-06
Пользователь №: 15 968

|
Цитата умножитель в полях галуа вида variable by constant это ксор, определенных битов variable. вот эти определенные биты заранее рассчитываются и их маска сидит в "памяти". Вот опять дошли руки. Правильно ли я понял из Вашего кода, Des, что значения синдромов зависят только от входных данных, степени альфы и поля в котором выполняется вычисление? И не зависят от выбранных примитивных полиномов и порождающего (произведения выбранных примитивных)? Функция, создающая маску MULT_BY_A не использует вроде ничего кроме степени альфы и таблицы Alpha_to. Или опять где-то недосмотрел? И еще вопрос: вот такая конструкция {{m-1}{1'b0}} это что? Вот это {x,idat} - concatenate, понятно. Вот отсюда: osyndrome <= {{{m-1}{1'b0}}, idat} ^ mult_by_a(osyndrome); Сам такое не использовал, в книжках не нашел...
|
|
|
|
|
May 7 2011, 22:02
|
Местный
  
Группа: Свой
Сообщений: 216
Регистрация: 31-03-05
Из: Зеленоград
Пользователь №: 3 839

|
Цитата(SKov @ May 7 2011, 15:04)  Это наиболее разумный вариант. Я бы добавил, что БЧХ может и обнаруживать тяжелые ошибки, если в обнаружении есть какой-то смысл. это не наиболее разумный вариант, а наиболее дубовый и худший по критерию вероятности ошибки декодирования. Ошибочное декодирование с выхода LDPC размножит ошибку, с которой может не справиться БЧХ в режиме исправления (декодируя в неправильное разрешенное КС). По этой причине для декодирования вот таких вот составных кодов имеет смысл передавать на след. уровень не единственное решение декодера, а подмножество, М-список решений. п.2-3, которые вам кажутся ерундой, в упрощенном виде реализуют именно эту идею. У циклических кодов БЧХ очень мощная обнаруживающая способность, у LDPC исправляющая, на этом надо и играть. Цитата(des00 @ May 6 2011, 11:31)  умножитель в полях галуа вида variable by constant это ксор, определенных битов variable. вот эти определенные биты заранее рассчитываются и их маска сидит в "памяти". у вас декодер работает для произвольных полиномов, числа исправляемых ошибок и длины кодового слова или что-то узкозаточенное ? если в открытом доступе, где скачать можно ?
|
|
|
|
|
May 8 2011, 02:28
|
Вечный ламер
     
Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453

|
Цитата(alexPec @ May 7 2011, 15:00)  Вот опять дошли руки. Правильно ли я понял из Вашего кода, Des, что значения синдромов зависят только от входных данных, степени альфы и поля в котором выполняется вычисление? И не зависят от выбранных примитивных полиномов и порождающего (произведения выбранных примитивных)? да, только поле считается по порождающему и примитивному полиному %) Цитата Функция, создающая маску MULT_BY_A не использует вроде ничего кроме степени альфы и таблицы Alpha_to. Или опять где-то недосмотрел? да Цитата И еще вопрос: вот такая конструкция {{m-1}{1'b0}} это что? Вот это {x,idat} - concatenate, понятно. репликация в конкатенации, т.е. вписать слева m-1 нулей Цитата(Fast @ May 7 2011, 16:02)  у вас декодер работает для произвольных полиномов, числа исправляемых ошибок и длины кодового слова или что-то узкозаточенное ? если в открытом доступе, где скачать можно ? любые полиномы, лежит в одной из тем на форуме. Единственное с чем я не разобрался, это с генерацией порождающего полинома в SV функции. поэтому пока он задается руками  И еще там есть пара ошибок, которые проявятся при определенных комбинациях укороченных кодов. Новый релиз все руки не доходят сделать %)
--------------------
|
|
|
|
|
May 8 2011, 06:55
|
Знающий
   
Группа: Свой
Сообщений: 812
Регистрация: 22-01-05
Из: SPb
Пользователь №: 2 119

|
Цитата(Fast @ May 8 2011, 02:02)  это не наиболее разумный вариант, а наиболее дубовый и худший по критерию вероятности ошибки декодирования. Худший по вероятности? Откуда такая уверенность? Думаю, что это просто ваша смелая научная гипотеза.  Которая, вполне возможно, и не подтвердится. Цитата Ошибочное декодирование с выхода LDPC размножит ошибку, с которой может не справиться БЧХ в режиме исправления (декодируя в неправильное разрешенное КС). Если LDPC не справится, то в любом случае все пропало  В типичной ошибочной ситуации у него на выходе будет примерено то же, что и на выходе канала. Т.е. полная каша, разгрести которую не под силу никакому БЧХ. Вы не понимаете. Там предусмотрен хилый БЧХ для подчистки мелкого "мусора" после LDPC (почитайте про error floor). Ну и дополнительная возможность для обнаружения ошибок. LDPC в ходе декодирования исправляет десятки и даже сотни ошибок, а БЧХ из этого стандарта всего 8 или 12 - сейчас точно не помню. Но даже если бы там стоял мощный BЧХ, который вы декодировали бы по Чейзу или по Форни со стираниями, он все равно и рядом не стоял бы с LDPC, работающем с непрерывным выходом канала. Именно поэтому LDPC и ценят. А вы их все пытаетесь представить полноценными партнерами в этой связке. Это все равно, что перечислить BP и МПД через запятую.  Цитата По этой причине для декодирования вот таких вот составных кодов имеет смысл передавать на след. уровень не единственное решение декодера, а подмножество, М-список решений. п.2-3, которые вам кажутся ерундой, в упрощенном виде реализуют именно эту идею. Идея богатая.  Могу совершенно точно сказать, что вреда она точно не принесет. А вот относительно заметной пользы - есть сомнения. Которые вы нам наверняка проясните после реализации в программе. Ждем-с.  Цитата У циклических кодов БЧХ очень мощная обнаруживающая способность, у LDPC исправляющая, на этом надо и играть. Смелая научная гипотеза. Очень смелая  LDPC и сам хорошо обнаруживает ошибки и редко ошибается в кодовое слово. Чаще он находит "псевдослово" и на нем зацикливается, но при этом все равно обнаруживает его. Сейчас с Вами пока не о чем спорить. Играйте. Пробуйте. Когда начнете моделирование LDPC, для вас многое прояснится.
|
|
|
|
|
May 8 2011, 11:43
|
Местный
  
Группа: Свой
Сообщений: 216
Регистрация: 31-03-05
Из: Зеленоград
Пользователь №: 3 839

|
Цитата(SKov @ May 8 2011, 10:55)  Худший по вероятности? Откуда такая уверенность? Думаю, что это просто ваша смелая научная гипотеза.  лет 8 назад реализовывал связку TCM-код + CRC16, улучшив ЭВК около 0.6 дб относительно раздельного их декодирования. Как мне кажется, здесь тот же случай, только в профиль. Насколько правильно мы оценим подмножество малодостоверных символов на внутреннем коде LDPC, чтобы в него попало истинное КС, настолько больше шансов выбора из этого подмножества истинного КС внешним кодом БЧХ в режиме обнаружения. Цитата(SKov @ May 8 2011, 10:55)  Вы не понимаете. Там предусмотрен хилый БЧХ для подчистки мелкого "мусора" после LDPC (почитайте про error floor). Ну и дополнительная возможность для обнаружения ошибок. LDPC в ходе декодирования исправляет десятки и даже сотни ошибок, а БЧХ из этого стандарта всего 8 или 12 - сейчас точно не помню. Но даже если бы там стоял мощный BЧХ, который вы декодировали бы по Чейзу или по Форни со стираниями, он все равно и рядом не стоял бы с LDPC, работающем с непрерывным выходом канала.... Вы вообще-то совсем не поняли идею. Еще раз другими словами я ее передал выше. При декодировании составных кодов один из кодов можно использовать в режиме обнаружения, и лучше, чтобы это был код с меньшей исправляющей способностью и высокой обнаруживающей. т.е. в данном случае БЧХ. БЧХ будет исправлять по макс.правдоподобия, Чейзу или Форни уже выход LDPC, т.е. работать с подмножеством малодостоверных векторов. а в целом да, пока не реализовал идею для конкретного случая, и не показал ЭВК, говорить со скептиками о ее состоятельности бесполезно. Цитата(des00 @ May 8 2011, 06:28)  любые полиномы, лежит в одной из тем на форуме. Единственное с чем я не разобрался, это с генерацией порождающего полинома в SV функции. поэтому пока он задается руками  спасибо, с HDL не очень дружу, но может разберусь если у себя затыки будут. Пока почти готов С/С++ прототип декодера БМА для укороченного РС(204,188) DVB-S, но тоже на задаваемый ручками полином и фикс. число ошибок. Хотел поглядеть на ваш, чтобы на БЧХ перенести на произв.полином и скорость p.s. все, увидел с-пример Морелоса-Сарагосы
|
|
|
|
|
May 10 2011, 08:00
|
Профессионал
    
Группа: Свой
Сообщений: 1 284
Регистрация: 9-04-06
Пользователь №: 15 968

|
Цитата(des00 @ May 8 2011, 06:28)  да, только поле считается по порождающему и примитивному полиному %)
да
репликация в конкатенации, т.е. вписать слева m-1 нулей Попробовал перенести на С ваше hdl описание вычисления синдромов БЧХ (чтоб "пощупать", на си как-то удобнее). Оказывается в качестве прототипа С я использовал тот же сишный код что и Вы. Си декодер БЧХ у меня работает. Для кода без ошибок вычисляю синдромы - как и положено нулевые. Пробую вычислить те же синдромы "аналогом" Hdl описания - первый же синдром ненулевой. Похоже я где то недопонял, а где найти не могу. Если не трудно, пожалуйста ткните что где не так я сделал. Прицепляю файл. В последней колонке - функция на Си, она у меня работает правильно. В средней колонке - Ваше HDL описание вычисления синдромов, разбитое на функции, которые используются. В первой колонке - максимально приближенный к HDL код, который уже не работает нормально. Таблицы alpha_to, index_of беру те же, что и генерируются для рабочего кода. Таблица incode - каждый элемент принимает значение 0 или 1 - сгенерирована BCH_encode, сишной функцией декодируется нормально.
Прикрепленные файлы
C_hdl.doc ( 39 килобайт )
Кол-во скачиваний: 60
|
|
|
|
|
May 10 2011, 21:38
|
Профессионал
    
Группа: Свой
Сообщений: 1 284
Регистрация: 9-04-06
Пользователь №: 15 968

|
Цитата(des00 @ May 10 2011, 19:19)  посмотрю позже Исправил я у себя мелкие ошибки, скомпилировал Ваш проект. Взял отдельно модуль bch_syndrome_count_mult с параметром 1 (вычисляю пока только первый синдром), загнал в тестбенч, проверил со своим аналогом на си - данные (значения синдрома после каждого такта) совпадают, проверял на примерно 60 значениях. На вход подавал в одном случае все единицы, в другом последовательность 0,1,0,1,0,1,... В обоих случаях полное совпадение с результатами "модели" на си. Но когда в модель на си подаю реальный бчх код длиной 532 - синдром нулевой почему то не получается, при этом те же данные подаю на такой код: Код for (i = 1; i <= t2; i++) { calc_m(i); //моя функция вычисления MULT_BY_A по хдл-коду calc_syn(i); //моя функция вычисления синдрома по хдл-коду s[i] = 0; for (j = 0; j < N_bch; j++) //N_bch=532 if (input[j] != 0) s[i] ^= alpha_to[(i * j) % n_bch];//n_bch=1023; if (s[i] != 0) syn_error = 1; // Флаг ненулевого синдрома (т.е. обнаружена ошибка) s[i] = index_of[s[i]]; // Переход к степеням от альфа } первый синдром - нулевой. Таблицы alpha_to и index_of одни и те же. Свои мысли кончились, подскажите где копать. Кстати, значение синдрома после каждого клока должно совпадать со значением синдрома в этом коде после каждой итерации? UPD: Развернул поток битов БЧХ зеркально (т.е. первый бит это последний, а последний- это первый), сишная модель hdl теперь выдает нормальный синдром 0,а код выше - то же значение которое выдавала сишная модель до разворота битов. Что сделать чтоб в таком же порядке биты подавать (как и в программу) и при этом чтоб hdl правильно считал синдромы?
|
|
|
|
|
May 11 2011, 01:18
|
Вечный ламер
     
Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453

|
Цитата(alexPec @ May 10 2011, 15:38)  Кстати, значение синдрома после каждого клока должно совпадать со значением синдрома в этом коде после каждой итерации? да Цитата UPD: Развернул поток битов БЧХ зеркально (т.е. первый бит это последний, а последний- это первый), сишная модель hdl теперь выдает нормальный синдром 0,а код выше - то же значение которое выдавала сишная модель до разворота битов. Что сделать чтоб в таком же порядке биты подавать (как и в программу) и при этом чтоб hdl правильно считал синдромы? начинаю припоминать, что то похожее. я отталкивался от аппаратной реализации и относительно сишной базы, которую использовал, там была инверсия битов. Поэтому референсные сишные примеры для начального тестирования приходилось править. Вопрос вычисления синдромов зависит же не только от того какой бит пихать, но и от того как работает кодер. Нужно что бы они работали одинаково. И пихать для тестов в кодер лучше ранодом, инициализируемый, в случае чего констатным значением.
--------------------
|
|
|
|
|
May 11 2011, 06:55
|
Профессионал
    
Группа: Участник
Сообщений: 1 273
Регистрация: 3-03-06
Пользователь №: 14 942

|
Цитата(des00 @ May 11 2011, 05:18)  И пихать для тестов в кодер лучше ранодом, инициализируемый, в случае чего констатным значением. Вопрос следующего рода. Можно ли заставить работать randomize() на пакете ModelSim Starter Edition? Не хотелось бы связываться с контрафактом. Подумываю, чтобы загружать тестбенч из графического файла.  Т.е. Ваши сорцы в ModelSim SE не проходят симуляцию.
Сообщение отредактировал x736C - May 11 2011, 06:58
|
|
|
|
|
May 12 2011, 13:11
|
Участник

Группа: Участник
Сообщений: 16
Регистрация: 17-06-10
Из: МИНСК
Пользователь №: 57 975

|
Уважемые ГУРУ по кодам. Проясните ситуацию для меня темного. Ситуация: на вход декодера БЧХ приходит последовательность бит с количеством ошибок превышающим количество исправляемое кодом; декодер рапартует об исправлении ошибок (т.к. после поиска Ченя количество корней полинома локаторов ошибок равняется его степени), но последовательность бит отличается от исходной. Как и на какой стадии (вычисление синдромов ошибок, алгоритм Берлекемпа-Мэсси, поиск Ченя) определить что исходную последовательность восстановить невозможно?
Сообщение отредактировал NIKOLASIUS - May 12 2011, 13:23
--------------------
Никогда не бойся делать то, что ты не умеешь. Помни, ковчег был построен любителем. Профессионалы построили "Титаник".
|
|
|
|
|
May 12 2011, 17:18
|
Профессионал
    
Группа: Свой
Сообщений: 1 284
Регистрация: 9-04-06
Пользователь №: 15 968

|
Цитата(des00 @ May 11 2011, 05:18)  да
начинаю припоминать, что то похожее. я отталкивался от аппаратной реализации и относительно сишной базы, которую использовал, там была инверсия битов. Поэтому референсные сишные примеры для начального тестирования приходилось править.
Вопрос вычисления синдромов зависит же не только от того какой бит пихать, но и от того как работает кодер. Нужно что бы они работали одинаково. И пихать для тестов в кодер лучше ранодом, инициализируемый, в случае чего констатным значением. Уважаемый Des, СПАСИБО! Со всем разобрался, все получилось как хотел. Помогли сэкономить кучу времени! Дай Бог здоровья тебе добрый человек!
|
|
|
|
|
May 18 2011, 08:08
|
Участник

Группа: Участник
Сообщений: 16
Регистрация: 17-06-10
Из: МИНСК
Пользователь №: 57 975

|
Применив CRC-16 совместно с БЧХ кодом (к кодируемым данным добавил два байта контрольной суммы) получил весьма надежный способ определения невозможности восстановить исходные данные при возникновении ошибок в количестве большем чем может исправить декодер.
--------------------
Никогда не бойся делать то, что ты не умеешь. Помни, ковчег был построен любителем. Профессионалы построили "Титаник".
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|