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

Выбор канального кодека

Проблема в том, что вы не можете задетектить ошибку, потому что не знаете исходный сигнал. Например, у меня 8 поднесущих, каждая поднесущая модулируется bpsk (0\180), т.е. 8битное слово передается за 2.5мс. В процессе передачи, фаза поднесущей может быть произвольно изменена, следовательно последовательность примет какое-то случайное значение. Надеюсь я правильно понял ваш вопрос. 

В данный момент я просто сравниваю принятые данные с отправленными, но в реальности этого не будет.

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


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

Это канальный байтовый протокол нижнего уровня (вроде UART "удлинителя")? Тогда обеспечение надежности передачи должны обеспечивать протоколы верхнего уровня. Зная из структуру можно туда "заглядывать". И использовать для детектирования ошибок пакетов. IMHO, если просто вообще ничего не знать о характере трафика (пакетах хотя бы 10-20 байт), то короткий БЧХ или Голей.

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


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

да, это самый низкий уровень, с которым сейчас эксперементируем, до высокого не добрались, потому что нет опыта с канальным кодированием, опять же уважаемый petrov пишет, что я не смогу исправлять ошибки, или я его не верно понял. Т.е. в моем представлении хотелось бы так: пакет полезных данных -> кодировщик, который добавляет определенное количество избыточных бит-> модулятор-> канал связи -> демодулятор -> декодер (произошла магия - получили пакет полезных данных идентичный отправленному). Как то так.

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


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

В 02.08.2022 в 21:43, Dobermann сказал:

я не смогу исправлять ошибки

Это не так: все упирается в ограничения: требуемая вероятность (качество), скорость, задержка и, обязательно, вычислительная мощность. Следует определится с этими параметры, тогда можно предложить какие-то  пути решения. То есть, какая задача системы, такая и оптимизация структуры (СКК) под нее. Универсального решения не существует. Уважаемый stealth-coder  хорошо описал зависимость вероятности от размера пакета.

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


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

пока все крутиться и будет крутиться в матлабе, поэтому вычислительные способности можно игнорировать, скорость я указал, минимум 1200 полезной, без ошибок, 2400-3000 полная скорость, задержку я тоже указал, 20mc-30мс максимум. Размер пакета 80бит. Уважаемый  stealth-coder указал данные для пакетов большой длины, у меня таких не будет.

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


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

В 02.08.2022 в 23:14, Dobermann сказал:

пока все крутиться и будет крутиться в матлабе, поэтому вычислительные способности можно игнорировать, скорость я указал, минимум 1200 полезной, без ошибок, 2400-3000 полная скорость, задержку я тоже указал, 20mc-30мс максимум. Размер пакета 80бит. Уважаемый  stealth-coder указал данные для пакетов большой длины, у меня таких не будет.

Правильно я понимаю, что вы передаете сигнал в виде звука через GSM на 8 поднесущих? Могу конечно ошибаться, давно это было, на лекциях (поправьте если не верно), но осталось в памяти, что GSM для передачи речи использует интервал стационарности что-то порядка 20мс. Т.е. туда  (в 20мс) войдет 8 слов по 8 бит, а предполагается (звуковым кодером GSM), что на интервале стационарности сигнал практически неизменен. А слова я полагаю, не гарантируется, что будут идти одинаковые по 8 штук... Я к тому, что если все вышеизложенное верно, то в вашем случае в зависимости от комбинации слов ошибки могут быть, а может их и не быть.

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

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


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

Да, вы понимаете правильно, 8 поднесущих с bpsk. То что ошибки будут, я это вижу и стационарным сигнал ну никак не сделать.

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


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

13 hours ago, Dobermann said:

Проблема в том, что вы не можете задетектить ошибку, потому что не знаете исходный сигнал. Например, у меня 8 поднесущих, каждая поднесущая модулируется bpsk (0\180), т.е. 8битное слово передается за 2.5мс. В процессе передачи, фаза поднесущей может быть произвольно изменена, следовательно последовательность примет какое-то случайное значение.

как я понял, вы боритесь не шумами АБГШ (что отменяет все приведенные выше расчеты), а с речевым кодеком и его поведением, которое выглядит как сдвиг фазы. Причем, как я понял, всех поднесущих сразу, т.е. у вас один байт, случайно подменяется на другой байт.  Так почему не рассмотреть этот ваш байт как "символ" в поле галуа GF(2^8) и не накрыть все это кодом РС? Жаль стирания вы определить не можете, нет эталона, а то было бы вообще клево. 

Но вообще, @petrov имел в виду изменить канальный алфавит, например брать 4 бита исходного сообщения и кодировать его в ваш "байт", тогда при сдвиге фазы, можно определить, была ли ошибка в слове и какое слово наиболее близком к результирующему.

ЗЫ. Если ошибка такого поворота не пакетная, то можно класть в поток на блок из 8 слов слово с битами четности) Таким образом определите битый символ, который потом можно стереть в RS.

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


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

to des00, спасибо большое за группу FPGA в телеге, познакомился там с замечательными людьми, которые очень помогают в решении моей задачи)))

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

On 8/3/2022 at 10:05 AM, des00 said:

Но вообще, @petrov имел в виду изменить канальный алфавит, например брать 4 бита исходного сообщения и кодировать его в ваш "байт", тогда при сдвиге фазы, можно определить, была ли ошибка в слове и какое слово наиболее близком к результирующему.

Поясните пожалуйста эту идею.

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


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

13 minutes ago, Dobermann said:

to des00, спасибо большое за группу FPGA в телеге, познакомился там с замечательными людьми, которые очень помогают в решении моей задачи)))

да, хоть телега мне и не нравится, но там тоже можно хорошо общаться)

13 minutes ago, Dobermann said:

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

ну т.е. изменение может быть от 1 до 8 бит, в терминах RS, для кода в поле GF(2^8), это один символ поля. И не важно сколько в нем битовых ошибок. Если у вас все так хаотично, то я бы пошел по этому пути, взял бы что-то вроде усеченного кода РС 138/254 байта и попробовал в лоб. Он может исправить 58 битых байт или 116 стертых байтов на блок в 254 байта. Главное его правильно синхронизировать - указать где начало блока. 

13 minutes ago, Dobermann said:

Поясните пожалуйста эту идею.

в самом простом случае, на пальцах. берем 0/1 и кодируем как {-1,-1,-1,-1,-1,-1,-1,-1}/{1, 1, 1, 1, 1, 1, 1, 1} (код повторения на 8). По приему складываем все 8 символов поднесуших, если сумма больше нуля то передавалась 1, если меньше то 0.  Ну т.е. надо подобрать такой канальный алфавит, который при ошибке в некоторых поднесуших, позволит определить, что же именно передавалось, за счет евклидовой (геометрической) длинны до эталонного символа. 

ЗЫ. кодировать/декодировать РС на процах/плисах довольно просто, тема перепахана за последние 30 лет)

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


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

я правильно понимаю, каждый бит информации мы кодируем 8 поднесущими? Т.е. фактически снижаем скорость в 8 раз. 

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


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

3 minutes ago, Dobermann said:

я правильно понимаю, каждый бит информации мы кодируем 8 поднесущими? Т.е. фактически снижаем скорость в 8 раз. 

да, естественно. за надежность платим скоростью. Это еще Шенон показал) Но это простой, примитивный пример.

Можно еще например вспомнить банальный 8b/10b кодек. мажут массив 256 байт на массив 1024 слов и за счет этого, могут определить канальную ошибку (но без ее коррекции естественно).

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

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


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

Еще сейчас подумал, у вас же BPSK, у вас фаза двигается больше чем 180 градусов? поставили точки по диагонали, в приемнике складываем квадратуры, если сумма больше нуля, то это точка {1,1} == ну положим 1, меньше нуля - точка {-1,-1} == ну положим 0. Это довольно широкий диапазон вариации решения, если фаза двигается +-45 градусов ошибок у вас вообще быть не должно. Или вы не выполняете начальную фазовую синхронизацию и у вас в принципе точки могут стоять с любым поворотом? 

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


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

On 8/3/2022 at 11:09 AM, des00 said:

Еще сейчас подумал, у вас же BPSK, у вас фаза двигается больше чем 180 градусов? поставили точки по диагонали, в приемнике складываем квадратуры, если сумма больше нуля, то это точка {1,1} == ну положим 1, меньше нуля - точка {-1,-1} == ну положим 0. Это довольно широкий диапазон вариации решения, если фаза двигается +-45 градусов ошибок у вас вообще быть не должно. Или вы не выполняете начальную фазовую синхронизацию и у вас в принципе точки могут стоять с любым поворотом? 

отвечу за коллегу) символьная и фазовая синхронизации работают по преамбуле. эквалайзером по преамбуле восстанавливается поворот фазы. наблюдается случайное смещение фазы, частотного смещения нет. на всех 8 поднесущих поворот фазы более менее одинаковый. после демодуляции сравниваю фазу переданных и принятых символов и вижу что имеются случайные ошибки, которые равномерно распределены по времени и частотам, ошибка по фазе между ошибками не коррелирует. тестировали передачу 20 шт блоков по 3600 бит, и кол-во ошибок варьируется от 156 до 74, то есть от 4,3 до 2,1%

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


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

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

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

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

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

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

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

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

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

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