汉明码(Hamming Code)底层原理

汉明码(Hamming Code)底层原理

3Blue1Brown:Hamming Code【Part1】
3Blue1Brown:Hamming Code【Part2】

Hamming Code如何检查错误和定位错误?
检查错误通过奇校验或偶校验确定是否发生错误
定位错误通过依次对行和列进行偶校验确定错误在哪

假设图片为要发送的信息,发送时被编码为0与1的形式
汉明码(Hamming Code)底层原理_第1张图片
将要发送的数据每11个比特组成一个chunks,每个chunk放入一个16位的block中
汉明码(Hamming Code)底层原理_第2张图片
我们关注其中一个block,试着将11位信息填入其中
第一个11位信息为:00110001110,1个block中共16个位置,其中第0位作为整个block的偶校验位,第 2 0 、 2 1 、 2 2 、 2 3 2^0、2^1、2^2、2^3 20212223 作为chunk的校验位,其余位置依次填入11位信息
说明:16位组成一个block,除了校验位,其余信息位组成一个chunk
汉明码(Hamming Code)底层原理_第3张图片
接下来,我们根据chunk中信息的情况,填入校验位(两行或两列的第一个方框中为校验位的所在位置)
第2列和第4列中一共有偶数个1,则第一个校验位填入0(偶校验)
汉明码(Hamming Code)底层原理_第4张图片
第3列和第4列中一共有奇数个1,则第二个校验位填入1(偶校验,填入1后使得这两列1的个数变为偶数)

汉明码(Hamming Code)底层原理_第5张图片
第2行和第4行中一共有奇数个1,则第4个校验位填入1(偶校验)

汉明码(Hamming Code)底层原理_第6张图片
第3行和第4行中一共有奇数个1,则第8个校验位中填入1(偶校验)
汉明码(Hamming Code)底层原理_第7张图片
整个block中1的个数为偶数个,第0位校验位填入0(偶校验)
汉明码(Hamming Code)底层原理_第8张图片
所有的block填好后,就可以将信息发送给接收方了,在发送过程中可能会出现噪声,使得某些位由1变为0,或由0变为1,接收方通过校验位检查是否发生了错误?哪里出现了错误?
汉明码(Hamming Code)底层原理_第9张图片
接收方接收到的信息中其中一个block如下
汉明码(Hamming Code)底层原理_第10张图片

先检查第2列和第4列中是否出现错误,第2列和第4列通过了偶校验(8位中总共2个1)则错误不可能出现在第2列和第4列,而可能出现在第1列或第3列中
汉明码(Hamming Code)底层原理_第11张图片

检查第3列和第4列中是否出现错误,第3列和第4列没有通过偶检验(8位中有5个1)说明第3列和第4列中的某一列出现错误
汉明码(Hamming Code)底层原理_第12张图片
综合上述检查列的结论
第一次列检查的结论是:第1列或第3列中可能出现错误
第二次列检查的结论是:第3列或第4列中可能出现错误
综合以上列检查结论:第3列发生了错误
汉明码(Hamming Code)底层原理_第13张图片

我们再检查行是否出现错误
检查第2行和第4行,8位中共6(偶数)个1,通过了偶校验,说明错误不可能出现在第2行或第4行,而错误出现在第1行或第3行
汉明码(Hamming Code)底层原理_第14张图片
检查第3行和第4行,8位中共5(奇数)个1,未能通过偶校验,说明错误出现在第3行和第4行
汉明码(Hamming Code)底层原理_第15张图片
综合上述检查行的结论:
第一次行检查的结论是:第1行或第3行中可能出现错误
第二次行检查的结论是:第3行或第4行中可能出现错误
综合以上行检查结论:第3行发生了错误
综合行检查和列检查:
列检查结论:第3列发生了错误
行检查结论:第3行发生了错误
最终结论:第3行第3列出现了错误

整个block中1的个数为奇数个,说明错误只有1个而不是2个,如果有3处错误或更多那就不知道了
汉明码(Hamming Code)底层原理_第16张图片
纠正第3行第3列的错误还原原信息
除去校验位,依次取出信息位为 00110001110(与发送信息一致)
汉明码(Hamming Code)底层原理_第17张图片
回顾一下上述操作
假设第7个方框内比特位出现了错误,通过4次偶检验则可以判断出错位置
汉明码(Hamming Code)底层原理_第18张图片
汉明码(Hamming Code)底层原理_第19张图片
汉明码(Hamming Code)底层原理_第20张图片
汉明码(Hamming Code)底层原理_第21张图片
四次校验的结果为0111,其对应的十进制是7,这里7就代表着发生错误的位置
汉明码(Hamming Code)底层原理_第22张图片
将每个位置代表的数字写为二进制数,我们用二进制数来对错误位置进行定位,为什么要用二进制数,因为计算机用二进制0与1进行运算,电路开关也对应0与1

汉明码(Hamming Code)底层原理_第23张图片


二进制数中第一位为1的属于第一个偶校验组Q1

汉明码(Hamming Code)底层原理_第24张图片
汉明码(Hamming Code)底层原理_第25张图片
检查Q1时,似乎在问:发生错误的位置是否第一位为1?
汉明码(Hamming Code)底层原理_第26张图片


二进制数中第二位为1的属于第二个偶校验组Q2
汉明码(Hamming Code)底层原理_第27张图片
汉明码(Hamming Code)底层原理_第28张图片
检查Q2时,似乎在问:发生错误的位置是否第二位为1?
汉明码(Hamming Code)底层原理_第29张图片


二进制数中第三位为1的属于第三个偶校验组Q3
汉明码(Hamming Code)底层原理_第30张图片

汉明码(Hamming Code)底层原理_第31张图片
检查Q3时,似乎在问:发生错误的位置是否第三位为1?
汉明码(Hamming Code)底层原理_第32张图片


二进制数中第四位为1的属于第四个偶校验组Q4
汉明码(Hamming Code)底层原理_第33张图片
汉明码(Hamming Code)底层原理_第34张图片
检查Q4时,似乎在问:发生错误的位置是否第四位为1?
汉明码(Hamming Code)底层原理_第35张图片
为什么奇偶校验位落在了第1、2、4、8等 2 k 2^k 2k的位置上?
二进制中只有1比特位的数字为1,不就是上述中在检查Q1、Q2、Q3、Q4吗?
汉明码(Hamming Code)底层原理_第36张图片
这些位置恰好使得一个奇偶校验组中只有一个奇偶校验位
例如第 2 1 2^1 21位置上有一个校验位,这是Q2中唯一一个校验位,其他校验组也一样,如果校验位落在 2 k 2^k 2k的位置上,则会确保一个校验组只有一个校验位

汉明码(Hamming Code)底层原理_第37张图片
把所有信息为1所在位置的二进制数取出,做异或运算得到的结果就是出现错误的比特所在位置。为什么?
汉明码(Hamming Code)底层原理_第38张图片
第一列异或时,相当于在问有多少高亮位置来自于第一个偶校验组Q1
汉明码(Hamming Code)底层原理_第39张图片
第二列异或时,相当于在问有多少高亮位置来自于第二个偶校验组Q2,其他列类似
汉明码(Hamming Code)底层原理_第40张图片
为什么异或结果可以告诉我们错误位置?
例如下图中是要发送的信息,如果将信息为1所在位置二进制做异或运算会得到0000

汉明码(Hamming Code)底层原理_第41张图片
我们假设在传输过程中第12个位置的0变为了1,则接收方检查时,将所有信息为1的位置除了原来的1外还要加一个发生变化位置的1,这一加入使得异或结果不在是0000,而是它所在位置的二进制
汉明码(Hamming Code)底层原理_第42张图片

这样Hamming Code的纠错机制最终转化为异或运算,当然Hamming Code缺点是只能发现和纠正一位错误
其他纠错码
汉明码(Hamming Code)底层原理_第43张图片

你可能感兴趣的:(#,计算机网络,汉明码,纠错码,检错码,Hamming,Code)