Frm: http://blog.sina.com.cn/s/blog_78e87ba10102wj9g.html

在数字电路中,组成一连串信息的基元就是0和1,无论是在CPU、DSP、MCU甚至是个数字计数器中,数字电路在其中能够处理的信息也只有0和1,而对于任何外界的信息,计算机都能通过两个量来描述,那就是0和1。而对于数字通信来说,想要用0和1来传递你想传达的信息,则必须要通过一种特殊的约定来进行同步,这种约定就是编码。两台设备要想进行有线通信,最终都是将想要传达的信息转变成一串比特流,进而在传输线上进行传输。常规数字通信为数据线+时钟线的形式,但对于高速信号而言,时钟线和数据线长度的稍稍偏差,就会造成接收端无法满足数据采样的建立时间,故会导致数据出错。而最好的方式就是将时钟信号和数据信号用同一根线来传递,所以出现了一些比较特殊的编码,是的时钟和数据能够融合在一起。下面主要讨论5中常用的编码方式:

1.RZ(Return Zero Code)编码

       RZ编码也成为归零码,归零码的特性就是在一个周期内,用二进制传输数据位,在数据位脉冲结束后,需要维持一段时间的低电平。举个图例吧:

图1 RZ码示意图
图中红色的线表示数据,只占据一部分的周期,剩下周期部分为归零段。而归零码而分为单极性归零码和双极性归零码,图1表示的是单极性归零码,即低电平表示0,正电平表示1。对于双极性归零码来说,则是高电平表示1,负电平表示0。如下图所示:
图2 双极性RZ码示意图

这种编码方式虽说能够同时传递时钟信号和数据信号,但由于归零需要占用一部分的带宽,故传输效率也就收到了一定的限制,假设数据传输时间为t,一个周期时间为T,则这种传输效率η=t/T。
 

2.NRZ(Non Return Zero Code)编码

       NRZ编码也成为不归零编码,也是我们最常见的一种编码,即正电平表示1,低电平表示0。它与RZ码的区别就是它不用归零,也就是说,一个周期可以全部用来传输数据,这样传输的带宽就可以完全利用。一般常见的带有时钟线的传输协议都是使用NRZ编码或者差分的NRZ编码。因此,使用NRZ编码若想传输高速同步数据,基本上都要带有时钟线,因为本身NRZ编码无法传递时钟信号。但在低速异步传输下可以不存在时钟线,但在通信前,双方设备要约定好通信波特率,例如UART。
图3 NRZ编码示意图
 

3.NRZI(Non Return Zero Inverted Code)编码

       NRZI编码的全称为反向不归零编码,这种编码方式集成了前两种编码的优点,即既能传输时钟信号,又能尽量不损失系统带宽。对于USB2.0通信的编码方式就是NRZI编码。其实NRZI编码方式非常的简单,即信号电平翻转表示0,信号电平不变表示1。例如想要表示00100010(B),则信号波形如下图所示:
图4 NRZI编码示意图
由图可以看到,当电平状态发生变化时,表示的数据为0。在传输的数据中,很少出现全1的状态,故接收端可以根据发送端的电平变化确定采样时钟频率。但是有时候依然会出现数据为全1的状态,也就是说信号线一直保持一个状态,这个时候时钟信号就无法传输,接收端就无法同步时钟信号,这该如何解决呢?解决方式就是在一定数量的1之后强行插入一个0,就是说若信号线状态一直持续一段时间不变的话,发送端强行改变信号线的状态,接收端则只需要将这个变化忽略掉就可以了。在USB2.0的协议中规定为传输7个1则在数据中插入一个0。例如有一段数据为:1111 1111 (B)要发送,则整个传输线上的电平状态是这样的:
图5
 
5.曼彻斯特编码
曼彻斯特编码方式和NRZI编码十分相似,只不过它是利用信号的跳变方向来决定数据的。在位中间,信号由高向低跳变表示数据0,信号由低向高跳变表示数据1。举个图例吧,若要表示数据1001 1010(B),则信号波形图如下图所示:

图6 曼彻斯特编码示意图
 
       曼彻斯特编码方式也如前面所说,虽然传输了时钟信号,但也损失了一部分的带宽,主要表现在相邻相同数据上。但对于高速数据来说,这种编码方式无疑是这几种编码方式中最优的,相比NRZI编码,曼彻斯特编码不存在长时间信号状态不变导致的时钟信号丢失的情况,所以在这种编码方式在以太网通信中是十分常用的。
 
       总结了以上这几种编码方式,其实最终体现的都是一个问题,就是如何将时钟信号传递出去,对于任何数字通信而言,时钟信号都是首先要考虑的问题,因为同步通信在接收端对数据进行采样时,都是利用发送端发出的时钟信号作为采样基准源,只有保证优质的数据信号和时钟信号被传送出来,才能够保证采样端不会在亚稳态区中进行采样而导致数据的错误

RZ、NRZ、NRZI、曼彻斯特编码的更多相关文章

  1. 编码(RZ NRZ NRZI)

    Frm: https://jingyan.baidu.com/album/39810a23addccbb637fda66a.html?picindex=1 RZ 编码(Return-to-zero C ...

  2. 物理层(PHY)

    一.物理层的定义 物理层是OSI的第一层,它虽然处于最底层,却是整个开放系统的基础.物理层为设备之间的数据通信提供传输媒体及互连设备,为数据传输提供可靠的环境.如果您想要用尽量少的词来记住这个第一层, ...

  3. RFID 基础/分类/编码/调制/传输

    不同频段的RFID产品会有不同的特性,本文详细介绍了无源的感应器在不同工作频率产品的特性以及主要的应用. 目前定义RFID产品的工作频率有低频.高频和甚高频的频率范围内的符合不同标准的不同的产品,而且 ...

  4. 4B/5B编码原理

    4B/5B编码原理 什么是4B/5B编码? 4B/5B编码是百兆以太网(即快速以太网)中线路层编码类型之一,就是用5bit的二进制数来表示4bit二进制数,映射方式如下表所示: 为什么要进行4B/5B ...

  5. RFID编码

    信号编码系统包括信源编码和信道编码两大类,器作用是把要传输的信息尽可能的与传输信道相匹配,并提供对信息的某种保护以防止信息受到干扰.信源编码与信源译码的目的是提高信息传输的有效性以及完成模数转换等:信 ...

  6. 详解串行通信协议及其FPGA实现

    前言 好久没更新博客了,这篇文章写写停停,用了近一周的时间,终于写完了.本篇文章介绍,串口协议数据帧格式.串行通信的工作方式.电平标准.编码方式及Verilog实现串口发送一个字节数据和接收一个字节数 ...

  7. 计算机网络学习笔记NO.2 物理层

    2.1 基本概念 2.1.1 物理层概念 物理层解决如何在连接各种计算机的传输媒体上传输数据比特流,而不是指具体的传输媒体. 物理层主要任务:确定与传输媒体接口有关的一些特性(定义标准) 机械特性:定 ...

  8. iOS开发之音频口通信-通过方波来收发数据

    之前做过的项目有需要通过音频口通信用方波来收发数据,由于这方面的资料比较少,下面就介绍下其原理,希望能给大家帮助. 一. 音频通信简介大家应该都知道支付宝声波支付和拉卡拉吧,它们都是利用手机的音频口( ...

  9. (二)再议MII、RMII、GMII接口

    概述:         MII (Media Independent Interface(介质无关接口)或称为媒体独立接口,它是IEEE-802.3定义的以太网行业标准.它包括一个数据接口和一个MAC ...

随机推荐

  1. centos svn 安装

    #检查是否安装了低版本的SVN [root@zck /]# rpm -qa subversion #卸载旧版本SVN [root@zck modules]# yum remove subversion ...

  2. NGINX-二级域名

    先给二级域名添加到 DNS 解析再配置 nginx server { #侦听80端口 listen 80; #定义使用 www.nginx.cn访问 server_name ~^(?<subdo ...

  3. POJ3641 Pseudoprime numbers (幂取模板子)

    给你两个数字p,a.如果p是素数,并且ap mod p = a,输出“yes”,否则输出“no”. 很简单的板子题.核心算法是幂取模(算法详见<算法竞赛入门经典>315页). 幂取模板子: ...

  4. Cocos2d-x的Android配置以及相关参考文档

    关于Win7下配置Coco2d-x的Android开发环境,可以参考子龙山人的博客:Setting Up Cocos2d-x Android Development on Win7,这篇文章写得很详细 ...

  5. ZanUI-WeApp -- 一个颜值高、好用、易扩展的微信小程序 UI 库

    ZanUI-WeApp -- 一个颜值高.好用.易扩展的微信小程序 UI 库:https://cnodejs.org/topic/589d625a5c8036f7019e7a4a 微信小程序之官方UI ...

  6. vue 各种 import 引入

    vue 各种 import 引入: https://www.jianshu.com/p/784e51ec68ce 阮一峰:http://es6.ruanyifeng.com/#docs/module

  7. matlab中struct创建方法

    MATLAB中struct创建方法可分为:直接创建法和struct()函数创建法 (1)直接创建: 直接定义字段,像使用一般matlab变量一样,不需要事先声明,支持动态扩充.下面创建一个Studen ...

  8. Web开发进阶

    1.可靠性 可扩展性,服务降级,负载均衡   应用扩展 1.垂直扩展,方式:提升机器硬件,缺点,成本昂贵,扩展能力有限 2.水平扩展,方式:增加节点,优点:升级过程平花,硬件成本低,理论上无线扩展,确 ...

  9. 安装 sysbench的 报错 /usr/bin/ld: cannot find -lmysqlclient_r 解决办法

    首先你需要找到这个库的位置 一般找的话需要将lib 给加上(注意:我这里是 -lmysqlclient_r 的报错,于是我找就找 libmysqlclient_r ) find / -name lib ...

  10. 转帖 eclipse Web项目WebContent目录修改

    最近在做Web 项目时,新建了一个WEB 项目,如webdemo,eclipse默认的build路径为build,WEB-INF存放于WebContent下面,今改了一个build路径和WebCont ...