QR code 二维码基础入门教程(二)
QR code 二维码基础入门教程(二)
承接上文,让我们继续下面的步骤
纠错码编码
先说说纠错容量
- 纠错码可以纠正两种错误:
- 拒读错误(错误码位置已知),是一个没有扫到或者无法译码的符号字符,需要一个纠错码
- 替代错误(错误码位置未知),是一个错误译码的符号字符,需要两个
- 数量公式:e+2t≤d−pe+2t≤d−pe+2t \le d - p,其中
- eee为拒读错误数
- t" role="presentation">ttt为替代作物数
- ddd为纠错码字数
- p" role="presentation">ppp为错误检测码字数(1-L时p=3,1-M和2-L时p=2,1-H、1-Q、和3-L时,p=1,其余p=0)
- 举个例子:版本6-H,有112个纠错码(查表 error correction table,定位6-H,28*4=112),数据容量为60个码字,共172个码字。那么112个纠错码可以纠正56个替代错误或者112个拒读错误,纠错容量为 56/172 = 32.6%
Step 1 将数据码字进行分组
- 根据 error correction table 将数据进行分块,下面举个例子
- 一个数据经过以5-Q形式进行数据编码后如下,共62个码字
(codeword #1) 01000011
(codeword #2) 01010101
(codeword #3) 01000110
(codeword #4) 10000110
(codeword #5) 01010111
(codeword #6) 00100110
(codeword #7) 01010101
(codeword #8) 11000010
(codeword #9) 01110111
(codeword #10) 00110010
(codeword #11) 00000110
(codeword #12) 00010010
(codeword #13) 00000110
(codeword #14) 01100111
(codeword #15) 00100110
(codeword #16) 11110110
(codeword #17) 11110110
(codeword #18) 01000010
(codeword #19) 00000111
(codeword #20) 01110110
(codeword #21) 10000110
(codeword #22) 11110010
(codeword #23) 00000111
(codeword #24) 00100110
(codeword #25) 01010110
(codeword #26) 00010110
(codeword #27) 11000110
(codeword #28) 11000111
(codeword #29) 10010010
(codeword #30) 00000110
(codeword #31) 10110110
(codeword #32) 11100110
(codeword #33) 11110111
(codeword #34) 01110111
(codeword #35) 00110010
(codeword #36) 00000111
(codeword #37) 01110110
(codeword #38) 10000110
(codeword #39) 01010111
(codeword #40) 00100110
(codeword #41) 01010010
(codeword #42) 00000110
(codeword #43) 10000110
(codeword #44) 10010111
(codeword #45) 00110010
(codeword #46) 00000111
(codeword #47) 01000110
(codeword #48) 11110111
(codeword #49) 01110110
(codeword #50) 01010110
(codeword #51) 11000010
(codeword #52) 00000110
(codeword #53) 10010111
(codeword #54) 00110010
(codeword #55) 11100000
(codeword #56) 11101100
(codeword #57) 00010001
(codeword #58) 11101100
(codeword #59) 00010001
(codeword #60) 11101100
(codeword #61) 00010001
(codeword #62) 11101100 - 查表得,5-Q需要将数据分为2个Group,第一个Group有2个Block(15个码字),第二个Group有2个Block(16个码字)
- 进行分组,得到如下表
- 一个数据经过以5-Q形式进行数据编码后如下,共62个码字
Group Number | Block Number | Data Codewords in the Group |
---|---|---|
Group 1 | Block 1 |
(codeword #1) 01000011 (codeword #2) 01010101 (codeword #3) 01000110 (codeword #4) 10000110 (codeword #5) 01010111 (codeword #6) 00100110 (codeword #7) 01010101 (codeword #8) 11000010 (codeword #9) 01110111 (codeword #10) 00110010 (codeword #11) 00000110 (codeword #12) 00010010 (codeword #13) 00000110 (codeword #14) 01100111 (codeword #15) 00100110 |
Block 2 |
(codeword #16) 11110110 (codeword #17) 11110110 (codeword #18) 01000010 (codeword #19) 00000111 (codeword #20) 01110110 (codeword #21) 10000110 (codeword #22) 11110010 (codeword #23) 00000111 (codeword #24) 00100110 (codeword #25) 01010110 (codeword #26) 00010110 (codeword #27) 11000110 (codeword #28) 11000111 (codeword #29) 10010010 (codeword #30) 00000110 |
|
Group 2 | Block 1 |
(codeword #31) 10110110 (codeword #32) 11100110 (codeword #33) 11110111 (codeword #34) 01110111 (codeword #35) 00110010 (codeword #36) 00000111 (codeword #37) 01110110 (codeword #38) 10000110 (codeword #39) 01010111 (codeword #40) 00100110 (codeword #41) 01010010 (codeword #42) 00000110 (codeword #43) 10000110 (codeword #44) 10010111 (codeword #45) 00110010 (codeword #46) 00000111 |
Block 2 |
(codeword #47) 01000110 (codeword #48) 11110111 (codeword #49) 01110110 (codeword #50) 01010110 (codeword #51) 11000010 (codeword #52) 00000110 (codeword #53) 10010111 (codeword #54) 00110010 (codeword #55) 11100000 (codeword #56) 11101100 (codeword #57) 00010001 (codeword #58) 11101100 (codeword #59) 00010001 (codeword #60) 11101100 (codeword #61) 00010001 (codeword #62) 11101100 |
- 查表可知5-Q中每个块有18个纠错码,因此一共是18*4=72个纠错码
Step 2 理解多项式长除法
- 这个比较简单,以 (x+1)√(3x2+x−1)(x+1)√(3x2+x−1)(x+1)\surd(3x^2+x-1) $为例
最终结果是 3x+23x+23x+2,余数为1(特别的,就是 1x^0)
Step 3 理解Galois Field
- 说实话,我看了一些博客还是不理解这个。暂时认为,任意的两个数在这个域中,那么它们的数学运算结果也在这个域中。
- QR 标准中使用位的模2算法和字节模100011101,这种情况下我们称使用了Galois Field 28282^8,或者GF(256)
- GF(256)包括256个数字 0….255,所有在GF(256)的数学操作的结果都会落在0…255中
Step 4 理解Galois Field算术
- 运算结果如果大于255,那么需要做取模操作,这样使得结果人在GF中
- 在GF中,−n=n−n=n-n = n,因此加法和减法是一样的
- 位模2,其实就是XOR,举例:
- (1 + 1)%2 == (1 XOR 1) == 0
- (1 + 0)%2 == (1 XOR 0) == 1
- (0 + 0)%2 == (0 XOR 0) == 0
Step 5 利用逐字节100011101取模,生成2的乘幂
- 我们想做这样一件事情,用2n2n2^n表示[0,255]中的所有数,例如用20=120=12^0=1,22=422=42^2=4。那么我们有2的0次方到8次方为:
- 20=120=12^0 = 1
- 21=221=22^1 = 2
- 22=422=42^2 = 4
- 23=823=82^3 = 8
- 24=1624=162^4 = 16
- 25=3225=322^5 = 32
- 26=6426=642^6 = 64
- 27=12827=1282^7 = 128
- 28=25628=2562^8 = 256
- 当 n≥8n≥8n \ge 8 时,2n>2552n>2552^n > 255,超出了 [0,255][0,255][0,255] 的范围,因此当 2n>2552n>2552^n > 255 时,我们要对 2n2n2^n 用 100011101 取模。100011101 也就是十进制 285。换句话说,28=256mod285=2928=256mod285=292^8= 256 \mod 285 = 29 。
- 注意,当我们计算 29292^9 时,并不是用 512 去 XOR 285,而是用 29=28∗2=29∗2=5829=28∗2=29∗2=582^9 = 2^8 *2 = 29*2 = 58 得到结果。
我们继续举一些例子来说明计算方式:
210=29∗2=58∗2=116210=29∗2=58∗2=1162^10 = 2^9*2 = 58*2 = 116
211=210∗2=116∗2=232211=210∗2=116∗2=2322^{11} = 2^{10}*2 = 116*2 = 232
212=211∗2=232∗2=464mod285=205212=211∗2=232∗2=464mod285=2052^{12} = 2^{11}*2 = 232 * 2 = 464 \mod 285 = 205
只要超过了 255,那么就做 100011101 的 XOR(即取模于 285)
Step 6 利用逐字节100011101取模,生成2的乘幂
- Step 5 让 [0,255][0,255][0,255] 所有的数都被表示成 2n2n2^n,这可以用 logs 和 antilogs 来简化 GF(256) 中的乘法操作。
- 基本知识:2n∗2m=2m+n2n∗2m=2m+n2^n * 2^m = 2^{m+n}。举例 22∗28=210,2170∗2164=2334=2334mod255=27922∗28=210,2170∗2164=2334=2334mod255=2792^2*2^8 = 2^{10},2^{170}*2^{164}=2^{334} = 2^{334 \mod 255} = 2^{79}
Step 7: 理解生成器多项式
- 首先要确定纠错码码字的个数。例如 5-Q 有 72 个,1-L 有 7 个。
- 接下来有点复杂,请看 原文,耐心一点看例子,不难的。
- 生成器多项式只与纠错码码字的个数有关,因此是可以预先生成的。这里有个神奇的 链接 可以生成生成器多项式
Step 8: 生成纠错码码字
- 我们利用多项式除法来生成纠错码码字。我们需要两个多项式:消息多项式和生成器多项式。用消息多项式除以生成器多项式,得到的余数结果即为纠错码码字。
- 进行多项式除法之前,消息多项式先乘上 xnxnx^n,其中 nnn 是纠错码的个数,这样保证消息多项式足够大进行除法。
Step 9: 消息多项式除以生成器多项式
- 第一步:生成器多项式乘上消息多项式的头一项。
- 第二步:将生成器多项式中的 2n" role="presentation">2n2n2^n 转为 [0,255][0,255][0,255]的数字。
- 第三步:进行多项式除法。
- 重复 1~3 步,共进行 m 次,其中 m 为数据码字的个数。
- 最终得到余数,即纠错码码字。具体过程参看 Show polynomial division steps
QR code 二维码基础入门教程(二)相关推荐
- QR code 二维码基础入门教程
QR code 二维码基础入门教程 本文为 QR Code Tutorial: Introduction 的总结,详细内容请查看原文 Introduction History and Informat ...
- QR code 二维码基础入门教程(三)
QR code 入门教程(三) 承接上文,我们已经说过了数据编码和纠错码的生成,接下来我们继续下面的步骤 结构化最终的数据 所谓的结构化(Structure),说白了就是如何把之前生成的数据排成一个比 ...
- 如何把视频文件转换为视频二维码的完整教程
如何把视频文件转换为视频二维码的完整教程 二维码已经不经意间快速地融入了我们的生活,我们可以通过扫描二维码来添加好友.付款等等, 那么,如何让视频生成二维码直接免费观看和实现分享呢? 「 视频二维码 ...
- QR Code生成二维码快速入门
1.QR Code的介绍 QR Code,是由Denso公司于1994年9月研制的一种矩阵二维码符号,它具有一维条码及其它二维条码所具有的信息容量大.可靠性高.可表示汉字及图象多种文字信息.保密防伪性 ...
- 使用说明二维码怎么做?二维码制作教程分享
我们购买的很多商品包装带上都会有二维码,扫一扫就能看到商品的使用教程视频和相关的文字说明.非常的方便.那么,如何将视频文字做成二维码图片呢?有没有什么简单好操作的工具呢? 一.使用什么工具能够制作二维 ...
- 二维码简介_二维码基本概念_二维码基本原理
一.二维码简介_二维码基本概念_二维码基本原理 1.二维码又称二维条码,常见的二维码为QR Code,QR全称Quick Response,是一个近几年来移动设备上超流行的一种编码方式,它比传统的Ba ...
- 用python生成个性二维码_Python 生成个性二维码
1.1 实验内容 本课程通过调用MyQR接口来实现生成个人所需二维码,并可以设置二维码的大小.是否在现有图片的基础上生成.是否生成动态二维码. 本课程主要面向Python3初学者. 1.2 知识点 P ...
- C++/QT生成二维码和扫瞄二维码
C++生成二维码和扫瞄二维码 一. 创建工程项目 二 .QRCODE库 三. 添加生成二维码库 四. 生成二维码和复制二维码实现 五. 添加扫码二维码库 六. 扫码二维码代码实现 七. 测试 八. 打 ...
- python可以做二维码吗_Python制作二维码真的这么简单?
今天在最大的交友社区GitHub上发现了一个比较有意思的项目,无论你是什么操作系统,只需要一行代码就可以很方便的生成二维码.包括普通二维码.艺术二维码(黑白/彩色).动态gif二维码都可以制作,用法比 ...
最新文章
- LeetCode 850. Rectangle Area II
- Java除法结果带小数、进一法的实现 Java问题通用解决代码
- 菜菜sklearn——XGBoost(2)
- 腾讯推出百万现金漏洞悬赏计划!
- php左侧菜单栏递归代码,js实现左侧菜单栏递归循环遍历
- 安装一直初始化_3D max 软件安装问题大全
- 荷兰商业银行使用精益领导力推行改进
- 自学it18大数据笔记-第一阶段Java-day16-day17-day18-day19--day20-day21-day22——会持续更新...
- 改变变压器联接方式可消除某些特定次数的谐波_电工牛人10年经验,总结的4电工常用接线方法41例,电机、变压器、接触器..都有...
- 武汉三首,记录备忘,写的不好,以后再改
- 为什么我写了一万小时的代码,却仍然成不了架构师?
- SqlServer修改sa的密码
- Interface Project
- java解压zip压缩文件
- ⚓写写5G网速及页面提速中的延迟加载Lazyloading
- 35、StylizedNeRF Consistent 3D Scene Stylization as Stylized NeRF via 2D-3D Mutual Learning
- stm8L051低功耗采集电池电量ADC例程
- 【如何学习CAN总线测试】——OSEK网络管理测试
- 浅谈集合List,Set以及Map集合的特点及区别
- linux内核-进程与进程调度
热门文章
- python提取高频词_seo与python大数据结合给文本分词并提取高频词
- python3x_Python3x 基本知识点
- oracle11g scn 补丁,Oracle11g中SCN与TimeStamp的相互转换
- ROS入门笔记(十):编写与测试简单的消息发布器和订阅器(C++)
- mysql yog中文版下载_SQLyog 12
- 红黑树在java中的作用_带你真正理解Java数据结构中的红黑树
- php mysql encode_PHP json_encode mysql结果
- 三位数的茎叶图怎么看_人参怎么判断年份,这些点你要了解
- kind富文本编辑器_在项目中集成富文本编辑器
- 重启用reboot后起不来_2021年中国“天眼”开放,美媒记者探访后感叹了……