Nikita T

Путаница с HDB3 - кодированием

8 posts in this topic

Nikita T    0

Здравствуйте, уважаемые участники форума.

По одному проекту нужно написать алгоритм для преобразования RS-485 в поток E0. Как оказалось, в потоке E0 применяется HDB3 - кодирование.

Коротко о HDB3:  это один из способов линейного кодирования (физического кодирования, канального кодирования, цифровое кодирование, манипуляция сигнала). Применяется при передаче данных на расстояние по цифровому каналу связи. Является трехуровневым. HDB3 кодируется также, как и AMI, но у него есть преимущество - он предотвращает возможность появления в цифровом сигнале длинных серий нулей, путём замены серий из N подряд идущих нулей специальными кодовыми комбинациями (вставками), содержащими единичные импульсы.

Здесь и начинается моя проблема с пониманием данного способа кодирования.

Такая информация в википедии:

"Формирования кода выполняется следующим образом: в каждые 4 нуля заменяются 4 символами в которых имеется хотя бы один сигнал V. Для подавления постоянной составляющей полярность сигнала V чередуется при последовательных заменах. Для замены используются два способа:

если перед заменой исходный код содержал нечётное число единиц то используется последовательность 000V;

если перед заменой исходный код содержал чётное число единиц то используется последовательность 100V.

где V-сигнал единицы запрещённого для данного сигнала полярности."

К описанию прилагается иллюстрация.

Priklad_3.jpg.807c645ae3e7367944b0a37c42dabeb9.jpg

Википедия это хорошо, но я привык искать информацию в разных источниках. К моему удивлению, я не нашёл описания HDB3 как стандарта на сайте Международного союза электросвязи.

Я нашёл множество примеров преобразования из простого кода в HDB3, НО, как оказалось, используя один и тот же пример, разные источники выполняют кодирование по-разному...... Ниже представленно, как разные источники выполняют преобразование.

Согласно теории: "Вид вставки выбирается по следующему правилу: если после последней вставки следовало нечетное число единиц, то выбирается вставка первого типа – 0001, а если четное – то вставка второго типа – 1001. Полярность импульсов во вставке определяется следующим образом: полярность импульса во вставке первого типа совпадает с полярностью последнего импульса до вставки, а полярность импульсов во вставке второго типа одинаковая и обратная полярности последнего импульса до вставки."

Рисунок 1 - кусок презентации с одного иностранного источника

Figure+4.20+Different+situations+in+HDB3

Анализируем рисунок 1:

Последовательность имеет в начале две единицы, а затем следуют 4 нуля. 4 нуля необходимо заменить на вставку. Следуем теории: последней вставки у нас не было (это будет первая), значит после последней вставки следует ноль единиц, ноль - чётное число, значит имеем вставку типа "1001", последний импульс имеет отрицательную полярность,  следовательно "единички" нашей вставки будут иметь положительную полярность, как и показанно на рисунке. Всё верно? Верно!

 

Рисунок 2  - то же кодирование, выполненное другим источником.

B8ZS+and+HDB3+Change+of+polarity.jpg

 

Рисунок 3 - картинка с русскоязычного сайта

image025_18.gif

 

Внимание вопрос:

Почему разные источники дают одинаковую теорию, но делают преобразование по разному?  Если сравнить рисунки 1 и 2,3, то видно, что одинаковая последовательность данных кодируется разным способом!? В реальной системе это будут совершенно разные данные. Если каждый из этих источников соберёт приёмопередатчик, они не смогут общаться...

Если здесь есть люди, понимающие данную тему, ответьте пожалуйста на мои воросы.

1. Какой из рисунков верен?

2. Существует ли единый документ, регламентирующий кодирование HDB3? (про ГОСТ 26886-86 не пишите)

3. Опишите логику выполнения вставки, если эта вставка первая.

С уважением Никита Т.

 

 

Share this post


Link to post
Share on other sites

Рисунки правильные. Все очень просто.

Для 4 нулей во входящем  потоке, в кодере смотрим полярность последнего бита из преобразованного потока и выбираем вставку, в которой начальный бит вставки должен быть инверсией последнему биту преобразованного потока. Был  -1, значит пишем 0001 с инверсией 1. Если +1, то пишем 1001 с инверсией 1. Если была вставка 0000, то пишем 1001 без инверсии. На рисунках все понятнее.

Правило одно, после -1 должно быть +1 и наоборот, а для вставки -1 -1 или +1 +1 вместе с 0 .  В декодере смотрим и исправляем на обратное, то есть сразу смотрим 4 бита и если есть 0001 1001 , то исправляем их на 0000, но с учетом полярности V, которая всегда равна полярности 1. Вставки чередуются 1-2-1-2-1-2-1 и тд по всему потоку последовательно. Если полярности V и 1 не совпадают, значит 4 бита просто пишем в поток с преобразованием полярности.

 

Edited by РадиоНастройщик

Share this post


Link to post
Share on other sites

Используется следующее правило: если перед блоком из четырёх нулей исходный код содержал нечётное число единиц, то комбинация 0000 заменяется на служебный код 000V, а если чётное — то B00V. Отсчёт количества единиц производится с начала передачи исходного кода и начинается заново после каждого сигнала V. 

V — сигнал той же полярности, что и предшествующая ему единица. 

B — сигнал полярности, обратной предшествующей ему единицы.

То есть, не должно быть +1 0 +1 или -1 0 -1, это означает вставку. Для нормального кода должно быть +1 -1 и 0 или без 0. И для первой вставки, если идут три 0 и повторение 1 предыдущего бита, это точно вставка, если нечетное количество предыдущих бит

Edited by РадиоНастройщик

Share this post


Link to post
Share on other sites

Бюджетные Wi-Fi-/ Bluetooth-решения для IoT-применения

Обзор основной линейки поставок и новинок Espressif Systems – экономически выгодных SoC Wi-Fi-/ Bluetooth-чипов и модулей для IoT-применений: от простых портативных устройств до промышленных решений.

Подробнее...

Nikita T    0
1 час назад, РадиоНастройщик сказал:

Используется следующее правило: если перед блоком из четырёх нулей исходный код содержал нечётное число единиц, то комбинация 0000 заменяется на служебный код 000V, а если чётное — то B00V. Отсчёт количества единиц производится с начала передачи исходного кода и начинается заново после каждого сигнала V.  V — сигнал запрещённой полярности, то есть сигнал той же полярности, что и предшествующая ему единица.  B — сигнал правильной полярности, то есть сигнал полярности, обратной предшествующей ему единицы.

Благодарю за ответ. Но, это сообщение идёт в противоречие рисунка 3.  image025_18.gif&key=fe90d4bf5a3625aacdee

 

На входе имеем последовательность 110000....и.т.д.. Считаем количество единиц, получаем чётное количество, следовательно, в данном примере, после второй "единички" должен следовать служебный код B00V. , т.е. +1|0|0|-1, а на рисунке показана вставка 000V.....

Почему вы указали, что рисунки верные? Почему я, следуя Вашему разъяснению получаю результат, отличный от рисунка?

Edited by Nikita T

Share this post


Link to post
Share on other sites

@Nikita T  Почему ? Первая вставка должна быть первой, а потом уже в зависимости от потока. Сначала идет 1 вставка, потом 2 вставка без инверсии. Потом четное количество единиц и 2 вставка с инверсией, учитывая предыдущий бит.

Edited by РадиоНастройщик

Share this post


Link to post
Share on other sites

Управляемый свет интернета вещей: Philips и протокол DALI 2.0

Полностью программируемые драйверы Philips Xitanium поддерживают все варианты регулировки яркости света и силы тока. Надежность системы значительно повышается при интеллектуальном мониторинге температуры светодиодного источника света. Разнообразие моделей в семействе обеспечивает максимальную гибкость в настройке рабочих параметров.

Подробнее...

Nikita T    0
17 минут назад, РадиоНастройщик сказал:

@Nikita T  Почему ? Первая вставка должна быть первой, а потом уже в зависимости от потока. Сначала идет 1 вставка, потом 2 вставка без инверсии. Потом четное количество единиц и 2 вставка с инверсией, учитывая предыдущий бит.

Извините, но, выходит, я что-то не понимаю. Вот, прикладываю 2 ситуации, с одной последовательностью "1 1 0 0 0 0". Почему на верхнем рисунке вставка "0 0 0 -1", а на нижнем "1 0 0 1"??

.imageproxy_php.gif.d0d267eae0510ea9a1338ace98c0e7d0.gif

Share this post


Link to post
Share on other sites

Если начинаем кодировать, то сначала используем 1 вставку. Должно быть 1-2-1-2-2-2-2-2 или 1-2-2-2-2-2-2-2-2. 

Смысл в том, чтобы использовать для большой группы 0, связку вставок 1-2-1-2-1-2-1-2-1-2-1-2-1-2-1-2-1-2-1-2

Share this post


Link to post
Share on other sites
Nikita T    0
7 часов назад, РадиоНастройщик сказал:

Если начинаем кодировать, то сначала используем 1 вставку. Должно быть 1-2-1-2-2-2-2-2 или 1-2-2-2-2-2-2-2-2. 

Смысл в том, чтобы использовать для большой группы 0, связку вставок 1-2-1-2-1-2-1-2-1-2-1-2-1-2-1-2-1-2-1-2

Хорошо, благодарю за объяснение.

Share this post


Link to post
Share on other sites

Your content will need to be approved by a moderator

Guest
You are commenting as a guest. If you have an account, please sign in.
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoticons maximum are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

  • Similar Content

    • By crazy_duck
      Здравствуйте!
       
      Занимаюсь испытаниями связного оборудования, так вот появилась задача измерить помехозащищенность сигнала на входных портах оборудования PDH (потоки E1 со скоростью 2,048 Мбит/с), чем раньше заниматься не приходилось.
      Для проведения этого измерения рекомендация ITU-T требует реализовать схему сложения двух испытательных сигналов, имеющих линейное кодирование HDB3. Умные люди подсказали, что лучше всего это сделать на ОУ, но, к сожалению, как это точно сделать подсказать затруднились. Третий день вспоминаю курс схемотехники из института, читаю интернет и мучаю NI Multisim, но результат меня не удовлетворяет.
       
      Прикладываю Два варианта. Первый вариант сделан знакомым. Данная схема меня смущает, так как не бьется с той информацией, что я почерпнул из интернета. По ряду причин обратиться к знакомому нет возможности. Но общее направление он задал.
      Второй вариант свой. Накидал схему, но результат в симуляторе мне не нравится. Сигнал сильно искажается и инвертировался на выходе. Где я ошибся?
      Заранее спасибо за ответ.
       
      PS: данный источник читал, но может что-то неправильно понял.
      http://cxem.net/beginner/beginner96.php
      http://easyelectronics.ru/operacionnyj-usilitel.html
       
       
      СХЕМА.pdf
      sum_AmpOp.ms14