Mleon的头像

ECC-线性码

单集封面

ECC-线性码

01-13
3 次观看
Mleon的头像
Mleon
粉丝:117
主题:5
描述:20
例子:17
其他:4
字数:6893

ECC-线性码

01-13
3 次观看
Mleon的头像
Mleon
粉丝:117
Mleon的头像
Mleon
粉丝:117
主题:5
描述:20
例子:17
其他:4
字数:6893

线性码

链接 线性码

本文是 https://youtu.be/kO6UlCY6idg?si=YRKOIPThcXF6lyvs 的笔记,内容包括:

  • 生成矩阵 Generator Matrix G

  • 最小汉明距离 Minimum Distance d

  • 奇偶校验矩阵 Parity-Check Matrix H

生成矩阵

重复编码可视化

"Best 2 out of 3" Repetition Code 是将数据从一维变换成三维:

  • 0 -> 000

  • 1 -> 111

在这个三维空间中,000 和 111 被视为有效字码(valid code),其它如:001, 100, 010, 101, 110, 011等则是无效字码(invalid code)。当接受到的数据是这些无效字码时,说明传输过程中出现了比特翻转。

可视化如下:

image.png

解码过程,就是找离无效字码最近的有效字码。例如,当接受到 001 时,找到最近的有效字码是 000;接受到 110 时,找到最近的有效字码是 111。

重复编码生成矩阵

重复编码的生成矩阵(Generator Matrix G)是 [1 1 1]

0[1 1 1]−>[0 0 0] 1[1 1 1]−>[1 1 1]

image.png

汉明码可视化

"Hamming (7,4) Code" 是将数据从四维变换成七维,例如,

  • 0010 -> 0010011

  • 1100 -> 1100011

image.png

在这个七维空间中,有 128 个 codewords,其中仅有16个是有效字码(valid code),在下表蓝色高亮的部分。

image.png

七维空间的可视化如下图,右侧的红点表示的是有效字码:

image.png

汉明码生成矩阵

汉明码是将输入的数据位 [a b c d] 编码为 [a b c d x y z],用生成矩阵表示如下:

[a b c d]1000010000100001110110110111=[a b c d x y z]

矩阵的前四列是 Identity Matrix,作用是复制 abcd;后三列负责生成校验位,倒数第三列对应 x=abd,倒数第二列对应 y=acd,最后一列对应 z=bcd

1101100 汉明码生成矩阵

汉明码生成矩阵示例,Message 是 1101:

[1 1 0 1]1000010000100001110110110111=[1 1 0 1 1 0 0]

最小距离

汉明权重

Hamming Weight w(⋅)

编码数据(codeword)中非零的个数,在二进制中也就是 1 的个数。(The number of non-zero digits in a codeword(# of 1s))

汉明权重示例 汉明权重

例如,w(00110)=2,w(111)=3,w(0001)=1

汉明距离

Hamming Distance D(⋅,⋅)

两个字码之间不同的比特个数。(The number of digits where two codewords differ)

汉明距离示例 汉明距离

例如,D(000,111)=3,3个bit都不同。从几何视角看距离是3:

image.png

D(00110,00111)=1,第 5 个 bit 不同。

D(0000,1001)=2,第 1 和第 4 个 bit 不同。

D(c,00000)=w(c),上面说过汉明权重 w(c) 是 codeword 中所有非 0 的个数;即有效字码与全 0 字码的汉明距离是该有效字码的汉明权重。

最小汉明距离

Minimum Distance d

任意两个有效字码间最小的汉明距离(Smallest Hamming distance between any two (valid) codewords),数学公式表示为 c1,c2minD(c1c1,c2c1)

最小距离示例1 最小汉明距离

"Best 2 out of 3" Repetition Code

Generator Matrix:[1 1 1]

Message

Codeword

0

000

1

111

"Best 2 out of 3" Repetition Code 只有 000 和 111,则其最小汉明距离是 3。

最小距离示例2 最小汉明距离

Generator Matrix:

[10100101]

(这个矩阵的作用:前2位取第1个bit,后2位取第2个bit)

Message

Codeword

00

0000

01

0011

10

1100

11

1111

通过一一比较汉明距离得出,最小汉明距离:d=2

最小距离示例3 最小汉明距离

Generator Matrix:

[10101001]

(这个矩阵的作用:前3位取第1个bit,最后1位取第2个bit)

Message

Codeword

00

0000

01

0001

10

1110

11

1111

通过一一比较汉明距离得出,最小汉明距离:d=1

补充 几何视角补充

上述两个例子的几何视角如下:

image.png

最小距离作用

最小汉明距离可以让我们知道在传输过程中允许有多少个bit翻转:知道 d,可检测出错个数是 d1 ,可纠回出错个数是 [2d1]

具体见下表,c1 和 c2 表示有效字码,两个圆圈中的一条横线表示 1 个 bit 翻转:

image.png

最小距离作用示例 最小距离作用
  1. d=1,无法检测到错误,也无法纠错。例如,c1=0,c2=1;在接受端,如果接受到的数据是 0,无法判断接受到的数据是否正确。

  2. d=2,可以检测到出现 1 个错误,但无法纠错。例如,将 0 或 1 重复编码 2 次,c1=00,c2=11;在接受端,如果接受到的数据是 10 或 01,我们可以肯定数据传输过程中出现了 1 个错误,但无法确定是原先的数据是 0 还是 1。

  3. d=3,可以检测到出现 2 个错误,可纠错 1 个bit。例如,将 0 或 1 重复编码 3 次, c1=000,c2=111;在接受端,如果接受到的数据是 001,我们可以确定该数据在传输过程中出现了翻转,可能是 1 bit 出错或 2 bit 出错;假设仅有 1 个 bit 翻转,那么可解码得到原先的数据是 0,也就纠回了 1 bit 的错误。

  4. 其它同理。

过渡 其它方式

那汉明码的 Minimum Distance 怎么找呢?如果通过排列组合不同 Codeword 来找会非常麻烦,幸运的是有更好的方式来找。

image.png

变成找汉明权重

转化过程如下:同时将两个有效字码减去同一个字码,得到最小汉明距离是 0 和 两个有效字码差值 之间的距离,

==c1,c2minD(c1,c2)c1,c2minD(c1c1,c2c1)c1,c2minD(0,c2c1)

这不会改变我们需要得到的距离结果,因为通过减去一个字码,我们实际上只是将有效字码在空间中滑动,而不会改变它们之间的距离。(by subtracting a code word we're basically just sliding valid codewords over in space without changing the distance between them)

image.png

又因为:

  1. 线性码(Linear Codes)规定任何两个有效字码相加仍然是有效字码(Sum of any two valid codewords is another valid codeword)

  2. 前文提到有效字码与全 0 字码的汉明距离是该有效字码的汉明权重 :D(c,00000)=w(c)

所以:

===c1,c2minD(c1,c2)c1,c2minD(c1c1,c2c1)c1,c2minD(0,c2c1)cminD(0,c)=cminw(c)

因此,通过得到所有字码中最小的汉明权重,我们可以得到需要的最小汉明距离:d=cminw(c)

补充 线性码之和

补充:线性码(Linear Codes)规定任何两个有效字码相加仍然是有效字码。

image.png

7-4汉明距离 变成找汉明权重

"Hamming (7,4) Code" ,字码中 1 个数最少为 3,则最少汉明距离 d=3;再结合前面说过的“最小距离作用”,可知 "Hamming (7,4) Code" 能够纠错 [2d1]=1 bit的错误。

image.png

校验矩阵

奇偶校验矩阵

为了纠错,我们需要奇偶校验矩阵H

  • 如果 c 是有效字码, 那么两者相乘得 0 : HcT=0

  • 反之,如果 c 是无效字码, 那么两者相乘结果非0。

重复编码校验矩阵

"best 2 of 3" 的奇偶校验矩阵推导如下:

一、原始等式

x=yx=z

二、右边为0

将等号右边移到等号左边得

xy=0xz=0

三、异或表示

由于是二进制,减法运算等同于异或运算,

xy=0xz=0

四、矩阵表示

属于 Linear Equations,用矩阵表示

[111001]xyz=[00]

image.png

汉明码校验矩阵

Hamming (7,4) code 的奇偶校验矩阵推导如下 :

一、原始等式

xyz=abd,=acd,=bcd

二、右边为0

将等号右边移到等号左边得

abdxacdybcdz=0,=0,=0

三、异或表示

由于是二进制,减法运算等同于异或运算,

abdxacdybcdz=0,=0,=0

四、矩阵表示

属于 Linear Equations,用矩阵表示

110101011111100010001abcdxyz=000

image.png

1101100校验 汉明码校验矩阵

例子:codeword c=[1 1 0 1 1 0 0]HcT=0

1101010111111000100011101100=000

cT 的 1st, 2nd, 4th, 5th 为 1,表示将 H 中的 1st, 2nd, 4th, 5th 列进行相加,这4列每一行加完后都是偶数。由于我们是用异或运算 ,加完后全为偶数表示运算后的结果为全 0 的列向量。根据定义,这说明 1101100 是有效字码。

症候向量

取有效字码加上一个错误向量(error vector),就将 H 分成了两部分。与有效字码相乘的部分结果为 0,因此结果只剩下错误的部分,这个向量称为症候向量(syndrome vector):

H(c+e)T=HcT+HeT=HeT

通过症候向量可以得出是哪个 bit 在传输过程中出现了错误。

第2bit出错 症候向量

取上述例子的有效字码 c=[1 1 0 1 1 0 0],加上一个表示 2nd 比特翻转的错误向量 e=[0 1 0 0 0 0 0]Hc 相乘得 [0 0 0]He 相乘,就是取 H的 2nd 列,得到症候向量 [1 0 1]

1101010111111000100011101100+0100000=000+101

由于得到的结果是 H 的 2nd 列,说明是第 2 个比特在数据传输过程中出错。(后面会解释为什么)

仅跟错误向量有关 症候向量

通过上述公式推导不难看出症候向量与有效字码无关,只与错误向量有关。

同样第2bit出错 仅跟错误向量有关

用另一个有效字码 q=[0 0 1 0 0 1 1] ,加上相同的错误向量 e=[0 1 0 0 0 0 0] ,会得到相同的结果[1 0 1],依然是 H的 2nd 列:

1101010111111000100010010011+0100000=000+101
仅允许1bit出错

然而,如果是加上两个错误向量,得到的结果会将 H 对应的两个列向量相加,导致不能判断是哪个 bit 出错。

H(c+e1+e2)T=He1T+He2T

这也再一次说明了为什么汉明码仅允许 1 bit 出错。

第2和第5bit出错 仅允许1bit出错

例如,加上两个错误向量[0 0 0 0 1 0 0][0 0 0 0 0 1 0],其结果就是将H 的5th 和 6th 列向量相加,得到 H的 1st 列向量。在接受端会误以为是 1st bit 在数据传输过程中出现了错误,没有起到纠错效果:

1101010111111000100011101100+0000100+0000010=100+010=110
奇偶校验矩阵原理

前文“汉明码原理”中 提过:

Syndromes(xyz)

Error States

√√√

No errors

×√√

x is wrong

√×√

y is wrong

√√×

z is wrong

××√

a is wrong

×√×

b is wrong

√××

c is wrong

×××

d is wrong

将该表进行翻转,并去掉没有出错的行,如下图右侧所示。可以看到 7 个状态与 H 的 7 列完美对应起来(× 与 1 对应,√ 与 0 对应):

  1. 1st 比特出错用 ××√ 表示,正好对应 H的 1st 列[1 1 0]

  2. 2st 比特出错用 ×√× 表示,正好对应 H的 2nd 列 [1 0 1]

  3. 以此类推

image.png

也就是说,按顺序排列这些错误状态对应的症候向量,可得到奇偶校验矩阵:

image.png

image.png

得出最小汉明距离

通过奇偶校验矩阵H还可以得到最小汉明距离 d

前面提过:d=cminw(c),“找最小汉明距离d”可以转换成“找有效字码 c 中 1 的个数最少是多少”。

又因为H 与 有效字码 cT 相乘得 0,我们可以将“找最小汉明距离d”转换成 "c1 最少是多少才能让HcT=0"

  1. c仅有 1 个 1 不能得到 HcT=0,除非 H 中有一列为全 0。

  2. c仅有 2 个 1 不能得到HcT=0,除非 H 中有两列是重复的,才能让两个列向量相加得 0。

  3. c 有 3 个 1 可以得到 HcT=0,将H中的 2st、5th、7th 列向量相加可以得0 。

c1 最少是 3 才能让HcT=0,这再一次说明 d=3

一般汉明码

一般汉明码

一般汉明码(General Hamming Codes)有以下特点:

  1. 奇偶检验矩阵 H 的所有列是 0 和 1 的所有可能组合(除了全 0)

  2. Hr 行和 2r1

  3. H 中的 r 列向量用于校验位

汉明7,4码 一般汉明码

Hamming (7,4) code,为 4 bit 数据 abcd 添加 3 bit 校验位 xyz,编码成 abcdxyz,奇偶校验矩阵 H是:

110101011111100010001
  1. H37=231 列矩阵

  2. 4 列用于复制数据 abcd,后 3 列用于校验位 xyz。这 3 列向量每列仅有 1 个 1。

将这个矩阵的顺序重新排列,可得:

100010110001101011111

观察这个矩阵发现,

  1. 从最左边的列向量往右,刚好对应十进制的 1~7。

  2. 对应的顺序有了变化,x 对应 1st 列,y 对应 2nd 列,z 对应 4th 列(刚好是 20,21,22)。

image.png

汉明15,11码 一般汉明码

r=4,可以得到 Hamming (15, 11) code。这种编码方式为 11 bit 数据 abcdefghijk 添加 4 bit 校验位 xyzw,编码成 abcdefghijkxyzwH 是:

11010001001001011110010100011101110111010 1 1 0 1 1 1 0 0 0 0 1 1 0 0 1 0 1 0 1 
  1. 从左往右列向量对应十进制的 1~15

  2. x 对应 1st 列,y 对应 2nd 列,z 对应 4th 列, z 对应 8th 列。这 4 列向量每列仅有 1 个 1。

image.png

15,11码校验公式 汉明15,11码

行视角看,校验矩阵每一行对应一条公式:

xabdegik=0yacdfgjk=0zbcdhijk=0wefahijk=0

image.png

将校验位移到等式右边,就得到了计算校验位的公式:

abdegik=xacdfgjk=ybcdhijk=zefahijk=w
15,11码生成矩阵 汉明15,11码

列视角看,列向量对应 c 的一个 bit 出错。

为了得到生成矩阵(Generator matrix),先将校验位对应的列向量移到矩阵的最右侧,得到奇偶校验矩阵的系统式(the systematic form of H):

11110101110010000011100010101100100000110 1 0 1 1 1 0 1 0 0 1 1 1 0 1 1 0 1 1 1 

image.png

然后去掉最右侧 4 列,转置(Transpose,就是将最后一行变成最后一列,倒数第二行变成倒数第三列,以此类推)。最后在左侧添加一个单位矩阵(Identity Matrix)用于复制数据,就得到了生成矩阵(Generator Matrix):

image.png

(n,k,d)code

线性码的三个参数,码长n,码的维数k,最小距离d:

n = codeword length, k = message length,称为 (n, k) code。

再加上 d = minimum distance, 称为 (n,k,d) code。

汉明码nkd

对于汉明码(r 个校验位)来说,

n=2r1k=2r1rd=3H最少需要 3 个列向量相加得 0)

假如是 3 个校验位,则 n=231=7k=2313=4d=3

汉明码效率

编码效率 = 原始数据长度 除以 编码后数据长度:Rate=nk,汉明码的效率如下:

汉明码

效率

Hamming(7,4)

Rate=74=57.1%

Hamming(15,11)

Rate=1511=73.3%

Hamming(31,26)

Rate=3126=83.9%

随着字码长度的增加,编码效率越高。但是最小汉明距离 d=3 始终不变,即每 n bit 长度的数据仅允许 1 bit 出错,因此,字码长度越长,汉明码纠错能力越差。

讨论
随记