[编码] 曼彻斯特编码与解码
常见的编码方式有以下几种,
1、NRZ(Not Return to Zero)不归零编码, 这是一种比较简单的编码方式,二进制数据“0”和“1”分别用高电平和低电平来表示,当1位数据传输完以后,信号电平
不返回零所以称为不归零编码。
2、BiPhase编码, 相比NRZ编码方式,这种编码稍微复杂了一点,他是这样规定,在每一位数据传输时,电平都会跳变(高电平变低电平,或者低电平变高电平),
同时当数据为“1”时(按照规定也可以是“0”),在数据位中间也会跳变。
3、曼彻斯特编码方式, 这种编码方式利用信号的边沿来表示二进制数据“0”和“1”,比如信号的上身沿表示“1”,下降沿表示“0”,而这种跳变一般发生在位帧的中间。
以上3中编码方式的波形如下图所示,
图1 常见编码方式波形图
曼彻斯特编码
假设信号的上升沿表示“0”, 下降沿表示“1”,同时假设数据的波特率为f, 那么一个位的时长为1/f,那么位帧的中间时长为1/2f,我们用T来表示这个半个位帧的时长。
有了以上的假设条件,那么曼彻斯特的编码流程如下,
1. 首先I/O口输出高电平。
2. 检查数据是否发送完成,如果是,跳到步骤7。
3. 检查下一个数据位的值。
4. 如果是“1”,调用发送1的函数ManchesterOne(T)。
5. 如果是"0",调用发送0的函数ManchesterZero(T)。
6. 返回到步骤2。
7. I/O输出为高电平并返回。
ManchesterOne(T)的执行过程
1. I/O 输出低电平。
2. 等待半位帧时间T。
3. I/O输出高电平。
4. 等待半位帧时间T。
5. 返回。
ManchesterZero(T)的执行过程
1. I/O 输出高电平。
2. 等待半位帧时间T。
3. I/O输出低电平。
4. 等待半位帧时间T。
5. 返回。
曼彻斯特解码
曼彻斯特解码过程要比编码复杂,一般的,解码过程有以下步骤:
1. 获取数据流的波特率(或者已知数据流的波特率)。
2. 同步数据流的时钟信号(实质是区分位帧边沿和半位帧边沿)。
3. 根据上面两步对数据流进行解码。
假设的条件和编码时一样,具体的实现步骤如下,
1. 将定时器的捕获中断设置为所有边沿(对于没有上升沿和下降沿同时捕获的MCU,需要在中断处理函数里改变捕获沿)。
2. 中断函数里处理捕获标志位和捕获值。
3. 开启定时器,捕获第一个边沿并丢弃。
4. 捕获下一个边沿,检查捕获值是否等于2T(T = 1/2f,其中f为数据流的波特率。
5. 重复步骤4,直到捕获值等于2T(此时就和数据流的时钟同步了)。
6. 读取当前I/O信号的电平值,并保存为当前位的值(0或者1)。
7. 捕获下一个边沿
a. 捕获值和T比较
b. 如果捕获值等于T
i. 捕获下一个边沿同时确定该捕获值也等于T(如果不等说明编码错误)
ii. 下一位的值和当前值相同
iii. 返回该值
c. 如果捕获值等于2T
i. 下一位的值和当前值相反
ii. 返回该值
d. 否则返回错误
8. 保存下一位的值到缓存
9. 如果接收到的数据位达到要求,返回对数据做进一步处理
10. 否则更新当前值(设置为下一位的值),重复步骤7
下图展示的是这种解码方式的一个示意图,
图2 曼彻斯特解码示意图
总结
总的来说,编码和解码还是比较简单的,曼彻斯特的典型应用是在RFID领域里标签读取。另外,上面假设上升沿表示“1”,下降沿表示“0”,对于相反的情况(即上升
沿表示“0”,下降沿表示“1”),解码过程处理不同的地方在步骤6,假如同步到数据流的时钟,对于上升沿表示“1”,下降沿表示“0”的情况,当前位的值和读取到的I/O
的值相同;对于上升沿表示“0”,下降沿表示“1”的情况,当前位的值和读取到的I/O的值相反。
[编码] 曼彻斯特编码与解码相关推荐
- 一篇文章让你读懂-曼彻斯特编码
目录 写在前面的话 1 what?什么是曼彻斯特编码 2 how?怎么使用曼彻斯特编码 2.1 曼彻斯特的编码: 2.2 曼彻斯特的译码: 3 why?为什么推荐曼彻斯特编码?这种编码方式的优缺点 写 ...
- 嵌入式系统——曼彻斯特编码
1. 曼彻斯特编码 曼彻斯特编码是一种双相编码,即每个码元均用两个不同相位的电平信号表示,用电平跳变的方法表示"0"或"1". 传输"0" ...
- 几种编码方式(RZ、NRZ、NRZI、曼彻斯特编码)
此文转自:http://blog.sina.com.cn/s/blog_78e87ba10102wj9g.html 在数字电路中,组成一连串信息的基元就是0和1,无论是在CPU.DSP.MCU甚至是个 ...
- 曼彻斯特编码|查分曼彻斯特编码|不归零码
从网上搜集的资料 不是我原创 曼彻斯特编码(Manchester Encoding),也叫做相位编码(PE),是一个同步时钟编码技术,被物理层使用来编码一个同步位流的时钟和数据.曼彻斯特编码被用 ...
- RZ、NRZ、NRZI、曼彻斯特编码
转自:http://blog.sina.com.cn/s/blog_78e87ba10102wj9g.html 在数字电路中,组成一连串信息的基元就是0和1,无论是在CPU.DSP.MCU甚至是个数字 ...
- RZ、NRZ、NRZI、曼彻斯特编码(针对)
(2016-09-26 20:05:56) 正在上传-重新上传取消转载▼ 标签: 杂谈 it 分类: Electronic 在数字电路中,组成一连串信息的基元就是0和1,无论是在CPU.DSP.MC ...
- 数据通信基础 - 数据编码(曼彻斯特编码 和 差分曼彻斯特编码)
文章目录 1 概述 2 常见编码方案 2.1 曼彻斯特编码 和 差分曼彻斯特编码 2.2 4B/5B 编码 2.3 各种编码效率 3 扩展 3.1 单极性码 和 极性码 3.2 双极性码 3.3 归零 ...
- 曼彻斯特编码,差分曼彻斯特编码和NRZI编码
曼彻斯特编码 曼彻斯特编码(Manchester Encoding),也叫做相位编码( Phase Encode,简写PE),是一个同步时钟编码技术,被物理层使用来编码一个同步位流的时钟和数据. 在曼 ...
- 不归零法编码、曼彻斯特编码和差分曼彻斯特编码
数字信号和数位化编码的数据之间存在着自然的联系.数位化存储的数据表现为0和1的序列.由于数字信号能够在两个恒量之间交替变换,所以可以简单地把0赋予其中的一个恒量,而把1赋予另一个恒量.这里恒量的具体取 ...
最新文章
- 佛经上181条做人的道理
- 重新学习的HTTP协议
- Apache + Tomcat 配置多个应用
- 一加到1亿。C语言_可能是今年最难选的2部手机:小米10详细对比一加8T
- 分布式理论(3):Paxos Made Simple
- libz mysql_Docker和Mysql:libz.so.1:无法打开共享对象文件:权限被拒绝
- mysql没有group by_MySQL:不在GROUP BY中
- 深度学习(二)神经网络中的卷积和反卷积原理
- 搭建完全分布式的hadoop[转]
- atitit 每季度日程表 每季度流程 v3 qaf.docx Ver history V2 add diary cyar data 3 cate V3 fix detail 3cate ,
- 无线通信与编码_MATLAB实现Turbo码的仿真_含仿真代码_Dr.WuYufei
- 直线端点画垂线lisp_AutoCAD中利用AutoLISP开发小程序,实现快速画直线对称中心线...
- 【Paper Reading】Improving Availability of Vertical Federated Learning Relaxing Inference on Non-overl
- Unity3D手机斗地主游戏开发实战(01)_发牌功能实现
- 进了小公司的应届程序员如何翻身进入大公司?
- directive 自定义指令
- 听歌识曲java_Android自定义View之继承扩展(仿网易云音乐听歌识曲)
- 1010001b 1101110b怎么用计算机,计算机组成原理计算题
- Cadence(virtuoso)集成电路设计软件基本操作——库和库文件
- nvenc vs x264 对比(2)