二维码的纠错码原理及如何纠错(2)

下面进一步介绍二维码纠错相关的编码矩阵

1 范德蒙德(Vandermonde)矩阵

1.1 定义及特性

法国数学家 Alexandre-Théophile Vandermonde 在十八世纪提出了行列式的概念, 用来解决线性方程组问题, 其中一个关键是范德蒙德(Vandermonde) 矩阵, Vandermonde 矩阵具有如下的形式:
An=[111…1x11x21x31…xn1x12x22x32…xn2⋮⋮⋮⋱⋮x1n−1x2n−1x3n−1…xnn−1](1)\mathrm{A_n} = \left[ \begin{matrix} 1 &1 & 1 &\dots & 1 \\ x_1^1 & x_2^1 &x_3^1 & \dots &x_n^1 \\ x_1^2 & x_2^2 &x_3^2 & \dots &x_n^2 \\ \vdots & \vdots &\vdots & \ddots &\vdots \\ x_1^{n-1} & x_2^{n-1} &x_3^{n-1} & \dots &x_n^{n-1} \\ \end{matrix} \right] \tag1 An=1x11x12x1n11x21x22x2n11x31x32x3n11xn1xn2xnn1(1)
它的任意的子方阵均为可逆方阵。一个nnnnnn列的范德蒙德矩阵定义如下,其中xix_ixi 均不相同,且不为0。Vandermonde 矩阵有一个很重要的特性:
∣An∣=∣AnT∣=∏1≤i≤j≤n(xj−xi)(2)|\mathrm{A_n}| = |\mathrm{A_n^T}| = \prod_{1 \leq i \leq j \leq n}(x_j - x_i) \tag2An=AnT=1ijn(xjxi)(2)
例子1:
如下范德蒙矩阵
An=[111235223252]\mathrm{A_n} = \left[ \begin{matrix} 1 &1 & 1 \\ 2 & 3 &5 \\ 2^2 & 3^2 &5^2 \\ \end{matrix} \right] An=122213321552
那么它的行列式为∣An∣=(3−2)∗(5−2)∗(5−3)=6\left|A_n\right|=(3-2)*(5-2)*(5-3)=6An=(32)(52)(53)=6.
例子2:
如下范德蒙矩阵
An=[111123572232527223335373]\mathrm{A_n} = \left[ \begin{matrix} 1 &1 & 1 &1\\ 2 & 3 &5 &7\\ 2^2 & 3^2 &5^2 &7^2\\ 2^3 & 3^3 &5^3 &7^3\\ \end{matrix} \right] An=122223133233155253177273
那么它的行列式为∣An∣=(3−2)∗(5−2)∗(7−2)∗(5−3)∗(7−3)∗(7−5)=240\left|A_n\right|=(3-2)*(5-2)*(7-2)*(5-3)*(7-3)*(7-5)=240An=(32)(52)(72)(53)(73)(75)=240.
这个特性可以用数学归纳法证明出来。
【证明】
DnD_nDnnnn阶Vandermonde行列式(n≥2n \geq 2n2),则有
Dn=∏1≤i≤j≤n(xj−xi)=(xn−xn−1)(xn−xn−2)…(xn−x1)(xn−1−xn−2)(xn−1−xn−3)…(xn−1−x1)…(x3−x2)(x3−x1)(x2−x1).D_n = \prod_{1 \leq i \leq j \leq n}(x_j - x_i) = (x_n - x_{n-1})(x_n - x_{n-2})\dots(x_n - x_1)(x_{n-1} - x_{n-2}) \\ (x_{n-1} - x_{n-3})\dots(x_{n-1} - x_1)\dots(x_3 - x_2)(x_3 - x_1)(x_2 - x_1). Dn=1ijn(xjxi)=(xnxn1)(xnxn2)(xnx1)(xn1xn2)(xn1xn3)(xn1x1)(x3x2)(x3x1)(x2x1).
(1) 当n=2n = 2n=2时, D2=∣11x1x2∣=(x2−x1)D_2 = \left|\begin{matrix}1 &1 \\ x_1 &x_2\end{matrix}\right| = (x_2 - x_1)D2=1x11x2=(x2x1),结论成立;
(2) 假设结论对n−1n - 1n1阶范德蒙德行列式成立,即
Dn−1=∣11…1x21x31…xn1x22x32…xn2⋮⋮⋱⋮x2n−2x3n−2…xnn−2∣=∏2≤i≤j≤n(xj−xi)D_{n-1} = \left| \begin{matrix} 1 & 1 &\dots & 1 \\ x_2^1 &x_3^1 & \dots &x_n^1 \\ x_2^2 &x_3^2 & \dots &x_n^2 \\ \vdots &\vdots & \ddots &\vdots \\ x_2^{n-2} &x_3^{n-2} & \dots &x_n^{n-2} \\ \end{matrix} \right| = \prod_{2 \leq i \leq j \leq n}(x_j - x_i) Dn1=1x21x22x2n21x31x32x3n21xn1xn2xnn2=2ijn(xjxi)
考虑nnn阶范德蒙行列式的情形:
Dn=∣111…1x11x21x31…xn1x12x22x32…xn2⋮⋮⋮⋱⋮x1n−1x2n−1x3n−1…xnn−1∣D_{n} = \left| \begin{matrix} 1 &1 & 1 &\dots & 1 \\ x_1^1 & x_2^1 &x_3^1 & \dots &x_n^1 \\ x_1^2 & x_2^2 &x_3^2 & \dots &x_n^2 \\ \vdots & \vdots &\vdots & \ddots &\vdots \\ x_1^{n-1} & x_2^{n-1} &x_3^{n-1} & \dots &x_n^{n-1} \\ \end{matrix} \right| Dn=1x11x12x1n11x21x22x2n11x31x32x3n11xn1xn2xnn1
从第nnn行开始,自下而上依次的由下一行减去它上一行的x1x_1x1倍 ,有:
Dn=∣111…10x2−x1x3−x1…xn−x10x22−x2x1x32−x3x1…xn2−xnx1⋮⋮⋮⋱⋮0x2n−1−x2n−2x1x3n−1−x3n−2x1…xnn−1−xnn−2x1∣=∣111…10x2−x1x3−x1…xn−x10x2(x2−x1)x3(x3−x1)…xn(xn−x1)⋮⋮⋮⋱⋮0x2n−2(x2−x1)x3n−2(x3−x1)…xnn−2(xn−x1)∣D_{n} = \left| \begin{matrix} 1 &1 & 1 &\dots & 1 \\ 0 & x_2- x_1 &x_3 - x_1 & \dots &x_n-x_1 \\ 0 & x_2^2-x_2x_1 &x_3^2-x_3x_1 & \dots &x_n^2-x_nx_1 \\ \vdots & \vdots &\vdots & \ddots &\vdots \\ 0 & x_2^{n-1}-x_2^{n-2}x_1 &x_3^{n-1}-x_3^{n-2}x_1 & \dots &x_n^{n-1}-x_n^{n-2}x_1 \\ \end{matrix} \right|\\ =\left| \begin{matrix} 1 &1 & 1 &\dots & 1 \\ 0 & x_2- x_1 &x_3 - x_1 & \dots &x_n-x_1 \\ 0 & x_2(x_2-x_1) &x_3(x_3-x_1) & \dots &x_n(x_n-x_1) \\ \vdots & \vdots &\vdots & \ddots &\vdots \\ 0 & x_2^{n-2}(x_2-x_1) &x_3^{n-2}(x_3-x_1) & \dots &x_n^{n-2}(x_n-x_1) \\ \end{matrix} \right| Dn=10001x2x1x22x2x1x2n1x2n2x11x3x1x32x3x1x3n1x3n2x11xnx1xn2xnx1xnn1xnn2x1=10001x2x1x2(x2x1)x2n2(x2x1)1x3x1x3(x3x1)x3n2(x3x1)1xnx1xn(xnx1)xnn2(xnx1)
按第一列展开后提取公因式,得
Dn=(x2−x1)(x3−x1)…(xn−x1)∣11…1x2x3…xn⋮⋮⋱⋮x2n−2x3n−2…xnn−2∣=(x2−x1)(x3−x1)…(xn−x1)∏2≤i≤j≤n(xj−xi)=∏1≤i≤j≤n(xj−xi)D_{n} = (x_2 - x_1)(x_3 - x_1)\dots(x_n - x_1) \left| \begin{matrix} 1 &1 &\dots & 1 \\ x_2 & x_3 & \dots &x_n \\ \vdots & \vdots & \ddots &\vdots \\ x_2^{n-2} & x_3^{n-2} & \dots &x_n^{n-2} \\ \end{matrix} \right| \\ = (x_2 - x_1)(x_3 - x_1)\dots(x_n - x_1)\prod_{2 \leq i \leq j \leq n}(x_j - x_i) =\prod_{1 \leq i \leq j \leq n}(x_j - x_i) Dn=(x2x1)(x3x1)(xnx1)1x2x2n21x3x3n21xnxnn2=(x2x1)(x3x1)(xnx1)2ijn(xjxi)=1ijn(xjxi)
得证。

1.2 Vandermonde矩阵的理解

在差值(interpolation)问题中, 假设在二维空间有 nnn 个点 (x1,y1),(x2,y2),…,(xn,yn)(x_1,y_1), (x_2,y_2), \dots, (x_n,y_n)(x1,y1),(x2,y2),,(xn,yn), 希望得到一个多项式解:
p(x)=dnxn−1+dn−1xn−2+⋯+d2x+d1(3)p(x) = d_{n}x^{n-1} + d_{n-1}x^{n-2} + \dots + d_2x+ d_1 \tag3p(x)=dnxn1+dn1xn2++d2x+d1(3)
这个多项式可以满足我们的当前条件:
p(x1)=y1=dnx1n−1+dn−1x1n−2+⋯+d2x1+d1p(x2)=y2=dnx2n−1+dn−1x2n−2+⋯+d2x2+d1…p(xn)=yn=dnxnn−1+dn−1xnn−2+⋯+d2xn+d1p(x_1) = y_1 = d_{n}x_1^{n-1} + d_{n-1}x_1^{n-2} + \dots + d_2x_1 + d_1 \\ p(x_2) = y_2 = d_{n}x_2^{n-1} + d_{n-1}x_2^{n-2} + \dots + d_2x_2 + d_1 \\ \dots \\ p(x_n) = y_n = d_{n}x_n^{n-1} + d_{n-1}x_n^{n-2} + \dots + d_2x_n + d_1 p(x1)=y1=dnx1n1+dn1x1n2++d2x1+d1p(x2)=y2=dnx2n1+dn1x2n2++d2x2+d1p(xn)=yn=dnxnn1+dn1xnn2++d2xn+d1
实际上, 可以推演如下:
y=[y1y2⋮yn]=[d1+d2x1+d3x12⋯+dnx1n−1d1+d2x2+d3x22⋯+dnx2n−1⋮d1+d2xn+d3xn2⋯+dnxnn−1]=[111…1x11x21x21…xn1x12x22x22…xn2⋮⋮⋮⋱⋮x1n−1x2n−1x2n−1…xnn−1]T∗[1d2⋮dn]=AT∗[y1y2⋮yn](4)y = \left[ \begin{matrix} y_1 \\ y_2 \\ \vdots \\ y_n \end{matrix} \right] = \left[ \begin{matrix} d_1 + d_2x_1 + d_3x_1^2 \dots + d_nx_1^{n - 1} \\ d_1 + d_2x_2 + d_3x_2^2 \dots + d_nx_2^{n - 1} \\ \vdots \\ d_1 + d_2x_n + d_3x_n^2 \dots + d_nx_n^{n - 1} \\ \end{matrix} \right] \\ = \left[ \begin{matrix} 1 &1 & 1 &\dots & 1 \\ x_1^1 & x_2^1 &x_2^1 & \dots &x_n^1 \\ x_1^2 & x_2^2 &x_2^2 & \dots &x_n^2 \\ \vdots & \vdots &\vdots & \ddots &\vdots \\ x_1^{n-1} & x_2^{n-1} &x_2^{n-1} & \dots &x_n^{n-1} \\ \end{matrix} \right]^\mathrm{T} * \left[ \begin{matrix} _1 \\ d_2 \\ \vdots \\ d_n \end{matrix} \right] = \mathrm{A^\mathrm{T} } * \left[ \begin{matrix} y_1 \\ y_2 \\ \vdots \\ y_n \end{matrix} \right] \tag4 y=y1y2yn=d1+d2x1+d3x12+dnx1n1d1+d2x2+d3x22+dnx2n1d1+d2xn+d3xn2+dnxnn1=1x11x12x1n11x21x22x2n11x21x22x2n11xn1xn2xnn1T1d2dn=ATy1y2yn(4)
还可以表示如下:
[d1d2⋮dn]=(AT)−1y(5)\left[ \begin{matrix} d_1 \\ d_2 \\ \vdots \\ d_n \end{matrix} \right] = (\mathrm{A^T})^{-1} y \tag5 d1d2dn=(AT)1y(5)
x1=1,x2=2,x3=3,…,xn=nx_1 = 1, x_2 = 2, x_3 = 3, \dots, x_n = nx1=1,x2=2,x3=3,,xn=n, 则有:
A=[111…1123…n122232…n2⋮⋮⋮⋱⋮1n−12n−13n−1…nn−1](6)\mathrm{A} = \left[ \begin{matrix} 1 &1 & 1 &\dots & 1 \\ 1 & 2 &3 & \dots &n \\ 1^2 & 2^2 &3^2 & \dots &n^2 \\ \vdots & \vdots &\vdots & \ddots &\vdots \\ 1^{n-1} & 2^{n-1} &3^{n-1} & \dots &n^{n-1} \\ \end{matrix} \right] \tag6 A=11121n112222n113323n11nn2nn1(6)

1.3 Vandermonde矩阵在最小二乘拟合中的应用

假设对nnn个采样点进行拟合,那么方差可以表示为:

R2=∑i=1n[yi−(d1+d2xi+d3xi2⋯+dnxin−1)]2R^2 = \sum_{i=1}^{n}[y_i - (d_1 + d_2x_i + d_3x_i^2 \dots + d_nx_i^{n - 1})]^2R2=i=1n[yi(d1+d2xi+d3xi2+dnxin1)]2

为求得方差的最小值,对d1,…,dnd_1, \dots, d_nd1,,dn求偏导:
∂(R2)∂(d1)=−2∑i=1n[y−(d1+d2x+d3x2⋯+dnxn−1)]=0∂(R2)∂(d2)=−2∑i=1n[y−(d1+d2x+d3x2⋯+dnxn−1)]x=0…∂(R2)∂(dn)=−2∑i=1n[y−(d1+d2x+d3x2⋯+dnxn−1)]xn−1=0\frac{\partial(R^2)}{\partial(d_1)} = -2\sum_{i=1}^{n}[y - (d_1 + d_2x + d_3x^2 \dots + d_nx^{n - 1})] = 0\\ \frac{\partial(R^2)}{\partial(d_2)} = -2\sum_{i=1}^{n}[y - (d_1 + d_2x + d_3x^2 \dots + d_nx^{n - 1})]x = 0 \\ \dots \\ \frac{\partial(R^2)}{\partial(d_n)} = -2\sum_{i=1}^{n}[y - (d_1 + d_2x + d_3x^2 \dots + d_nx^{n - 1})]x^{n-1} = 0 \\ (d1)(R2)=2i=1n[y(d1+d2x+d3x2+dnxn1)]=0(d2)(R2)=2i=1n[y(d1+d2x+d3x2+dnxn1)]x=0(dn)(R2)=2i=1n[y(d1+d2x+d3x2+dnxn1)]xn1=0
移项:
d1n+d2∑i=1nxi+d3∑i=1nxi2+⋯+dn∑i=1nxin−1)]=∑i=1nyid1∑i=1nxi+d2∑i=1nxi2+d3∑i=1nxi3+⋯+dn∑i=1nxin)]=∑i=1nxiyi…d1∑i=1nxin−1+d2∑i=1nxin+d3∑i=1nxin+1+⋯+dn∑i=1nxi2n−2=∑i=1nxin−1yid_1n + d_2\sum_{i=1}^{n}x_i + d_3\sum_{i=1}^{n}x_i^2 + \dots + d_n\sum_{i=1}^{n}x_i^{n - 1})] = \sum_{i=1}^{n}y_i \\ d_1\sum_{i=1}^{n}x_i + d_2\sum_{i=1}^{n}x_i^2 + d_3\sum_{i=1}^{n}x_i^3 + \dots + d_n\sum_{i=1}^{n}x_i^{n})] = \sum_{i=1}^{n}x_iy_i \\ \dots \\ d_1\sum_{i=1}^{n}x_i^{n-1} + d_2\sum_{i=1}^{n}x_i^{n} + d_3\sum_{i=1}^{n}x_i^{n+1} + \dots + d_n\sum_{i=1}^{n}x_i^{2n-2} = \sum_{i=1}^{n}x_i^{n-1}y_i \\ d1n+d2i=1nxi+d3i=1nxi2++dni=1nxin1)]=i=1nyid1i=1nxi+d2i=1nxi2+d3i=1nxi3++dni=1nxin)]=i=1nxiyid1i=1nxin1+d2i=1nxin+d3i=1nxin+1++dni=1nxi2n2=i=1nxin1yi
用矩阵表示如下
[n∑i=1nxi∑i=1nxi2…∑i=1nxin−1∑i=1nxi∑i=1nxi2∑i=1nxi3…∑i=1nxin⋮⋮⋮⋱⋮∑i=1nxin−1∑i=1nxin∑i=1nxin+1…∑i=1nxi2n−2]∗[d1d2⋮dn]=[111…1x11x21x21…xn1x12x22x22…xn2⋮⋮⋮⋱⋮x1n−1x2n−1x2n−1…xnn−1]∗[y1y2⋮yn]\left[ \begin{matrix} n &\sum_{i=1}^{n}x_i & \sum_{i=1}^{n}x_i^2 &\dots & \sum_{i=1}^{n}x_i^{n-1} \\ \sum_{i=1}^{n}x_i & \sum_{i=1}^{n}x_i^2 & \sum_{i=1}^{n}x_i^3 & \dots & \sum_{i=1}^{n}x_i^{n} \\ \vdots & \vdots &\vdots & \ddots &\vdots \\ \sum_{i=1}^{n}x_i^{n-1} & \sum_{i=1}^{n}x_i^n & \sum_{i=1}^{n}x_i^{n+1} & \dots & \sum_{i=1}^{n}x_i^{2n-2} \\ \end{matrix} \right] * \left[ \begin{matrix} d_1 \\ d_2 \\ \vdots \\ d_n \end{matrix} \right] = \\ \left[ \begin{matrix} 1 &1 & 1 &\dots & 1 \\ x_1^1 & x_2^1 &x_2^1 & \dots &x_n^1 \\ x_1^2 & x_2^2 &x_2^2 & \dots &x_n^2 \\ \vdots & \vdots &\vdots & \ddots &\vdots \\ x_1^{n-1} & x_2^{n-1} &x_2^{n-1} & \dots &x_n^{n-1} \\ \end{matrix} \right] * \left[ \begin{matrix} y_1 \\ y_2 \\ \vdots \\ y_n \end{matrix} \right] ni=1nxii=1nxin1i=1nxii=1nxi2i=1nxini=1nxi2i=1nxi3i=1nxin+1i=1nxin1i=1nxini=1nxi2n2d1d2dn=1x11x12x1n11x21x22x2n11x21x22x2n11xn1xn2xnn1y1y2yn
对其进行变形,得到:
[111…1x11x21x21…xn1x12x22x22…xn2⋮⋮⋮⋱⋮x1n−1x2n−1x2n−1…xnn−1][111…1x11x21x21…xn1x12x22x22…xn2⋮⋮⋮⋱⋮x1n−1x2n−1x2n−1…xnn−1]T[d1d2⋮dn]=[111…1x11x21x21…xn1x12x22x22…xn2⋮⋮⋮⋱⋮x1n−1x2n−1x2n−1…xnn−1][y1y2⋮yn]\left[ \begin{matrix} 1 &1 & 1 &\dots & 1 \\ x_1^1 & x_2^1 &x_2^1 & \dots &x_n^1 \\ x_1^2 & x_2^2 &x_2^2 & \dots &x_n^2 \\ \vdots & \vdots &\vdots & \ddots &\vdots \\ x_1^{n-1} & x_2^{n-1} &x_2^{n-1} & \dots &x_n^{n-1} \\ \end{matrix} \right] \left[ \begin{matrix} 1 &1 & 1 &\dots & 1 \\ x_1^1 & x_2^1 &x_2^1 & \dots &x_n^1 \\ x_1^2 & x_2^2 &x_2^2 & \dots &x_n^2 \\ \vdots & \vdots &\vdots & \ddots &\vdots \\ x_1^{n-1} & x_2^{n-1} &x_2^{n-1} & \dots &x_n^{n-1} \\ \end{matrix} \right]^{\mathrm{T}} \left[ \begin{matrix} d_1 \\ d_2 \\ \vdots \\ d_n \end{matrix} \right]=\\ \left[ \begin{matrix} 1 &1 & 1 &\dots & 1 \\ x_1^1 & x_2^1 &x_2^1 & \dots &x_n^1 \\ x_1^2 & x_2^2 &x_2^2 & \dots &x_n^2 \\ \vdots & \vdots &\vdots & \ddots &\vdots \\ x_1^{n-1} & x_2^{n-1} &x_2^{n-1} & \dots &x_n^{n-1} \\ \end{matrix} \right] \left[ \begin{matrix} y_1 \\ y_2 \\ \vdots \\ y_n \end{matrix} \right] 1x11x12x1n11x21x22x2n11x21x22x2n11xn1xn2xnn11x11x12x1n11x21x22x2n11x21x22x2n11xn1xn2xnn1Td1d2dn=1x11x12x1n11x21x22x2n11x21x22x2n11xn1xn2xnn1y1y2yn
上面的公式可以简写为:
AATd=Ay\mathrm{A}\mathrm{A}^\mathrm{T}d = \mathrm{A}yAATd=Ay
A\mathrm{A}A为竖着的范德蒙矩阵。此处向量ddd等于:
d=(AAT)−1Ayd = (\mathrm{A}\mathrm{A}^\mathrm{T})^{-1} \mathrm{A}yd=(AAT)1Ay

1.4 基于Vandermonde的编码

编码矩阵就是单位矩阵和范德蒙德矩阵的组合。输入数据(D)和编码矩阵的乘积就是编码后的数据。
[100…0010…0⋮⋮⋮⋱⋮000…1111…1123…n122232…n2⋮⋮⋮⋱⋮1n−12n−13n−1…nn−1][d1d2⋮dn]=[d1d2⋮dnc1c2⋮cm](7)\left[ \begin{matrix} 1 &0 & 0 &\dots & 0 \\ 0 &1 & 0 &\dots & 0 \\ \vdots & \vdots &\vdots & \ddots &\vdots \\ 0 &0 & 0 &\dots & 1 \\ 1 &1 & 1 &\dots & 1 \\ 1 & 2 &3 & \dots &n \\ 1^2 & 2^2 &3^2 & \dots &n^2 \\ \vdots & \vdots &\vdots & \ddots &\vdots \\ 1^{n-1} & 2^{n-1} &3^{n-1} & \dots &n^{n-1} \\ \end{matrix} \right] \left[ \begin{matrix} d_1 \\ d_2 \\ \vdots \\ d_n \end{matrix} \right] = \left[ \begin{matrix} d_1 \\ d_2 \\ \vdots \\ d_n \\ c_1 \\ c_2 \\ \vdots \\ c_m \\ \end{matrix} \right] \tag7 10011121n101012222n100013323n10011nn2nn1d1d2dn=d1d2dnc1c2cm(7)
算法复杂度: 采用这种方法的算法复杂度还是比较高的,编码复杂度为O(mn)O(mn)O(mn),其中mmm为校验数据个数,nnn为输入数据个数。解码复杂度为O(n3)O(n^3)O(n3)

2 柯西( Cauchy)矩阵

柯西矩阵的任意一个子方阵都是奇异矩阵,存在逆矩阵。而且柯西矩阵在迦罗华域上的求逆运算,可以在O(n2)O(n^2)O(n2)的运算复杂度内完成。
使用柯西矩阵,比范德蒙德矩阵的优化主要有两点:

  1. 降低了矩阵求逆的运算复杂度。范德蒙矩阵求逆运算的复杂度为O(n3)O(n^3)O(n3),而柯西矩阵求逆运算的复杂度仅为O(n2)O(n^2)O(n2)
  2. 通过有限域转换,将GF(2w2^w2w)域中的元素转换成二进制矩阵,将乘法转换为逻辑与,降低了乘法运算复杂度。(二进制的加法即XOR,乘法即AND)

2.1 柯西( Cauchy)矩阵介绍

柯西矩阵的描述如下:
[1x0+y01x0+y11x0+y2…1x0+yn1x1+y01x1+y11x1+y2…1x1+yn1x2+y01x2+y11x2+y2…1x2+yn⋮⋮⋮⋱⋮1xm+y01xm+y11xm+y2…1xm+yn](8)\left[ \begin{matrix} \frac{1}{x_0 + y_0} &\frac{1}{x_0 + y_1} & \frac{1}{x_0 + y_2} &\dots & \frac{1}{x_0 + y_n} \\ \frac{1}{x_1 + y_0} &\frac{1}{x_1 + y_1} & \frac{1}{x_1 + y_2} &\dots & \frac{1}{x_1 + y_n} \\ \frac{1}{x_2 + y_0} &\frac{1}{x_2 + y_1} & \frac{1}{x_2 + y_2} &\dots & \frac{1}{x_2 + y_n} \\ \vdots & \vdots &\vdots & \ddots &\vdots \\ \frac{1}{x_m + y_0} &\frac{1}{x_m + y_1} & \frac{1}{x_m + y_2} &\dots & \frac{1}{x_m + y_n} \\ \end{matrix} \right] \tag8 x0+y01x1+y01x2+y01xm+y01x0+y11x1+y11x2+y11xm+y11x0+y21x1+y21x2+y21xm+y21x0+yn1x1+yn1x2+yn1xm+yn1(8)
xix_ixiyiy_iyi 都是迦罗华域GF(2w2^w2w)中的元素。
基于柯西矩阵的编码矩阵为:
[100…0010…0⋮⋮⋮⋱⋮000…11x0+y01x0+y11x0+y2…1x0+yn1x1+y01x1+y11x1+y2…1x1+yn1x2+y01x2+y11x2+y2…1x2+yn⋮⋮⋮⋱⋮1xm+y01xm+y11xm+y2…1xm+yn][d1d2⋮dn]=[d1d2⋮dnc1c2⋮cm](9)\left[ \begin{matrix} 1 &0 & 0 &\dots & 0 \\ 0 &1 & 0 &\dots & 0 \\ \vdots & \vdots &\vdots & \ddots &\vdots \\ 0 &0 & 0 &\dots & 1 \\ \frac{1}{x_0 + y_0} &\frac{1}{x_0 + y_1} & \frac{1}{x_0 + y_2} &\dots & \frac{1}{x_0 + y_n} \\ \frac{1}{x_1 + y_0} &\frac{1}{x_1 + y_1} & \frac{1}{x_1 + y_2} &\dots & \frac{1}{x_1 + y_n} \\ \frac{1}{x_2 + y_0} &\frac{1}{x_2 + y_1} & \frac{1}{x_2 + y_2} &\dots & \frac{1}{x_2 + y_n} \\ \vdots & \vdots &\vdots & \ddots &\vdots \\ \frac{1}{x_m + y_0} &\frac{1}{x_m + y_1} & \frac{1}{x_m + y_2} &\dots & \frac{1}{x_m + y_n} \\ \end{matrix} \right] \left[ \begin{matrix} d_1 \\ d_2 \\ \vdots \\ d_n \end{matrix} \right] = \left[ \begin{matrix} d_1 \\ d_2 \\ \vdots \\ d_n \\ c_1 \\ c_2 \\ \vdots \\ c_m \\ \end{matrix} \right] \tag9 100x0+y01x1+y01x2+y01xm+y01010x0+y11x1+y11x2+y11xm+y11000x0+y21x1+y21x2+y21xm+y21001x0+yn1x1+yn1x2+yn1xm+yn1d1d2dn=d1d2dnc1c2cm(9)

2.2 柯西编解码过程优化

在范德蒙编码的时候,我们可以采用对数/反对数表的方法,将乘法运算转换成了加法运算,并且在迦罗华域中,加法运算转换成了XOR运算。
柯西编解码为了降低乘法复杂度,采用了有限域上的元素都可以使用二进制矩阵表示的原理,将乘法运算转换成了迦罗华域“AND运算”和“XOR逻辑运算”,提高了编解码效率。
从数学的角度来看,在迦罗华有限域中,任何一个GF(2w2^w2w)域上的元素都可以映射到GF(2)二进制域,并且采用一个二进制矩阵的方式表示GF(2w2^w2w)中的元素。
例如,GF(232^323)域中的元素可以表示成GF(2)域中的二进制矩阵:

上图中,黑色方块表示逻辑1,白色方块表示逻辑0。通过这种转换,GF(2w2^w2w)域中的阵列就可以转换成GF(2)域中的二进制阵列。生成矩阵的阵列转换表示如下:

在GF(2w2^w2w)域中的编码矩阵为k∗(k+m)k *(k+m)k(k+m),转换到GF(2)域中,使用二进制矩阵表示,编码矩阵变成了(w∗k)∗(w∗(k+m))(w*k)* (w*(k+m))(wk)(w(k+m))二进制矩阵。

采用域转换的目的是简化GF(2w2^w2w)域中的乘法运算。在GF(2)域中,乘法运算变成了逻辑与运算,加法运算变成了XOR运算,可以大大降低运算复杂度。
和范德蒙编解码中提到的对数/反对数方法相比,这种方法不需要构建对数/反对数表,可以支持www为很大的GF域空间。采用这种有限域转换的方法之后,柯西编码运算可以表示如下:

算法复杂度:使用柯西矩阵要优于范德蒙德矩阵的方法,柯西矩阵的运算复杂度为O(n∗(n−m))O(n *(n - m))O(n(nm)),解码复杂度为O(n2)O(n^2)O(n2)

2.3 参数www影响

选择GF(2w2^w2w)中的www参数,需要满足k+n≤2wk+n \leq 2^wk+n2w
对于柯西矩阵的RS编码,还需要满足coding Block size % (www * packet) == 0。(具体参数设置和意义见 Jerasure实现,jerasure开源实现。)
关于Erasure Code,有一个开源的实现Jerasure,是由James S. Plank教授开发。还有一个开源项目FECpp,也是关于EC code的。地址为:FECpp 开源实现。

3 RS编码升级

RS编码后的数据,如果丢失了一块,恢复丢失的数据需要最少读取n块数据。在生产环境中,硬盘故障经常发生,恢复数据对网络IO和CPU都会有较大的消耗。
因此有些公司在EC编码的基础上做了一些改进,使用LRC或SEC替换RS编码。

3.1 LRC - Locally Repairable Code 本地副本存储

LRC编码与RS编码方式基本相同,同时增加了额外的数据块副本。
LRC编码本质上是RS编码+2副本备份。
LRC编码步骤如下:

  1. 对原始数据使用RS编码,例如编码为4:2,编码结果为4个数据块:D1、D2、D3、D4,2个编码块C1、C2;
  2. 原始数据做2副本,将4个数据块的前2个数据块和后2个数据块,分别生成2个编码块,即R1=D1D2,R2=D3D4;
  3. 如果某一个数据块丢失,例如D2丢失,则只需要R1和D1即可恢复D2;

LRC的编码矩阵中增加了步骤2的2副本编码,样子如下:

LRC增加了副本数量,使用了更多的存储空间,来减少恢复数据块时读取块的数量,节省恢复数据使用的网络IO和CPU。

3.2 SEC - Sparse Erasure Code 稀疏纠删码

LRC编码中只对数据块做了2副本,当编码块丢失时,仍然需要读取n块数据来重新计算编码块。
SEC编码中对数据块和编码块都做增加了校验块。
SEC编码本质上是RS编码+奇偶校验块。
SEC编码步骤如下:

  1. 对原始数据使用RS编码,例如编码为4:2,编码结果为4个数据块:D1、D2、D3、D4,2个编码块C1、C2;
  2. 生成D1D2的校验块X1,D3D4的校验块X2,C1C2的校验块X3;
  3. 当数据块或编码块中的某一个丢失时,例如C2丢失,通过C1和校验块X3即可恢复C2;

SEC同样通过增加存储块,减少了恢复数据是的网络和CPU开销。

4 FEC 介绍

在信息中按照某种规则加上一定的冗余位,构成一个码字,称为差错控制编码过程。
在接收端接收到码字,或从存储设备中读取码字后,查看信息位和冗余位,并检查他们之间的关系是否正确,以确定是否有差错发生,称为校验。
Forward Error Correction,FEC- 前向纠错编码技术通过在传输码列中加入冗余纠错码,在一定条件下,通过解码可以自动纠正传输误码。这种编码的译码设备较复杂。

除FEC之外,还有两种差错控制编码:Automatic repeat request(ARQ)检错重发(或自动请求重传),Hybrid Error Correction(HEC)混合纠错。

检错重发由发送端送出能够发现错误的码,接收端如果发现错误,通过反向信道把这一判决结果反馈给发送端。然后,发送端把接收端认为错误的信息再次重发。其特点是需要反馈信道,译码设备简单。

混合纠错是 ARQ和 FEC方式的混合。发送端同时送出具有检错和纠错能力的码,如果接收端收到信码在纠错能力以内,则自动进行纠正。如果超出纠错能力,则经过反馈信道请求发送端重发。

参考

  1. A Tutorial on Reed-Solomon Coding for Fault-Tolerance in RAID-like Systems
  2. Optimizing Cauchy Reed-Solomon Codes for Fault-Tolerant Storage Applications
  3. Tutorial: Erasure Coding for Storage Applications
  4. http://jerasure.org/jerasure/jerasure
  5. http://jerasure.org/jerasure/gf-complete
  6. http://alanwu.blog.51cto.com/3652632/1406312
  7. http://alanwu.blog.51cto.com/3652632/1410132
  8. http://blog.163.com/yandong_8212/blog/static/13215391420143281143547/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/507597.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

NCCIP会议笔记

华南理工大学蔡毅:多智能体通信,识别边界。是否可以用于鼾声识别 天津大学张鹏教授 哈尔滨工业大学 HFUT:俞奎 张长青

计算机创新课,计算机教学课程模式与创新论文

计算机教学课程模式与创新论文摘要:作为大学生通识教育的重要组成部分,计算机基础课程是提高学生信息素养的关键途径。随着互联网技术的不断发展,大学计算机课程教学面临诸多新的挑战,因此需要创新、改革目前的教学模式&#xff0…

New directions in automated traffic analysis论文解读

1 论文主要idea 完整性:没有进行特征提取,保留原始数据包;固定大小:对不同类型的数据包进行统一格式编码,使得编码后的向量大小一致(见图3)将一些与目标任务不一致的字段去掉,如操作…

计算机找不到wf连接,笔记本wifi功能消失了 电脑wifi连接没了 电脑的wifi不见了...

笔记本wifi功能消失了 电脑wifi连接没了 电脑的wifi不见了2019-11-08 11:14:40 来源:网络扫码可以:1.在手机上浏览2.分享给微信好友或朋友圈解决方法:1、鼠标右键单击电脑桌面右下方的文件夹图标。2、进入文件夹后,在左边列表里&…

计算机二级考试都怎么考,计算机二级都考什么 怎么考

满意答案luluthe...2013.08.26采纳率:45% 等级:11已帮助:8894人关于二级考试科目:与去年相同,二级一共七个科目。二级科目分成两类,一类是语 言程序设计(C、C、Java、Visual Basic、Delphi),…

计算机c盘丢失,电脑C盘丢失的视频文件怎么恢复?方法讲解,轻松搞定

电脑C盘丢失的视频文件怎么恢复?在日常的工作以及生活当中,有很多的传统媒体文件充斥着。例如:闲暇时,会找一些直播视频来放松自己。工作中,会找一些网络课程来提升自己。但是,在此过程中也会因为一些失误&…

人脸识别研究任务及开源项目调研

0 任务 人脸识别流程包括人脸检测、人脸对齐、人脸识别等子任务。 图1 一些部分遮挡的人脸样本。(a) LFW数据库中部分遮挡的人脸样本。(b)AR数据库部分遮挡的人脸样本。人脸识别具有重要的学术价值,人脸是一类相当复杂的细节变化的自然结构目标,此类目…

双路服务器单路运行,单路还是双路?看需求选择_机箱电源评测-中关村在线

电源的介绍里面,经常会看到“单路12V输出”或者“双路12V输出”的字样。那么单路12V输出和双路12V输出有什么区别呢?单路12V输出有着什么样的优势,而双路12V又有着什么样的优势呢?接下来简单分析一下。单路输出电源的12V输出主要是…

计算机常用控温算法,常用温度控制方法原理 -解决方案-华强电子网

常用PID调节器/温控仪控制算法包括常规PID、模糊控制、神经网络、Fuzzy-PID、神经网络PID、模糊神经网络、遗传PID及广义预测等算法。常规PID控制易于建立线性温度控制系统被控对象模型;模糊控制基于规则库,并以绝对或增量形式给出控制决策;神…

我的世界服务器修改数据,我的世界常用指令大全,轻松调整服务器数值状态

在我的世界服务器中能够经过输送指令来微调服务器的一些数值状态,此次就为各位提供我的世界常用指令大全,毕竟我的世界作为一款出色的沙盒游戏,不止是因为原版内容和mod的增光填色,也离不开指令的辅助。/say [语句]让服务器发每段…

二维码的目标定位

1 总体思路 第一步,寻找二维码的三个角的定位角点,需要对图片进行平滑滤波,二值化,寻找轮廓,筛选轮廓中有两个子轮廓的特征,从筛选后的轮廓中找到面积最接近的3个即是二维码的定位角点。 第二步&#xff1…

mac 上传ftp服务器文件夹权限,mac 访问 ftp服务器文件夹权限

mac 访问 ftp服务器文件夹权限 内容精选换一换在“云服务器列表”页,单击下拉按钮展开会话列表,查看会话连接状态,出现“关闭应用失败”的异常。将鼠标移动至“关闭应用失败”处,查看具体的失败原因,并根据表1进行故障…

以毒攻毒Fight Fire with Fire: Towards Robust Recommender Systems via Adversarial Poisoning Training论文解读

1 摘要 最近的研究表明,推荐系统是脆弱的,攻击者很容易将精心设计的恶意配置文件注入系统,从而导致有偏见的推荐。我们不能否认这些数据的合理性,因此建立一个强大的推荐系统势在必行。对抗性训练已被广泛研究以获得可靠的建议。…

redis延迟队列 实现_灵感来袭,基于Redis的分布式延迟队列

一、延迟队列延迟队列,也就是一定时间之后将消息体放入队列,然后消费者才能正常消费。比如1分钟之后发送短信,发送邮件,检测数据状态等。二、Redisson Delayed Queue如果你项目中使用了redisson,那么恭喜你&#xff0c…

opencv2 取二进制数据_百亿数据量下,掌握这些Redis技巧你就能Hold全场

程序猿DD一、Redis封装架构讲解实际上NewLife.Redis是一个完整的Redis协议功能的实现,但是Redis的核心功能并没有在这里面,而是在NewLife.Core里面。这里可以打开看一下,NewLife.Core里面有一个NewLife.Caching的命名空间,里面有一…

MV-LDL论文修改20211115(B-Y Rong)

1、摘要 8-10句,每句话15-25个单词 (1)我们的研究领域。。。 (2)已有的工作。。。 (3)有什么缺点。。。(motivation) (4)In this paper … &#…

Data Poisoning Attacks to Deep Learning Based Recommender Systems论文解读

1 摘要 在这项工作中,作者对基于深度学习的推荐系统的数据中毒攻击进行了首次系统研究。攻击者的目标是操纵推荐系统,以便向许多用户推荐攻击者选择的目标项目。为了实现这一目标,作者将精心设计的评分注入到推荐系统中的假用户。具体来说&a…

黑马商城项目源代码_Python学习路线图--Python框架与项目

Python学习路线图的Python框架部分主要有Django框架和Flask框架,学完这一部分就可以去找Web全栈工程师的工作了,独立开发前端和后端业务。Python学习路线图的Django框架部分需要掌握Web主流框架-Django的使用;可根据Web框架设计,开…

Membership Inference Attacks Against Recommender Systems论文解读

0 摘要 推荐系统通常针对高度敏感的用户数据进行训练,因此推荐系统潜在的数据泄露可能会导致严重的隐私问题。 本文首次尝试通过成员推理的角度来量化推荐系统的隐私泄漏。 与针对机器学习分类器的传统成员推理相比,本文的攻击面临两个主要差异。 首先&…

k近邻推荐用到的各种距离

1 kkk-近邻推荐原理 2 各种距离 2.1 欧几里得距离 d12(x1−x2)2(y1−y2)2d_{12} \sqrt{(x_{1} - x_{2})^2 (y_{1} - y_{2})^2}d12​(x1​−x2​)2(y1​−y2​)2​ 缺点:欧式距离是一种常用的距离度量,但它并不是尺度不变的,这意味着所计算…