线性码

编码理论中，线性码是一种纠错码，满足其任何码字的线性组合也是其码字。传统上，线性码分为分组码和卷积码两大类，尽管涡轮码可以看作是这两种类型的混合。 线性码的编码和解码可以有比其他码更有效的算法（参见伴随式解码）。
线性码用于前馈纠错，用于在通信信道上传输符号（例如，比特），以使在通信中出现错误时，消息块的接收者可以纠正或检测到一些错误。线性分组码的码字是一种符号块，这种符号块使用比要发送的原始值更多的符号进行编码。长度为"n"的线性码传输包含"n个"符号的块。例如，[7,4,3]汉明码是一种线性二进制码，使用7位码字表示4位消息。两个不同的码字至少有三位不同。因此，每个码字最多可以检测到两个错误，同时可以纠正一个错误。此代码包含 24=16个码字。
定义和参数.
长度为"n"且维度为"k"的线性码是向量空间formula_1中维度为"k"的线性子空间"C"，其中formula_2是具有"q个"元素的有限域。这样的线性码称为"q"-ary码。如果"q"=2或"q"=3，则分别称其为二进制码、三进制码。 "C"中的向量称为"码字"。线性码的大小是指码字的数量，即"q""k" 。
码字的权重（weight）是码字中非零元素的个数，两个码字之间的距离（distance）是指它们之间的汉明距离，即它们之间不同的元素个数。线性码的距离"d"是其非零码字的最小权重，其等效于不同码字之间的最小距离。长度为"n"、维度为"k"、距离为"d的"线性码称为["n", "k", "d"]码（或更准确地说，formula_3码）。
我们希望赋予formula_1标准基，因为每个向量坐标代表一个“比特”，该“比特”通过“噪声信道”传输，并且以小概率存在一些传输错误（二进制对称信道）。如果使用其他基，则无法使用该模型，并且汉明度量不能像我们所希望的那样测量传输中的错误数量。
生成矩阵和校验矩阵.
作为formula_1的线性子空间，整个线性码组"C" （可能非常大）可以表示为一组长度为formula_6的码字（在线性代数中称为基）的线性组合。这些基码字通常被整理成矩阵"G"的行，该矩阵称为码"C"的生成矩阵。当"G"具有分块矩阵形式formula_7（其中formula_8表示formula_9单位矩阵，P是formula_10矩阵）时，我们称"G"具有标准形式。
表示线性函数formula_11，核为"C"的矩阵"H"称为"C"的校验矩阵（有时也称奇偶校验矩阵）。上述表述等价于"H"是一个零空间为"C"的矩阵。设"C"是一个码组，其生成矩阵"G"为标准形式，则formula_7 ， 则formula_13是"C"的校验矩阵。由"H"生成的码称为"C"的对偶码。可以验证"G"是formula_14矩阵，而"H"是formula_15矩阵。
线性保证码字"c"0与任何其他码字"c"≠"c"0之间的最小汉明距离"d"与"c"0无关。这从以下性质可以看出："C"中两个码字的差"c"−"c"0也是一个码字（即子空间"C"的一个元素），且"d" ( "c" ,"c" 0 ) = "d" ( "c"−"c"0 ,0)。由上述性质可得
换而言之，为了找出线性码的码字之间的最小距离，只需要查看非零码字。具有最小权重的非零码字与零码字的距离最小，从而决定了代码的最小距离。
线性码"C"的距离"d"也等于校验矩阵"H"的线性相关列的最小数量（列向量最小线性无关组的秩）。
证明:因为 formula_17, 等价于formula_18，其中 formula_19 是formula_20的第formula_21列。除去使formula_22的项，使formula_23的formula_19线性相关。是故，formula_25不小于线性相关的列的最小个数。又，考虑线性相关列的最小集 formula_26，其中formula_27是列指标的集合。formula_28。考虑满足formula_29时候formula_30的向量formula_31。注意到由于formula_32，formula_33，是故，有formula_34，后者是 formula_20之中线性相关的行的最小数目。 上述性质得证。
示例：汉明码.
汉明码在数字通信系统中得到了广泛的应用。对于任何正整数formula_36 ，存在一个formula_37汉明码。由于formula_38 ，此类汉明码可以纠正1位错误。
例：具有以下生成矩阵和奇偶校验矩阵的线性分组码是formula_39汉明码。
示例：阿达马码.
是formula_42线性码，能够纠正诸多误码。 阿达马码可以逐列构建： 第formula_21列是整数formula_21的二进制表示 ，如下例所示。 阿达马码的最小距离为formula_45，因此可以纠正formula_46错误。
例：具有以下生成矩阵的线性分组码是formula_47阿达玛码： formula_48 。
是的一个特例。如果我们从formula_49中抽出第一列（全零列），我们可以得到formula_50单纯形码，是汉明码的对偶码。
最近邻算法.
参数d与码的纠错能力密切相关。以下构造/算法说明了这一点（称为最近邻解码算法）：
输入："接收到的"formula_1"中的向量"v 
输出：在formula_52中最接近formula_53的一个码字formula_54（如果有）。
如果对于每个formula_1中的formula_53最多有一个码字在formula_58中，称线性码formula_52是formula_56-纠错的。
常用记号.
码通常用字母"C"表示，长度为"n"且秩为"k的"码（即，其基中有"n个"码字，其"生成矩阵"中有"k"行）通常称为 ("n", "k") 码。线性分组码通常表示为 ["n", "k", "d"] 码，其中"d"表示码中任意两个码字之间的最小汉明距离。
（["n", "k", "d"] 符号不应与 ("n", "M", "d")符号混淆，后者用于表示长度为"n" 、大小为"M"（即具有"M" 个码字）且最小汉明距离为"d 的"非线性码。）
辛格尔顿界.
"引理"（辛格尔顿界）：每个线性 ["n","k","d"] 码"C"满足formula_71 。
参数满足"k"+"d"="n"+1的代码"C"称为最大距离可分（Maximum Distance Separable）的或MDS 。如果这样的代码存在，那么从某种意义上来说，它们就是最好的。
设"C"1和"C"2是两个长度为"n"的代码，且对称群"S""n"中存在置换"p" "，"当且仅当("c""p" (1) ... , "c""p" ("n") ) 在"C"2中时，( "c"1 ..., "cn" ) 在"C"1中，则称"C"1与"C"2是置换等价的。更一般地，如果存在formula_72formula_73使得"C"1同构于"C"2 ，那么称"C"1和"C"2是等价的。
"引理"：任何线性码都等价于标准形式的码的置换。
博尼索利定理.
对于一个码字，当且仅当存在某个常数"d"，使得该码中任意两个不同码字之间的距离等于"d"时，其可以称为等距码。 1984 年，阿里戈·博尼索利 (Arrigo Bonisoli) 确定了有限域上线性单重码的结构，并证明了每个等距线性码都是与汉明码对偶的序列。 
示例.
线性码的一些示例包括：
推广.
在非域字母表上的同样受到关注，尤其是有限环上的情形，其中最显著的是Z4上的。由此导出的是模结构而非向量空间结构，对应的环线性码（由子模定义）取代了传统线性码。此类空间通常采用李氏距离作为度量。研究发现：配备汉明距离的formula_74 （即 GF(22"m" )）与配备李距离的 formula_75（亦记作 GR(4,"m")）之间存在格雷等距映射。该映射的核心价值在于：它能将formula_75上某些环线性码的像，对应于formula_74上具有优良性质却非线性的编码。 
有些作者也将环上的此类码简称为线性码。