线性分组码

版权声明:本文为博主原创文章,转载需注明出处。 https://blog.csdn.net/zz_Caleb/article/details/84490546

线性分组码(我们以汉明码为例):       

  1. 一些概念
    1. 信息码
      1. 就是实际上要传输的数据的有效部分。
    2. 监督码
      1. 用来监督传输的数据是否出错的部分。
    3. 校正子(syndrome,又称校验子,伴随式)
      1. 可以用来判断传输的数据在哪一位发生错误。
  2. 以上概念不理解没关系,下面会举例子的。
  3. 我们来构建一个场景:
    1. 最原始的时候,我们要传输数据,比如我们想传输字符“h”,实际上我们传递的是字符h对应的二进制码(这就是信息码)。
    2. 一般情况下,我们都可以正常传输,可是呢突然有一天我们发现因为线路老化,我们本来传递的是h,结果接收端出现了字符a。虽然只是很少数的情况,但是一旦发生传输错误,就会对我们的项目造成巨大的损失。
    3. 于是我们想,能不能找一种方法,判断我们接收到的字符是否出现错误(这样一旦当我们发现接收信息出现错误的时候,我们就可以发出指令,要求发送数据端重新发送数据。
    4. 于是我们就想办法利用信息码,再在信息码的基础上添加一些冗余码(这些冗余码实际上就是监督码)的方式,按照一定的构造规则,构造了一个可以指明,接收的字符是否出错?以及如果出错,究竟是传输的这个字符的哪一位发生了错误?这样的一个序列。(就是我们说的校正子:用{Si}表示,“{}“代表他是一组数)
    5. 举例如下:
      1. 我们的信息码为a6,a5,a4,a3
      2. 我们添加的冗余码为a2,a1,a0
      3. 构造规则:
        1. 当然,构造方法有很多种,你可以自己选择自己的构造规则,上述描述的这套构造规则,是对应汉明码的
        2. 那么我们就可以找到,我们传输的数据错误的位置和校验子Si的关系。(这个关系是按照我们构造规则计算出来的,有了这个表格之后,我们只需要查表就可以知道,究竟是数据传输中哪一位发生错误了,而不需要再按照构造规则进行计算了。但一定要注意,这个表格只限于这个规则,即这个表格只限于汉明码。)
      4. 这样我们就有了一个确定传输过程是否发生错误的机制了。下面我们需要做的是,求出来我们在信息码(a6,a5,a4,a3)基础上,增添的冗余码(a2,a1,a0)。
      5. 由对应表我们看到,当校正子向量全零时,代表传输没有发生错误。那么,将这个关系,写成表达式的形式就是:
        1. 由上述方程组我们可以解出我们的冗余码。(就是监督位,下面我们将使用监督位。)
        2. 我们可以计算出监督位(汉明码):
      6. 最后将信息码与监督码按照顺序进行排列,我们就得到了完整的汉明码。
  4. 上面我们感受了一个完整的发展过程,汉明码是线性分组码的特例而已,我们再来讨论一下线性分组码。
    1. n = k + r  (单位:位)
      1. n:码长
      2. k:信息码长
      3. r:监督码长
    2. 构成线性分组码的条件(这两个式子的解释见4.c.vi)
      1. 2 ^ r – 1 >= n
      2. 或者:2 ^ r >= k + r + 1
    3. 所谓线性码,是指信息位和监督位满足一组线性代数方程的码。我们已知
      1.  使用 + 代替 异或 操作,可以的到如下线性方程
      2. 使用矩阵乘法,可将上式化为
        1. H矩阵可以分为上述两部分
        2. P为r x k阶矩阵
        3. Ir 为 r x r阶单位方阵
      3. 可记为:
        1. 其中H^T是H的转置,我们称H为监督矩阵(parity –check matrix)
        2. 只要H矩阵给定,编码时的监督码和信息码的关系就完全确定了。
        3. H的行数,等于监督码r的个数。
        4. H中每行的“1“的位置表示相应的码元之间存在监督关系。
          1. 实际上我们可以将监督关系,看作是偶校验。例如a6 a5 a4 a2,实际上a2就是为了使用偶校验,而计算出的值。也就是说,我们之前所说的S1 S2 S3,实质上都是偶校验,只是用于校验的校验位分别是a0 a1 a2而已。
          2. 这样也可以从侧面来说明监督码的个数,当监督码的个数是2个的时候,我们只能判断一个序列是否有错误。但是当监督码的个数增加时,我们就不仅能判断该序列是否发生错误,还能判断具体是哪一位发生错误。我们举例说明(汉明码本身已经是一个很好的例子了):
            1. 假设r=1,则2^2 – 1 =3也就是说,当序列的长度小于等于两位时,可以判断是哪一位出错。我们假设序列构成是 1bit信息码+2bit(偶)校验码 ,我们则我们可以构造一个规则,使得我们使用这个规则求得的校验子Si,可以指明具体是哪一位发生了错误。
            2. 我们画图来分析
            3. 分析过程如下(只考虑是一位出错,两位同时出错的概率很低。)
              1. 如果我们接收的序列中发现 ac出错而cb没出错,我们可以简单看为是a位出错
              2. 如果cb出错而ac没出错,我们可以简单看为是c位出错
              3. 如果两个都出错,我们看为c出错
            4. 上述内容可以简单解释2 ^ r – 1 >= n这个式子。
        5. 例如第一行1110100表示监督位a2是由a6 a5 a4之和决定的。
        6. H矩阵各行是线性无关的。
    4. 同样的,我们来化简监督码的关系式
      1. 可改写为下述式子
        1. 其中Q为一个k x r 阶矩阵
        2. Q = P的转置
        3. 当信息码给定后,用信息码序列乘上矩阵Q就可以得到监督码序列。
      2. 我们将Q的左边加上一个k x k 阶单位矩阵,就构成了生成矩阵G
        1. 由生成矩阵可以产生整个码组,即:
        2. 如果找到了码的生成矩阵G,则编码方式就完全确定了。
        3. 具有[Ik | Q]形式的生成矩阵称为典型生成矩阵。
        4. 由典型生成矩阵得出的码组,信息码的位置不变,监督码附加于其后,这种形式的码称为系统码。

猜你喜欢

转载自blog.csdn.net/zz_Caleb/article/details/84490546