
格雷码的核心性质是在编码序列中任意两个相邻码字之间仅有一位二进制位不同。以下通过多个层次的实例说明其构造、转换与工程应用。1 基本序列实例1.1 3位格雷码3位格雷码共有8个码字序列如下十进制二进制格雷码00000001001001201001130110104100110510111161101017111100相邻码字汉明距离均为1且首尾码字 100100 与 000000 也仅一位不同构成循环格雷码。1.2 4位格雷码4位格雷码共有16个码字是工程中最常用的实例十进制二进制格雷码000000000100010001200100011300110010401000110501010111601100101701110100810001100910011101101010111111101111101211001010131101101114111010011511111000典型观察十进制7到8自然二进制从 01110111 变为 10001000四位全部翻转格雷码从 01000100 变为 11001100仅最高位翻转。2 二进制与格雷码转换实例以十进制13为例因此13的格雷码为 1011。反向验证格雷码 1011 转二进制3 SSI绝对式编码器位置实例设单圈编码器分辨率为13位某时刻位置值为1000十进制。13位自然二进制为转换为格雷码因此该位置在SSI帧中以格雷码 00010000111000传输从最高位MSB到最低位LSB逐位输出。若位置从1000变化到1001自然二进制为 0001111101001格雷码为仅最低位从0变为1验证了格雷码相邻位置仅一位变化的性质。4 SSI 25位多圈编码器帧实例设一个25位多圈编码器12位圈数 13位单圈位置。当前圈数为5单圈位置为1000。圈数5的12位二进制圈数格雷码完整25位SSI帧为SSI从MSB开始逐位传输控制器接收完整25位后分别对圈数和单圈位置执行格雷码到二进制转换再组合成绝对位置值。5 异步FIFO指针实例在异步FIFO中读指针和写指针跨时钟域同步。采用4位指针时计数值自然二进制格雷码601100101701110100810001100910011101从7到8自然二进制 0111→1000有四位同时翻转同步器可能采到中间错误值格雷码 0100→1100 仅最高位翻转同步器最多采到旧值或新值不会产生中间态错误。6 错误检测局限实例3位格雷码中位置3的码字为 010010。若发生单比特翻转010→110对应位置4010→000对应位置0010→011对应位置2。翻转后的码字仍是合法格雷码控制器无法判断发生了错误。这说明格雷码本身不是纠错码不能检测单比特错误。在SSI等无CRC的协议中数据完整性需依赖物理层抗扰度或厂商附加的校验位。7 C语言实现实例#include stdint.h /* 二进制转格雷码 */ uint32_t bin2gray(uint32_t b) { return b ^ (b 1); } /* 格雷码转二进制 */ uint32_t gray2bin(uint32_t g) { uint32_t b 0; while (g) { b ^ g; g 1; } return b; }调用示例uint32_t pos_bin 1000; uint32_t pos_gray bin2gray(pos_bin); /* 得到 0x21C 0001000011100 */ uint32_t pos_back gray2bin(pos_gray); /* 恢复为 1000 */8 小结格雷码的实例覆盖了从基本序列、二进制转换到SSI编码器传输和异步FIFO指针同步的多个层次。其核心价值在于相邻码字仅一位变化从而消除多比特同时翻转带来的采样歧义。但格雷码不具备错误检测能力在强干扰环境中需与CRC或差分传输配合使用。