Коды AN

редактировать

Коды AN- это код исправления ошибок, который используется в арифметических приложениях. Арифметические коды обычно использовались в компьютерных процессорах, чтобы гарантировать точность его арифметических операций, когда электроника была более ненадежной. Арифметические коды помогают процессору обнаружить ошибку и исправить ее. Без этих кодов процессоры были бы ненадежными, так как любые ошибки остались бы незамеченными. Коды AN - это арифметические коды, названные в честь целых чисел A {\ displaystyle A}A и N {\ displaystyle N}N , которые используются для кодирования и декодирования кодовые слова.

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

Содержание
  • 1 Арифметический вес и расстояние
  • 2 Коды AN
  • 3 Коды Мандельбаума-Барроуза
  • 4 См. Также
  • 5 Ссылки
Арифметический вес и расстояние

Арифметический вес целого числа x {\ displaystyle x}x в базе r {\ displaystyle r}r определяется как

w (x) = min {t | Икс знак равно ∑ я знак равно 1 tairn (я)} {\ Displaystyle ш (х) = \ мин \ {т | х = \ сумма _ {я = 1} ^ {т} а_ {я} г ^ {п (я) } \}}{\ displaystyle w (x) = \ min \ {t | x = \ sum _ {i = 1} ^ {t } a_ {i} r ^ {n (i)} \}}

где | а я | {\ displaystyle | {a_ {i}} |}{\ displaystyle | {a_ {i}} |} < r {\ displaystyle r}r , n (i) ≥ 0 {\ displaystyle n (i) \ geq 0}{\ displaystyle n (i) \ geq 0} и р, N (я) ∈ Z {\ Displaystyle г, n (я) \ in \ mathbb {Z}}{\ displaystyle r, n (i) \ in \ mathbb {Z}} . Арифметическое расстояние слова ограничено сверху его весом Хэмминга, поскольку любое целое число может быть представлено стандартной полиномиальной формой x = ∑ i = 1 nbiri {\ displaystyle x = \ sum _ {i = 1} ^ { n} b_ {i} r ^ {i}}{\ displ aystyle x = \ сумма _ {я = 1} ^ {n} b_ {i} r ^ {i}} где bi {\ displaystyle b_ {i}}b_ {i} - это цифры целого числа. Удаление всех терминов, где bi = 0 {\ displaystyle b_ {i} = 0}b_ {i} = 0 , будет имитировать t {\ displaystyle t}t , равный его весу.. Арифметический вес обычно будет меньше веса Хэмминга, поскольку a i {\ displaystyle a_ {i}}a_ {i} может быть отрицательным. Например, целое число x = 29 {\ displaystyle x = 29}{\ displaystyle x = 29} , которое равно 11101 {\ displaystyle 11101}11101 в двоичном формате, имеет вес Хэмминга 4 {\ displaystyle 4}4 . Это быстрый верхний предел арифметического веса, поскольку x = 2 0 + 2 2 + 2 3 + 2 4 {\ displaystyle x = 2 ^ {0} + 2 ^ {2} + 2 ^ {3} + 2 ^ {4}}{\ displaystyle x = 2 ^ {0} + 2 ^ {2} + 2 ^ {3} + 2 ^ {4}} . Однако, поскольку ai {\ displaystyle a_ {i}}a_ {i} может быть отрицательным, мы можем написать x = 2 5 - 2 1 - 2 0 {\ displaystyle x = 2 ^ { 5} -2 ^ {1} -2 ^ {0}}{\ displaystyle x = 2 ^ {5} -2 ^ {1} -2 ^ {0}} , что делает арифметический вес равным 3 {\ displaystyle 3}3 .

Арифметическое расстояние между двумя целыми числами определяется как

d (x, y) = w (x - y) {\ displaystyle d (x, y) = w (xy)}{\ displaystyle d (x, y) = w (xy)}

Это одна из основных метрик, используемых при анализе арифметических кодов.

Коды AN

Коды AN определяются целыми числами A {\ displaystyle A}A и B {\ displaystyle B}B и используются для кодирования целых чисел от 0 {\ displaystyle 0}{\ displaystyle 0} до B - 1 {\ displaystyle B-1}{\ displaystyle B-1} таких, что

C = {AN | N ∈ Z, 0 ≤ N {\ displaystyle C = \ {AN | N \ in \ mathbb {Z}, 0 \ leq N}{\ displaystyle C = \ {AN | N \ in \ mathbb {Z}, 0 \ leq N} <B} {\ displaystyle B \}}{\ displaystyle B \}}

Каждый выбор A {\ displaystyle A}A приведет к другому коду, а B {\ displaystyle B}B служит ограничивающим фактором для обеспечения полезных свойств на расстоянии код. Если B {\ displaystyle B}B слишком велик, он может пропустить кодовое слово с очень маленьким арифметическим весом в код, что приведет к уменьшению расстояния всего кода. Чтобы использовать эти коды, перед выполнением арифметической операции с двумя целыми числами каждое целое число умножается на A {\ displaystyle A}A . Пусть результатом операции над кодовыми словами будет R {\ displaystyle R}R . Обратите внимание, что R {\ displaystyle R}R также должно находиться в диапазоне от 0 {\ displaystyle 0}{\ displaystyle 0} до B - 1 {\ displaystyle B-1}.{\ displaystyle B-1} для правильного декодирования. Для декодирования просто разделите R / A {\ displaystyle R / A}R / A . Если A {\ displaystyle A}A не является фактором R {\ displaystyle R}R , то произошла по крайней мере одна ошибка, и наиболее вероятное решение будет - кодовое слово с наименьшим арифметическим расстоянием от R {\ displaystyle R}R . Как и в случае с кодами, использующими расстояние Хэмминга, коды AN могут исправить до ⌊ d - 1 2 ⌋ {\ displaystyle \ lfloor {\ frac {d-1} {2}} \ rfloor}{\ displaystyle \ lfloor {\ frac {d -1} {2}} \ rfloor} ошибок, где d {\ displaystyle d}d - расстояние кода.

Например, код AN с A = 3 {\ displaystyle A = 3}{ \ displaystyle A = 3} , операция добавления 15 {\ displaystyle 15}15 и 16 {\ displaystyle 16}16 начнутся с кодирования обоих операндов. Это приводит к операции R = 45 + 48 = 93 {\ displaystyle R = 45 + 48 = 93}{\ displaystyle R = 45 + 48 = 93} . Затем, чтобы найти решение, мы делим 93/3 = 31 {\ displaystyle 93/3 = 31}{\ displaystyle 93/3 = 31} . Пока B {\ displaystyle B}B >31 {\ displaystyle 31}31 , это будет возможная операция в рамках кода. Предположим, что ошибка возникает в каждом двоичном представлении операндов, так что 45 = 101101 → 101111 {\ displaystyle 45 = 101101 \ rightarrow 101111}{\ displaystyle 45 = 101101 \ rightarrow 101111} и 48 = 110000 → 110001 {\ displaystyle 48 = 110000 \ rightarrow 110001}{\ displaystyle 48 = 110000 \ rightarrow 110001} , затем R = 101111 + 110001 = 1100000 {\ displaystyle R = 101111 + 110001 = 1100000}{\ displaystyle R = 101111 + 110001 = 1100000} . Обратите внимание, что, поскольку 93 = 1011101 {\ displaystyle 93 = 1011101}{\ displaystyle 93 = 1011101} , вес Хэмминга между полученным словом и правильным решением равен 5 {\ displaystyle 5}5 после 2 {\ displaystyle 2}2ошибок. Чтобы вычислить арифметический вес, возьмем 1100000 - 1011101 = 11 {\ displaystyle 1100000-1011101 = 11}{ \ displaystyle 1100000-1011101 = 11} , который можно представить как 11 = 2 0 + 2 1 {\ displaystyle 11 = 2 ^ {0} + 2 ^ {1}}{\ displaystyle 11 = 2 ^ {0 } + 2 ^ {1}} или 11 = 2 2–2 0 {\ displaystyle 11 = 2 ^ {2} -2 ^ {0}}{\ displaystyle 11 = 2 ^ {2} -2 ^ {0}} . В любом случае арифметическое расстояние равно 2 {\ displaystyle 2}2, как и ожидалось, поскольку это количество допущенных ошибок. Чтобы исправить эту ошибку, будет использоваться алгоритм для вычисления ближайшего кодового слова к принятому слову с точки зрения арифметического расстояния. Подробно описывать алгоритмы не будем.

Чтобы гарантировать, что расстояние кода не будет слишком маленьким, мы определим модульные коды AN. Модульный код AN C {\ displaystyle C}C является подгруппой Z / m Z {\ displaystyle \ mathbb {Z} / m \ mathbb {Z}}{\ displaystyle \ mathbb {Z} / m \ mathbb {Z}} , где m = AB {\ displaystyle m = AB}{\ displaystyle m = AB} . Коды измеряются в единицах модульного расстояния, которое определяется в терминах графа с вершинами, являющимися элементами Z / m Z {\ displaystyle \ mathbb {Z} / m \ mathbb {Z}}{\ displaystyle \ mathbb {Z} / m \ mathbb {Z}} . Две вершины x (mod m) {\ displaystyle x {\ pmod {m}}}{\ displaystyle x {\ pmod {m}}} и x ′ (mod m) {\ displaystyle x '{\ pmod {m}} }{\displaystyle x'{\pmod {m}}}связаны, если и только если

x - x ′ ≡ ± c ⋅ rj (mod m) {\ displaystyle x-x '\ Equiv \ pm c \ cdot r ^ {j} {\ pmod {m }}}{\displaystyle x-x'\equiv \pm c\cdot r^{j}{\pmod {m}}}

где c, j ∈ Z {\ displaystyle c, j \ in \ mathbb {Z}}{\ displaystyle c, j \ in \ mathbb {Z}} и 0 {\ displaystyle 0}0 <c { \ displaystyle c}c <r {\ displaystyle r}r , j ≥ 0 {\ displaystyle j \ geq 0}j \ geq 0 . Тогда модульное расстояние между двумя словами - это длина кратчайшего пути между их узлами в графе. Модульный вес слова - это его расстояние от 0 {\ displaystyle 0}{\ displaystyle 0} , которое равно

w m (x) = m i n {w (y) | y ∈ Z, y ≡ x (mod m)} {\ displaystyle w_ {m} (x) = min \ {w (y) | y \ in \ mathbb {Z}, y \ Equiv x {\ pmod {m} } \}}{\ displaystyle w_ {m} (x) = min \ {w (y) | y \ in \ mathbb {Z}, y \ Equiv x {\ pmod {m}} \}}

На практике значение m {\ displaystyle m}m обычно выбирается так, чтобы m = rn - 1 {\ displaystyle m = r ^ {n } -1}{\ d isplaystyle м = г ^ {п} -1} , так как большая часть компьютерной арифметики вычисляется mod 2 n - 1 {\ displaystyle \ mod 2 ^ {n} -1}{\ displaystyle \ mod 2 ^ {n} -1} , поэтому нет дополнительной потери данные из-за того, что код выходит за пределы, так как компьютер также будет за пределами. Выбор m = r n - 1 {\ displaystyle m = r ^ {n} -1}{\ d isplaystyle м = г ^ {п} -1} также приводит к кодам с большим расстоянием, чем другие коды.

При использовании модульного веса с m = rn - 1 {\ displaystyle m = r ^ {n} -1}{\ d isplaystyle м = г ^ {п} -1} , коды AN будут циклическим кодом.

определение: Циклический код AN - это код C {\ displaystyle C}C , который является подгруппой [rn - 1] {\ displaystyle [r ^ {n } -1]}{\ displaystyle [r ^ {n} -1]} , где [rn - 1] = {0, 1, 2,…, rn - 1} {\ displaystyle [r ^ {n} -1] = \ { 0,1,2, \ dots, r ^ {n} -1 \}}{\ displaystyle [r ^ {n} -1] = \ {0,1,2, \ dots, r ^ {n} -1 \}} .

Циклический код AN является главным идеалом кольца [rn - 1] {\ displaystyle [r ^ {n} -1]}{\ displaystyle [r ^ {n} -1]} . Есть целые числа A {\ displaystyle A}A и B {\ displaystyle B}B , где AB = rn - 1 {\ displaystyle AB = r ^ {n} -1}{\ displaystyle AB = r ^ {n} -1} и A, B {\ displaystyle A, B}A, B удовлетворяют определению кода AN. Циклические коды AN представляют собой подмножество циклических кодов и обладают теми же свойствами.

Коды Мандельбаума-Барроуза

Коды Мандельбаума-Барроуза представляют собой тип циклических кодов AN, введенных Д. Мандельбаумом и Дж. Т. Барроузом. Эти коды создаются путем выбора B {\ displaystyle B}B в качестве простого числа, которое не делит r {\ displaystyle r}r таким образом, чтобы Z / BZ {\ displaystyle \ mathbb {Z} / B \ mathbb {Z}}{\ displaystyle \ mathbb {Z} / B \ mathbb {Z}} генерируется как r {\ displaystyle r}r и - 1 { \ displaystyle -1}-1и m = rn - 1 {\ displaystyle m = r ^ {n} -1}{\ d isplaystyle м = г ^ {п} -1} . Пусть n {\ displaystyle n}n будет положительным целым числом, где rn ≡ 1 (mod B) {\ displaystyle r ^ {n} \ Equiv 1 {\ pmod {B}}}{\ displaystyle r ^ {n} \ Equiv 1 {\ pmod {B}}} и A = (rn - 1) / B {\ displaystyle A = (r ^ {n} -1) / B}{\ displaystyle A = (r ^ {n} -1) / B} . Например, при выборе r = 2, B = 5, n = 4 {\ displaystyle r = 2, B = 5, n = 4}{\ displaystyle r = 2, B = 5, n = 4} и A = (rn - 1 ) / B = 3 {\ displaystyle A = (r ^ {n} -1) / B = 3}{\ displaystyle A = (r ^ {n} -1) / B = 3} результатом будет код Мандельбаума-Барроуза, такой что C = {3 N | N ∈ Z, 0 ≤ N {\ displaystyle C = \ {3N | N \ in \ mathbb {Z}, 0 \ leq N}{\ displaystyle C = \ {3N | N \ in \ mathbb {Z}, 0 \ leq N} <5} {\ displaystyle 5 \}}{\ displaystyle 5 \}} в базе 2 {\ displaystyle 2}2.

Чтобы проанализировать расстояние кодов Мандельбаума-Барроуза, нам понадобится следующая теорема.

теорема: Пусть C ⊂ [rn - 1] {\ displaystyle C \ subset [r ^ {n} -1]}{\ displaystyle C \ subset [r ^ {n} -1]} будет циклическим кодом AN с генератором A {\ displaystyle A}A и

B = | C | = (rn - 1) / A {\ displaystyle B = | C | = (r ^ {n} -1) / A}{\ displaystyle B = | C | = (r ^ {n} -1) / A}

Тогда

∑ x ∈ C wm (x) = n (⌊ r В р + 1 ⌋ - ⌊ В р + 1 ⌋) {\ displaystyle \ sum _ {x \ in C} w_ {m} (x) = n (\ lfloor {\ frac {rB} {r + 1}} \ rfloor - \ lfloor {\ frac {B} {r + 1}} \ rfloor)}{\ displaystyle \ sum _ {x \ in C} w_ {m} (x) = n (\ lfloor {\ frac {rB} {r + 1 }} \ rfloor - \ lfloor {\ frac {B} {r + 1}} \ rfloor)}

доказательство: Предположим, что каждый x ∈ C {\ displaystyle x \ in C}x \ in C имеет уникальное циклическое представление NAF, которое является

x ≡ ∑ i = 0 n - 1 ci, xri (mod rn - 1) {\ displaystyle x \ Equiv \ sum _ {i = 0} ^ {n-1} c_ {i, x} r ^ {i} {\ pmod {r ^ {n} -1}}}{\ displaystyle x \ Equiv \ sum _ {i = 0} ^ { п-1} c_ { я, х} r ^ {i} {\ pmod {r ^ {n} -1}}}

Мы определяем n × B {\ displaystyle n \ times B }{\ displaystyle n \ times B} матрица с элементами ci, x {\ displaystyle c_ {i, x}}{\ displaystyle c_ {i, x}} где 0 ≤ i ≤ n - 1 {\ displaystyle 0 \ leq i \ Leq n-1}{\ displaystyle 0 \ leq i \ leq n-1 } и x ∈ C {\ displaystyle x \ in C}{\ displaystyle x \ в C} . Эта матрица по существу представляет собой список всех кодовых слов в C {\ displaystyle C}C , где каждый столбец является кодовым словом. Поскольку C {\ displaystyle C}C является циклическим, каждый столбец матрицы имеет одинаковое количество нулей. Теперь мы должны вычислить n | {x ∈ C | c n - 1, x ≠ 0} | {\ displaystyle n | \ {x \ in C | c_ {n-1, x} \ neq 0 \} |}{\ displaystyle n | \ {x \ in C | c_ {n-1, x} \ neq 0 \} |} , то есть n {\ displaystyle n}n умноженное на количество кодовых слов, которые не заканчиваются на 0 {\ displaystyle 0}{\ displaystyle 0} . Как свойство нахождения в циклической NAF, cn - 1, x ≠ 0 {\ displaystyle c_ {n-1, x} \ neq 0}{\ displaystyle c_ {n-1, x} \ neq 0} , если существует y ∈ Z {\ displaystyle y \ in \ mathbb {Z}}y \ in {\ mathbb {Z}} с y ≡ x (mod rn - 1), mr + 1 {\ displaystyle y \ Equiv x {\ pmod {r ^ {n } -1}}, {\ frac {m} {r + 1}}}{\ displaystyle y \ Equiv x {\ pmod {r ^ {n} -1}}, {\ frac {m} {r + 1}}} <y ≤ mrr + 1 {\ displaystyle y \ leq {\ frac {mr} {r + 1}}}{\ displaystyle y \ leq {\ frac {mr} {r + 1}}} . Поскольку x = AN (mod rn - 1) {\ displaystyle x = AN {\ pmod {r ^ {n} -1}}}{\ displaystyle x = AN {\ pmod {r ^ {n} -1}} } с 0 ≤ N {\ displaystyle 0 \ Leq N}{\ displaystyle 0 \ leq N} <B {\ displaystyle B}B , затем B r + 1 {\ displaystyle {\ frac {B} {r + 1}}}{\ displaystyle {\ frac {B} {r + 1 }}} <N ≤ B rr + 1 {\ displaystyle N \ leq {\ frac {Br} {r + 1}}}{\ displaystyle N \ leq {\ frac {Br} {r + 1}}} . Тогда количество целых чисел, последний бит которых равен нулю, равно ⌊ r B r + 1 ⌋ - ⌊ B r + 1 ⌋ {\ displaystyle \ lfloor {\ frac {rB} {r + 1}} \ rfloor - \ lfloor {\ frac {B} {r + 1}} \ rfloor}{\ displaystyle \ lfloor {\ frac {rB} {r + 1}} \ rfloor - \ lfloor {\ frac {B} {r + 1}} \ rfloor} . Умножение этого на символы n {\ displaystyle n}n в кодовых словах дает нам сумму весов кодовых слов n (⌊ r B r + 1 ⌋ - ⌊ B r + 1 ⌋) {\ Displaystyle п (\ lfloor {\ frac {rB} {r + 1}} \ rfloor - \ lfloor {\ frac {B} {r + 1}} \ rfloor)}{\ displaystyle n (\ lfloor {\ frac {rB} {r + 1}} \ rfloor - \ lfloor {\ frac {B} {r + 1}} \ rfloor)} по желанию.

Теперь мы воспользуемся предыдущей теоремой, чтобы показать, что коды Мандельбаума-Барроуза эквидистантны (что означает, что каждая пара кодовых слов имеет одинаковое расстояние) с расстоянием

n B - 1 (⌊ р В р + 1 ⌋ - ⌊ В р + 1 ⌋) {\ displaystyle {\ frac {n} {B-1}} (\ lfloor {\ frac {rB} {r + 1}} \ rfloor - \ lfloor { \ frac {B} {r + 1}} \ rfloor)}{\ displaystyle {\ frac {n} {B-1}} (\ lfloor {\ frac {rB} { r + 1}} \ rfloor - \ lfloor {\ frac {B} {r + 1}} \ rfloor)}

доказательство: Пусть x ∈ C, x ≠ 0 {\ displaystyle x \ in C, x \ neq 0}{\ displaystyle x \ in C, x \ neq 0} , затем x = AN (mod rn - 1) {\ displaystyle x = AN {\ pmod {r ^ {n} -1}}}{\ displaystyle x = AN {\ pmod {r ^ {n} -1}} } и N {\ displaystyle N}N не делится на B {\ displaystyle B}B . Это означает, что существует ∃ j (N ≡ ± rj (mod B)) {\ displaystyle \ exists j (N \ Equiv \ pm r ^ {j} {\ pmod {B}})}{\ displaystyle \ существует j (N \ Equiv \ pm r ^ {j} {\ pmod {B}})} . Тогда wm (x) = wm (± rj A) = wm (A) {\ displaystyle w_ {m} (x) = w_ {m} (\ pm r ^ {j} A) = w_ {m} (А)}{\ displaystyle w_ {m} (x) = w_ {m} (\ pm r ^ { j} A) = w_ {m} (A)} . Это доказывает, что C {\ displaystyle C}C равноудалено, поскольку все кодовые слова имеют тот же вес, что и A {\ displaystyle A}A . Поскольку все кодовые слова имеют одинаковый вес, а по предыдущей теореме мы знаем общий вес всех кодовых слов, расстояние кода находится путем деления общего веса на количество кодовых слов (исключая 0).

См. Также
Последняя правка сделана 2021-06-07 22:03:04
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте