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

Код Рида-Соломона и перемежение для передачи кадров MJPEG,H264,...

Почитал я тут тему от DASM про то, как ему удалось передавать пакеты с использованием кода RS, с целью борьбы с замираниями:

 

Возникли вопросы:

1. Как правильно сделать перемежение данных (Interleaving) ?

2. Какой длины выбрать код Рида-Соломона?

3. Как этот код RS применять  к данным пакета?

 

У меня сжатые фреймы JPEG или H264(все ключевые и независимые от других фреймов) - размер фрейма не превышает 2 кБ (2048 байт).

Каждый исходный фрейм  160x128 частота кадров 12,5 FPS.

Размер FIFO передатчика 64 байта.

Частота 433 МГц

Модуляция любая на выбор: 2 FSK, 4 FSK, GFSK, MSK, OOK.

Аппаратные возможности:  отбеливание (Whitening) , свёрточное кодирование (FEC), манчестер.

 

Как я понял из той темы, что свёрточный кодер там не нужен, а вот Рид-Соломон может восстановить потерянные пакеты.

 

Как распределить данные 0...2048 байт по 64 байта в FIFO с учётом перемежения и RS?

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


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

2 minutes ago, repstosw said:

1. Как правильно сделать перемежение данных (Interleaving) ?

2. Какой длины выбрать код Рида-Соломона?

3. Как этот код RS применять  к данным пакета?

1. на уровне символов блока RS, степень перемежения равна количеству блоков в вашем суперблоке.

2. Чем больше тем лучше, но с точки зрения софтового программирования проще взять кодер в поле GF(2^8) и сделать блок 240-250 байт.

3. Определить скорость кодирования исходя из полосы пропускания канала  и полосы данных, с учетом синхронизации, создать маркер начала суперблока кодирования и вперед: по байтно кодить, копить, перемежать, мапить, передавать, искать синхру, демапить со стираниями, копить, деперемежать, декодить.

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


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

46 minutes ago, des00 said:

1. на уровне символов блока RS, степень перемежения равна количеству блоков в вашем суперблоке.

Я не совсем хорошо понимаю что есть перемежение в моём случае.

Вот есть буфер данных:   DDDDDDDDDDDDDDDDDDD - 2048 байт

И как их перемежать?

Я правильно понимаю, что перемежение - есть перестановка байт?  Зачем она нужна, если ценность всех байт в буфере - одинакова?

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


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

11 minutes ago, repstosw said:

Я не совсем хорошо понимаю что есть перемежение в моём случае.

положим у нас есть код из трех байт RRR в котором мы можем восстановить 1 байт, если 2 целых.

кодируем  9 байт тремя блоками AAABBBCCC, плюем в канал. Видим, что мы можем востановить данные если помеха накрыла только один байт, а если накроет 3 байта AAAxxxCCC потеряем весь блок. Не пойдет.

а что если превратить AAABBBCCC в ABCABCABC перемежением? Пусть та же помеха нас накрыла и стало ABCxxxABC, деперемежаем получаем AxABxBCxC который наш код легко вытаскивает и мы восстанавливем все. Ураа, заработало(с), но есть ньюанс: задержка кодирования и декодирования увеличилсь в 9 раз, т.к. первую схему мы делали на лету, а во второй надо накопить в передатчике и приемнике 9 байт. А общая задержка стала 18 байт, получим контент чуть попозже)

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


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

repstosw

с целью борьбы с замираниями

_

Ничего не даст RS для борьбы с частотно-селективными замираниями. Да и с плоскими глубина перемежения может быть чрезмерной. Ну промелькнул искажённый кадр, да и фиг с ним. Параметры кода и перемежителя выбирают исходя из модели канала, от балды код ничего не улучшает, наоборот ухудшает.

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


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

1 hour ago, des00 said:

а что если превратить AAABBBCCC в ABCABCABC перемежением? Пусть та же помеха нас накрыла и стало ABCxxxABC, деперемежаем получаем AxABxBCxC который наш код легко вытаскивает и мы восстанавливем все. Ураа, заработало(с),

А если помеха будет уже на 4 байта?

И как сделать перемежение для RS(191,255) ? Не могу сообразить как оптимально растащить байты?

10 minutes ago, petrov said:

Ничего не даст RS для борьбы с частотно-селективными замираниями.

A DASM писал что ему помогло. И оно у него работало:

 

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


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

repstosw

 И оно у него работало:

_

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

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


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

4 hours ago, repstosw said:

А если помеха будет уже на 4 байта?

Значит код RRR не подходит, нужен другой код и другой перемежитель

4 hours ago, repstosw said:

И как сделать перемежение для RS(191,255) ? Не могу сообразить как оптимально растащить байты?

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

3 hours ago, petrov said:

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

Предполагаю что то что DASM называл замираниями и ему помогло (там еще в теме кто-то про город писал), были не замирания, а промышленные помехи. Диапазон 433МГц как раз им хорошо подвержен и там да, импульсная помеха может легко выбить блок.

4 hours ago, repstosw said:

A DASM писал что ему помогло. И оно у него работало:

@petrov прав, на ваших модуляциях от частотно селективной вас не спасет перемежитель, а от плоского замирания вас спасет избыточная энергия передатчика(если есть) или разнесенный приемник. Да и вообще вы исследовали как ведет себя ваш канал?

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


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

7 часов назад, repstosw сказал:

A DASM писал что ему помогло. И оно у него работало:

Дык возьми и именно так и сделай. Какие проблемы? Работает же.

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


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

8 hours ago, des00 said:

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

На счёт перемежения, уже понял. В общем виде до перемежения:
 

A1A2A3..An
B1B2B3..Bn
C1C2C3..Cn

После перемежения:

A1B1C1..x1
A2B2C2..y2
...
AnBnCn..zn

 

8 hours ago, des00 said:

Предполагаю что то что DASM называл замираниями и ему помогло (там еще в теме кто-то про город писал), были не замирания, а промышленные помехи. Диапазон 433МГц как раз им хорошо подвержен и там да, импульсная помеха может легко выбить блок.

Я думаю, что всё-же он имел ввиду именно замирания... Как он сам писал: "... шаг влево-вправо - расстрел..."

Подобное у меня было, когда с портативной рацией бегал по городу:  приём был от 5 баллов до 0 баллов: лишь только стоит переместиться на пару шагов всего. Задача свелась к поиску точки с уверенным приёмом.

12 hours ago, petrov said:

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

Предположим, что время таких замираний 0,2 ... 0,5 c. Человек постоянно в движении.

Тогда нам нужно перемежить  6...7 кадров (при частоте 12,5 FPS), что терпимо по запаздыванию информации в точке приёма.

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


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

1 hour ago, repstosw said:

Я думаю, что всё-же он имел ввиду именно замирания... Как он сам писал: "... шаг влево-вправо - расстрел..."

Подобное у меня было, когда с портативной рацией бегал по городу:  приём был от 5 баллов до 0 баллов: лишь только стоит переместиться на пару шагов всего. Задача свелась к поиску точки с уверенным приёмом.

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

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


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

30 minutes ago, des00 said:

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

Да, так и есть. Если ПРД и ПРМ неподвижны и в условиях замирания, то RS+ перемежение не помогут, так все пакеты будут потеряны или искажены.

Однако же, я покурил дальше и нашёл ещё одну полезную вещь  в перемежении - зная какие пакеты потеряны, мы можем это соотнести какие байты в каждом фрейме потеряны. Тогда коды RS пмогут восстановить уже в 2 раза больше байт ("стираний").

А по поводу стационарного канала, я понимаю что тут только модуляцией можно исправить ситуацию - ЛЧМ какой-нибудь  типа LoRa или OFDM.  LoRa более популярна, но скорости низкие. Я прикинул что если оверлокнуть модем LoRa в 2 раза, то скорости 125 кбит/с будет всё-же мало:  такое видео будет сильно "шуметь" и качество не очень...  Но если взять хотя бы 200 - 300 кбит/c,  то уже очень даже неплохо.  В расчётах я закладывался не на 100% битрейт, а на 60-75% от максимума (учитывая затраты на преамбулу, CRC, коды RS).

А вот с чипами/модулями OFDM беда... Ничего кроме предложенной здесь ранее микросхемы AT86RF215 не могу найти... И то в виде микросхемы. Модуля не нашёл.

А вот если рассмотреть CC112x. У них есть DSSS с PN Gold. Насколько он хорош для борьбы с межсивольной интерференцией?

Очень давно делал такой эксперимент: если поменять частоту несущей на пару-тройку сотен кГц, то интерференционные наложения становятся другими: меняются в пространстве точки с наилучшим приёмом, по понятным причинам.  Поэтому может кроме DSSS ещё и частотный хоппинг рассмотреть? (FHSS)  Насколько такая технология эффективна? 

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


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

20 minutes ago, repstosw said:

Однако же, я покурил дальше и нашёл ещё одну полезную вещь  в перемежении - зная какие пакеты потеряны, мы можем это соотнести какие байты в каждом фрейме потеряны. Тогда коды RS пмогут восстановить уже в 2 раза больше байт ("стираний").

Ну это классика кодов БЧХ/RS, только помните про ограничение. Если количество проверочных символов check, то код исправляет t = check/2 ошибок ИЛИ check стираний. Одновременно и то и то он исправлять не может. Т.е. каждое стирание убирает из возможностей кода скорректировать одну случайную ошибку.  

20 minutes ago, repstosw said:

А вот если рассмотреть CC112x. У них есть DSSS с PN Gold. Насколько он хорош для борьбы с межсивольной интерференцией?

Ну вам еще в первой теме предлагали начать с моделирования) 

20 minutes ago, repstosw said:

 Поэтому может кроме DSSS ещё и частотный хоппинг рассмотреть? (FHSS)  Насколько такая технология эффективна? 

ППРЧ довольно эффективная техника, но требует специального приемника, способного к быстрой синхронизации. У вас как я понимаю и так проблема со скоростью.

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


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

50 minutes ago, des00 said:

Ну вам еще в первой теме предлагали начать с моделирования) 

А существуют какие-нибудь рекомендации по выбору длины преамбулы и синхро-слова?

Скачал RFPDK для CMT2300A, там структура пакетов такая:

Преамбула (0..31 байт на приёмник, 0..65535 байт для передатчика), Синхро-слово(1...8 байт), Данные(до 64 байт), CRC 16 байт

Какие брать преамбулу и синхрослово для данных 64 байта? При условии, что использовать хочется не менее 75% ресурса скорости.

Изменено пользователем repstosw

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


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

1 hour ago, repstosw said:

А существуют какие-нибудь рекомендации по выбору длины преамбулы и синхро-слова?

оценка канала, требования к системе передачи данных предъявляемые к каналу, энергетике передатчика, виду модуляции, полосе сигнала, максимальной дальности связи. Исходя из этого считается требуемая чувствительность приемника и пороговое отношение с/ш в приемнике. Потом, исходя из требований к обнаружителю, считается его энергетика, отображенная на вид и параметры преамбулы и синхрослов. Короче, это вам в теорию радиосвязи надо, куда вы не хотели погружаться)

 

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


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

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

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

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

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

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

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

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

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

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