特征值(校验子)解码详解(Syndrome Decoding)
生成矩阵(Generator Matrix)
这是表示编码函数的矩阵。行数表示信息位数量,列数表示码长。典型阵是以单位矩阵打头的生成矩阵,比如下面:
$$ \bold{G}=\left[\begin{array}{llllll} \color{blue}1 & 0 & 0 & 0 & 1 & 1 \\ 0 & \color{blue}1 & 0 & 1 & 0 & 1 \\ 0 & 0 & \color{blue}1 & 1 & 1 & 0 \end{array}\right] $$我们要表示 $101$ 的编码,只需要第一行加上第三行:
$\begin{bmatrix}1&0&0&0&1&1\end{bmatrix}+\begin{bmatrix}0&0&1&1&1&0\end{bmatrix}=\begin{bmatrix}1&0&1&1&1&1\end{bmatrix}$
信道编码(Channel coding)
假定有生成矩阵:
$$ \mathbf {G^{T}} :={\begin{pmatrix}1&1&0&1\\1&0&1&1\\1&0&0&0\\0&1&1&1\\0&1&0&0\\0&0&1&0\\0&0&0&1\\\end{pmatrix}} $$要编码的数据为 $\begin{pmatrix}1&0&1&1\end{pmatrix}^\mathrm{T}$,则编码后的数据是:
$$ {\mathbf {x}}={\mathbf {G}^{\mathrm{T}}}{\mathbf {p}}={\begin{pmatrix}1&1&0&1\\1&0&1&1\\1&0&0&0\\0&1&1&1\\0&1&0&0\\0&0&1&0\\0&0&0&1\\\end{pmatrix}}{\begin{pmatrix}1\\0\\1\\1\end{pmatrix}}={\begin{pmatrix}2\\3\\1\\2\\0\\1\\1\end{pmatrix}}={\begin{pmatrix}0\\1\\1\\0\\0\\1\\1\end{pmatrix}} $$即 $0110011$。
校验矩阵(Parity Check Matrix)
校验矩阵用于检查接收的码字是否存在错误,记作 $\bold{H}$。例如有:
$$ {H} :={\begin{pmatrix}1&0&1&0&1&0&1\\0&1&1&0&0&1&1\\0&0&0&1&1&1&1\\\end{pmatrix}} $$则:
$$ {\mathbf {z}}={\mathbf {H}}{\mathbf {r}}={\begin{pmatrix}1&0&1&0&1&0&1\\0&1&1&0&0&1&1\\0&0&0&1&1&1&1\\\end{pmatrix}}{\begin{pmatrix}0\\1\\1\\0\\0\\1\\1\end{pmatrix}}={\begin{pmatrix}2\\4\\2\end{pmatrix}}={\begin{pmatrix}0\\0\\0\end{pmatrix}} $$$\bold z$ 称为特征向量(syndrome vector),可以发现结果是零向量,因此没有错误发生。
生成矩阵和校验矩阵的关系
可以相互导出:
$$ \bold{GH}^{T} = \bold 0 $$特征值解码
最大似然解码的解码函数是通过穷举所有可能的输入实现的,数据空间占用较大。所以发明了特征值解码方法。
【例子】
$\underline{\mathbf{E x}} \mathbf{1}$ Let $C_{1}$ be linear binary [6,3,3] code with generator matrix
$$ \mathrm{G}=\pmatrix{ 1 & 0 & 0 & 0 & 1 & 1 \\ 0 & 1 & 0 & 1 & 0 & 1 \\ 0 & 0 & 1 & 1 & 1 & 0 } $$and parity check matrix
$$ \mathrm{H}=\pmatrix{0 & 1 & 1 & 1 & 0 & 0 \\ 1 & 0 & 1 & 0 & 1 & 0 \\ 1 & 1 & 0 & 0 & 0 & 1} $$We receive $\vec{v} = \pmatrix{1&1&1&1&0&1}$,is there any error? what is the original message?
【分析与解答】
求陪集首部的特征值
首先求特征值表,前七种可以用零向量和单位向量,最后一种靠试错即可。
$000000$:$H \cdot \bar{0} = 000$
$000001$:$001$
这里我展开说说吧:
$$ \begin{align} H \cdot \vec{e_1} &= \pmatrix{0 & 1 & 1 & 1 & 0 & 0 \\ 1 & 0 & 1 & 0 & 1 & 0 \\ 1 & 1 & 0 & 0 & 0 & 1} \color{blue}\pmatrix{0\\0\\0\\0\\0\\1}\\ &=\pmatrix{0\\0\\1} \end{align} $$就是用 $H$ 左乘各种向量,得到的是特征向量。为什么选择 $e_1, \cdots$ 这些单位向量呢?其实选什么都可以,只要算出来的特征值没有和前面重复过就行!选单位向量的话,1 的个数少,好算。
$000010$:$010$
$000100$:$100$
$001000$:$110$
$010000$:$101$
$100000$:$011$
还差两个,我们随便找点试试:
$000011$:$011$,这个不行,重复了。
$000101$:$101$,也重复了。这样一个一个尝试,太慢了。有没有什么好办法呢?有!
现在已经找到了的,排序之后是:$000,001,010,011,100,101,110$,还缺什么?$111$,所以我们找
$000111$,计算得到 $\vec{e} = 111$
整理一下:
特征值(校验子) | 陪集头(错误向量) |
---|---|
000 | 000000 |
001 | 000001 |
010 | 000010 |
011 | 100000 |
100 | 000100 |
101 | 010000 |
110 | 001000 |
111 | 000111 |
解码
我们要解码的向量是 $\vec{v} = 111101$,且已知 $\vec{v} = \vec{c} +\vec{e}$(c 是发送的代码字,e 是错误向量,v 是接收的向量)。用奇偶校验矩阵处理 $\vec{v}$:
$$ H \cdot \vec{v}=\begin{pmatrix}0&1&1&1&0&0\\ 1&0&1&0&1&0\\ 1&1&0&0&0&1\end{pmatrix}\begin{pmatrix}1\\ 1\\ 1\\ 1\\ 0\\ 1\end{pmatrix}=\begin{pmatrix}1\\ 0\\ 1\end{pmatrix} $$得到的特征值是 $101$,查表得错误向量是 $\vec{e} = 010000$,因此 $\vec{c} = \vec{v} - \vec{e} = 111101-010000 = 101101$,从而解码出了传递的数据。