Цифровые моды и все что с ними связано

UR5FFR
Site Admin
Posts: 2187
Joined: 21 Apr 2012, 22:00
Позывной: UR5FFR
Location: Odessa

Цифровые моды и все что с ними связано

Post by UR5FFR »

Не было еще такой тематики. Пора создавать :)

В процессе обсуждения с KW4TI предложенного им проекта цифровой моды SCAMP я предложил экономный код для предотвращения передачи длинных последовательностей нулей и единиц.

Кодек пребразует 4х битные данные в 5ти битные коды, такие, что формируя из них поток, мы гарантированно не получим последовательность нулей или единиц с длиной более 4 бит.

Идея кода состоит в следующем. Для 5ти битов существует ровно 16 битовых комбинаций, каждая из которых не содержит последовательности одинаковых битов длиной более двух.

Code: Select all

00100
00101
00110
01001
01010
01011
01100
01101
10010
10011
10100
10101
10110
11001
11010
11011
Легко заметить, что передавая эти коды мы получим поток, который не содержит последовательности одинаковых бит длиной более 4. Например в самом худшем случае

Code: Select all

11011 11011 11011
00100 00100 00100
Кодирование и декодирование можно осуществить достаточно быстро используя lookup-таблицы.

Если все остальные 5ти битовые последовательности интерпретировать как неверный код, то такое кодирование обнаруживает 22.5% одиночных ошибок и 28.75% двойных, что очень даже не плохо.

Кроме перечисленных выше 16ти последовательностей существуют еще две, которые содержат в себе последовательности одинаковых бит длиной 3, и поэтому не подпадают на сформулированное ограничение при построение кода.

Code: Select all

10001
01110
Очевидно, что эти коды не приводят к ухудшению параметров потока - максимальная последовательность одинаковых бит все так же не будет превышать длину 4.

Code: Select all

11011 10001 11011
00100 01110 00100
Таким образом мы получили словарь из 18 кодовых 5ти битных слов. 16 из них мы используем для кодирования исходных 4х битных данных. Оставшиеся два можно использовать для синхронизации либо служебной информации. Если остальные 32-18=14 кодов интерпретировать как ошибку, то мы сможем обнаружить 21.25% одиночных ошибок и 28.75% двойных.
UR5FFR
Site Admin
Posts: 2187
Joined: 21 Apr 2012, 22:00
Позывной: UR5FFR
Location: Odessa

Re: Цифровые моды и все что с ними связано

Post by UR5FFR »

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

Code: Select all

0010
0100
0011
0101
0110
1001
1010
1100
1101
1011
Код содержит 10 кодовых слов, любая комбинация которых при передаче порождает поток которые не содержит более чем 4 одинаковых бита последовательно. 8 кодовых слов можно использовать для кодирования 3х битных данных, а два оставшихся для синхронизации либо служебных целей.
UR5FFR
Site Admin
Posts: 2187
Joined: 21 Apr 2012, 22:00
Позывной: UR5FFR
Location: Odessa

Re: Цифровые моды и все что с ними связано

Post by UR5FFR »

Используя описанный выше код можно разработать очень простую цифровую моду. Так ее и назовем - VSDM = Very Simple Digital Mode.

Кодировать будем символы длиной 6 бит. Этого достаточно чтобы в один символ закодировать буквы, цифры и основные знаки пунктуации. Дополнительные символы передаются через escape-последовательности и тут не рассматривается.

1. Исходный 6ти битовый символ разбиваем на две группы старших и младших разрядов, по три бита в каждой.
2. Каждую трехбитовую группу преобразуем в 4х битный код по описанному ранее алгоритму (коды 1010 и 0101 не используются при кодировании).
3. Передаем в канал синхропоследовательность 1010
4. Передаем полученные на шаге 2 две группы по 4 бит
5. Повторяем шаги 3 и 4 еще два раза.
6. Переходим к п.1 для передачи следующего символа.

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

Затраты на 1 символ = 3*3*4 = 36 бит. Для более помехоустойчивой связи можно увеличить количество повторов для мажоритарного декодирования до 5 или 7, что приведет к затратам в 60 и 84 бит соответственно.

За счет избыточности кодирования алгоритм исправляет до 12 ошибочных бит на 36ти битный блок и детектирует более существенные ошибки. При увеличении количества повторов до 5 и 7 мы можем корректировать соответственно 24 и 36 ошибок на блок.

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

На физическом уровне каждый бит можно передавать с помощью OOK (on-off keying), 2FSK или BPSK.

Описанный алгоритм кодирования/декодирования очень прост и может быть легко реализован на 8ми битных микроконтроллерах, например Atmega328.
lz5zi
Posts: 30
Joined: 10 Jan 2019, 07:57
Позывной: LZ5ZI

Re: Цифровые моды и все что с ними связано

Post by lz5zi »

Для предотвращения передачи длинных последовательностей нулей и единиц есть Manchester encoding.
https://en.wikipedia.org/wiki/Manchester_code
UR5FFR
Site Admin
Posts: 2187
Joined: 21 Apr 2012, 22:00
Позывной: UR5FFR
Location: Odessa

Re: Цифровые моды и все что с ними связано

Post by UR5FFR »

Я прекрасно знаю о его существовании. Но манчестер в два раза расширяет требуемую для передачи полосу
lz5zi
Posts: 30
Joined: 10 Jan 2019, 07:57
Позывной: LZ5ZI

Re: Цифровые моды и все что с ними связано

Post by lz5zi »

А здесь не шесть раза?
Или я что то не понял?
UR5FFR
Site Admin
Posts: 2187
Joined: 21 Apr 2012, 22:00
Позывной: UR5FFR
Location: Odessa

Re: Цифровые моды и все что с ними связано

Post by UR5FFR »

Манчестер не детектирует и не исправляет ошибки. А схема с мажоритарным декодером будет исправлять любые ошибки длиной до 12 бит на 36ти битный блок, а кодек 3/4 бита дополнительно выявлять ошибки которые не были исправлены мажоритарным декодером.
lz5zi
Posts: 30
Joined: 10 Jan 2019, 07:57
Позывной: LZ5ZI

Re: Цифровые моды и все что с ними связано

Post by lz5zi »

А что мешаете передать 24 бита и потом делать мажоритарном декодирование.
Не получится?
UR5FFR
Site Admin
Posts: 2187
Joined: 21 Apr 2012, 22:00
Позывной: UR5FFR
Location: Odessa

Re: Цифровые моды и все что с ними связано

Post by UR5FFR »

Не совсем понятно о каких 24х битах вы говорите. Чтобы синхронизироваться на границу символа надо передать какой-то маркер кроме самого символа. Если символ 6 бит то маркер - еще 6 бит. Итого 12 бит. 3х кратная избыточность для мажоритарного кодера - 36 бит. И сверху манчестер - еще двухкратное расширение полосы что эквивалентно 72 бит. Итого хуже чем в моей схеме
lz5zi
Posts: 30
Joined: 10 Jan 2019, 07:57
Позывной: LZ5ZI

Re: Цифровые моды и все что с ними связано

Post by lz5zi »

Имею виду символ 8 бит прередават три раза ето 24 бит.
Post Reply