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

Исправление ошибок в линии связи

Есть линия связи. Передаю по ней пакеты длиной восемь байт. Линия не надежная, так что могут пропадать иногда "единицы". Обычно "вырезаются" куски несколько бит рядом. Какой алгоритм FEC можете посоветовать?

 

Тема известная. Литературы много. Но хотелось бы совет того, кто уже прошел этот путь. Чтобы сузить поле поиска. А то я уже насобирал ссылок на полгода чтения.

 

Насчет ресурсов. MSP430, но передача идет раз в секунду. И больше процессор почти ничего не делает.

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


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

Обычно "вырезаются" куски несколько бит рядом. Какой алгоритм FEC можете посоветовать?

Код Хемминга с интерливингом.

 

 

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


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

Есть линия связи. Передаю по ней пакеты длиной восемь байт. Линия не надежная, так что могут пропадать иногда "единицы". Обычно "вырезаются" куски несколько бит рядом. Какой алгоритм FEC можете посоветовать?

 

Вероятность пропадания бит? Сколько пакетов битых на сколько целых? Контрольная сумма?

Подтверждение запроса и повторная передача, как самое простое...

 

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


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

Вероятность пропадания бит? Сколько пакетов битых на сколько целых? Контрольная сумма?

Подтверждение запроса и повторная передача, как самое простое...

Статистику пока не собрал. Может быть много часов без помех, но потом начинается "черная полоса" - несколько минут передача неуспешна. Визуально в этом случае - до пяти процентов пропавших "единиц".

 

Протокол простой. Передаю "magic" как признак начала пакета, затем пять байт данных, затем контрольную сумму, затем другой magic как окончание пакета. Если начало или конец пакета не распознались - данные игнорируются. Если пакет распознался, но контрольная сумма не сходится - данные игнорируюся.

Передача идет раз в секунду.

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

Проблема, что иногда и за десять секунд не приходит ни одного целого пакета.

 

Подтверждение запроса не возможно - линия однонаправленная.

 

Код Хемминга с интерливингом.

Я такого понятия вместе не нашел пока.

Код хемминга - понятно.

А интерливинг - передавать 1 как 10, а ноль - как 01?

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


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

Во-первых, накладные расходы с исправляющими кодами существенно увеличатся.

"Контрольная сумма" будет не меньше, чем основные данные.

Например, в дипломной работе я использовал код Голея(23,12), где в пакете из 23 бит 12 информационных и 11 контрольных.

Исправляет 3 любые ошибки на весь пакет.

 

А во-вторых, все-таки нужна конкретная статистика. Не просто по количеству принятых/отброшенных пакетов, а побитное сравнение и выявление типа ошибок (случайные/пакетные) и их интенсивности

 

А интерливинг - передавать 1 как 10, а ноль - как 01?

Может, имелось в виду скремблирование?

Обычно применяется при пакетных ошибках.

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

Тогда пачка ошибок распределяется в разные пакеты, и вероятность успешного восстановления повышается

 

Ещё один момент чуть не забыл.

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

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


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

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

А что у вас за линия ? Проводная ? Радиоканал ?

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


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

Это у Вас сейчас такая плохая связь, а что будет в другой системе, или просто когда рядом проложат какой-нибудь силовой провод?

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

А также улучшить проводку и, возможно, питание схем.

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


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

UART 300 bod через сеть питания.

Тогда почему бы не организовать подтверждения ? И какая сеть имеется в виду ? Осветительная с напряжением 220В, или какая-то другая ?

 

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


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

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

Код Хеминга вполне себе легко реализуется.

Посложнее с кодом Рида-Соломона, но там можно групповые ошибки исправлять.

 

Без статистики выбор сделать сложно.

 

Опять же какая допустима избыточность?

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


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

UART 300 bod через сеть питания.

Так это PLC модем?

Если так, то понятно в чем дело. Это значит, что в линию кто-то подключил сильную нагрузку и амплитуда сигнала упала. Или же на линии сидит сильный источник помех. Первое что можно сделать - это понизить тактовую частоту передачи на два порядка и на входе поставить фильтры. А второе - увеличить амплитуду передатчика...

И только уже после этого накручивать "запросы-подтверждения" или кодирования....

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


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

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

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


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

UART 300 bod через сеть питания.

При такой скорости можно каждый бит определять мажоритарным способом, делая выборок 100 на битовом интервале.

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


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

При такой скорости можно каждый бит определять мажоритарным способом, делая выборок 100 на битовом интервале.

Это если хоть что-то от бита осталось. А если он пропал целиком?

 

Если товарищ выложит побольше сведений, то можно что-то посоветовать.

Для сети 220В есть протокол Х10, там ряд ухищрений, в частности, данные передаются не всегда,

а в определенные моменты, когда сеть меньше всего нагружена.

Но все равно, не на любой сети он будет работать.

 

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


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

Да, сеть должна соответствовать сертификату на передачу данных, таких уже много не только X10.

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


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

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

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

Гость
Ответить в этой теме...

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

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

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

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

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

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