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

本文将通过例子来说明两个方面的内容:
(1)如何构建纠错码?
(2)有了纠错码之后如何纠错?

1 如何构建纠错码?

直接上例子,“hello world” 利用二维码的编码原理,转换成十进制数字为“32, 91, 11, 120, 209, 114, 220, 77, 67, 64, 236, 17, 236, 17, 236, 17”,因此这个语句的消息多项式为:
32x15+91x14+11x13+120x12+209x11+114x10+220x9+77x8+67x7+64x6+236x5+17x4+236x3+17x2+236x1+17(1)\begin{aligned} &32x^{15} + 91x^{14} + 11x^{13} + 120x^{12} + 209x^{11} + 114x^{10} + 220x^{9} + 77x^{8} + 67x^{7}\\ &+ 64x^{6} + 236x^{5} + 17x^{4} + 236x^{3} + 17x^{2} + 236x^{1} + 17 \end{aligned} \tag1 32x15+91x14+11x13+120x12+209x11+114x10+220x9+77x8+67x7+64x6+236x5+17x4+236x3+17x2+236x1+17(1)

1.1 生成多项式

从下面这个网址可以轻松得到n≥7n≥7n7的生成多项式:
https://www.thonky.com/qr-code-tutorial/generator-polynomial-tool?degree=7

1.2 多项式除法

“Hello world”完整的消息多项式见公式(1),为了确保在除法期间引导项的指数不会变得太小,将消息多项式乘以xnx^nxnnnn是所需的纠错码字的数量。如当纠错码字的数量是10时,式(1)应该变成:

32x25+91x24+11x23+120x22+209x21+114x20+220x19+77x18+67x17+64x16+236x15+17x14+236x13+17x12+236x11+17x10(2)\begin{aligned} &32x^{25} + 91x^{24} + 11x^{23} + 120x^{22} + 209x^{21} + 114x^{20} + 220x^{19} + 77x^{18} + 67x^{17} \\ &+ 64x^{16} + 236x^{15} + 17x^{14} + 236x^{13} + 17x^{12} + 236x^{11} + 17x^{10} \end{aligned} \tag2 32x25+91x24+11x23+120x22+209x21+114x20+220x19+77x18+67x17+64x16+236x15+17x14+236x13+17x12+236x11+17x10(2)

生成多项式的前导项也应该具有相同的指数,因此生成多项式也乘x15x^{15}x15得到下式:

α0x25+α251x24+α67x23+α46x22+α61x21+α118x20+α70x19+α64x18+α94x17+α32x16+α45x15(3)\begin{aligned} &α^0x^{25} + α^{251}x^{24} + α^{67}x^{23} + α^{46}x^{22} + α^{61}x^{21} + α^{118}x^{20} + \\ &α^{70}x^{19} + α^{64}x^{18} + α^{94}x^{17} + α^{32}x^{16} + α^{45}x^{15} \end{aligned} \tag3 α0x25+α251x24+α67x23+α46x22+α61x21+α118x20+α70x19+α64x18+α94x17+α32x16+α45x15(3)

具体除法步骤如下:
(1)将生成多项式乘以消息多项式的前导项。
消息多项式的前导项是32,也就是α5α^5α5,乘上生成多项式后,生成多项式变成:
α5x25+α256%255x24+α72x23+α51x22+α66x21+α123x20+α75x19+α69x18+α99x17+α37x16+α50x15=α5x25+α1x24+α72x23+α51x22+α66x21+α123x20+α75x19+α69x18+α99x17+α37x16+α50x15=32x25+2x24+101x23+10x22+97x21+197x20+15x19+47x18+134x17+74x16+5x15(4)\begin{aligned} &α^5x^{25} + α^{256 \% 255}x^{24} + α^{72}x^{23} + α^{51}x^{22} + α^{66}x^{21} + α^{123}x^{20} + \\ &α^{75}x^{19} + α^{69}x^{18} + α^{99}x^{17} + α^{37}x^{16} + α^{50}x^{15} \\ &= α^5x^{25} + α^{1}x^{24} + α^{72}x^{23} + α^{51}x^{22} + α^{66}x^{21} + α^{123}x^{20} + \\ &α^{75}x^{19} + α^{69}x^{18} + α^{99}x^{17} + α^{37}x^{16} + α^{50}x^{15} \\ &= 32x^{25} + 2x^{24} + 101x^{23} + 10x^{22} + 97x^{21} + 197x^{20} + \\ &15x^{19} + 47x^{18} + 134x^{17} + 74x^{16} + 5x^{15} \end{aligned} \tag4 α5x25+α256%255x24+α72x23+α51x22+α66x21+α123x20+α75x19+α69x18+α99x17+α37x16+α50x15=α5x25+α1x24+α72x23+α51x22+α66x21+α123x20+α75x19+α69x18+α99x17+α37x16+α50x15=32x25+2x24+101x23+10x22+97x21+197x20+15x19+47x18+134x17+74x16+5x15(4)
(2) 使用消息多项式对结果进行异或。
从下面这个式子也可以看出来,就是消息多项式和生成多项式中相同次数的项的系数进行了异或操作,经过这个操作之后,消息多项式中最高次数的项已经没有了(因为生成多项式和消息多项式拥有完全相同的第一项,一异或就没了)。
(32⊕32)x25+(91⊕2)x24+(11⊕101)x23+(120⊕10)x22+(209⊕97)x21+(114⊕197)x20+(220⊕15)x19+(77⊕47)x18+(67⊕134)x17+(64⊕74)x16+(236⊕5)x15+(17⊕0)x14+(236⊕0)x13+(17⊕0)x12+(236⊕0)x11+(17⊕0)x10=0x25+89x24+110x23+114x22+176x21+183x20+211x19+98x18+197x17+10x16+233x15+17x14+236x13+17x12+236x11+17x10=89x24+110x23+114x22+176x21+183x20+211x19+98x18+197x17+10x16+233x15+17x14+236x13+17x12+236x11+17x10(5)\begin{aligned} &(32 \oplus 32)x^{25} + (91 \oplus 2)x^{24} + (11 \oplus 101)x^{23} + (120 \oplus 10)x^{22} + (209 \oplus 97)x^{21} \\ &+ (114 \oplus 197)x^{20} + (220 \oplus 15)x^{19} + (77 \oplus 47)x^{18} + (67 \oplus 134)x^{17} + (64 \oplus 74)x^{16} \\ &+ (236 \oplus 5)x^{15} + (17 \oplus 0) x^{14} + (236 \oplus 0)x^{13} + (17 \oplus 0)x^{12} + (236 \oplus 0)x^{11} + (17 \oplus 0)x^{10} \\ &= 0x^{25} + 89x^{24} + 110x^{23} + 114x^{22} + 176x^{21} + 183x^{20} + 211x^{19} + 98x^{18} + 197x^{17} \\ &+ 10x^{16} + 233x^{15} + 17x^{14} + 236x^{13} + 17x^{12} + 236x^{11} + 17x^{10} \\ &= 89x^{24} + 110x^{23} + 114x^{22} + 176x^{21} + 183x^{20} + 211x^{19} + 98x^{18} + 197x^{17} \\ &+ 10x^{16} + 233x^{15} + 17x^{14} + 236x^{13} + 17x^{12} + 236x^{11} + 17x^{10} \end{aligned} \tag5 (3232)x25+(912)x24+(11101)x23+(12010)x22+(20997)x21+(114197)x20+(22015)x19+(7747)x18+(67134)x17+(6474)x16+(2365)x15+(170)x14+(2360)x13+(170)x12+(2360)x11+(170)x10=0x25+89x24+110x23+114x22+176x21+183x20+211x19+98x18+197x17+10x16+233x15+17x14+236x13+17x12+236x11+17x10=89x24+110x23+114x22+176x21+183x20+211x19+98x18+197x17+10x16+233x15+17x14+236x13+17x12+236x11+17x10(5)
(3) 将生成多项式乘上一步的XOR结果的前导项。注意,这里的生成多项式已经经过了和现在的信息多项式等指数的过程,所以最高次是24。
在这个例子中,前导项是89x2489x^{24}89x24,做乘法的时候,把数字用α表示比较简单,89又等于α210α^{210}α210(这个可以查表得),所以:

(α210∗α0)x24+(α210∗α251)x23+(α210∗α67)x22+(α210∗α46)x21+(α210∗α61)x20+(α210∗α118)x19+(α210∗α70)x18+(α210∗α64)x17+(α210∗α94)x16+(α210∗α32)x15+(α210∗α45)x14=α210x24+α206x23+α22x22+α1x21+α16x20+α73x19+α25x18+α19x17+α49x16+α242x15+α0x14=89x24+83x23+234x22+2x21+76x20+202x19+3x18+90x17+140x16+176x15+1x14(6)\begin{aligned} & (α^{210} * α^{0})x^{24} + (α^{210} * α^{251})x^{23} + (α^{210} * α^{67})x^{22} + (α^{210} * α^{46})x^{21} \\ &+ (α^{210} * α^{61})x^{20} + (α^{210} * α^{118})x^{19} + (α^{210} * α^{70})x^{18} + (α^{210} * α^{64})x^{17} \\ &+ (α^{210} * α^{94})x^{16} + (α^{210} * α^{32})x^{15} + (α^{210} * α^{45})x^{14} \\ &= α^{210}x^{24} + α^{206}x^{23} + α^{22}x^{22} + α^{1}x^{21} + α^{16}x^{20} \\ &+ α^{73}x^{19} + α^{25}x^{18} + α^{19}x^{17} + α^{49}x^{16} + α^{242}x^{15} + α^{0}x^{14} \\ &= 89x^{24} + 83x^{23} + 234x^{22} + 2x^{21} + 76x^{20} + 202x^{19} + 3x^{18} + 90x^{17} \\ &+ 140x^{16} + 176x^{15} + 1x^{14} \end{aligned} \tag6 (α210α0)x24+(α210α251)x23+(α210α67)x22+(α210α46)x21+(α210α61)x20+(α210α118)x19+(α210α70)x18+(α210α64)x17+(α210α94)x16+(α210α32)x15+(α210α45)x14=α210x24+α206x23+α22x22+α1x21+α16x20+α73x19+α25x18+α19x17+α49x16+α242x15+α0x14=89x24+83x23+234x22+2x21+76x20+202x19+3x18+90x17+140x16+176x15+1x14(6)
(4) 将上一步得到的式子继续重复类似步骤2的异或操作,这个操作之后,最前面那项(次数为24次的那项)又成功没有了。
那么重复到什么时候好呢?从上面可以看出来,循环一次,就有一个消息多项式中的一项被消除,所以消息多项式有多少项,就进行多少次循环(这就好像除法进行到了最后一位)。上述例子循环16次后,就得到了下面这个式子(从这个式子中我们就可以看出来,刚开始的时候乘x^10有多明智,为什么是10而不是9或者8也从这里可以看出,因为生成多项式的最高次数是纠错码字的数目,一项项异或之后,最后的余数的位数和生成多项式的位数是相关的)

196x9+35x8+39x7+119x6+235x5+215x4+231x3+226x2+93x1+23(7)\begin{aligned} &196x^{9} + 35x^{8} + 39x^{7} \\ &+ 119x^{6} + 235x^{5} + 215x^{4} + 231x^{3} + 226x^{2} + 93x^{1} + 23 \end{aligned} \tag7 196x9+35x8+39x7+119x6+235x5+215x4+231x3+226x2+93x1+23(7)

现在我们就得到纠错码字了:196 35 39 119 235 215 231 226 93 23
得到纠错码字之后就是按照规范给填到二维码的格子里面。

2 如何进行纠错?

二维码采用Reed-Solomon Codes(简称RS编码)进行纠错。

2.1 RS编码

RS编码以word为编码和解码单位,大的数据块拆分到字长为www(取值一般为8或者16位)的word,然后对word进行编解码。 数据块的编码原理与word编码原理相同,后文中以word为例说明,变量Di\mathrm{D_i}Di, Cj\mathrm{C_j}Cj将分别代表第iii个数据码和第jjj个纠错码(以word为单位)。
输入数据为向量D=(D1,D2,…,Dn)\mathrm{D} =(\mathrm{D_1},\mathrm{D_2},\dots, \mathrm{D_n})D=(D1D2,Dn),编码后为向量(D1,D2,…,Dn,C1,C2,…,Cm)(\mathrm{D_1},\mathrm{D_2},\dots, \mathrm{D_n}, \mathrm{C_1}, \mathrm{C_2}, \dots, \mathrm{C_m})(D1D2,Dn,C1,C2,,Cm),RS编码可表示为如下图所示矩阵运算:

图1 RS编码示意图

上图最左边是编码矩阵(或称为生成矩阵、分布矩阵,Distribution Matrix),编码矩阵需要满足任意n×nn \times nn×n子矩阵可逆。

为方便数据存储,编码矩阵上部是单位阵(nnnnnn列),下部是mmmnnn列矩阵。下部矩阵可以选择范德蒙德矩阵柯西矩阵。后文说明。

2.2 RS编码数据恢复原理

RS最多能容忍kkk个数据块被删除。 数据恢复的过程如下:
(1)假设D1\mathrm{D_1}D1D4\mathrm{D_4}D4C2\mathrm{C_2}C2丢失,从编码矩阵中删掉丢失的数据块/编码块对应的行。

图2 数据缺失情况

(2)根据图1所示RS编码运算等式,可以得到如下B′\mathrm{B'}B以及等式。

图3 数据缺失后的编码矩阵

(3)由于B′\mathrm{B'}B是可逆的,记B′\mathrm{B'}B的逆矩阵为 B′−1\mathrm{B'}^{-1}B1,则B′×B′−1=I\mathrm{B'} \times \mathrm{B'}^{-1} = \mathrm{I}B×B1=I 单位矩阵。两边左乘B′\mathrm{B'}B逆矩阵B′−1\mathrm{B'}^{-1}B1后如下图:

图4 左乘逆矩阵的结果

(4)得到如下原始数据D\mathrm{D}D的计算公式:

图5 计算机原始数据

恢复原始数据D\mathrm{D}D

图6 计算机原始数据

(5)对D\mathrm{D}D重新编码,可得到丢失的编码。

3 下一步工作

下一步将讨论范德蒙德(Vandermonde)矩阵和柯西( Cauchy)矩阵。

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

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

相关文章

利用自己构建的网络进行鼾声识别

1 目前的工作 1.1 数据 5692条3s且采集率为8000hz的鼾声与6824条3s且采集率为8000hz的其他类音频。通过FFT频谱转换为300个(30,513,1)的矩阵。训练集与测试集的比例为9:1。数据集来源为google开源的数据集。 1.2 模型 图1. The proposed deep neural network arc…

企业微信加密消息体_用企业微信小程序发送消息

在企业开发中,经常会碰到一些消息要及时推送到企业员工的手中。so 下面来说怎么向企业微信中的员工发消息。本人只是记录下开发过程,详细参考https://work.weixin.qq.com/api/1.准备注册企业微信公司获取企业ID新开企业微信应用获取应用的Agentid&#x…

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

下面进一步介绍二维码纠错相关的编码矩阵 1 范德蒙德(Vandermonde)矩阵 1.1 定义及特性 法国数学家 Alexandre-Thophile Vandermonde 在十八世纪提出了行列式的概念, 用来解决线性方程组问题, 其中一个关键是范德蒙德(Vandermonde) 矩阵, Vandermonde…

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…