tag 标签: 编码

相关博文
  • 热度 4
    2018-2-27 13:25
    1591 次阅读|
    0 个评论
    为了提高串行数据传输的可靠性,现在很多更高速率的数字接口采用的是对数据进行编码后再做并串转换的方式。编码的方式有很多,如 8b/9b 编码、 8b/10b 编码、 64b/66b 编码、 128b/130b 编码等,下面我们以最流行的 ANSI 8b/10b 编码为例进行一下介绍。 在 ANSI 8b/10b 编码方式中, 8 比特的数据先通过相应的编码规则转换成 10 比特的数据,然后再进行并串转换;接收端收到信号后先把串行数据进行串并转换得到 10 比特的数据,然后再通过 10 比特到 8 比特的解码得到原始传输的 8 比特数据。因此,如果发送端并行侧的数据速率是 8bit*100Mb/s ,通过 8b/10b 编码和并串转换后的串行侧的数据速率就是 1bit*1Gb/s 。 8b/10b 编码方法最早由 IBM 发明,后来成为 ANSI 标准的一部分( ANSI X3.230-1994, clause 11 ),并在通信和计算机总线上广泛应用。 数据经过 8b/10b 编码后有几个最大的好处: v 有足够多的跳变沿,可以从数据里进行时钟恢复。正常传输的数据里可能会有比较长的连续的 0 或者连续的 1 ,而进行完 8b/10b 编码后,其编码规则保证了编码后的数据流里不会出现超过 5 个的连续的 0 或 1 ,信号里会出现足够多的跳变沿,因此可以采样嵌入式的时钟方式,即接收端可以从数据流里用 PLL 电路直接恢复时钟,不需要专门的时钟传输通道。 v 直流平衡,可以采用 AC 耦合方式。经过编码后数据里不会出现连续的 0 或者 1 了,但是还是有可能在某个时间段内 0 或者 1 的数量偏多一些。从上面的编码表中我们可以看到同一个 Byte 对应有正、负两组 10bit 的编码,一个编码里 1 的数量多一些,另一个编码里 0 的数量多一些。数据在对当前的 Byte 进行 8b/10b 编码传输时,会根据前面历史传输的数据中正负 bit 的数量来选择使用哪一组编码,从而可以保证总线上正负 bit 的数量在任何时刻基本都是平衡的,也就是直流点不会发生大的变化。直流点平衡以后,在信号传输的路径上我们就可以采用 AC 耦合方式(最常用的方法是在发送端或接收端串接隔直电容),这样信号对于收发端的地电平变化和共模噪声的抵抗能力进一步增强,可以传输更远的距离。采用 AC 耦合方式的另一个好处是收发端在做互连时不用太考虑直流偏置点的互相影响,互连变得非常简单,对于热插拔的支持能力也更好。 v 有利于信号校验。很多高速信号在做传输时为了保证传输的可靠性要对接收到的信号进行检查以确认收到的信号是否正确。在 8b/10bit 编码表里,原始的 8bit 数据总共有 256 个组合,即使考虑到每个 Byte 有正负两个 10bit 编码也只需要用到 512 个 10bit 的组合。而 10bit 的数据总共可以有 1024 个组合,因此有大约一半的 10bit 组合是无效的数据,接收端一旦收到这样的无效组合就可以判决数据无效。另外,前面我们介绍过数据在传输过程中是要保证直流平衡的,一旦接收端收到的数据中发现违反直流平衡的规则,也可以判决数据无效。因此采用 8b/10b 编码以后数据本身就可以提供一定的信号校验功能。不过需要注意的是,这种校验不是足够可靠,因为理论上还是可能存在有几个 bit 在传输中发生了错误但是结果仍然符合 8b/10b 编码和规则和直流平衡原则。因此,很多使用 8b/10b 编码的总线都还会在上层协议上再做相应的 CRC 校验(循环冗余校验)。 v 可以插入控制字符。在 10bit 数据可以表示的 1024 个组合中,除了 512 个组合用于对应原始的 8bit 数据以及一些不太好的组合(比如 0b1100000000 这样信号里有太长的连续 0 或者 1 而且明显 0 、 1 的数量不平衡)以外,还有一些很特殊的组合。这些特殊的组合可以用来在数据传输过程中做为控制字符插入。这些控制字符不对应特定的 8bit 数据,但是在有些总线应用里可以代表一些特殊的含义。比如 K28.5 码型,其特殊的码型组合可以帮助接收端更容易判别接收到的连续的 10bit 数据流的符号边界,所以在一些总线的初始化阶段或数据包的包头都会进行发送。还有一些特殊的符号用于进行链路训练、标记不同的数据包类型、进行收发端的时钟速率匹配等。 综上所述,要把并行的信号通过串行总线传输,一般需要对数据进行并串转换。为了进一步减少传输线的数量和提高传输距离,很多高速数据总线采用嵌入式时钟和 8b/10b 的数据编码方式。 8b/10b 编码由于直流平衡、支持 AC 耦合、可嵌入时钟信息、抗共模干扰能力强、编解码结构相对简单等优点,在很多高速的数字总线如 FiberChannel 、 PCI-E 、 SATA 、 USB3.0 、 DisplayPort 、 XAUI 、 RapidIO 等接口上得到广泛应用。
  • 热度 6
    2013-11-28 23:25
    815 次阅读|
    5 个评论
    做到代码的静态检查, 代码版本的控制。 慢慢使用MISRA2004+相应的文档规范, 保证新代码的质量与版本控制。   如何做到文档与代码同步呢? 必须先整理出文档, 然后再修改? 这或许是,唯一能够保证文档代码同步的方式。 如果写完代码后再来整理文档, 不说能否记得已经修改的要点, 如果还有其他事情要做, 可能就会把文档的事情,给放在不知道哪里了。   对于在单片机上编程, 要注意局部变量的大小, 但是,如果把大的局部变量都用全局变量或者局部静态变量来替换, 又会面临一个问题, 如果初始化了,会在加载时拷贝到data段,分配好内存空间,即一直占用内存空间, 如果没有初始化,会加载到bss段,没有分配内存空间,即使用时分配内存空间, 如果这里,变量是没有初始化的静态变量(全局变量),在运行中分配时更会造成想不到的问题。 (注:这里考虑多了,查看了Keil编译后的map文件发现bss段(没有初始化的全局变量)的变量也是已经分配内存空间了)   所以在嵌入式编程中, 尽量避免没有初始化的全局变量(局部静态变量)。   不能陷入局部的错误查找中, 要能从程序整体上分析,出现错误的原因。
  • 热度 2
    2012-5-10 16:38
    960 次阅读|
    0 个评论
    大家好,前面我们给大家介绍了无线通信中 FEC 编码原理( 1 )和( 2 ),今天继续献上 FEC 编码原理及评价( 3 ),关于不同 FEC 种类的评价,希望对大家有所帮助~   对于不同 FEC 的评价   这里我们介绍一些典型的 FEC 的应用并且做出一些解释和评价。我们根据不同的使用将这一部分分为两块。   1. 互联网中的 FEC   这一部分,我们主要关注三个 FEC 的例子。   ( 1 ) Hamming 码   Hamming 码是由 Hamming 在 1950 年最初使用的,它是一种线性的纠错码,能自动监测出两个同时出现的比特错误并且纠正其中一个。这要比基础的奇偶校验码有效。   Hamming 码不仅有很好的性能,而且它的编码和解码的电路都非常的简单并且易于实施。所以,它被广泛应用于小的电脑中。但是, Hamming 码不能用于两个或两个以上错误比特的纠正。   Hamming 码的例子   2 ) CRC 码   CRC ,是 Cyclic Redundancy Check 的缩写,是通信系统中最普遍也是最强大的错误检测码。它根据信息字段的长度而设计,而校验字段的长度可以随意选择。   利用 CRC 进行的错误检测的过程可以简单的描述为:发送端产生一段 k 比特的二进制码序列,之后根据特定的规则得出 CRC 码并附在原始码字后面。这个具有 (k+r) 比特的二进制码序列就可以被发送了。传输过程之后,接收端根据原始码与 CRC 码之间的规则检测到其中是否有错误。     CRC 在互联网及其他领域的应用非常广泛,因为它具有很强的错误检测能力,低成本并且易于实现。 CRC 不能检测到错误的概率仅为 0.0047% 或更少。对于性能和成本来讲, CRC 要比奇偶校验和算术检测要好的多。但是, CRC 也很有可能会对于不同的信息产生相同的 CRC 码,尤其是当大量信息同时出现的时候。在这种情况下, CRC 将会出现错误并且对于接收方重建原始信息增加了困难。例如,接收方必须要逐个比特进行检查来避免错误,这样会增加很多处理时间,所以,我们需要高性能的发送端和接收端。还有, CRC 显然并不适合只具有低端 CPU 的设备。 CRC 码的计算   ( 3 ) BCH 码   BCH 码,最初由 Bose 、 Ray-Chaudhuri and Hocquenghem 提出,是 Cyclic 码的另一种重要分支。它具有纠正多个错误的能力。 BCH 码有严格的代数理论,是一种被最深入研究的编码方式。   BCH 码的理论优势就是它的解码非常简便,通过被称为综合解码的代数方法来进行解码。这种方法只需要非常简单的电子硬件来完成这一任务,并不需要电脑。这样,解码的设备就可以做的很小并且需要很少的能源。所以,在 BCH 码的帮助下,我们可以利用低端的 CPU 和小型的设备高效的完成错误纠正,比如我们的手机。   无线通信中FEC编码原理及评价(2)请参考: http://forum.eet-cn.com/BLOG_ARTICLE_11978.HTM 未完待续 文/纪桐     系列文章列表: 无线通信中FEC 编码原理及评价(1) 无线通信中FEC 编码原理及评价(2) 无线通信中FEC 编码原理及评价(3) 无线通信中FEC 编码原理及评价(4)  
  • 热度 5
    2012-5-10 16:37
    1151 次阅读|
    3 个评论
    大家好,前面我们给大家介绍了无线通信中FEC编码原理,今天继续献上FEC 编码原理及评价(2),希望对大家有所帮助~   二. FEC的原理及种类    1. FEC的原理   简单的说,FEC是一种为数据传输而设计的差错控制技术。发送端在需要传输的数据中加入冗余数据。接收端则根据这些冗余数据检测出整个数据中的误码。当接收端检测出码字中的错误,立即将它们改正。   FEC利用了Shannon-Hartley定理中给出的传输速率(或信息比特速率)R b 和信道容量R max 的区别。在一段足够长的码字中使用FEC,付出了增加传输延迟的代价来降低误码率P b 。增加的延迟主要来自这几方面:需要组合将要传送的码字,接收到数据后需要花时间来计算从而检测出错误并改正。然而,差错控制的好处往往要比由于处理FEC所带来的延迟重要的多。      2. FEC工作机制     上图表示的是利用了FEC的整个通信过程。在最开始阶段,信源将产生一串信息比特。在编数据在编码器中编码,在这个过程中,原始数据的前面将会加入(n- k)个冗余比特(也称作校验比特)。n表示整个数据的比特数,k表示原始信息的比特数。冗余码,也称作纠错码,与原始信息有一种特殊的计算关系,这样接收 端就可以根据冗余码来纠正数据中的错误。这里的一个很重要的参数就是冗余度,表示为(n-k)/n。在特定的带宽中,整个传输数据的长度是有限制的。也就 是说,冗余度越高,数据中的信息含量就越少。然而,当冗余度到达一定高度时,就可以保证接收端接收信息的准确性。之后,经过调制器(modulator) 的数据就变成了可以发送到信道中的信号。经过信道的传输后,接收端收到信号,解调信号使其从模拟信号还原为数字格式。由于冗余码和原始的信息存在特定的关 系,解码器(decoder)则可以检测其中的错误并得到原始的比特。最后将这些数字信息传给信宿。   3. FEC的种类   FEC码主要有两个种类,块状码和卷积码。   块状码主要作用于固定长度的数据块(包)或者预先定义长度的符号。一段数据含有n比特,其中有k个信息比特,剩下的就是冗余比特。实际操作中块状码可以被 解码到特定的长度,并且冗余码只与统一块中的信息码相关。块状码也有许多类型,比如Reed-Solomon编码,Golay,,BCH,多维度校验,和 Hamming码。   卷积码主要作用于随即长度的比特或符号流。与块状码不同,卷积码不是只与在同一块中的信息码相关,而是与前一块的码字相关。这种FEC要比另外一种复杂。 后续中我们仍会继续献上更多无线通信中FEC编码原理的相关知识,期待您的评论于意见哦~~~   未完待续 文/纪桐 无线通信中FEC 编码原理及评价(1)阅读地址: http://forum.eet-cn.com/BLOG_ARTICLE_11931.HTM     系列文章列表: 无线通信中FEC 编码原理及评价(1) 无线通信中FEC 编码原理及评价(2) 无线通信中FEC 编码原理及评价(3) 无线通信中FEC 编码原理及评价(4)  
  • 热度 3
    2012-5-10 16:36
    1446 次阅读|
    1 个评论
    大家好,从今天起我们会为大家连载一些关于通信互联网的一些介绍类论文,由于篇幅较长,我们每次为大家节选其中的一部分,一共需要4次我们才会将全部论文发布到博客中,希望大家能喜欢。今天我们为大家准备的是关于FEC 原理的文章,FEC 编码原理及评价(1 )。 卫星通信                                                               无线通信流程及FEC应用环节   基本上在每一个电信系统中,在传输过程中都会出现由于各种因素所导致的误码。这些错误给接收方带来了巨大的问题,使其很难正确的从数据中得到正确的信息。从而,为了确保信息传输的正确性,误码的检查与纠正成了通信系统中很重要的问题。目前,有多种误码的检查与纠正的技术,前向纠错码(Forward Error Correction, FEC)就是其中最经常被使用到的技术之一。在今后的连载中,我们会提供一些对于FEC原理的基本解释,包括它的工作机理和一些不同形式的FEC编码。并且,我们对于目前用于互联网及无线通信中FEC的应用进行比较和评价。最后,结论部分将展示我对于FEC发展的看法。   简介: 前向纠错是一种数据编码的技术,数据的接收方可以根据编码检查传输过程中的误码。在FEC中,发送者一般在要发送的数据前加上一段冗余的数据,这样接收者就可以根据这些冗余数据和提前设计好的算法发现数据中的误码并且确定具体错误码子的位置,从而纠正错误。当误码被确定后,不需要通知发送端重新发送,而是自动纠正错误。这种机制不同于自动重传(Automatic Repeat-reQuest, ARQ)需要通知发送端重新发送含有错误的数据。        在ARQ的“停止等待”(stop and wait)模式中,发送端在发送完一个数据包后等待接收端的回执 (acknowledgement, ACK)。如果发送端收到接收端的ACK,下一数据包将会被发送。反之,如果发送端收到的是负面ACK(negative ACK)发送端将会重新传送上一数据包。这些为了纠正误码而反复传送的数据包严重影响了系统的通信速度。所以,FEC是一种弥补这种缺陷的更好的方式。        在现阶段的数字通信系统中,FEC被广泛应用。这种技术的出现及发展来自于通信系统本身的需求。理想的无线信道在工程应用中是不存在的,这也就意味着模拟信号在不同介质下的传输过程中总会出现失真和不同程度的延迟。对于数字信号来说,就是会产生误码和抖动,这些错误最终会造成系统的错误。在这种情况下,我们需要FEC,因为它能够更好的降低误码率,从而使整个系统的性能提升。   未完待续 文/纪桐   系列文章列表: 无线通信中FEC 编码原理及评价(1) 无线通信中FEC 编码原理及评价(2) 无线通信中FEC 编码原理及评价(3) 无线通信中FEC 编码原理及评价(4)  
相关资源
广告