Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Обнаружение в канале связи битовых ошибок
Форум разработчиков электроники ELECTRONIX.ru > Cистемный уровень проектирования > Математика и Физика
Костян
Итак дано:

Канал связи между двумя устройствами, в котором допускаются единичные битовые ошибки (1..2 бита на пакет длинной 128 бит). Канал является высокоскоростной последовательной шиной со скоростями передачи ~3ГБит/с. Данные передаются пакетами по 64 байта.

Для защиты от единичных ошибок требуется обнаруживать их и указать тот байт, в котором произошла ошибка.

Выход кажется простым - применить код Хэмминга, который обнаруживает 2 бита ошибки. Но для последовательной передачи данных применяется кодер 8b/10b, для которого изменения одного бита информации приводит к изменению целого байта.

Есть ли решение, для защиты от единичных битовых ошибок в данном случае ?
des00
а разве 8b/10b при изменении пары бит не даст символьную ошибку? которая позволит накрыть сразу 8 бит.

и не понятно вам нужно только определить ошибки или их исправить.
SKov
Цитата(Костян @ Jul 19 2012, 15:40) *
Итак дано:

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

Это надо написать более четко. т.к. разница между 1 ошибкой и двумя принципиальная.

Цитата
Выход кажется простым - применить код Хэмминга, который обнаруживает 2 бита ошибки. Но для последовательной передачи данных применяется кодер 8b/10b, для которого изменения одного бита информации приводит к изменению целого байта.
Есть ли решение, для защиты от единичных битовых ошибок в данном случае ?

Похоже, надо использовать байтовый код Хэмминга.
В данном случае есть резон называть его укороченным кодом Рида-Соломона над GF(256) с расстоянием 3.
Т.е. к потоку надо добавить два байта, и будете исправлять любую ошибку в любом одном байте.
Или будете обнаруживать любую ошибку кратности до 2. но ничего исправить не сможете.
petrov
ИМХО нечего мудрить, CRC и заново передаём битый пакет.
Костян
QUOTE (des00 @ Jul 19 2012, 16:50) *
а разве 8b/10b при изменении пары бит не даст символьную ошибку? которая позволит накрыть сразу 8 бит.

8b/10b может определить только неверную полярность . разве он может определять символьную ошибку ? кодер на логике(не табличный) даст неверную комбинацию и будет разбирать следующий байт как ни в чем не бывало.
Кроме того, я пока затрудняюсь , как вычислить вероятность правильного обнаружения декодером 8b/10b неверной полярности сигнала. Подозреваю она будет всего ~75%, что есть очень плохо.

QUOTE
и не понятно вам нужно только определить ошибки или их исправить.

достаточно определить битый байт. исправлять пока не планирую.

QUOTE
Это надо написать более четко. т.к. разница между 1 ошибкой и двумя принципиальная.

дело в том, что хоть один, что 2 бита ошибки в канале в 8b/10b кодеровке приведет к ошибочному байту после декодирования. поэтому достаточно найти код, котрый будет определять (не исправлять) 1 байт .

QUOTE
Похоже, надо использовать байтовый код Хэмминга.
В данном случае есть резон называть его укороченным кодом Рида-Соломона над GF(256) с расстоянием 3.

более точное название не подскажите ? Либо подскажите название литературы.

Решение впринципе нашел - код Файра. циклический и простой в реализации

QUOTE
ИМХО нечего мудрить, CRC и заново передаём битый пакет.

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

QUOTE (SKov @ Jul 19 2012, 18:37) *
укороченным кодом Рида-Соломона над GF(256) с расстоянием 3.
Т.е. к потоку надо добавить два байта, и будете исправлять любую ошибку в любом одном байте.
Или будете обнаруживать любую ошибку кратности до 2. но ничего исправить не сможете.

Будте добры, поясните ключевой момент, который я не до конца понимаю.
Что скажет декодер в данном случае, если количество ошибок будет больше 2 ? Какова вероятность необнаружения ошибок при их кол-ве более 2 ?
des00
Цитата(Костян @ Jul 20 2012, 04:13) *
8b/10b может определить только неверную полярность . разве он может определять символьную ошибку ? кодер на логике(не табличный) даст неверную комбинацию и будет разбирать следующий байт как ни в чем не бывало.

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

Цитата
дело в том, что хоть один, что 2 бита ошибки в канале в 8b/10b кодеровке приведет к ошибочному байту после декодирования. поэтому достаточно найти код, котрый будет определять (не исправлять) 1 байт .

не совсем верно, если 2 бита пришлись на разные слова, то будет "битым" 2 слова/байта

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

самое простое байтовый рид соломон, с 2 мя проверочными байтами. можно получить : исправление 1 ошибки/исправление 2-х стираний/обнаружение 1/2 ошибок. (ошибка == байту). Если ошибок будет больше, показать сможет все что угодно.
Костян
QUOTE (des00 @ Jul 20 2012, 12:33) *
Если ошибок будет больше, показать сможет все что угодно.

т.е может показать как отсутствие ошибок , так и неверно указать ошибочный байт ?
des00
Цитата(Костян @ Jul 20 2012, 08:39) *
т.е и отсутствие ошибок и неверно указать ошибочный байт ?

в том числе и отсутствие ошибок. смысл в том, что кодовое слово с количеством ошибок больше 2-х, может стать равным другому кодовому слову. Тут уже никуда, это физика %)
Костян
QUOTE (des00 @ Jul 20 2012, 12:41) *
в том числе и отсутствие ошибок. смысл в том, что кодовое слово с количеством ошибок больше 2-х, может стать равным другому кодовому слову. Тут уже никуда, это физика %)

спасибо, с возможностями кода разобрался.

Но в процессе появилась другая идея. В данном случае возможно прийдется обнаруживать пакет не 8бит ошибочной информации, а всего лишь 5, так как 8b/10b является по своей сути суммой между 5b/6b и 3b/4b. Но для окончательного выяснения этой идеи, мне нужно еще раз пересмотреть патент на 8b/10b

QUOTE (des00 @ Jul 20 2012, 12:33) *
не совсем верно, если 2 бита пришлись на разные слова, то будет "битым" 2 слова/байта

весьма верное замечание.
i-mir
Я бы взглянул на вашу задачу со стороны физики.

Вопрос - кто является генератором ошибок при
передаче данных, учитывая что 1 ошибка на 128 бит
это достаточно много. Обычно на порядки меньше.

Я подозреваю, что проблема в аппаратной части
работающей на пределе возможностей, т.е. вероятность
срыва фронтов достаточно велика.

Если так, то лучше банально контролировать четность
каждого байта. Можно также рассчитать вероятность
появления двух ошибок в одном байте - она будет малой.

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



Костян
QUOTE (i-mir @ Jul 23 2012, 14:03) *
Я подозреваю, что проблема в аппаратной части
работающей на пределе возможностей, т.е. вероятность
срыва фронтов достаточно велика.

верно, второй источник ошибок - импульсные помехи

QUOTE
Если так, то лучше банально контролировать четность
каждого байта. Можно также рассчитать вероятность
появления двух ошибок в одном байте - она будет малой.

в данном случае не пройдет. так как 1 бит ошибки в закодированном при помощи 8b/10b превращается в целый байт ошибки, в этом то и вся проблема, что в канале передачи не чистая информация, а пройденная через кодер 8b/10b и я не могу подсчитать четность в каждом слове.

QUOTE
эффективность побайтного контроля в вашем случае может быть плюсом.

решение прежние - ловить пачку ошибок длинной 2 байта.

Хитрость со структорой 8b/10b не пройдет, в патенте есть связь кодера 3b/4b на всю схему 8b/10b :-(
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.