алгоритмы сжатия на лету подскажите
жать чем угодно (чем удобно обнаружение потерь и ошибок оставь на долю TCP.
жать чем угодно (чем удобно обнаружение потерь и ошибок оставь на долю TCP.зачем тогда в gsm запихали обнаружение потерь и ошибок?
UPD: упс, сентябрь 81:)
TCP и realtime вещи не очень совместимые
зачем тогда в gsm запихали обнаружение потерь и ошибок?Вопрос на засыпку: на каком уровне OSI находится TCP, а на каком - GSM?
что ты вкладываешь в понятие realtime?
Я на передающем инфу микроконтроллере писать TCP не буду, он не успеет обсчитать при передаче и в память ему это не влезет По-идее каждая инструкция во внутреннем цикле на счету из-за быстродействия. На расшифровывающей стороне можно что угодно в принципе реализовать. Можно несимметричную схему, сжать легко, расшифровать сложнее, но сильно сложно это не стоит IMHO делать. Сейчас написан самопальный кодер-декодер, но есть большие сомнения, что это оптимально.
а чё там про кодирование имени Рида-Соломона? кодировать тривиально, восстанавливать слегка трудоёмко, но если делать через таблицы то приемлемо
Вопрос на засыпку: на каком уровне OSI находится TCP, а на каком - GSM?а на каком уровне находится радиоканал?
имхо, там же где и gsm.
соответственно, если в gsm все это делают (и в целом - понятно почему то почему не делать в радиоканале - мне не понятно.
Я, например, представил себе 2 ethetnet-радиомодема с направленными антеннами.
А тут оказывается радиоканал типа ZigBee c соотв классами сопряженных устройств.
кодер-декодер для хэмминга писал?
и tcp
а да, прочитав тему, тут о другом речь. надо чётче первый пост писать
http://en.wikipedia.org/wiki/BCH_code
Кодирование - обычное CRC со специальным полиномом. То бишь длинный сдвиговый регистр, очередной бит ксорится с его младшим битом, регистр сдвигается, результат первого ксора ксорится с несколькими его битами (собственно, их позиции и описывают полином).
Декодирование - геморрой с табличками, особенно если хочется эффективности. Но в интернетах есть имплементации.
От Хэмминга отличается жуткой устойчивостью к bursts - куче обнулённых/объединиченных байтов подряд, что в радиоканале обычно и случается. Ну, потому что CRC. Вроде даже используется много где.
А как сжимать - не знаю. Особенно в условиях ограниченного времени. Особенно если у тебя данные случайные. Если всегда похожие, то тупо запусти генератор префиксного кода на типичном потоке и зафигачь в статическую табличку, на сколько памяти хватит.
Жать сигнал надо. Сейчас связь двусторонняя, передача пакетами, на битые пакеты отправляется запрос на повтор передачи если ошибок много и не успевают переслаться - старые пакеты опускаем и игнорим вывешивая признак ошибки передачи конкретного пакета, какая-то минимальная задержка на долю секунды некритична. В некоторых приложениях наверное и на секунду и больше задержка некритична.
FFT применять, шумы отсекать и прочее?
Реальных сигналов у меня ещё нет, статистику набирать негде.
Частота дискретизации у нас была примерно 100Кгц, были характерные наводки на 10КГц (аппаратура в соседней лаборатории 4.2КГц (видимо радио-точка, потому что я ради хохмы пытался выделить что на этой частоте есть - получилась какая-то болтовня неразборчивая) , 50Гц (ггг, от этого никуда походу не деться).
Я в этом сам мало понимал, надыбыл кое-какую литературу по обработке сигналов. ключевые слова - DSP (digital signal processing ЦОС (цифровая обработка сигналов цифровые фильтры (digital filter low-pass, band-pass, band-stop filters, рекурсивные фильтры, нерекурсивные фильтры, и т.п.
Мехматских знаний комплексного анализа, функана и численных методов из области обработки последовательностей хватает, чтобы разобраться что к чему.
взял сэмпл сигнала, рассчитал спектр, рассчитал фильтр, через десяток попыток заработало.
рекурсивные фильтры очень эффективны, однако дают лаг в несколько тактов дискретизации.
считывались сэмплы по 256кб. ошибок не было, потому что ethernet
после кодирования сигнала, оборачивать его во что-нибудь типа BCH (кодирование Рида-Соломона это частный случай BCH, который используется в CD/DVD/спутниковых каналах)
По поводу трудоёмкости всего этого.
фильтрация - реалтайм
fft - почти реалтайм (что-то типа O(N*log(N
кодирование - реалтайм.
Скляр Б. — Цифровая связь. Теоретические основы и практическое применение
(http://elib.hackers/books/7964)
Про БЧХ коды можно почитать тут:
Блейхут Р. — Теория и практика кодов, контролирующих ошибки
(http://elib.hackers/books/10979)
На практике используются только две их разновидности: двоичные БЧХ коды (их часто просто называют БЧХ кодами) и коды Рида-Соломона.
Стандартный алгоритм декодирования следующий:
1) Вычисление синдромов
2) Решение ключевого уравнения (Berlakamp-Massey алгоритм или алгоритм Евклида)
3) Нахождение позиций и значений ошибок (формула Forney и процедура Chien search). В случае с двоичными БЧХ, значения ошибок не нужны.
В современных беспроводных стандартах связи от БЧХ кодов уже практически полностью отказались. Используются чаще всего сверточные(convolutional turbo коды либо LDPC коды.
Можете почитать о них тут:
1) Moon T.K. — Error Correction Coding: Mathematical Methods and Algorithms
(http://elib.hackers/books/26543)
2) MacKay D.J.C. — Information theory, inference, and learning algorithms
(http://elib.hackers/books/3972)
Оставить комментарий
Anna74
Данные передаются по радиоканалу, с потерями, в real time. На одном конце надо быстро сжать, на другом восстановить с обнаружением ошибок. Киньте ссылки на обзоры текущего состояния теории или подскажите где копать. Может готовые реализации.