Рассмотрим преобразование двоичного кода в код Грея, у которого переход к соседнему числу сопровождается изменением только в одном разряде. Так, в технике аналого-цифрового преобразования и пересчетных устройствах широко используется код Грея. Он позволяет существенно сократить время преобразования и повысить эффективность защиты от нежелательных сбоев при переходах выходного кода. Недостатком кода Грея является то, что в нем затруднено выполнение арифметических операций и цифрой налоговое преобразование. Поэтому при необходимости код Грея преобразуется в обычный двоичный код. Переход от двоичного кода к коду Грея осуществляется следующим образом: старшие разряды совпадают, а любой следующий разряд Yk кода Грея равен сумме по модулю два соответствующего Хк и предыдущего Хк + 1 разрядов двоичного кода, т.е. Yk = Xk + Xk+ 1. При обратном переходе старшие разряды также совпадают, но каждый следующий разряд получается в результате суммирования по модулю два полученного разряда двоичного кода и соответствующего разряда кода Грея, т.е. Хк - 1 = Yk- 1 + Хк.
Код Грея, отраженный двоичный код, рефлексный (от reflect—отражать) код для первых восьми чисел представлен в табл. 2.4. В последовательности чисел кода Грея все разряды, кроме самого левого, подчиняются следующему правилу: любая сплошная группа разрядов, считая справа, по некоторому закону перебирает все свои возможные ком* бинации, а затем начинает перебирать их в обратном порядке. Так, разряды кода Грея Ь и с сначала перебирают комбинации 00, 01, 11, 10, затем — те же комбинации в обратном порядке: 10, 11, 01, 00. Закон справедлив вплоть до группы в один разряд: разряд с изменяется сначала в одну сторону—0,1, затем обратно —1,0 и снова в том же цикле. Этот закон объясняет одно из названий кода «отраженный» и позволяет строить последовательность чисел кода любой разрядности. Код Грея — не позиционный, т.е. веса его разрядов не определяются занимаемыми ими местами, как в обычном двоичном коде, который относится к классу позиционных.
Упражнение. Построить таблицы кода Грея для четырех и пяти разрядов. Как проверить ответ, будет сказано в конце параграфа.
В коде Грея при переходе между любыми соседними числами изменяется значение всегда только одного разряда. Благодаря этому свойству код широко применяется в преобразователях углового положения вала в цифровой код, построенных на базе кодового диска или кодового барабана. В оптическом кодовом диске единицы и нули кодируются прозрачными и непрозрачными областями. На рис. 2.15, а показан трехразрядный диск, углы поворота которого закодированы обычным позиционным двоичным кодом. Диск просвечивается ориентирован Рис. 2.15. Позиционный код и код Грея:
а — кодовый диск с позиционным кодом; б — диск с кодом Грея; в — обход куоа в позиционном коде; г — обход куба в коде Грея
ной вдоль его радиуса световой щелью. По другую сторону диска, в полосе света, размещаются три фотодиода-приемника. В таком устройстве двоичный код, считанный с фотодиодов, будет отображать угол поворота диска. Подробнее о преобразователях угла в код см. [19].
Недостаток кодирования угла поворота позиционным двоичным кодом заключается в том, что при углах поворота, когда нечетный код сменяется четным, коды, считанные с фотодиодов, могут оказаться неверными. Поскольку характеристики фотодиодов не идентичны и юстировка их вдоль щели не идеальна, то при вызванной поворотом вала смене сразу нескольких разрядов кода выходные уровни фотодиодов будут изменяться не строго одновременно. Реальная очередность их переключения может быть любой, и в узком промежутке углов между, например, 011 и 100 можно получить любые значения выходных кодов от ООО до 111. Это гак называемая ошибка неоднозначности. Код Грея, поскольку в нем соседние числа отличаются всегда значением только одного разряда, ни в одном переходе не дает ошибки большей, чем значение минимального шага дискретности, т. е. угла, оцифрованного какой-то одной кодовой комбинацией. Диск, угловые секторы которого закодированы 3-разрядным кодом Грея, показан на рис. 2.15,6. В реальных преобразователях используются кодовые диски с числом разрядов 8—12 и более.
На рис. 2.15,2 показана последовательность обхода всех комбинаций значений трех двоичных переменных, использованная в коде Грея. Из сравнения рис. 2.15, виг видно, что эта последовательность отличается от обхода тех же комбинаций в позиционном двоичном коде. Очевидно, что любой обход куба (или многомерного гиперкуба), выполненный строго по его ребрам, породит код, у которого разница между соседними значениями также будет всего в одном разряде, т. е. кодов с таким свойством существует много. Заслуга Грея в том, что среди этого множества он выбрал код с очень простым алгоритмом перевода его в двоичный позиционный: каждый i-й, считая с левого, старшего, разряд двоичного позиционного кода любого числа равен сумме по модулю два i-то и всех более левых разрядов того же числа, представленного кодом Грея. Самые левые разряды обоих кодов совпадают, что является частным случаем того же алгоритма, если считать, что еще левее стоят нули. В справедливости алгоритма легко убедиться по табл. 2.4.