本专栏包含信息论与编码的核心知识,按知识点组织,可作为教学或学习的参考。markdown版本已归档至【Github仓库:github.com/timerring/i… 】或者公众号【AIShareLab】回复 信息论 获取。
系统码的编译码
线性分组码的编码器
如图硬件实现。生成矩阵为
G = [ 1011000 1110100 1100010 0110001 ] G=\left[\begin{array}{l}
1011000 \\
1110100 \\
1100010 \\
0110001
\end{array}\right] G = ⎣ ⎡ 1011000 1110100 1100010 0110001 ⎦ ⎤
查表。(软件)
矩阵乘法。(软件)
线性分组码的译码器
所有编码符合监督方程, 监督方程在译码中非常重要。
对二元信道, 传输后 y = C + e \mathbf{y}=\mathbf{C}+\mathbf{e} y = C + e , 向量 e = [ e n − 1 , e n − 2 , … , e i , … , e 0 ] \mathrm{e}=\left[e_{n-1}, e_{n-2}, \ldots, e_{i}, \ldots, e_{0}\right] e = [ e n − 1 , e n − 2 , … , e i , … , e 0 ] 称为错误图样 。 e i = 1 e_{i}=1 e i = 1 表示第 i 位错误。
如果译码器能推测出错误图样e, 那它就可以给出译码结果为
C ^ = y + e \hat{\mathbf{C}}=\mathbf{y}+\mathbf{e} C ^ = y + e
伴随式校验(Syndrome Testing)
设 y = [ y n − 1 y n − 2 ⋯ y 0 ] \mathbf{y}=\left[y_{n-1} y_{n-2} \cdots y_{0}\right] y = [ y n − 1 y n − 2 ⋯ y 0 ] 是一个接收矢量,由传输的C = [ c n − 1 c n − 2 ⋯ c 0 ] \mathbf{C}=\left[c_{n-1} c_{n-2} \cdots c_{0}\right] C = [ c n − 1 c n − 2 ⋯ c 0 ] 产生。可以将 y \mathbf{y} y 写成y = C + e \mathbf{y}=\mathbf{C}+\mathbf{e} y = C + e
其中 e = [ e n − 1 , e n − 2 , … , e i , … , e 0 ] \mathrm{e}=\left[e_{n-1}, e_{n-2}, \ldots, e_{i}, \ldots, e_{0}\right] e = [ e n − 1 , e n − 2 , … , e i , … , e 0 ] 是由信道引入的错误矢量(图样)。
在 2 n 2^{n} 2 n 个 n \mathrm{n} n 元组空间中存在 2 n − 1 2^{n}-1 2 n − 1 个非零的潜在错误图样。(为什么?)
y \mathbf{y} y 的伴随式 (或称校正子) 定义为
S = y H T \mathbf{S}=\mathbf{y H}^{\mathbf{T}} S = yH T
若 S = 0 , y \mathbf{S}=\mathbf{0}, \mathbf{y} S = 0 , y 是有效码字.
若 y \mathbf{y} y 包含可检测到的错误,伴随式 S ≠ 0 \mathbf{S} \neq \mathbf{0} S = 0 ;
若 y \mathbf{y} y 包含可以纠正的错误, S \mathbf{S} S 将由特殊的非零值来指示特定的错误图样。
线性分组码的一个重要性质是,(可纠正的)错误图样与伴随式一一对应。
S = y H T = ( C + e ) H T = C H T + e H T = e H T \mathbf{S}=\mathbf{y H}^{\mathrm{T}}=(\mathbf{C}+\mathrm{e}) \mathbf{H}^{\mathrm{T}}=\mathbf{C H}^{\mathrm{T}}+\mathrm{eH}^{\mathrm{T}}=\mathrm{eH}^{\mathrm{T}} S = yH T = ( C + e ) H T = CH T + eH T = eH T
(7,4) 循环码校验矩阵如下所示, 设发送码字为 C = 1000011 \mathbf{C}=1000011 C = 1000011 , 接收矢量为 y = 1100011 \mathbf{y}=1100011 y = 1100011
试求伴随式矢量 S = y H T \mathbf{S}=\mathbf{y H}^{\mathrm{T}} S = yH T 并证明它等于 e H T \mathrm{eH}^{\mathrm{T}} eH T
校验矩阵: H = ( 0 1 1 1 1 0 0 1 1 0 1 0 1 0 1 0 1 1 0 0 1 ) H=\left(\begin{array}{lllllll}0 & 1 & 1 & 1 & 1 & 0 & 0 \\ 1 & 1 & 0 & 1 & 0 & 1 & 0 \\ 1 & 0 & 1 & 1 & 0 & 0 & 1\end{array}\right) H = ⎝ ⎛ 0 1 1 1 1 0 1 0 1 1 1 1 1 0 0 0 1 0 0 0 1 ⎠ ⎞
注意:监督矩阵必须具有两个性质:
H中没有全0列,否则的话,相应码字位置上的错误就无法影响伴随式,因而无法检测。
H中的所有列是唯一的,如果H有两列相同,那么对应这两列发生的错码位置将无法识别。
例:已知 (7,3) 线性分组码的监督矩阵为
H = ( 1 0 1 1 0 0 0 1 1 1 0 1 0 0 1 1 0 0 0 1 0 0 1 1 0 0 0 1 ) \mathbf{H}=\left(\begin{array}{lllllll}
1 & 0 & 1 & 1 & 0 & 0 & 0 \\
1 & 1 & 1 & 0 & 1 & 0 & 0 \\
1 & 1 & 0 & 0 & 0 & 1 & 0 \\
0 & 1 & 1 & 0 & 0 & 0 & 1
\end{array}\right) H = ⎝ ⎛ 1 1 1 0 0 1 1 1 1 1 0 1 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 ⎠ ⎞
信道输出端的接收矢量为
y = ( 1 0 0 1 0 0 1 ) \mathbf{y}=\left(\begin{array}{lllllll}
1 & 0 & 0 & 1 & 0 & 0 & 1
\end{array}\right) y = ( 1 0 0 1 0 0 1 )
请求出 y \mathbf{y} y 的伴随式。并估计最有可能的译码结果。
解: S = y H T = ( 0 1 1 1 ) \mathbf{S}=\mathbf{y} \mathbf{H}^{T}=\left(\begin{array}{llll}0 & 1 & 1 & 1\end{array}\right) S = y H T = ( 0 1 1 1 )
所有可能的错误图样有(1001001)(1010100) (1110011) (0000111) (0011010) (0100000) (0111101)
取码重最小即可能性最大的错误图样 (0100000) 为可纠正的错误图样 。译码结果
C ^ = y + e ′ = ( 1 0 0 1 0 0 1 ) + ( 0 1 0 0 0 0 0 ) = ( 1 1 0 1 0 0 1 ) \begin{array}{l}
\widehat{\mathbf{C}}=\mathbf{y}+\mathbf{e}^{\prime}=\left(\begin{array}{lllllll}
1 & 0 & 0 & 1 & 0 & 0 & 1
\end{array}\right)+ \\
\left(\begin{array}{lllllll}
0 & 1 & 0 & 0 & 0 & 0 & 0
\end{array}\right)=\left(\begin{array}{lllllll}
1 & 1 & 0 & 1 & 0 & 0 & 1
\end{array}\right) \\
\end{array} C = y + e ′ = ( 1 0 0 1 0 0 1 ) + ( 0 1 0 0 0 0 0 ) = ( 1 1 0 1 0 0 1 )
纠错
伴随式不仅可以检测错误, 而且可以同时纠正错误, 因 为可纠正的错误图样与伴随式之间一一对应。
在硬判决译码中, 一般采用标准阵(standard array) 来完成纠错的设计。
标准阵包含了 2 n 2^{\mathrm{n}} 2 n 个所有的可能接收矢量. 其第一行以全 0 码 字开始,包括了所有码字, 而第一列包括了所有可纠正的错误图样 (一般选汉明重量最小的元素 )。每行称为一个陪集 (coset), 由第一列的错误图样 (称为陪集首)及其干扰的码字组成。 ( n . k ) (\boldsymbol{n} . \boldsymbol{k}) ( n . k ) 码的标准阵如下:
注意:码字 C 1 C_{1} C 1 (全0码)起两个作用:既是其中的一个码字, 也是错误图样 e 1 \mathrm{e}_{1} e 1 ,代表没有错误, 即 y = C \mathbf{y}=\mathbf{C} y = C .
译码机制要求将每个有错的矢量用此矢量同列的最顶端的有效码字代替。
假设一个码字 C i \mathrm{C}_{\mathrm{i}} C i 通过一个噪声信道, 接收矢量为量将被正确译码为码字 C i \mathrm{C}_{\mathrm{i}} C i 。 如果错误图样不是一个陪集首, 那么将会导致译码错误。
陪集的伴随式
陪集中的每一个元素具有相同的伴随式。伴随式用于估计错误图样。
纠错译码
计算 y \mathbf{y} y 的伴随式 S = y H T \mathbf{S}=\mathbf{y H}^{\mathrm{T}} S = yH T .
定位错误图样 (陪集首) e j \mathrm{e}_{\mathrm{j}} e j , 它的伴随式与 y H T \mathrm{yH}^{\mathrm{T}} yH T 相等。
假设错误图样是由信道衰落引起的。
错误接收的矢量或码字表示为 C = y + e j \mathrm{C}=\mathbf{y}+\mathrm{e}_{\mathbf{j}} C = y + e j 。通过减去其中已识别出的错误来恢复正确码字。
Example: (6,3)线性分组码如下表所示,求它的生成矩阵和监督矩阵。
其生成矩阵为
G = [ 110100 011010 101001 ] G=\left[\begin{array}{l}
110100 \\
011010 \\
101001
\end{array}\right] G = ⎣ ⎡ 110100 011010 101001 ⎦ ⎤
监督矩阵为
H = [ 100101 010110 001011 ] H=\left[\begin{array}{l}
100101 \\
010110 \\
001011
\end{array}\right] H = ⎣ ⎡ 100101 010110 001011 ⎦ ⎤
(6,3)码的标准阵如下。
根据标准阵,可以得到错误图样与伴随式的一一对应关系,可用来译码,同时完成纠错。
在线性分组码中,[全0码]码字一定是有效码字。
已知接收矢量y=001110.请问译码器译码所得是什么?
S = 100,监督矩阵为
H = [ 100101 010110 001011 ] H=\left[\begin{array}{l}
100101 \\
010110 \\
001011
\end{array}\right] H = ⎣ ⎡ 100101 010110 001011 ⎦ ⎤
S=100
C=101110
U=110
译码方法与译码电路
(1) 在设计阶段:
对每一种可能伴随式的取值确定出它所对应的可纠正错误图样,存储为表格。
(2)译码器运行时:
当接收端收到y后,计算伴随式S,用S查可纠正错误图样表,根据查表结果纠正错误。
“查错误图样表”这个环节往往可以进行逻辑化简,比如在(7.4)码的情形下,“查错误图样表”是用3比特地址查8种结果,所有结果除全0外,只有1个1。这样的电路类似38译码器。
(7,4)码错误图样与伴随式表
汉明码
一能纠正单个随机错误、编码效率最高的线性分组码
主要参数:码长 n = 2 m − 1 n=2^{m}-1 n = 2 m − 1 ;
信息位: k = n − m = 2 m − 1 − m k=n-m=2^{m}-1-m k = n − m = 2 m − 1 − m ;
监督位: n − k = m n-k=m n − k = m , 且 m ≥ 3 ; ( m = 3 , n = 7 , k = 4 ) m \geq 3 ;(m=3, n=7, k=4) m ≥ 3 ; ( m = 3 , n = 7 , k = 4 )
最小距离 : d min = d 0 = 3 d_{\text {min }}=d_{0}=3 d min = d 0 = 3
汉明码的非全 0 伴随式有 n = 2 n − k − 1 n=2^{n-k}-1 n = 2 n − k − 1 个, 每个伴随式对应一种单比特错误图样, 因此每个伴随式就是监督矩阵 H \boldsymbol{H} H 的一个列, 而 H \boldsymbol{H} H 的所有列构成了全 0 以外的所有可能的 n − k n-k n − k 比特向量。
如 m=3 , 则可以得到一个 n = 2 3 − 1 = 7 n=2^{3}-1=7 n = 2 3 − 1 = 7 的 (7,4) 汉明码, 其 H \boldsymbol{H} H 矩阵的列由所有非 0 三重组成:
H = ( 1 0 1 1 1 0 0 1 1 1 0 0 1 0 0 1 1 1 0 0 1 ) H=\left(\begin{array}{lllllll}
1 & 0 & 1 & 1 & 1 & 0 & 0 \\
1 & 1 & 1 & 0 & 0 & 1 & 0 \\
0 & 1 & 1 & 1 & 0 & 0 & 1
\end{array}\right) H = ⎝ ⎛ 1 1 0 0 1 1 1 1 1 1 0 1 1 0 0 0 1 0 0 0 1 ⎠ ⎞
由于任意两列线性无关 (d=3, t=1) , 故能纠任意单个随机错误(监督矩阵的特性 d )。 R = k / n = 1 − m / n R=k / n=1-m / n R = k / n = 1 − m / n .
高效率纠错码。广泛应用于RAM中。
总结
线性分组码
①编码:生成矩阵编码
②译码:校验矩阵,错误图样,伴随式译码,标准阵
③生成矩阵与监督矩阵的关系
④汉明码
参考文献:
Proakis, John G., et al. Communication systems engineering . Vol. 2. New Jersey: Prentice Hall, 1994.
Proakis, John G., et al. SOLUTIONS MANUAL Communication Systems Engineering . Vol. 2. New Jersey: Prentice Hall, 1994.
周炯槃. 通信原理(第3版)[M]. 北京:北京邮电大学出版社, 2008.
樊昌信, 曹丽娜. 通信原理(第7版) [M]. 北京:国防工业出版社, 2012.