工作日记_250813
- 格雷码生成原理:
格雷码(Gray Code)的生成原理,其核心目标是让相邻两个码字之间仅有 1 位不同(最小汉明距离为 1),这样在符号切换时即使发生一次位判决错误,也只会导致相邻符号的误差,从而减少误码对系统的影响。
数学推导原理
假设我们有一个自然二进制码 \(b_{n-1}b_{n-2}...b_0\)(z最高位到最低位),对应的十进制索引为\(k\)。
格雷码的生成公式:
\(
G(k) = k \oplus \left \lfloor \frac{k}{2} \right \rfloor
\)
其中,
- \(\oplus\) 表示异或运算符(bitwise XOR
- \(\left \lfloor \frac{k}{2} \right \rfloor\)相当于二进制右移一位,即除以 2 取整。
- 数学含义:格雷码的最高位等于二进制的最高位,其余每一位等于二进制相邻两位的异或
例子:3位格雷码生成过程
| k(十进制) | 二进制(b2b1b0) | k>>1(右移一位) | 格雷码) |
|---|---|---|---|
| 0 | 000 | 000 | 000 |
| 1 | 001 | 000 | 001 |
| 2 | 010 | 001 | 011 |
| 3 | 011 | 001 | 010 |
| 4 | 100 | 010 | 110 |
| 5 | 101 | 010 | 111 |
| 6 | 110 | 011 | 101 |
| 7 | 111 | 011 | 100 |
可以看到,相邻行的格雷码只有一位不同。
pam_order = 8; % 3-bit Gray code
index = 0:pam_order-1;
gray_code = bitxor(index, floor(index/2)); % 数字形式
gray_bin = dec2bin(gray_code); % 字符串形式
disp(gray_bin);
浙公网安备 33010602011771号