Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2008.10.12;
Скачать: [xml.tar.bz2];

Вниз

Помогите с помехоустойчивым кодированием   Найти похожие ветки 

 
kami ©   (2008-09-04 13:46) [0]

Суть задачи:
имеется устройство, отправляющее на компьютер№1 пакетные данные по UDP.  Эти данные разбиваются на под_пакеты, снабжаются служебной информацией и отправляются через несколько низкоскоростных каналов (dial-up модемы) на компьютер№2, который собирает из них исходные пакетные данные.
Проблема в том, что (само собой) под_пакеты, отправляемые так же по UDP, не всегда доходят до компьютера №2. Это не есть смертельно (данные - видеопоток, и теряют свою актуальность почти сразу же), но весьма неприятно, когда оказываются несобранными несколько пакетов (а то и десятков) подряд.

Возникла мысль добавить избыточность в исходный пакет, чтобы при потере хотя бы 1 (лучше 2) под_пакетов (из 8 на данный момент) можно было бы восстановить исходный.

В интернете нашел в основном общие фразы и математические описания кодов Рида-Соломона, Хемминга и т.д. Но, т.к. в математике я не силен (мягко говоря), то это мне мало что дало, кроме общего понимания. Да и насколько я понял, эти коды дают возможность побитового восстановления, а мне нужно несколько другое. Не подскажете, где можно почитать про решение такой задачи (интересует сам алгоритм, на исходники я не рассчитываю).


 
Правильный$Вася   (2008-09-04 14:01) [1]

это не помехоустойчивость
помеха - это порча данных, а не пропадание их вовсе
поменяй протокол на с гарантированой доставкой или используй эту самую избыточность, хотя она вряд ли поможет сильно
для восстановления одного бита в байте нужно (не помню точно) не менее 2 излишних битов, что увеличит количество пакетов на 25%, а если они будут теряться с прежней же вероятностью, то ты только увеличишь трафик практически без увеличения качества


 
Rouse_ ©   (2008-09-04 14:18) [2]

Вот это посмотри, с исходниками:
http://www.insidepro.com/kk/027/027r.shtml


 
kami ©   (2008-09-04 18:36) [3]

> Правильный$Вася   (04.09.08 14:01) [1]
> это не помехоустойчивость

Возможно, не силен в терминологии.
> поменяй протокол на с гарантированой доставкой
нельзя. Канал может улучшаться/ухудшаться, а данные идут непрерывно. Задержка одного из низкоскоростных направлений для гарантированной доставки под_пакета затормозит и все остальные, что недопустимо. Такая реализация тоже есть, но она "признана недееспособной" и нормально работает только с каналами, обеспечивающими хорошую пропускную способность.

> или используй эту самую избыточность, хотя она вряд ли поможет сильно
> для восстановления одного бита в байте нужно (не помню точно)
> не менее 2 излишних битов, что увеличит количество пакетов
> на 25%, а если они будут теряться с прежней же вероятностью,
> то ты только увеличишь трафик практически без увеличения
> качества

Вот именно, что мне нужно восстанавливать не биты, а целые фрагменты пакета (пакеты идут длиной от 400 до 1400 байт и разделяются (на данный момент) на 8 частей).
Единственное, что пришло в голову - дублировать под_пакеты через разные каналы, но - это увеличение трафика в 2 раза :(


> Rouse_ ©   (04.09.08 14:18) [2]
> Вот это посмотри, с исходниками:

Спасибо, уже смотрю.


 
Leonid Troyanovsky ©   (2008-09-04 18:45) [4]


> kami ©   (04.09.08 18:36) [3]

> Единственное, что пришло в голову - дублировать под_пакеты
> через разные каналы, но - это увеличение трафика в 2 раза

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

--
Regards, LVT.


 
kami ©   (2008-09-04 21:54) [5]

> Leonid Troyanovsky ©   (04.09.08 18:45) [4]
> Дык, чудес не бывает.

Это я понимаю прекрасно. Но хотелось бы для гарантированного восстановления "куска" в 12-14% информации увеличивать трафик не в 2 раза, а в лучшем случае 1,25-1,5 раз, на что можно пойти почти безболезненно :)


 
kami ©   (2008-09-04 21:56) [6]

> Rouse_ ©   (04.09.08 14:18) [2]

Наскоком не получилось - последний пример, с использованием сторонней библиотеки способен исправить 52 байта максимум из 2048 исходных :)
Сижу, разбираю предыдущий пример. Только такое ощущение, что работать будет непозволительно долго.


 
Правильный$Вася   (2008-09-04 22:11) [7]


> способен исправить 52 байта максимум из 2048 исходных

и сколько из 2 кб являются избыточными?


 
kami ©   (2008-09-04 22:28) [8]

> Правильный$Вася   (04.09.08 22:11) [7]
> и сколько из 2 кб являются избыточными?

2048 - это полезная информация, к ней добавляется 304 байта "сопровождения".
В общем, исправление последовательности в 52 байта из 2048 - это 2,5%. Это мало, нужно 12-14 %, чтобы восстановить 1 потерянный кусок пакета.


 
kami ©   (2008-09-04 22:29) [9]

+ в каждом под_пакете передается моя служебная информация в 6 байт весом


 
Правильный$Вася   (2008-09-04 22:41) [10]


> 2048 - это полезная информация, к ней добавляется 304 байта
> "сопровождения".

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


 
kami ©   (2008-09-04 22:59) [11]


> т.е. уже больше четверти от полезной инфы

Да и пусть, не особенно волнует.


> она добавляется к каждому подпакету или ко всему пакету
> в целом?

Пока еще никуда не добавляется, это был только тест

Нет, я наверное, неправильно выразился.
Перевел и скомпилировал проект по ссылке Rouse_ ©   (04.09.08 14:18) [2]

Тот код позволяет исправить 52 байта из 2048 полезных (длина=2048 байт не обсуждается - особенность сторонней библиотеки). Итого - 2,5% полезной информации.

У меня же немного другая ситуация: исходный пакет <=1400 байт, разделяется на 8 частей <= 175 байт каждая (полезной информации).
Определяемся, что допустима потеря 1 части, то есть 12,5%.
Служебную информацию (как "мою" для идентификации под_пакетов, так и для восстановления потерь, если ее размер не превышает 50% от общего объема полезной) в расчет не принимаем.


 
Smile   (2008-09-04 23:04) [12]

Что ж это за такие низкоскоростные каналы,в которых теряются пакеты?


 
kami ©   (2008-09-04 23:05) [13]

> а то ведь потеря подпакета с информацией восстановления приведет к потере всего пакета

Если действительно определение, что допустима потеря 1 части - достаточно продублировать информацию для восстановления исходного пакета в 2 под_пакетах для гарантированного ее приема.


 
kami ©   (2008-09-04 23:06) [14]

> Smile   (04.09.08 23:04) [12]
> Что ж это за такие низкоскоростные каналы,в которых теряются
> пакеты?

обычные dial-up соединения.
А udp пакеты вообще обладают свойством теряться, и не только в низкоскоростных каналах :)



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2008.10.12;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.038 c
15-1219130848
начинающий
2008-08-19 11:27
2008.10.12
Амбиции?


2-1219992531
mefodiy
2008-08-29 10:48
2008.10.12
Выгрузка картинки из поля MSSQL в jpg файл


15-1219226478
silver222
2008-08-20 14:01
2008.10.12
Вывод фотографий


15-1219213129
rx275d7_jedi
2008-08-20 10:18
2008.10.12
rx275d7_jedi


2-1220512873
harisma
2008-09-04 11:21
2008.10.12
Поиск фразы в бинарном файле





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский