嵌入式基础:不归零编码(Not Return to Zero, NRZ)-程序员宅基地

转载于博文:《不归零编码NRZ》,非常好的一篇基础介绍文章,通俗易懂!

前言

    嵌入式一些必要的基础知识,忘了就得补一补:)。

不归零编码:

    1)信号电平的一次反转代表1,电平不变化表示0,并且在表示完一个码元后,电压不需回到0;
  2)不归零制编码是效率最高的编码;
  缺点:存在发送方和接收方的同步问题。

  极性不归零码,无电压(也就是元电流)用来表示"0",而恒定的正电压用来表示"1"。每一个码元时间的中间点是采样时间,判决门限为半幅度电平(即0.5)。也就是说接收信号的值在0.5与1.0之间,就判为"1"码,如果在O与0.5之间就判为"0"码。每秒钟发送的二进制码元数称为"码速"。
  双极性不归零码,"1"码和"0"码都有电流,但是"1"码是正电流,"0"码是负电流,正和负的幅度相等,故称为双极性码。此时的判决门限为零电平,接收端使用零判决器或正负判决器,接收信号的值若在零电平以上为正,判为"1"码;若在零电平以下为负,判为"0"码。
  以上两种编码,都是在一个码元的全部时间内发出或不发出电流(单极性),以及发出正电流或负电流(双极性)。每一位编码占用了全部码元的宽度,故这两种编码都属于全宽码,也称作不归零码NRZ (Non Return Zero)。如果重复发送"1"码,势必要连续发送正电流;如果重复发送"0"码,势必要连续不送电流或连续发送负电流,这样使某一位码元与其下一位码元之间没有间隙,不易区分识别。归零码可以改善这种状况。
 

RZ、NRZ与NRZI编码

    RZ编码(Return-to-zero Code),即归零编码。
    在RZ编码中,正电平代表逻辑1,负电平代表逻辑0,并且,每传输完一位数据,信号返回到零电平。也就是说,信号线上会出现3种电平:正电平、负电平、零电平:
RZ编码(Return to Zero)
    从图上就可以看出来,因为每位传输之后都要归零,所以接受者只要在信号归零后采样即可,这样就不在需要单独的时钟信号. 实际上,RZ 编码就是相当于把时钟信号用归零编码在了数据之内。这样的信号也叫做自同步(self-clocking)信号。
    这样虽然省了时钟数据线,但是还是有缺点的,因为在 RZ 编码中,大部分的数据带宽,都用来传输“归零”而浪费掉了。 那么,如果我们去掉这个归零步骤,NRZ编码(Non-return-to-zero Code)就出现了。
NRZ编码(Not Return to Zero)
    这样,浪费的带宽又回来了,不过又丧失宝贵的自同步特性了,貌似我们又回到了原点,其实这个问题也是可以解决的,不过待会儿再讲,先看看什么是NRZI:
    NRZI编码(Non-Return-to-Zero Inverted Code)和NRZ的区别就是NRZI用信号的翻转代表一个逻辑,信号保持不变代表另外一个逻辑。 USB传输的编码就是 NRZI 格式,在 USB 中,电平翻转代表逻辑0,电平不变代表逻辑1(NRZI遇0翻转,遇1不变): 
NRZI编码(Not Return to Zero Inverted Code)
    翻转的信号本身可以作为一种通知机制,而且可以看到,即使把 NRZI 的波形完全翻转,所代表的数据序列还是一样的,对于像 USB 这种通过差分线来传输的信号尤其方便。
    现在再回到那个同步问题
    NRZ和 NRZI都没有自同步特性,但是可以用一些特殊的技巧解决。比如,先发送一个同步头,内容是 0101010 的方波,让接受者通过这个同步头计算出发送者的频率,然后再用这个频率来采样之后的数据信号,就可以了。
    在USB中,每个USB数据包,最开始都有个同步域(SYNC),这个域固定为 0000 0001,这个域通过NRZI编码之后,就是一串方波(复习下前面:NRZI遇0翻转遇1不变),接受者可以用这个 SYNC 域来同步之后的数据信号。此外,因为在 USB的NRZI编码下,逻辑0会造成电平翻转,所以接受者在接受数据的同时,根据接收到的翻转信号不断调整同步频率,保证数据传输正确.
    但是,这样还是会有一个问题,就是虽然接受者可以主动和发送者的频率匹配,但是两者之间总会有误差。假如数据信号是 1000 个逻辑1,经过 USB 的 NRZI 编码之后,就是很长一段没有变化的电平,在这种情况下,即使接受者的频率和发送者相差千分之一,就会造成把数据采样成 1001 个或者 999 个 1了。   
    USB 对这个问题的解决办法,就是强制插 0,也就是传说中的 bit-stuffing,如果要传输的数据中有 7 个连续的 1,发送前就会在第 6 个 1 后面强制插入一个 0,让发送的信号强制出现翻转,从而强制接受者进行频率调整。接受者只要删除 6个连续1之后的 0,就可以恢复原始的数据了。 
    既然说编码,那就顺便把另一种极常用的编码也说一下吧:曼彻斯特编码。曼彻斯特(Manchester)码是一种双相码,用高电平到低电平的转换边表示0,而用低电平到高高电平的转换边表示1。
    注:以上关于电平的表示,具体环境或者不同教材给出的规定可能不同,但是原理相同!
 
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/fzy0201/article/details/78314051

智能推荐

9.任务段(TSS)_tss段-程序员宅基地

文章浏览阅读1k次。在调用门、中断门与陷阱门中,一旦出现权限切换,那么就会有堆栈的 ,切换。而且,由于CS的CPL发生改变,也导致了SS也必须要切换。切换时,会有新的ESP和SS(CS是由中断门或者调用门指定)这2个值从哪里来的呢?答案: TSS (Task-state segment ),任务状态段TSS就是一块内存,大小104个节不要把TSS与任务切换联系到一起TSS的意义就在于可以同时换掉一堆寄存器..._tss段

学习使用简单的php-程序员宅基地

文章浏览阅读47次。配置文件在:/etc/php5/$中,不同的模式含有自己的php.ini配置文件。php可以运行于多种模式:cgi、fastcgi、cli、web模块模式等4种;我现在使用的模式是cli模式,这里进行一次测试。在ubuntu下需要安装sudo apt-get install php5-devphp应该是php5的链接。修改config.m4文件:..._php 简单项目 为学习用

解决ios,iphone的safari浏览器h5自动放大,input获得焦点页面被放大_ios浏览器小于15像素的时候会进行放大-程序员宅基地

文章浏览阅读1.2k次。得到焦点之前设置font-size:16像素。_ios浏览器小于15像素的时候会进行放大

SpringBootAdmin 服务搭建记录_spring boot admin client与spring boot admin server都-程序员宅基地

文章浏览阅读520次。搭建过程网上很多, 主要是各个依赖的版本, 导致的各种 jar 包问题, 此处记录下我的 pom 和 yml 文件目录SpringAdmin server pom文件1. SpringAdmin server 配置(1) pom文件<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-p..._spring boot admin client与spring boot admin server都配置spring-boot-starter-

python3中图像识别的应用open-CV库_python open-cv 小图搜大图-程序员宅基地

文章浏览阅读1.4k次。python3中图像识别的应用open-CV库什么是open-CV?OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉库,可以运行在Linux、Windows、Android和Mac OS操作系统上。它轻量级而且高效——由一系列 C 函数和少量 C++ 类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法(百度百科)。代码:定义图像识别的类import cv2import osfrom PIL import ImageGr_python open-cv 小图搜大图

Linux下安装anaconda3_anaconda do you wish to process the-程序员宅基地

文章浏览阅读1w次,点赞2次,收藏19次。1.下载anaconda清华大学开源软件镜像站anaconda下载地址:https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/2.安装Anaconda$ sudo sh Anaconda3-5.3.0-Linux-x86_64.sh [sudo] andrew 的密码: Welcome to Anaconda3 5.3.0In o..._anaconda do you wish to process the

随便推点

k8s 安装 kubernetes-dashboard-2.X_kubernetes 2.x-程序员宅基地

文章浏览阅读10w+次。安装使用 k8s 原生的 web图形化界面_kubernetes 2.x

saltstack自动化运维管理——saltstack之salt远程执行_salt 远程执行命令-程序员宅基地

文章浏览阅读287次。目录一、Salt命令的构成1、target2、funcation3、arguments二、编写远程执行模块1、编写模块2、了解YAML语法3、SLS4、配置管理(1)方法一(2)方法二(3)方法三(4)一些例子一、Salt命令的构成Salt命令由三个主要部分构成:salt '<target>' <function> [arguments]1、targettarget: 指定哪些minion, 默认的规则是使用glob匹配minion id。salt '*' test._salt 远程执行命令

关于协方差,协方差矩阵的个人理解_协方差矩阵的ρ-程序员宅基地

文章浏览阅读1.9k次,点赞3次,收藏10次。文章目录协方差协方差定义举例说明方差相关系数协方差矩阵(covariance matrix)举例说明数学符号表示协方差矩阵的应用马氏距离数学符号定义PCA降维使用sklearn中的np.cov遇到的坑协方差协方差定义协方差(Covariance)在概率论和统计学中用于衡量两个变量的总体误差。设有随机变量XXX和随机变量YYY,则协方差定义为:Cov(X,Y)=E((X−E[x])(Y−E[Y]))=E((Y−E[Y])(X−E[X]))Cov(X,Y)=E((X-E[x])(Y-E[Y]))_协方差矩阵的ρ

【LaTeX】LaTeX/Algorithms 伪代码_latex algorithm return-程序员宅基地

文章浏览阅读1.5k次,点赞2次,收藏4次。algorithmic和algorithmicx介绍下algorithmic和algorithmicx,这两个包很像,很多命令都是一样的,只是algorithmic的命令都是大写,algorithmicx的命令都是首字母大写,其他小写(EndFor两个大写)。下面是algorithmic的基本命令。\STATE <text>\IF{<condition>} \STATE{<text>} \ENDIF\FOR{<condition>} \STATE{_latex algorithm return

Linux和Windows操作系统,MySQL数据库备份(导出)和恢复(导入)_.nb3文件如何打开-程序员宅基地

文章浏览阅读1.3k次。方式一:通过终端执行命令(适用于Linux操作系统)备份:将DATABASENAME数据库备份到/opt目录生成DATABASENAME.db备份文件mysqldump -uUSERNAME-pPASSWORD--routines --databases DATABASENAME> /opt/DATABASENAME.db登录MySQL:mysql -uUSERNAME -pPASSWORD删除数据库:drop database DATABASENAME;创建数据库:crea..._.nb3文件如何打开