1.区块链入门108个知识点
2.什么是BCH
3.二维码有哪些基本知识?
4.Matlab通信仿真系列——线性分组码之循环码、BCH码、RS码仿真
区块链入门108个知识点
1、什么是区块链把多笔交易的信息以及表明该区块的信息打包放在一起,经验证后的这个包就是区块。
每个区块里保存了上一个区块的2048多模式源码hash值,使区块之间产生关系,也就是说的链了。合起来就叫区块链。
2.什么是比特币
比特币概念是年中本聪提出的,总量是万个。比特币链大约每分钟产生一个区块,这个区块是矿工挖了分钟挖出来的。作为给矿工奖励,一定数量的比特币会发给矿工们,但是这个一定数量是每四年减半一次。现在是.5个。照这样下去年全部的比特币问世。
3.什么是以太坊
以太坊与比特币最大的区别是有了智能合约。使得开发者在上边可以开发,运行各种应用。
4.分布式账本
它是一种在网络成员之间共享,复制和同步的数据库。直白说,在区块链上的所有用户都有记账功能,而且内容一致,这样保证了数据不可篡改性。
5.什么是准匿名性
相信大家都有钱包,发送交易都用的钱包地址(一串字符串)这就是准匿名。
6.什么是开放透明性/可追溯
区块链存储了从 历史 到现在的所有数据,任何人都可以查看,而且还可以查看到 历史 上的任何数据。
7.什么是不可篡改
历史 数据和当前交易的数据不可篡改。数据被存在链上的区块上,有一个hash值,如果修改该区块信息,那么它的 hash值也变了,它后边的所有区块的hash值也必须修改,使成为新的链。同时主链还在进行交易产生区块。修改后链也必须一直和主链同步产生区块,保证链的长度一样。代价太大了,只为修改一条数据。
8.什么是抗ddos攻击
ddos:黑客通过控制许多人的电脑或者手机,让他们同时访问一个网站,由于服务器的宽带是有限的,大量流量的涌入可能会使得网站可能无法正常工作,从而遭受损失。但区块链是分布式的,不存在一个中心服务器,一个节点出现故障,其他节点不受影响。理论上是超过%的节点遭受攻击,会出现问题。
9.主链的定义
以比特币为例,某个时间点一个区块让2个矿工同时挖出来,然后接下来最先产生6个区块的链就是主链
.单链/多链
单链指的是一条链上处理所有事物的数据结构。多链结构,其核心本质是公有链+N个子链构成。只有一条,子链理论上可以有无数条,每一个子链都可以运行一个或多个DAPP系统
.公有链/联盟链/私有链
公有链:每个人都可以参与到区块链
联盟链:只允许联盟成员参与记账和查询
私有链:写入和查看的权限只掌握在一个组织手里。
.共识层数据层等
区块链整体结构有六个:数据层,网络层,共识层,激励层,合约层,应用层。数据层:记录数据的一层,属于底层技术;网络层:构建区块链网络的一种架构,它决定了用户与用户之间通过何种方式组织起来。共识层:提供了一套规则,让大家接收和存储的信息达成一致。激励层:设计激励政策,鼓励用户参与到区块链生态中;合约层:一般指“智能合约”,它是一套可以自动执行,根据自己需求编写的合约体系。应用层:区块链上的应用程序,与手机的app类似前分布式存储研发中心
.时间戳
时间戳是指从年1月1日0时0分0秒0...到现在的当前时间的总秒数,或者总纳秒数等等很大的数字。每个区块生成时都有一个时间戳,表明生成区块的时间。
.区块/区块头/区块体
区块是区块链的基本单元,区块头和区块体是区块链的组成部分。区块头里面包含的信息有上一个区块的hash,本区块的hash,时间戳等等。virtualbox 源码分析区块体就是区块里的详细数据。
.Merkle树
Merkle树,也叫二叉树,是存储数据的一种数据结构,最底层是所有区块包含的原始数据,上一层是每个区块的hash值,这一层的hash两两组合产生新的hash值,形成新的一层,然后一层层往上,-直到产生一个hash值。这样的结构可以用于快速比较大量的数据,不需要下载全部的数据就可以快速的查找你想要的最底层的 历史 数据。
什么是扩容
比特币的一个区块大小大约是1M左右,可以保存笔交易记录。扩容就是想把区块变大,能保存更多的数据。
.什么是链
每个区块都会保存上一个区块的 hash,使区块之间产生关系,这个关系就是链。通过这个链把区块交易记录以及状态变化等的数据存储起来。
.区块高度
这个不是距离上说的高度,它指是该区块与所在链上第一个区块之间相差的区块总个数。这个高度说明了就是第几个区块,只是标识作用。
.分叉
同一时间内产生了两个区块(区块里的交易信息是一样的,只是区块的hash值不一样),之后在这两个区块上分叉出来两条链,这两条链接下来谁先生成6个区块,谁就是主链,另外的一条链丢弃。
.幽灵协议
算力高的矿池很容易比算力低的矿机产生区块速度快,导致区块链上大部分区块由这些算力高的矿池产生的。而算力低的矿机产生的区块因为慢,没有存储到链上,这些区块将会作废。
幽灵协议使得本来应该作废的区块,也可以短暂的留在链上,而且也可以作为
工作量证明的一部分。这样一来,小算力
的矿工,对主链的贡献比重就增大了,大型矿池就无法独家垄断对新区块的确认。
.孤块
之前说过分叉,孤块就是同一时间产生的区块,有一个形成了链,另一个后边没有形成链。那么这个没形成链的块就叫
孤块。
.叔块
上边说的孤块,通过幽灵协议,使它成为工作量证明的一部分,那它就不会被丢弃,会保存在主链上。这个区块就是下
重放攻击
就是黑客把已经发送给服务器的消息,重新又发了一遍,有时候这样可以骗取服务器的多次响应。
.有向无环图
也叫数据集合DAG(有向非循环图),DAG是一种理想的多链数据结构。现在说的区块链大都是单链,也就是一个区块连一个区块,DAG是多个区块相连。好处是可以同时生成好几个区块,于是网络可以同时处理大量交易,吞吐量肯定就上升了。但是缺点很多,目前属于研究阶段。
.什么是挖矿
挖矿过程就是对以上这六个字段进行一系列的转换、连接和哈希运算,并随着不断一个一个试要寻找的随机数,最后成功找到一个随机数满足条件:经过哈希运算后的值,比预设难度值的哈希值小,那么,就挖矿成功了,节点可以向邻近节点进行广播该区块,邻近节点收到该区块对以上六个字段进行同样的运算,验证合规,再向其它结点转播,其它结点也用同样的算法进行验证,如果全网有%的结点都验证成功,这个区块就算真正地“挖矿”成功了,每个结点都把这个区块加在上一个区块的后面,并把区块中与自己记录相同的列表删除,再次复生上述过程。另外要说的是,不管挖矿成不成功每个节点都预先把奖励的比特币个、所有交易的手续费(总输入-总输出)记在交易列表的第一项了(这是“挖矿”最根本的目的,也是保证区块链能长期稳定运行的根本原因),输出地址就是jquery easing 源码本结点的地址,但如果挖矿不成功,这笔交易就作废了,没有任何奖励。而且这笔叫作“生产交易”的交易不参与“挖矿”计算。
.矿机/矿场
矿机就是各种配置的计算机,算力是他们的最大差距。矿机集中在一个地的地方就是矿场
.矿池
就是矿工们联合起来一起组成一个团队,这个团队下的计算机群就是矿池。挖矿奖励,是根据自己的算力贡献度分发。
.挖矿难度和算力
挖矿难度是为了保证产生区块的间隔时间稳定在某个时间短内,如比特币分钟出
块1个。算力就是矿机的配置。
.验证
当区块链里的验证是对交易合法性的一种确认,交易消息在节点之间传播时每个节点都会验证一次这笔交易是否合法。比如验证交易的语法是否正确,交易的金额是否大于0,输入的交易金额是否合理,等等。验证通过后打包,交给矿工挖矿。
.交易广播
就是该节点给其他节点通过网络发送信息。
.矿工费
区块链要像永动机一样不停的工作,需要矿工一直维护着这个系统。所以要给矿工们好处费,才能持久。
.交易确认
当交易发生时,记录该笔交易的区块将进行第一次确认,并在该区块之后的链上的每一个区块进行再次确认:当确认数达到6个及以上时,通常认为这笔交易比较安全并难以篡改。
.双重交易
就是我有块钱,我用这块钱买了一包烟,然后瞬间操作用这还没到付的块钱又买了杯咖啡。所以验证交易的时候,要确认这块钱是否已花费。
.UTXO未花费的交易输出
它是一个包含交易数据和执行代码的数据结构,可以理解为存在但尚未消费的数字货币。
.每秒交易数量TPS
也就是吞吐量,tps指系统每秒能处理的交易数量。
.钱包
与支付宝类似,用来存储数字货币的,用区块链技术更加安全。
.冷钱包/热钱包
冷钱包就是离线钱包,原理是储存在本地,运用二维码通信让私钥永不触网。热钱包就是在线钱包,原理是将私钥加密后存储在服务器上,当需要使用时再从服务器上下载下来,并在浏览器端进行解密。
.软件钱包/硬件钱包
软件钱包是一种计算机程序。一般而言,软件钱包是与区块链交互的程序,可以让用户接收、存储和发送数字货币,可以存储多个密钥。硬件钱包是专门处理数字货币的智能设备。
.空投
项目方把数字货币发送给各个用户钱包地址。
.映射
映射跟区块链货币的发行相关,是链与链之间的映射。比如有一些区块链公司,前期没有完成链的开发,它就依托于以太坊发行自己的货币,前期货币的发行、交易等都在以太坊上进行操作。随着公司的发展,公司自己的链开发完成了公司想要把之前在以太坊上的信息全部对应到自己的链上,这个过程就是映射。
.仓位
指投资人实有投资和实际投资资金的比例
.全仓
全部资金买入比特币
.减仓
把部分比特币卖出,但不全部卖出
.重仓
资金和比特币相比,比特币份额占多
.轻仓
资金和比特币相比,资金份额占多
.空仓
把手里所持比特币全部卖出,全部转为资金
.止盈
获得一定收益后,将所持比特币卖出以保住盈利
.止损
亏损到一定程度后,将所持比特币卖出以防止亏损进一步扩大
.牛市
价格持续上升,前景乐观
.熊市
价格持续下跌,前景黯淡
.多头(做多)
买方,认为币价未来会上涨,买入币,待币价上涨后,高价卖出获利了结
.空头(做空)
卖方,认为币价未来会下跌,将手中持有的币(或向交易平台借币)卖出,待币价下跌后,低价买入获利了结
.建仓
买入比特币等虚拟货币
.补仓
分批买入比特币等虚拟货币,如:先买入1BTC,之后再买入1BTC
.全仓
将所有资金一次性全部买入某一种虚拟币
.反弹
币价下跌时,因下跌过快而价格回升调整
.盘整(横盘)
价格波动幅度较小,reactos 0.3.16 源码币价稳定
.阴跌
币价缓慢下滑
.跳水(瀑布)
币价快速下跌,幅度很大
.割肉
买入比特币后,币价下跌,为避免亏损扩大而赔本卖出比特币。或借币做空后,币价上涨,赔本买入比特币
.套牢
预期币价上涨,不料买入后币价却下跌;或预期币价下跌,不料卖出后,币价却上涨
.解套
买入比特币后币价下跌造成暂时的账面损失,但之后币价回升,扭亏为盈
.踏空
因看淡后市卖出比特币后,币价却一路上涨,未能及时买入,因此未能赚得利润
.超买
币价持续上升到一定高度,买方力量基本用尽,币价即将下跌
.超卖
币价持续下跌到一定低点,卖方力量基本用尽,币价即将回升
.诱多
币价盘整已久,下跌可能性较大,空头大多已卖出比特币,突然空方将币价拉高,诱使多方以为币价将会上涨,纷纷买入,结果空方打压币价,使多方套牢
.诱空
多头买入比特币后,故意打压币价,使空头以为币价将会下跌,纷纷抛出,结果误入多头的陷阱
.什么是NFT
NFT全称“Non-Fungible Tokens” 即非同质化代币,简单来说,即区块链上一种无法分割的版权证明,主要作用数字资产确权,转移,与数字货币区别在于,它独一无二,不可分割,本质上,是一种独特的数字资产。
.什么是元宇宙
元宇宙是一个虚拟时空间的集合, 由一系列的增强现实(AR), 虚拟现实(VR) 和互联网(Internet)所组成,其中数字货币承载着这个世界中价值转移的功能。
.什么是DeFi
DeFi,全称为Decentralized Finance,即“去中心化金融”或者“分布式金融”。“去中心化金融”,与传统中心化金融相对,指建立在开放的去中心化网络中的各类金融领域的应用,目标是建立一个多层面的金融系统,以区块链技术和密码货币为基础,重新创造并完善已有的金融体系
.谁是中本聪?
.比特币和Q币不一样
比特币是一种去中心化的数字资产,没有发行主体。Q币是由腾讯公司发行的电子货币,类似于电子积分,其实不是货币。Q币需要有中心化的发行机构,Q币因为腾讯公司的信用背书,才能被认可和使用。使用范围也局限在腾讯的 游戏 和服务中,Q币的价值完全基于人们对腾讯公司的信任。
比特币不通过中心化机构发行,但却能够得到全球的广泛认可,是因为比特币可以自证其信,比特币的发行和流通由全网矿工共同记账,不需要中心机构也能确保任何人都无法窜改账本。
.矿机是什么?
以比特币为例,比特币矿机就是通过运行大量计算争夺记账权从而获得新生比特币奖励的专业设备,一般由挖矿芯片、散热片和风扇组成,只执行单一的计算程序,耗电量较大。挖矿实际是矿工之间比拼算力,拥有较多算力的矿工挖到比特币的概率更大。随着全网算力上涨,用传统的设备(CPU、GPU)挖到比特的难度越来越大,人们开发出专门用来挖矿的芯片。芯片是矿机最核心的零件。芯片运转的过程会产生大量的热,为了散热降温,比特币矿机一般配有散热片和风扇。用户在电脑上下载比特币挖矿软件,用该软件分配好每台矿机的任务,就可以开始挖矿了。每种币的算法不同,所需要的varnish 源码分析矿机也各不相同。
.量化交易是什么?
量化交易,有时候也称自动化交易,是指以先进的数学模型替代人为的主观判断,极大地减少了投资者情绪波动的影响,避免在市场极度狂热或悲观的情况下做出非理性的投资决策。量化交易有很多种,包括跨平台搬砖、趋势交易、对冲等。跨平台搬砖是指,当不同目标平台价差达到一定金额,在价高的平台卖出,在价低的平台买入。
.区块链资产场外交易
场外交易也叫OTC交易。用户需要自己寻找交易对手,不通过撮合成交,成交价格由交易双方协商确定,交易双方可以借助当面协商或者电话通讯等方式充分沟通。
.时间戳是什么?
区块链通过时间戳保证每个区块依次顺序相连。时间戳使区块链上每一笔数据都具有时间标记。简单来说,时间戳证明了区块链上什么时候发生了什么事情,且任何人无法篡改。
.区块链分叉是什么?
在中心化系统中升级软件十分简单,在应用商店点击“升级”即可。但是在区块链等去中心化系统中,“升级”并不是那么简单,甚至可能一言不合造成区块链分叉。简单说,分叉是指区块链在进行“升级”时发生了意见分歧,从而导致区块链分叉。因为没有中心化机构,比特币等数字资产每次代码升级都需要获得比特币社区的一致认可,如果比特币社区无法达成一致,区块链很可能形成分叉。
.软分叉和硬分叉
硬分叉,是指当比特币代码发生改变后,旧节点拒绝接受由新节点创造的区块。不符合原规则的区块将被忽略,矿工会按照原规则,在他们最后验证的区块之后创建新的区块。软分叉是指旧的节点并不会意识到比特币代码发生改变,并继续接受由新节点创造的区块。矿工们可能会在他们完全没有理解,或者验证过的区块上进行工作。软分叉和硬分叉都"向后兼容",这样才能保证新节点可以从头验证区块链。向后兼容是指新软件接受由旧软件所产生的数据或者代码,比如说Windows 可以运行Windows XP的应用。而软分叉还可以"向前兼容"。
.区块链项目分类和应用
从目前主流的区块链项目来看,区块链项目主要为四类:第一类:币类;第二类:平台类;第三类:应用类;第四类:资产代币化。
.对标美元的USDT
USDT是Tether公司推出的对标美元(USD)的代币Tether USD。1USDT=1美元,用户可以随时使用USDT与USD进行1:1兑换。Tether公司执行1:1准备金保证制度,即每个USDT代币,都会有1美元的准备金保障,对USDT价格的恒定形成支撑。某个数字资产单价是多少USDT,也就相当于是它的单价是多少美元(USD)。
.山寨币和竞争币
山寨币是指以比特币代码为模板,对其底层技术区块链进行了一些修改的区块链资产,其中有技术性创新或改进的又称为竞争币。因为比特币代码开源,导致比特币的抄袭成本很低,甚至只需复制比特币的代码,修改一些参数,便可以生成一条全新的区块链。
.三大交易所
币安:
.行情软件
Mytoken:
金色 财经 :/
币世界快讯:
.区块链浏览器
BTC:/
ETH:/bitcoin-cash/blocks
LTC:/search/ltc
ETC:/
. 去中心化交易所
uniswap: /
. 梯子
自备,购买靠谱梯子
. 平台币
平台发行的数字货币,用于抵扣手续费,交易等
. 牛市、熊市
牛市:上涨行情
熊市:下跌行情
. 区块链1.0
基于分布式账本的货币交易体系,代表为比特币
. 区块链2.0
以太坊(智能合约)为代表的合同区块链技术为2.0
. 区块链3.0
智能化物联网时代,超出金融领域,为各种行业提供去中心化解决方案
. 智能合约
智能合约,Smart Contract,是一种旨在以信息化方式传播、验证或执行合同的计算机协议,简单说,提前定好电子合约,一旦双方确认,合同自动执行。
. 什么是通证?
通证经济就是以Token为唯一参考标准的经济体系,也就是说相当于通行证,你拥有Token ,就拥有权益,就拥有发言权。
大数据是生产资料,AI是新的生产力,区块链是新的生产关系。大数据指无法在一定时间范围内用常规软件工具进行捕捉、管理和处理的数据集合,是需要新处理模式才能具有更强的决策力、洞察发现力和流程优化能力的海量、高增长率和多样化的信息资产。简单理解为,大数据就是长期积累的海量数据,短期无法获取。区块链可以作为大数据的获取方式,但无法取代大数据。大数据只是作为在区块链运行的介质,没有绝对的技术性能,所以两者不能混淆。(生产关系简单理解就是劳动交换和消费关系,核心在于生产力,生产力核心在于生产工具)
ICO,Initial Coin Offering, 首次公开代币发行,就是区块链数字货币行业中的众筹。是最为热门的话题和投资趋势,国家9.4出台监管方案。说到ICO,人们会想到IPO,两者有着本质不同。
. 数字货币五个特征
第一个特征:去中心化
第二个特征:有开源代码
第三个特征:有独立的电子钱包
第四个特征:恒量发行的
第五个特征:可以全球流通
.什么叫去中心化?
没有发行方,不属于任何机构或国家,由互联网网络专家设计、开发并存放于互联网上,公开发行的币种。
. 什么叫衡量(稀缺性)?
发行总量一旦设定,永久固定,不能更改,不能随意超发,可接受全球互联网监督。因挖掘和开釆难度虽时间数量变化,时间越长,开采难度越大,所开釆的币就越少,因此具有稀缺性。
. 什么叫开源代码?
用字母数字组成的存放在互联网上,任何人都可以查出其设计的源代码,所有人都可以参与,可以挖掘,全球公开化。
. 什么叫匿名交易? 专有钱包私密?
每个人都可以在网上注册下载钱包,无需实名认证,完全由加密数字代码组成,全球即时点对点发送、交易,无需借助银行和任何机构,非本人授权任何人都无法追踪、查询。
合约交易是指买卖双方对约定未来某个时间按指定价格接收一定数量的某种资产的协议进行交易。合约交易的买卖对象是由交易所统一制定的标准化合约,交易所规定了其商品种类,交易时间,数量等标准化信息。合约代表了买卖双方所拥有的权利和义务。
.数字货币产业链
芯片厂家 矿机厂商 矿机代理 挖矿 出矿到交易所 散户炒币
.二本是谁?
二本:数字货币价值投资者
投资风格:稳健
建立社群:二本杂谈(高质量价投社群)
.二本投资策略
长短结合,价投为主,不碰合约,不玩短线
合理布局,科学操作,稳健保守,挣周期钱
.二本?
欢迎币友,共谋发展
什么是BCH
揭开BCH的神秘面纱:区块链的革命分支 在区块链的激烈竞争中,比特币的分支不断涌现,比特币现金(BCH)便是其中之一,它诞生于一群对比特币发展抱有不同期待的开发者、投资者和矿工们的革新行动。年8月,BCH作为一款点对点的电子现金系统诞生,旨在提升区块链的可扩展性并降低交易成本,这一项目也以“bitcoin ABC”(可调节区块大小限制)的面貌出现。 扩展性困境与比特币现金的诞生 年的比特币,因其交易确认时间过长和费用上涨饱受批评,这与最初设想的极低费用、即时支付相去甚远。在BCH诞生前,关于是否扩大区块大小的争论在比特币社区内沸沸扬扬。比特币的去中心化特性要求所有协议变更需得到广泛共识,这使得区块大小限制的调整成为了一场艰难的抉择。 然而,比特币现金的出现,作为一种更为扩展的加密货币,它通过增加区块容量,实现了交易费用的降低和确认时间的缩短。BCH社区认为,它更忠实于中本聪对点对点电子货币的愿景,因为它的设计初衷是打造一个更快、更便宜的支付体系,更适合日常应用的场景。 软硬分叉的交织 在BCH分叉后不久,比特币自身也经历了SegWit软分叉的升级,这是比特币开发人员Pieter Wuille在年提出的解决方案,旨在解决网络拥堵问题。尽管SegWit并非BCH所推崇的区块大小限制解决方案,但它预示着区块链技术的演进。比特币 Cash得到了包括吴忌寒和Roger Ver等行业大佬的支持,推动了其在市场中的地位。 BCH运作的奥秘与差异 BCH直接源于比特币的源代码,但两者在扩展性上有显著不同。比特币Cash放宽了区块大小限制,允许更多的交易,区块容量从1MB逐渐增至MB。而比特币Cash的挖矿难度调整更为频繁,每产生一个区块就进行调整,这与比特币的每个区块调整一次形成了鲜明对比。 尽管BCH在实践中并未充分利用更大的区块大小,但其理念上的革新使得它在日常支付领域中找到了自己的定位。然而,尽管BCH社区期望其成为日常货币,但接受度仍然有限,部分商家的支持情况并不乐观。 比特币SV的分叉争议 年,比特币Cash的一部分支持者将协议进一步分裂,诞生了比特币SV(BSV),区块大小限制进一步提升至2GB。这一事件,即所谓的“哈希战争”,引发了争议,尤其是围绕着BSV创始人与中本聪身份的争议,削弱了其在市场上的认可度。 结论 在比特币的分叉产物中,BCH虽然与比特币本身的关联性不及,但其低成本和快速确认的优势使其在某些特定场景中具有吸引力。然而,与比特币相比,BCH在安全性、市场接受度和流动性上还有一定的差距。区块大小的扩大也引发了对网络安全的讨论,这使得比特币在大众心目中仍保持着领先地位。BCH的未来,或许还需时间来证明其在竞争激烈的区块链世界中的真正价值。二维码有哪些基本知识?
基础知识
首先,我们先说一下二维码一共有个尺寸。官方叫版本Version。Version 1是 x 的矩阵,Version 2是 x 的矩阵,Version 3是的尺寸,每增加一个version,就会增加4的尺寸,公式是:(V-1)*4 + (V是版本号) 最高Version ,(-1)*4+ = ,所以最高是 x 的正方形。
下面我们看看一个二维码的样例:
定位图案
Position Detection Pattern是定位图案,用于标记二维码的矩形大小。这三个定位图案有白边叫Separators for Postion Detection Patterns。之所以三个而不是四个意思就是三个就可以标识一个矩形了。
Timing Patterns也是用于定位的。原因是二维码有种尺寸,尺寸过大了后需要有根标准线,不然扫描的时候可能会扫歪了。
Alignment Patterns 只有Version 2以上(包括Version2)的二维码需要这个东东,同样是为了定位用的。
功能性数据
Format Information 存在于所有的尺寸中,用于存放一些格式化数据的。
Version Information 在 >= Version 7以上,需要预留两块3 x 6的区域存放一些版本信息。
数据码和纠错码
除了上述的那些地方,剩下的地方存放 Data Code 数据码 和 Error Correction Code 纠错码。
数据编码
我们先来说说数据编码。QR码支持如下的编码:
Numeric mode 数字编码,从0到9。如果需要编码的数字的个数不是3的倍数,那么,最后剩下的1或2位数会被转成4或7bits,则其它的每3位数字会被编成 ,,bits,编成多长还要看二维码的尺寸(下面有一个表Table 3说明了这点)
Alphanumeric mode 字符编码。包括 0-9,大写的A到Z(没有小写),以及符号$ % * + – . / : 包括空格。这些字符会映射成一个字符索引表。如下所示:(其中的SP是空格,Char是字符,Value是其索引值) 编码的过程是把字符两两分组,然后转成下表的进制,然后转成bits的二进制,如果最后有一个落单的,那就转成6bits的二进制。而编码模式和字符的个数需要根据不同的Version尺寸编成9, 或个二进制(如下表中Table 3)
Byte mode, 字节编码,可以是0-的ISO--1字符。有些二维码的扫描器可以自动检测是否是UTF-8的编码。
Kanji mode 这是日文编码,也是双字节编码。同样,也可以用于中文编码。日文和汉字的编码会减去一个值。如:在0X to 0X9FFC中的字符会减去,在0XE到0XEBBF中的字符要减去0XC,然后把结果前两个进制位拿出来乘以0XC0,然后再加上后两个进制位,最后转成bit的编码。如下图示例:
Extended Channel Interpretation (ECI) mode 主要用于特殊的字符集。并不是所有的扫描器都支持这种编码。
Structured Append mode 用于混合编码,也就是说,这个二维码中包含了多种编码格式。
FNC1 mode 这种编码方式主要是给一些特殊的工业或行业用的。比如GS1条形码之类的。
简单起见,后面三种不会在本文 中讨论。
下面两张表中,
Table 2 是各个编码格式的“编号”,这个东西要写在Format Information中。注:中文是
Table 3 表示了,不同版本(尺寸)的二维码,对于,数字,字符,字节和Kanji模式下,对于单个编码的2进制的位数。(在二维码的规格说明书中,有各种各样的编码规范表,后面还会提到)
下面我们看几个示例,
示例一:数字编码
在Version 1的尺寸下,纠错级别为H的情况下,编码:
1. 把上述数字分成三组:
2. 把他们转成二进制: 转成 ; 转成 ; 转成 。
3. 把这三个二进制串起来:
4. 把数字的个数转成二进制 (version 1-H是 bits ): 8个数字的二进制是
5. 把数字编码的标志和第4步的编码加到前面:
示例二:字符编码
在Version 1的尺寸下,纠错级别为H的情况下,编码: AC-
1. 从字符索引表中找到 AC- 这五个字条的索引 (,,,4,2)
2. 两两分组: (,) (,4) (2)
3.把每一组转成bits的二进制:
(,) *+ 等于 转成 (,4) *+4 等于 转成 (2) 等于 2 转成
4. 把这些二进制连接起来:
5. 把字符的个数转成二进制 (Version 1-H为9 bits ): 5个字符,5转成
6. 在头上加上编码标识 和第5步的个数编码:
结束符和补齐符
假如我们有个HELLO WORLD的字符串要编码,根据上面的示例二,我们可以得到下面的编码,
编码
字符数
HELLO WORLD的编码
我们还要加上结束符:
编码
字符数
HELLO WORLD的编码
结束
按8bits重排
如果所有的编码加起来不是8个倍数我们还要在后面加上足够的0,比如上面一共有个bits,所以,我们还要加上2个0,然后按8个bits分好组:
补齐码(Padding Bytes)
最后,如果如果还没有达到我们最大的bits数的限制,我们还要加一些补齐码(Padding Bytes),Padding Bytes就是重复下面的两个bytes: (这两个二进制转成十进制是和,我也不知道为什么,只知道Spec上是这么写的)关于每一个Version的每一种纠错级别的最大Bits限制,可以参看QR Code Spec的第页到页的Table-7一表。
假设我们需要编码的是Version 1的Q纠错级,那么,其最大需要个bits,而我们上面只有个bits,所以,还需要补个bits,也就是需要3个Padding Bytes,我们就添加三个,于是得到下面的编码:
上面的编码就是数据码了,叫Data Codewords,每一个8bits叫一个codeword,我们还要对这些数据码加上纠错信息。
纠错码
上面我们说到了一些纠错级别,Error Correction Code Level,二维码中有四种级别的纠错,这就是为什么二维码有残缺还能扫出来,也就是为什么有人在二维码的中心位置加入图标。
错误修正容量
L水平 7%的字码可被修正
M水平 %的字码可被修正
Q水平 %的字码可被修正
H水平 %的字码可被修正
那么,QR是怎么对数据码加上纠错码的?首先,我们需要对数据码进行分组,也就是分成不同的Block,然后对各个Block进行纠错编码,对于如何分组,我们可以查看QR Code Spec的第页到页的Table-到Table-的定义表。注意最后两列:
Number of Error Code Correction Blocks :需要分多少个块。
Error Correction Code Per Blocks:每一个块中的code个数,所谓的code的个数,也就是有多少个8bits的字节。
举个例子:上述的Version 5 + Q纠错级:需要4个Blocks(2个Blocks为一组,共两组),头一组的两个Blocks中各个bits数据 + 各 9个bits的纠错码(注:表中的codewords就是一个8bits的byte)(再注:最后一例中的(c, k, r )的公式为:c = k + 2 * r,因为后脚注解释了:纠错码的容量小于纠错码的一半)
下图给一个5-Q的示例(因为二进制写起来会让表格太大,所以,我都用了十进制,我们可以看到每一块的纠错码有个codewords,也就是个8bits的二进制数)
组
块
数据
对每个块的纠错码
1 1 6 6
2 7 7 6
2 1 7 6 7
2 6 5 2
注:二维码的纠错码主要是通过Reed-Solomon error correction(里德-所罗门纠错算法)来实现的。对于这个算法,对于我来说是相当的复杂,里面有很多的数学计算,比如:多项式除法,把1-的数映射成2的n次方(0<=n<=)的伽罗瓦域Galois Field之类的神一样的东西,以及基于这些基础的纠错数学公式,因为我的数据基础差,对于我来说太过复杂,所以我一时半会儿还有点没搞明白,还在学习中,所以,我在这里就不展开说这些东西了。还请大家见谅了。(当然,如果有朋友很明白,也繁请教教我)
最终编码
穿插放置
如果你以为我们可以开始画图,你就错了。二维码的混乱技术还没有玩完,它还要把数据码和纠错码的各个codewords交替放在一起。如何交替呢,规则如下:
对于数据码:把每个块的第一个codewords先拿出来按顺度排列好,然后再取第一块的第二个,如此类推。如:上述示例中的Data Codewords如下:
块 1 6 6
块 2 7 7 6
块 3 7 6 7
块 4 6
我们先取第一列的:, , ,
然后再取第二列的:, , , , ,, ,
如此类推:, , , , ,, , ……… ……… ,,6,,,7,
对于纠错码,也是一样:
块 1
块 2
块 3
块 4 5 2
和数据码取的一样,得到:,,,,,,,,…… …… ,,,
然后,再把这两组放在一起(纠错码放在数据码之后)得到:
, , , , , , , , , , , , , 7, , , , , , , , , 7, 6, , , , , , 7, , , , , , , , , , , 6, , , , , , 6, , 6, , , , , , , , , 6, , , 7, , , , , , , , , , , , , 5, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , 2, , , , , , , , , , , , , , , ,
这就是我们的数据区。
Remainder Bits
最后再加上Reminder Bits,对于某些Version的QR,上面的还不够长度,还要加上Remainder Bits,比如:上述的5Q版的二维码,还要加上7个bits,Remainder Bits加零就好了。关于哪些Version需要多少个Remainder bit,可以参看QR Code Spec的第页的Table-1的定义表。
画二维码图
Position Detection Pattern
首先,先把Position Detection图案画在三个角上。(无论Version如何,这个图案的尺寸就是这么大)
Alignment Pattern
然后,再把Alignment图案画上(无论Version如何,这个图案的尺寸就是这么大)
关于Alignment的位置,可以查看QR Code Spec的第页的Table-E.1的定义表(下表是不完全表格)
下图是根据上述表格中的Version8的一个例子(6,,)
Timing Pattern
接下来是Timing Pattern的线(这个不用多说了)
Format Information
再接下来是Formation Information,下图中的蓝色部分。
Format Information是一个个bits的信息,每一个bit的位置如下图所示:(注意图中的Dark Module,那是永远出现的)
这个bits中包括:
5个数据bits:其中,2个bits用于表示使用什么样的Error Correction Level, 3个bits表示使用什么样的Mask
个纠错bits。主要通过BCH Code来计算
然后个bits还要与做XOR操作。这样就保证不会因为我们选用了的纠错级别和的Mask,从而造成全部为白色,这会增加我们的扫描器的图像识别的困难。
下面是一个示例:
关于Error Correction Level如下表所示:
关于Mask图案如后面的Table 所示。
Version Information
再接下来是Version Information(版本7以后需要这个编码),下图中的蓝色部分。
Version Information一共是个bits,其中包括6个bits的版本号以及个bits的纠错码,下面是一个示例:
而其填充位置如下:
数据和数据纠错码
然后是填接我们的最终编码,最终编码的填充方式如下:从左下角开始沿着红线填我们的各个bits,1是黑色,0是白色。如果遇到了上面的非数据区,则绕开或跳过。
掩码图案
这样下来,我们的图就填好了,但是,也许那些点并不均衡,如果出现大面积的空白或黑块,会告诉我们扫描识别的困难。所以,我们还要做Masking操作(靠,还嫌不复杂)QR的Spec中说了,QR有8个Mask你可以使用,如下所示:其中,各个mask的公式在各个图下面。所谓mask,说白了,就是和上面生成的图做XOR操作。Mask只会和数据区进行XOR,不会影响功能区。(注:选择一个合适的Mask也是有算法的)
其Mask的标识码如下所示:(其中的i,j分别对应于上图的x,y)
下面是Mask后的一些样子,我们可以看到被某些Mask XOR了的数据变得比较零散了。
Mask过后的二维码就成最终的图了。
好了,大家可以去尝试去写一下QR的编码程序,当然,你可以用网上找个Reed Soloman的纠错算法的库,或是看看别人的源代码是怎么实现这个繁锁的编码。
Matlab通信仿真系列——线性分组码之循环码、BCH码、RS码仿真
Matlab通信仿真系列:线性分组码的循环码、BCH码和RS码仿真
本节内容主要介绍了在Matlab中对循环码、BCH码和RS码进行仿真的方法和步骤。 首先,循环码是线性分组码的一种,其特征是码字在循环移位后仍保持在码组集合中。循环码通过反馈线性移位寄存器实现编码和伴随式计算,具有固有的代数结构,便于译码。Matlab提供了cyclpoly和cyclgen函数,用于生成循环码的多项式和相应的矩阵。 BCH码,特别是Bose-Chaudhuri-Hocquenghem码,是循环码的一个子类,包括二进制和非二进制编码。Matlab中,bchgenpoly、bchenc和bchdec函数分别用于生成BCH码的生成多项式、编码和解码。 RS码,由里德和索罗门提出的纠错能力强的多进制BCH码,其编码和译码过程在Matlab中通过rsenc和rsdec函数实现。通过选择合适的生成多项式,RS码可以有效检测和纠正错误。 此外,各部分的Matlab仿真源码也在文章中给出,供读者参考和实践。通过Matlab的这些工具,我们可以直观地进行线性分组码的编码和解码模拟,观察和比较不同码的性能。