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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Декодер Рида-Соломона со стираниями, Какой признак того, что ошибок слишком много?
andrex
сообщение Jun 8 2009, 10:56
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 21
Регистрация: 20-01-09
Пользователь №: 43 650



Добрый день!

Использую декодирование кода Рида-Соломона по следующему алгоритму.
1. Определяется полином локаторов стираний (в данном случае код с выколотыми проверочными байтами, поэтому этот полином постоянный).
2. Определяются модифицированные синдромы, которые уже соответствуют ошибкам.
3. Алгоритмом Берлекэмпа определяются корни полинома локаторов ошибок, и далее - локаторы ошибок.
4. Определяются ошибки.

В моем случае код должен исправлять 2 ошибки.
Когда допущена 1 или 2 ошибки, все исправляется.
Если ошибок больше двух, то полином локаторов ошибок так же имеет степень 2 (как будто произошло 2 ошибки), но, естественно, позиции ошибок вычисляются неверно.
Вроде как на 3-м этапе должен делаться вывод, что ошибок больше 2. Насколько я понимаю, этим условием является то, что степень полинома локаторов больше 2. Но почему-то такого не получается.

Может быть, кто-то сможет помочь, вывести на верную мысль?

P.S. Посмотрел в коде без стираний: там при превышении кол-ва ошибок степень полинома локаторов тоже перестает расти, но зато корней этого полинома всегда получается меньше, чем степень полинома. А в случае со стираниями оба корня все-таки находятся.

Сообщение отредактировал andrex - Jun 8 2009, 11:17
Go to the top of the page
 
+Quote Post
petrov
сообщение Jun 8 2009, 11:43
Сообщение #2


Гуру
******

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



Для любого кода ресурс по обнаружению/исправлению ошибок/стираний может быть исчерпан, при каком-то отношении сигнал/шум/вероятности ошибок на входе кода он уже не работает, нужно оценивать качество входного сигнала и если оно неудовлетворительное то никак не интерпретировать сигнал.
Go to the top of the page
 
+Quote Post
andrex
сообщение Jun 8 2009, 12:22
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 21
Регистрация: 20-01-09
Пользователь №: 43 650



Цитата(petrov @ Jun 8 2009, 18:43) *
Для любого кода ресурс по обнаружению/исправлению ошибок/стираний может быть исчерпан, при каком-то отношении сигнал/шум/вероятности ошибок на входе кода он уже не работает, нужно оценивать качество входного сигнала и если оно неудовлетворительное то никак не интерпретировать сигнал.

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

Кстати, только что протестировал программу. Оказалось, что когда ошибок много, тогда либо локаторы ошибок принимают недопустимые значения (например, ошибка определяется в месте проверочного байта, хотя там находится не ошибка, а стирание), либо ошибки все же исправляемы.

То есть ответ на исходный вопрос, по всей видимости, такой: если локаторы ошибок лежат в недопустимых пределах, значит ошибки нельзя исправить.
Go to the top of the page
 
+Quote Post
SKov
сообщение Jun 8 2009, 12:41
Сообщение #4


Знающий
****

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



Цитата(andrex @ Jun 8 2009, 16:22) *
То есть ответ на исходный вопрос, по всей видимости, такой: если локаторы ошибок лежат в недопустимых пределах, значит ошибки нельзя исправить.

В принципе, это верно. Но на практике делается чуть иначе. В процедуре Ченя проверяется все локаторы, соответствуюшие невыколотым позициям кода. Если число найденный корней соответствует степени полинома ошибок, то все в порядке, в противном случае выдается сообщение об обнаруженной ошибке.

Сообщение отредактировал SKov - Jun 8 2009, 12:43
Go to the top of the page
 
+Quote Post
andrex
сообщение Jun 8 2009, 12:45
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 21
Регистрация: 20-01-09
Пользователь №: 43 650



Цитата(SKov @ Jun 8 2009, 19:41) *
В принципе, это верно. Но на практике делается чуть иначе. В процедуре Ченя проверяется все локаторы, соответствуюшие невыколотым позициям кода. Если число найденный корней соответствует степени полинома ошибок, то все в порядке, в противном случае выдается сообщение об обнаруженной ошибке.

Да, точно. Спасибо!
Go to the top of the page
 
+Quote Post
petrov
сообщение Jun 8 2009, 12:47
Сообщение #6


Гуру
******

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



Цитата(andrex @ Jun 8 2009, 16:22) *
Насколько я понял, Вы имеете в виду то, что при большом количестве ошибок одно допустимое кодовое слово может замениться на другое.


Да, и никак невозможно будет определить то ли действительно это кодовое слово передавалось то ли ошибок слишком много и на самом деле другое слово передавалось.
Go to the top of the page
 
+Quote Post
samurad
сообщение Jun 8 2009, 13:18
Сообщение #7


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

Группа: Свой
Сообщений: 121
Регистрация: 9-05-08
Из: Япония
Пользователь №: 37 385



Цитата(petrov @ Jun 8 2009, 14:43) *
Для любого кода ресурс по обнаружению/исправлению ошибок/стираний может быть исчерпан, при каком-то отношении сигнал/шум/вероятности ошибок на входе кода он уже не работает, нужно оценивать качество входного сигнала и если оно неудовлетворительное то никак не интерпретировать сигнал.

Качество входного сигнала не всегда можно определить точно с достаточной надежностью, особенно в системах с большим динамическим диапазоном и малым временем реакции петли обратной связи.
Что самое неприятное, даже при неплохом сигнале возможны большие кратко-временные пики шума (опуская интерференцию и пр.), способные дать подряд идущих ошибочных символов чуть больше, чем возможно исправить данным кодом. Использование кода Грея перед и перемеживание после основного кодирования помогает минимизировать вероятность такого события.

Качество декодирования сообщений обычно определяется циклическим кодом с избыточностью (CRC). Правильный выбор полинома CRC позволяет свести к нулю вероятность пропуска сколь угодно ошибок в сообщении заданной длины. (В файловых системах тоже используется активно.)
Go to the top of the page
 
+Quote Post
petrov
сообщение Jun 8 2009, 13:37
Сообщение #8


Гуру
******

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



Цитата(samurad @ Jun 8 2009, 17:18) *
Правильный выбор полинома CRC позволяет свести к нулю вероятность пропуска сколь угодно ошибок в сообщении заданной длины.


Наверное к нулю всё же не позволяет, тем более при любом сигнал/шум.

Сообщение отредактировал petrov - Jun 8 2009, 13:38
Go to the top of the page
 
+Quote Post
SKov
сообщение Jun 8 2009, 14:22
Сообщение #9


Знающий
****

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



Цитата(andrex @ Jun 8 2009, 16:45) *
Да, точно. Спасибо!

И, к слову, исправлять две ошибки по Берлекемпу давно вышло из моды.
Используется прямое решение ключевого уравнения.
В принципе, и для трех ошибок это возможно, но уже заметно сложнее, так что легче
сделать Б-ма. А для двух ошибок - однозначно лучше прямое решение.
Go to the top of the page
 
+Quote Post
samurad
сообщение Jun 8 2009, 14:49
Сообщение #10


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

Группа: Свой
Сообщений: 121
Регистрация: 9-05-08
Из: Япония
Пользователь №: 37 385



Цитата(petrov @ Jun 8 2009, 16:37) *
Наверное к нулю всё же не позволяет, тем более при любом сигнал/шум.

Асимптотически возможно, сам проверял, даже при низком С/Ш. В последнем случае велика вероятность, что как расчитанный полином по принятому сообщению, так и принятый CRC код будут иметь ошибки (много ошибок), и в случае независимых и одинаково распределенных ошибок вероятность их совпадения будет стремиться к нулю при увеличении длины кода. А несовпадение расчитанного с принятым CRC кодом говорит об ошибке декодировния сообщения.
Go to the top of the page
 
+Quote Post
andrex
сообщение Jun 16 2009, 13:03
Сообщение #11


Участник
*

Группа: Участник
Сообщений: 21
Регистрация: 20-01-09
Пользователь №: 43 650



Буду признателен, если кто-нибудь оценит скорость работы получившегося декодера.
Если брать код (40,36,2), то максимально декодер укладывается примерно в 4500 тактов (исправляя при этом две ошибки).
Это 125 такта на один информационный байт.

Результаты можно считать удовлетворительными?
Процессор - Мультикор NVCom.
Go to the top of the page
 
+Quote Post
SKov
сообщение Jun 16 2009, 18:31
Сообщение #12


Знающий
****

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



Цитата(andrex @ Jun 16 2009, 17:03) *
Буду признателен, если кто-нибудь оценит скорость работы получившегося декодера.
Если брать код (40,36,2), то максимально декодер укладывается примерно в 4500 тактов (исправляя при этом две ошибки).
Это 125 такта на один информационный байт.

Результаты можно считать удовлетворительными?
Процессор - Мультикор NVCom.

Уточните, сколько на что тратится.
Go to the top of the page
 
+Quote Post
andrex
сообщение Jun 17 2009, 09:27
Сообщение #13


Участник
*

Группа: Участник
Сообщений: 21
Регистрация: 20-01-09
Пользователь №: 43 650



Цитата(SKov @ Jun 17 2009, 01:31) *
Уточните, сколько на что тратится.

2900 - синдром, учитывающий ошибки и стирания
320 - синдром только ошибок
80 - полином локаторов
640 - определение корней
420 - определение ошибок и исправление

И еще, простаивание конвейера здесь неучтено, поскольку отладчик не позволяет это сделать.
Поэтому в действительности результат будет немного побольше.
Go to the top of the page
 
+Quote Post
Pshekoff
сообщение Oct 28 2009, 14:32
Сообщение #14





Группа: Участник
Сообщений: 11
Регистрация: 22-05-08
Из: Минск
Пользователь №: 37 718



Я проверяю, правильно ли декодер исправил ошибки, пересчетом синдрома исправленного пакета. Если 0, значит декодер отработал верно. Алгоритм Берлекама-Месси в большинстве случаев не отлавливает ситуацию с более, чем t ошибками.

Может, кто-нибудь подскажет поэлегантнее способ, чем пересчет синдрома? Реализуемый в аппаратуре способ...
Go to the top of the page
 
+Quote Post
andrex
сообщение Nov 13 2009, 09:32
Сообщение #15


Участник
*

Группа: Участник
Сообщений: 21
Регистрация: 20-01-09
Пользователь №: 43 650



Цитата(Pshekoff @ Oct 28 2009, 20:32) *
Я проверяю, правильно ли декодер исправил ошибки, пересчетом синдрома исправленного пакета. Если 0, значит декодер отработал верно. Алгоритм Берлекама-Месси в большинстве случаев не отлавливает ситуацию с более, чем t ошибками.

Может, кто-нибудь подскажет поэлегантнее способ, чем пересчет синдрома? Реализуемый в аппаратуре способ...

А есть ли смысл это делать?
Если ошибки могут быть исправлены - они исправляются; если не могут - не исправляются.
Если случайно получилось так, что ошибки привели к допустимой кодовой комбинации - здесь ничего не поможет.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 16th June 2025 - 16:11
Рейтинг@Mail.ru


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