Код постоянного веса

Код постоянного веса, равновесный код или код m-из-n — это код контроля и исправления ошибок, где все кодовые слова имеют один и тот же вес Хэмминга. Унитарный код и сбалансированный код являются двумя широко используемыми видами кодов постоянной ширины.

Теория тесно связана с теорией схем (таких как t-схемы и системы Штейнера). Большинство работ в этой области дискретной математики рассматривают бинарные коды постоянного веса.

Двоичные равновесные коды имеют некоторые приложения, включая псевдослучайную перестройку рабочей частоты в GSM сетях[1]. Большинство штриховых кодов используют двоичный равновесный код для упрощения автоматической настройки порога яркости, при котором различаются чёрные и белые полосы. Большинство линейных кодов используют либо равновесный код, либо почти равновесный попарно-сбалансированный код. Помимо использования в качестве кодов коррекции ошибок, большое расстояние между кодовыми словами может быть использовано при проектировании асинхронных схем, таких как схемы, нечувствительные к задержкам.

Коды с постоянным весом, такие как код Бергера, могут обнаруживать все однонаправленные ошибки[2].

A(n, d, w)

Основная проблема, касающаяся кодов постоянного веса следующая: каково максимальное количество кодовых слов в двоичном коде постоянного веса с длиной , расстоянием Хэмминга и весом ? Это число обозначается .

За исключением некоторых незначительных наблюдений, вычислить эти числа напрямую, как правило, невозможно. Верхние границы определяются несколькими важными теоремами, такими как теоремы Джонсона[3], а иногда лучшие верхние границы можно найти другими способами. Нижние границы чаще всего определяются путем демонстрации конкретных кодов, либо с использованием различных методов дискретной математики, либо путем интенсивного компьютерного поиска. Большая таблица таких рекордных кодов была опубликована в 1990 году[4], а расширение для более длинных кодов (но только для тех значений и , которые имеют отношение к применению GSM) было опубликовано в 2006 году[1].

Коды 1-из-N

Специальным случаем кодов с постоянным весом являются коды один-из-N, которые кодируют бит в кодовое слово из бит. Код один-из-двух использует кодовые слова 01 и 10 для кодировки битов '0' и '1'. Код один-из-четырёх может использовать слова 0001, 0010, 0100, 1000 для кодировки двух бит 00, 01, 10 и 11. Примером является двойное канальное кодирование[a] и цепочечное соединение[5], используемые в схемах, нечувствительных к задержкам. Для этих кодов и .

Среди наиболее заметных применений кодов один-из-N можно отметить

Двухфазный код использует 1-из-2 кодировку;
Фазово-импульсная модуляция использует 1-из-n кодировку;
Дешифратор адреса,
и т.д.

Сбалансированный код

В теории кодирования сбалансированный код — это двоичный код с прямым исправлением ошибок в котором каждое кодовое слово содержит равное количество нулей и единиц. Сбалансированные коды были введены Дональдом Кнутот[6]. Они являются подмножеством так называемых неупорядоченных кодов, которые обладают свойством, что позиции единиц в одном кодовом слове никогда не являются подмножеством позиций единиц в другом кодовом слове. Как и все неупорядоченные коды, сбалансированные коды подходят для обнаружения всех однонаправленных ошибок в закодированном сообщении. Сбалансированные коды обеспечивают особенно эффективное декодирование, которое может выполняться параллельно[6][7][8].

Среди наиболее заметных применений кодов сбалансированного веса можно выделить:

Двухфазный код использует 1-из-2 кодировку;
6b/8b кодирование использует 4-из-8 кодировку;
Код Адамара представляет собой -из- кодировку (за исключением нулевого кодового слова),
три-из-шести кодировка;
и т.д.

«3-wire lane» кодирование, используемое в MIPI C-PHY[9] можно считать обобщением равновесного кода на троичный случай — каждый провод передаёт троичный сигнал и в любой момент времени один из трёх проводов передаёт низкий сигнал, один — средний, а один — высокий[10].

m-из-n кодировки

Код m-из-n — это разделимый код обнаружения ошибок с длиной слова в n бит, в котором каждое кодовое слово содержит ровно m единиц. Одиночная битовая ошибка приведёт к тому, что в кодовом слове будет либо m + 1, либо m − 1 единиц. Примером кода m-из-n является код 2-из-5, используемый почтовой службой США.

Простейшая реализация заключается в добавлении к исходным данным строки из единиц до тех пор, пока в них не появится m единиц, затем добавляются нули до получения длины n.

Пример:

3-из-6 код
Исходные 3-битные данные Добавленные биты
000 111
001 110
010 110
011 100
100 110
101 100
110 100
111 000

Наиболее заметные применения кодов с постоянным весом, помимо уже упомянутых выше:

Code 39 использует 3-из-9 кодировку
Двоично-десятичный код использует 2-из-7 кодировку
2-из-5 кодировка,
и другие

Примечания

  1. Перевод «dual rail encoding» на русский язык не стабилизировался. Встречаются разные переводы, такие как «двойное канальное кодирование», «двухрельсовое кодирование», «двухпроводное кодирование»…
  1. 1 2 Smith, Hughes, Perkins, 2006.
  2. Сапожников, Сапожников, Ефанов, 2018.
  3. MacWilliams, Sloane, 1979, с. 526–527.
  4. Brouwer, Shearer, Sloane, Smith, 1990, с. 1334-1380.
  5. W.J. Bainbridge; A. Bardsley; R.W. McGuffin. System-on-Chip Design using Self-timed Networks-on-Chip.
  6. 1 2 Knuth, 1986, с. 51–53.
  7. Al-Bassam, Bose, 1990, с. 406–408.
  8. Immink, Weber, 2010, с. 188–192.
  9. ESD защита модуля высокого разрешения MIPI C-PHY (22 июня 2023). Дата обращения: 18 декабря 2025.
    Цитата: «MIPI C-PHY - совершенно новый интерфейс передачи данных для дисплеев высокого разрешения»
  10. Demystifying MIPI C-PHY / DPHY Subsystem - Tradeoffs, Challenges, and Adoption" (mirror)

Литература

  • D. H. Smith, L. A. Hughes, S. Perkins. A New Table of Constant Weight Codes of Length Greater than 28. — The Electronic Journal of Combinatorics. — 2006.
  • MacWilliams F. J., Sloane N. J. A. The Theory of Error-Correcting Codes. — Amsterdam: North-Holland, 1979.
    • Мак-Вильямс Ф., Слоэн Н. Теория кодов, исправляющих ошибки. — М.: Связь, 1979.
  • A. E. Brouwer, James B. Shearer, N. J. A. Sloane, Warren D. Smith. A New Table of Constant Weight Codes // IEEE Transactions of Information Theory. — 1990. — Т. 36, № 3.
  • D.E. Knuth. Efficient balanced codes // IEEE Transactions on Information Theory. — 1986. — Январь (т. 32, вып. 1). — doi:10.1109/TIT.1986.1057136.
  • Sulaiman Al-Bassam, Bella Bose. On Balanced Codes // IEEE Transactions on Information Theory. — 1990. — Март (т. 36, вып. 2). — doi:10.1109/18.52490.
  • K. Schouhamer Immink, J. Weber. Very efficient balanced codes // IEEE Journal on Selected Areas in Communications. — 2010. — Т. 28, вып. 2. — doi:10.1109/jsac.2010.100207.
  • Вал. В. Сапожников, Вл. В. Сапожников, Д. В. Ефанов. КОДЫ С СУММИРОВАНИЕМ ЕДИНИЧНЫХ ИНФОРМАЦИОННЫХ РАЗРЯДОВ С ПРОИЗВОЛЬНЫМИ МОДУЛЯМИ СЧЁТА // Автоматика на транспорте. — 2018. — Март (т. 4, № 1).

Ссылки