Перейти к содержанию
    

помехо защищенное кодирование

Вот есть задача передачи команд по RS485 данные при передаче теряются решил закодировать

передаются команды длинной 64 бита

без применения помехозащищенного кодирования теряется порядко 5-10% покетов

т.е 5-10 % приходет с ошибкой до 4 бит на пакет

вот и вопрос наверника ктото такую проблему реша ведь оно не нова может есть гденибуть библиотеки или куски исходников с алгоритмами помехозащищеного кодирования типа кодов БЧХ или Рида Соломона.

Все реализуется на LPC2294 в IAR 4.30

Зарание благодарен!!!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А причина возникновения ошибок установлена? ИМХО, не с той

стороны пытаетесь решить проблему...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

ИМХО в первую очередь надо бороться с самими ошибками, точнее источником их возникновения.

Перерабатывать линии связи, и т.д. (уити на CAN например) :)

кодирование с избыточностью и восстановление данных более важно для рилтаймовых систем, где как в законе мясорубки ("фарш невозможно прокрутить назад") повторная передача уже не имеет смысла. Или для систем где действительно очень не ненадёжен канал связи (КЛА и т.п.), к коим на мой взгляд RS-485 не относится.

Ибо где есть 5-10% ошибок при незначительном измененении окружающей обстановки может случиться 100% ошибок.

Всё это сугубо ИМХО.

 

Ну а по существу я ничего не скажу! :(

Во первых надо понять какая избыточность данных для Вас приемлима.

Во вторых какую вероятность ошибки после восстановления данных желаете, и т.д.

Насколько Вам важна информация об наличии ошибке. (Тот же простейший Хэмминг восстанавливает одну ошибку, но легко пропускает 2 и более)

Ну и надо учесть специфику RS-485, а именно его асинхронность. Например при ошибке распознования приёмником старт-бита (а вероятность такого события насколько я понимаю далеко не нулевая) в одном случае портиться только соответствующий байт, в другом (например если байт 0xFF) этот байт пропускается и делее весь пакет со сдвигом в байт (а если Вы ждёте конкретное число байт в пакете - не дождётесь), в третьем случае нулевой стоп-бит и соответственно какая-то (а какая?) обработка ошибки приёма.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

причина как раз в том и заключается что линия прокладывается в близи мощных линий электра передач по которым текут ударные токи до нескольких кило ампер

потеря информации вызвана как раз наведением помех во время срабатывания коммутирующих устройств и вносит как я уже сказал инверсию до 2-3 бит запас по скорости огромен в данный момент скорость устраиваемая меня 9600 кбит/с испытания проводились на скорости 1 Мбит/с так что кодирование как раз возможно и желательно

 

теперь что требуется получить вероятность ошибки не более 10 в -6, 10 в -7,

 

скорость не менее 9600кбит/с

 

использование иного интерфейса не возможно так как много устройств этой самой сети уже сделана

и переделывать их на контроллере с кан не кто не будет

 

эффектов с потерей пакета всего или ложным запуском не удалось засечь

 

не уж-то не кто не пробовал исправить подобные ситуации в своей практике?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А чем не устраивает передача с подтверждением? Тем более, с таким запасом по скорости.

Alex03 правильно заметил - если грохнется синхронизация, то уже ничего не поможет.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

 

я передали почти 4 гигабайта информации

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

И всё же я бы пытался сначала в аппаратуре искать причины.

Кабель с сильно-витой парой, в экране (а то и в железной трубе). Если в кабеле есть питание, то в отдельном экране.

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

Как можно короче ответвления к устройствам. Если они длинные, то дополнительное согласование.

и т.д.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Мне представляется, самым тупым по реализации и в тоже время достаточно действенным при таком запасе по скорости, будет мажоритарное троирование (или даже пятикратное повторение) данных в потоке, с формированием контрольной суммы (8 или 16 бит) на исходный (однократный) поток.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Для напоминания: если есть три байта a, b, c то мажоритарная функция M = (a & B) | (a & c) | (b & c).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я не занимался помехозашишенными кодами но предполагаю что есть несколько методов в этом деле :

- обнаружение ошибок - то что делается проверяется посредством CRC или checksum. Если ошибка в пакее то передается снова.

- исправление ошибки - типа код рида соломона или хемминга (если не ошибаюсь) позволяет исправлять определенное количество потерянной информации

http://en.wikipedia.org/wiki/Hamming_code

http://en.wikipedia.org/wiki/Convolutional_code

http://en.wikipedia.org/wiki/Reed-Solomon_error_correction

http://en.wikipedia.org/wiki/Binary_Golay_code

http://en.wikipedia.org/wiki/Reed-Muller_code

http://en.wikipedia.org/wiki/Turbo_code

 

- введение избыточности - когда одни и теже данные передаются два ili bolee раза

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

 

Если нужно могу найти книгу по кодированию на аглицком правда. Если можно исправить кодированием и никаких религиозных ошибок при установке рс485 произведено не было - то кодирование самый дешевый способ исправить положение .

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

До 4 бит на 64 битный пакет можно легко востсановить.

Самое изветсное кодирование пожалуй рида-соломна

 

Можно и попроще что использовать например код Хемминга

 

здесь статью неплохую на русском можно скачать

http://www.samag.ru/cgi-bin/go.pl?q=articles;n=08.2003;a=05

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

 

я передали почти 4 гигабайта информации

 

Как то сумбурно, но имхо:

Для решения вашей задачи необходимо реализовать 2 механизма, которые должны:

1. Обеспечить определенную вероятность необнаруженной ошибки. Для защиты от этого:

может случится так что получится другая команда и она будет выполнена

2. Обеспечить контроль получения команды.

 

Первое обычно решается протоколом на канальном уровне. Он должен быть хорошо продуман, пакеты должны быть защищены кодом, обнаруживающим ошибки. В вашем случае достаточно применить CRC16.

Протокол можно взять "modbus serial line protocol". Там многие вещи продуманы, хотя и не нестолько, как хотелось бы.

 

Второе решается квитированием.

 

Если рассуждать о применение кодов с исправлением ошибок, то эти коды имеет смысл применять:

1. если канал симплексный

2. если время распространения сигнала от передатчика до приемника несоизмеримо больше времени передачи самого пакета (спутниковые каналы)

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В нашем случии как раз выполняются все три приведенных ниже требования

 

Если рассуждать о применение кодов с исправлением ошибок, то эти коды имеет смысл применять:

1. если канал симплексный

2. если время распространения сигнала от передатчика до приемника несоизмеримо больше времени передачи самого пакета (спутниковые каналы)

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

 

а насчет

 

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Здесь не совсем корректно был выбран термин - не асинхронная а "старт-стопная" передача. При искажении стартового бита искажается не только сам стартовый бит но и весь байт и следующий (если нет паузы между байтами), а может байт быть вовсе потерян (не искажен, а именно потерян). Линейные коды не рассчитаны на борьбу с такими ошибками. Поэтому "ошибочный запуск" вполне может и выполниться. В случае синхронной же и "не старт-стопной" передачи искажение одного бита не будет распространятся на остальные и линейный код отработает как и ожидается.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...