Костян 0 19 июля, 2012 Опубликовано 19 июля, 2012 · Жалоба Итак дано: Канал связи между двумя устройствами, в котором допускаются единичные битовые ошибки (1..2 бита на пакет длинной 128 бит). Канал является высокоскоростной последовательной шиной со скоростями передачи ~3ГБит/с. Данные передаются пакетами по 64 байта. Для защиты от единичных ошибок требуется обнаруживать их и указать тот байт, в котором произошла ошибка. Выход кажется простым - применить код Хэмминга, который обнаруживает 2 бита ошибки. Но для последовательной передачи данных применяется кодер 8b/10b, для которого изменения одного бита информации приводит к изменению целого байта. Есть ли решение, для защиты от единичных битовых ошибок в данном случае ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 19 июля, 2012 Опубликовано 19 июля, 2012 · Жалоба а разве 8b/10b при изменении пары бит не даст символьную ошибку? которая позволит накрыть сразу 8 бит. и не понятно вам нужно только определить ошибки или их исправить. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SKov 0 19 июля, 2012 Опубликовано 19 июля, 2012 · Жалоба Итак дано: Канал связи между двумя устройствами, в котором допускаются единичные битовые ошибки (1..2 бита на пакет длинной 128 бит). Это надо написать более четко. т.к. разница между 1 ошибкой и двумя принципиальная. Выход кажется простым - применить код Хэмминга, который обнаруживает 2 бита ошибки. Но для последовательной передачи данных применяется кодер 8b/10b, для которого изменения одного бита информации приводит к изменению целого байта. Есть ли решение, для защиты от единичных битовых ошибок в данном случае ? Похоже, надо использовать байтовый код Хэмминга. В данном случае есть резон называть его укороченным кодом Рида-Соломона над GF(256) с расстоянием 3. Т.е. к потоку надо добавить два байта, и будете исправлять любую ошибку в любом одном байте. Или будете обнаруживать любую ошибку кратности до 2. но ничего исправить не сможете. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
petrov 6 19 июля, 2012 Опубликовано 19 июля, 2012 · Жалоба ИМХО нечего мудрить, CRC и заново передаём битый пакет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Костян 0 20 июля, 2012 Опубликовано 20 июля, 2012 · Жалоба а разве 8b/10b при изменении пары бит не даст символьную ошибку? которая позволит накрыть сразу 8 бит. 8b/10b может определить только неверную полярность . разве он может определять символьную ошибку ? кодер на логике(не табличный) даст неверную комбинацию и будет разбирать следующий байт как ни в чем не бывало. Кроме того, я пока затрудняюсь , как вычислить вероятность правильного обнаружения декодером 8b/10b неверной полярности сигнала. Подозреваю она будет всего ~75%, что есть очень плохо. и не понятно вам нужно только определить ошибки или их исправить. достаточно определить битый байт. исправлять пока не планирую. Это надо написать более четко. т.к. разница между 1 ошибкой и двумя принципиальная. дело в том, что хоть один, что 2 бита ошибки в канале в 8b/10b кодеровке приведет к ошибочному байту после декодирования. поэтому достаточно найти код, котрый будет определять (не исправлять) 1 байт . Похоже, надо использовать байтовый код Хэмминга. В данном случае есть резон называть его укороченным кодом Рида-Соломона над GF(256) с расстоянием 3. более точное название не подскажите ? Либо подскажите название литературы. Решение впринципе нашел - код Файра. циклический и простой в реализации ИМХО нечего мудрить, CRC и заново передаём битый пакет. ээ..не, слишком просто, да и не хочется терять целый пакет, при потере всего 1 бита !. Передавать заново пакет не имею возможности, канал связи и так на пределе своей пропускной способности, могу выделить только 2..3 байта на кодировку. укороченным кодом Рида-Соломона над GF(256) с расстоянием 3. Т.е. к потоку надо добавить два байта, и будете исправлять любую ошибку в любом одном байте. Или будете обнаруживать любую ошибку кратности до 2. но ничего исправить не сможете. Будте добры, поясните ключевой момент, который я не до конца понимаю. Что скажет декодер в данном случае, если количество ошибок будет больше 2 ? Какова вероятность необнаружения ошибок при их кол-ве более 2 ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 20 июля, 2012 Опубликовано 20 июля, 2012 · Жалоба 8b/10b может определить только неверную полярность . разве он может определять символьную ошибку ? кодер на логике(не табличный) даст неверную комбинацию и будет разбирать следующий байт как ни в чем не бывало. не знал такого, думал что там все просто должно быть, приняли не верную комбинацию - выдали метку стирания символа (кста она вам может хорошо помочь). дело в том, что хоть один, что 2 бита ошибки в канале в 8b/10b кодеровке приведет к ошибочному байту после декодирования. поэтому достаточно найти код, котрый будет определять (не исправлять) 1 байт . не совсем верно, если 2 бита пришлись на разные слова, то будет "битым" 2 слова/байта ээ..не, слишком просто, да и не хочется терять целый пакет, при потере всего 1 бита !. Передавать заново пакет не имею возможности, канал связи и так на пределе своей пропускной способности, могу выделить только 2..3 байта на кодировку. самое простое байтовый рид соломон, с 2 мя проверочными байтами. можно получить : исправление 1 ошибки/исправление 2-х стираний/обнаружение 1/2 ошибок. (ошибка == байту). Если ошибок будет больше, показать сможет все что угодно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Костян 0 20 июля, 2012 Опубликовано 20 июля, 2012 · Жалоба Если ошибок будет больше, показать сможет все что угодно. т.е может показать как отсутствие ошибок , так и неверно указать ошибочный байт ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 20 июля, 2012 Опубликовано 20 июля, 2012 · Жалоба т.е и отсутствие ошибок и неверно указать ошибочный байт ? в том числе и отсутствие ошибок. смысл в том, что кодовое слово с количеством ошибок больше 2-х, может стать равным другому кодовому слову. Тут уже никуда, это физика %) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Костян 0 23 июля, 2012 Опубликовано 23 июля, 2012 · Жалоба в том числе и отсутствие ошибок. смысл в том, что кодовое слово с количеством ошибок больше 2-х, может стать равным другому кодовому слову. Тут уже никуда, это физика %) спасибо, с возможностями кода разобрался. Но в процессе появилась другая идея. В данном случае возможно прийдется обнаруживать пакет не 8бит ошибочной информации, а всего лишь 5, так как 8b/10b является по своей сути суммой между 5b/6b и 3b/4b. Но для окончательного выяснения этой идеи, мне нужно еще раз пересмотреть патент на 8b/10b не совсем верно, если 2 бита пришлись на разные слова, то будет "битым" 2 слова/байта весьма верное замечание. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
i-mir 0 23 июля, 2012 Опубликовано 23 июля, 2012 · Жалоба Я бы взглянул на вашу задачу со стороны физики. Вопрос - кто является генератором ошибок при передаче данных, учитывая что 1 ошибка на 128 бит это достаточно много. Обычно на порядки меньше. Я подозреваю, что проблема в аппаратной части работающей на пределе возможностей, т.е. вероятность срыва фронтов достаточно велика. Если так, то лучше банально контролировать четность каждого байта. Можно также рассчитать вероятность появления двух ошибок в одном байте - она будет малой. Избыточность метода достаточно высока, но эффективность побайтного контроля в вашем случае может быть плюсом. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Костян 0 24 июля, 2012 Опубликовано 24 июля, 2012 · Жалоба Я подозреваю, что проблема в аппаратной части работающей на пределе возможностей, т.е. вероятность срыва фронтов достаточно велика. верно, второй источник ошибок - импульсные помехи Если так, то лучше банально контролировать четность каждого байта. Можно также рассчитать вероятность появления двух ошибок в одном байте - она будет малой. в данном случае не пройдет. так как 1 бит ошибки в закодированном при помощи 8b/10b превращается в целый байт ошибки, в этом то и вся проблема, что в канале передачи не чистая информация, а пройденная через кодер 8b/10b и я не могу подсчитать четность в каждом слове. эффективность побайтного контроля в вашем случае может быть плюсом. решение прежние - ловить пачку ошибок длинной 2 байта. Хитрость со структорой 8b/10b не пройдет, в патенте есть связь кодера 3b/4b на всю схему 8b/10b :-( Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться