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

 
 
4 страниц V  < 1 2 3 4 >  
Reply to this topicStart new topic
> БЧХ декодер - поясните
alexPec
сообщение May 7 2011, 21:00
Сообщение #31


Профессионал
*****

Группа: Свой
Сообщений: 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);

Сам такое не использовал, в книжках не нашел...
Go to the top of the page
 
+Quote Post
Fast
сообщение May 7 2011, 22:02
Сообщение #32


Местный
***

Группа: Свой
Сообщений: 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. вот эти определенные биты заранее рассчитываются и их маска сидит в "памяти".
у вас декодер работает для произвольных полиномов, числа исправляемых ошибок и длины кодового слова или что-то узкозаточенное ?
если в открытом доступе, где скачать можно ?
Go to the top of the page
 
+Quote Post
des00
сообщение May 8 2011, 02:28
Сообщение #33


Вечный ламер
******

Группа: Модераторы
Сообщений: 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 функции. поэтому пока он задается руками biggrin.gif
И еще там есть пара ошибок, которые проявятся при определенных комбинациях укороченных кодов. Новый релиз все руки не доходят сделать %)


--------------------
Go to the top of the page
 
+Quote Post
SKov
сообщение May 8 2011, 06:55
Сообщение #34


Знающий
****

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



Цитата(Fast @ May 8 2011, 02:02) *
это не наиболее разумный вариант, а наиболее дубовый и худший по критерию вероятности ошибки декодирования.

Худший по вероятности? Откуда такая уверенность?
Думаю, что это просто ваша смелая научная гипотеза. wink.gif
Которая, вполне возможно, и не подтвердится.

Цитата
Ошибочное декодирование с выхода LDPC размножит ошибку, с которой может не справиться БЧХ в режиме исправления (декодируя в неправильное разрешенное КС).

Если LDPC не справится, то в любом случае все пропало wink.gif В типичной ошибочной ситуации у него на выходе будет
примерено то же, что и на выходе канала. Т.е. полная каша, разгрести которую не под силу никакому БЧХ.
Вы не понимаете. Там предусмотрен хилый БЧХ для подчистки мелкого "мусора" после LDPC (почитайте про error floor).
Ну и дополнительная возможность для обнаружения ошибок.
LDPC в ходе декодирования исправляет десятки и даже сотни ошибок, а БЧХ из этого стандарта всего 8 или 12 - сейчас точно не помню.
Но даже если бы там стоял мощный BЧХ, который вы декодировали бы по Чейзу или по Форни со стираниями,
он все равно и рядом не стоял бы с LDPC, работающем с непрерывным выходом канала.
Именно поэтому LDPC и ценят. А вы их все пытаетесь представить полноценными партнерами в этой связке. Это все равно,
что перечислить BP и МПД через запятую. wink.gif
Цитата
По этой причине для декодирования вот таких вот составных кодов имеет смысл передавать на след. уровень не единственное решение декодера, а подмножество, М-список решений. п.2-3, которые вам кажутся ерундой, в упрощенном виде реализуют именно эту идею.

Идея богатая. wink.gif Могу совершенно точно сказать, что вреда она точно не принесет.
А вот относительно заметной пользы - есть сомнения. Которые вы нам наверняка проясните после реализации в программе.
Ждем-с. wink.gif

Цитата
У циклических кодов БЧХ очень мощная обнаруживающая способность, у LDPC исправляющая, на этом надо и играть.

Смелая научная гипотеза. Очень смелая wink.gif
LDPC и сам хорошо обнаруживает ошибки и редко ошибается в кодовое слово.
Чаще он находит "псевдослово" и на нем зацикливается, но при этом все равно обнаруживает его.
Сейчас с Вами пока не о чем спорить. Играйте. Пробуйте.
Когда начнете моделирование LDPC, для вас многое прояснится.
Go to the top of the page
 
+Quote Post
Fast
сообщение May 8 2011, 11:43
Сообщение #35


Местный
***

Группа: Свой
Сообщений: 216
Регистрация: 31-03-05
Из: Зеленоград
Пользователь №: 3 839



Цитата(SKov @ May 8 2011, 10:55) *
Худший по вероятности? Откуда такая уверенность?
Думаю, что это просто ваша смелая научная гипотеза. wink.gif
лет 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 функции. поэтому пока он задается руками biggrin.gif
спасибо, с HDL не очень дружу, но может разберусь если у себя затыки будут. Пока почти готов С/С++ прототип декодера БМА для укороченного РС(204,188) DVB-S, но тоже на задаваемый ручками полином и фикс. число ошибок. Хотел поглядеть на ваш, чтобы на БЧХ перенести на произв.полином и скорость
p.s. все, увидел с-пример Морелоса-Сарагосы
Go to the top of the page
 
+Quote Post
alexPec
сообщение May 10 2011, 08:00
Сообщение #36


Профессионал
*****

Группа: Свой
Сообщений: 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
 
Go to the top of the page
 
+Quote Post
des00
сообщение May 10 2011, 15:19
Сообщение #37


Вечный ламер
******

Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453



посмотрю позже


--------------------
Go to the top of the page
 
+Quote Post
alexPec
сообщение May 10 2011, 21:38
Сообщение #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 правильно считал синдромы?
Go to the top of the page
 
+Quote Post
des00
сообщение May 11 2011, 01:18
Сообщение #39


Вечный ламер
******

Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453



Цитата(alexPec @ May 10 2011, 15:38) *
Кстати, значение синдрома после каждого клока должно совпадать со значением синдрома в этом коде после каждой итерации?

да
Цитата
UPD: Развернул поток битов БЧХ зеркально (т.е. первый бит это последний, а последний- это первый), сишная модель hdl теперь выдает нормальный синдром 0,а код выше - то же значение которое выдавала сишная модель до разворота битов. Что сделать чтоб в таком же порядке биты подавать (как и в программу) и при этом чтоб hdl правильно считал синдромы?

начинаю припоминать, что то похожее. я отталкивался от аппаратной реализации и относительно сишной базы, которую использовал, там была инверсия битов. Поэтому референсные сишные примеры для начального тестирования приходилось править.

Вопрос вычисления синдромов зависит же не только от того какой бит пихать, но и от того как работает кодер. Нужно что бы они работали одинаково. И пихать для тестов в кодер лучше ранодом, инициализируемый, в случае чего констатным значением.


--------------------
Go to the top of the page
 
+Quote Post
x736C
сообщение May 11 2011, 06:55
Сообщение #40


Профессионал
*****

Группа: Участник
Сообщений: 1 273
Регистрация: 3-03-06
Пользователь №: 14 942



Цитата(des00 @ May 11 2011, 05:18) *
И пихать для тестов в кодер лучше ранодом, инициализируемый, в случае чего констатным значением.

Вопрос следующего рода. Можно ли заставить работать randomize() на пакете ModelSim Starter Edition?
Не хотелось бы связываться с контрафактом.
Подумываю, чтобы загружать тестбенч из графического файла. sm.gif

Т.е. Ваши сорцы в ModelSim SE не проходят симуляцию.

Сообщение отредактировал x736C - May 11 2011, 06:58
Go to the top of the page
 
+Quote Post
alexPec
сообщение May 11 2011, 07:07
Сообщение #41


Профессионал
*****

Группа: Свой
Сообщений: 1 284
Регистрация: 9-04-06
Пользователь №: 15 968



Цитата(des00 @ May 11 2011, 05:18) *
Вопрос вычисления синдромов зависит же не только от того какой бит пихать, но и от того как работает кодер. Нужно что бы они работали одинаково. И пихать для тестов в кодер лучше ранодом, инициализируемый, в случае чего констатным значением.


Вот такой вопрос еще возник: если есть два укороченных кода с разной длиной блока, но кол-во проверочных бит и исправляемых ошибок одно и тоже, одинаковые генераторный полином и примитивный полином для построения поля, то их можно будет декодировать одним декодером без изменений, только вовремя надо подавать сигнал EOP?
Go to the top of the page
 
+Quote Post
NIKOLASIUS
сообщение May 12 2011, 13:11
Сообщение #42


Участник
*

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



Уважемые ГУРУ по кодам. Проясните ситуацию для меня темного.
Ситуация: на вход декодера БЧХ приходит последовательность бит с количеством ошибок превышающим количество исправляемое кодом; декодер рапартует об исправлении ошибок (т.к. после поиска Ченя количество корней полинома локаторов ошибок равняется его степени), но последовательность бит отличается от исходной.
Как и на какой стадии (вычисление синдромов ошибок, алгоритм Берлекемпа-Мэсси, поиск Ченя) определить что исходную последовательность восстановить невозможно?

Сообщение отредактировал NIKOLASIUS - May 12 2011, 13:23


--------------------
Никогда не бойся делать то, что ты не умеешь.
Помни, ковчег был построен любителем.
Профессионалы построили "Титаник".
Go to the top of the page
 
+Quote Post
petrov
сообщение May 12 2011, 15:51
Сообщение #43


Гуру
******

Группа: Свой
Сообщений: 2 220
Регистрация: 21-10-04
Из: Balakhna
Пользователь №: 937



Цитата(NIKOLASIUS @ May 12 2011, 17:11) *
Уважемые ГУРУ по кодам. Проясните ситуацию для меня темного.
Ситуация: на вход декодера БЧХ приходит последовательность бит с количеством ошибок превышающим количество исправляемое кодом; декодер рапартует об исправлении ошибок (т.к. после поиска Ченя количество корней полинома локаторов ошибок равняется его степени), но последовательность бит отличается от исходной.
Как и на какой стадии (вычисление синдромов ошибок, алгоритм Берлекемпа-Мэсси, поиск Ченя) определить что исходную последовательность восстановить невозможно?


http://electronix.ru/forum/index.php?s=&am...st&p=819362
Go to the top of the page
 
+Quote Post
alexPec
сообщение May 12 2011, 17:18
Сообщение #44


Профессионал
*****

Группа: Свой
Сообщений: 1 284
Регистрация: 9-04-06
Пользователь №: 15 968



Цитата(des00 @ May 11 2011, 05:18) *
да

начинаю припоминать, что то похожее. я отталкивался от аппаратной реализации и относительно сишной базы, которую использовал, там была инверсия битов. Поэтому референсные сишные примеры для начального тестирования приходилось править.

Вопрос вычисления синдромов зависит же не только от того какой бит пихать, но и от того как работает кодер. Нужно что бы они работали одинаково. И пихать для тестов в кодер лучше ранодом, инициализируемый, в случае чего констатным значением.


Уважаемый Des, СПАСИБО! Со всем разобрался, все получилось как хотел. Помогли сэкономить кучу времени! Дай Бог здоровья тебе добрый человек!
Go to the top of the page
 
+Quote Post
NIKOLASIUS
сообщение May 18 2011, 08:08
Сообщение #45


Участник
*

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



Применив CRC-16 совместно с БЧХ кодом (к кодируемым данным добавил два байта контрольной суммы) получил весьма надежный способ определения невозможности восстановить исходные данные при возникновении ошибок в количестве большем чем может исправить декодер. rolleyes.gif


--------------------
Никогда не бойся делать то, что ты не умеешь.
Помни, ковчег был построен любителем.
Профессионалы построили "Титаник".
Go to the top of the page
 
+Quote Post

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

 


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


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