针对基于滑动窗口网络编码的分组生成的系统与技术的制作方法

文档序号:19735617发布日期:2020-01-18 04:25阅读:283来源:国知局
针对基于滑动窗口网络编码的分组生成的系统与技术的制作方法



背景技术:

滑动窗口网络编码编码器在本领域中是已知的。滑动窗口指代其中将线性编码应用于分组窗口以生成已编码分组的技术。通常,在这种编码器中使用的窗口大小在1和最大窗口大小n之间动态地变化,其中n在理论上可以是无限大。本领域普通技术人员将认识到如何在实际系统中选择n的值。

通常,滑动窗口编码器可以以下列方式进行操作:首先,向滑动窗口编码器馈送新数据。响应于提供给其的数据,编码器增加滑动窗口编码器的窗口大小。发送方将分组发送到接收方,并且接收方在接收到分组之后将ack分组发送回发送方。滑动窗口编码器接收ack分组并且响应于此可以减小滑动窗口的大小(因此这是该技术被称为滑动窗口技术的原因——即,新的分组被添加到编码器并且旧的分组被移除)。滑动窗口可以在生成上(即,在一组分组上)应用,或者可以是不需要生成的。

如同样已知的,一些滑动窗口编码机将随机线性网络编码(rlnc)应用为卷积码。m.karzand、d.j.leith、j.cloud和m.medard的“lowdelayrandomlinearcodingoverastream(流上的低延迟随机线性编码)”(arxivpreprintarxiv:1509.00167,2015)提供了对这种滑动窗口编码及其属性的一般研究。j.cloud和m.medard的“networkcodingoversatcom:lessonslearned(卫星通信网络编码:经验教训)”(internationalconferenceonwirelessandsatellitesystems(无线和卫星系统国际会议),springer,2015,第272-285页)研究了satcom的一种可能的实现方式,并且j.cloud和m.medard的“multi-pathlowdelaynetworkcodes(多路径低延迟网络码)”(arxivpreprintarxiv:1609.00424,2016)研究了多个组合路径的一种可能的实现方式。这些滑动窗口方法显示出与基于生成的码相比针对流应用的优越的延迟属性。然而,这种现有技术方法通常假设无限滑动窗口或动态尺寸的滑动窗口,其仅通过反馈闭合。

一些现有技术(例如,参见v.roca、b.teibi、c.burdinat、t.tran和c.thienot的“blockorconvolutionalal-feccodes?aperformancecomparisonforrobustlow-latencycommunications(块码还是卷积al-fec码?鲁棒的低时延通信的性能比较)”,2016)基于对里德-所罗门码(reed-solomon)和有限滑动窗口随机线性码(rlc)的比较,建议针对延迟敏感应用优先于块码而使用卷积码。然而,这些技术没有描述如何可以高效地实现这样的编码过程,并且没有考虑反馈。

在j.k.sundarajan、d.shah、m.medard、m.mitzenmacher和j.barros的“networkcodingmeetstcp(满足tcp的网络编码),”(infocom2009,ieee,ieee,2009,第280-288页)中描述了tcp/nc。该技术在tcp与ip之间添加了网络编码的中间层(其在过程中包括反馈),并且使用滑动窗口的一般形式,其中分组以不受限制的方式组合,并且编码不受诸如块和生成之类的结构的限制。在这种形式的滑动窗口中,编码窗口(当前正在缓冲分组以在编码器处进行潜在的编码)仅由确认信号(ack)闭合,并且可能非常大——至少在带宽延迟乘积的范围内,因为总是在整个拥塞窗口上执行编码(即,当前正在缓冲分组以在发送方处进行潜在的重新传输)。

karafillis等人描述的另一种技术通过发送附加的冗余分组改进了上面的tcp/nc技术——参见p.karafillis、k.fouli、a.parandehgheibi和m.medard的“analgorithmforimprovingslidingwindownetworkcodingintcp(一种用于改进tcp中的滑动窗口网络编码的算法)”(informationsciencesandsystems(ciss),201347thannualconferenceon.ieee,2013,第1–5页)。利用反馈,接收方用信号通知丢失自由度的数量。发送方使用该信息以特定间隔(例如,每13个分组)发送附加的分组。

kim等人描述了编码tcp(“ctcp”),参见m.kim、j.cloud、a.parandehgheibi、l.urbina、k.fouli、d.leith和m.medard的“networkcodedtcp(ctcp)(网络编码tcp(ctcp))”(arxivpreprintarxiv:62.2291,2012。ctcp技术是tcp内部的网络编码的集成。该方法利用分组的序列号和系统化码。仅在每个块的末尾处发送反馈。可以以带宽延迟乘积设置块大小,这可以导致非常大的生成。

块码具有低复杂度但引入延迟,因为解码器需要等待足够数量的分组到达以对每个块进行解码。另一方面,常规的滑动窗口技术提供低时延,因为它们可以同时接收分组并解码。这是以涉及潜在的许多分组的开销、反馈和解码操作的潜在高复杂度为代价的。本发明结合了块方法(低复杂度)和滑动窗口方法(低时延)两者的优点。这是通过严格地限制滑动窗口中的分组数量、通过使用系统化编码以及通过适配滑动窗口编码架构(例如,分组格式、系数矩阵)以减少编码操作中要求的线性操作的数量(即,较低复杂度)来完成的。结果是滑动窗口码(与块码相比具有低时延),但具有静态窗口大小,其允许使用现有的块编码器/解码器工具的实现方式。这导致类似的分组丢失属性以及编码器和解码器的非常高的性能,因为现有的块编码器/解码器已经针对各种cpu架构的性能进行了优化。有限滑动窗口的另一优点是减少在所有编码节点处的缓冲需求。



技术实现要素:

与现有技术相比,本文所描述的是可以高效地实现的固定大小的有限滑动窗口方法。本文所描述的系统和技术将滑动窗口码的低时延与基于生成的码的效率和可靠性特性组合。与块码相比,滑动窗口减少了分组时延,但潜在地是更复杂的(参见上面的评论)。时延益处来自滑动窗口解码器可以在接收已编码数据的同时进行解码而块解码器不能同时执行这些操作的事实。该技术允许在控制复杂度的同时使用滑动窗口。该技术还保持了常规的基于线性编码的滑动窗口方法的可调性和灵活性优点,通过其可以动态地修改诸如编码/解码窗口大小或码速率之类的参数。这允许多个权衡(例如,延迟对可靠性/吞吐量/复杂度)。

另外,与现有技术相比,本文所描述的系统和技术利用有限窗口设计内的系统化码。系统化码首先发送未经编码的数据,与非系统化编码系统相比降低了解码和重新编码的复杂度。

另外,与现有技术相比,本文所描述的系统和技术可以使用前向擦除码窗口(即,“fec窗口”)。fec窗口进一步限制了可以编码和重新编码的符号的数量。这减少了对符号进行重新编码或解码所要求的线性操作的数量,因此进一步降低了操作的计算复杂度并允许更容易的重新编码。使用比编码窗口小的fec窗口允许使用反馈方案来将丢失的分组从编码窗口重新包括到输出已编码分组中。

相对于现有技术,可以改进所描述的系统和技术的性能特性。例如,所描述的系统和技术可以相对于现有技术在延迟方面进行改进,因为根据本文所描述的概念,冗余分组可以经常发送而不是如现有技术中所做的那样仅在(可能是大的)生成结束时发送。

此外,所描述的系统和技术可以代替编码tcp(“ctcp”)中的块编码方法,并因此被并入ctcp中。虽然提供绝对递送可靠性可能是昂贵的,但是与(例如,在ctcp中的)传统的滑动窗口编码方法不同,所公开的概念可以用于提供低时延和低复杂度。

还应该认识到的是,本文所描述的方法也可以在链路层上实现,假设类似于tcp的另一协议在顶部提供可靠性。在这种情况下,本文所描述的技术将有助于减少tcp经历的损失,并且与其他自动重复请求(arq)方案相比改进延迟。

利用这种布置,提供了不需要生成的滑动窗口码。各种实施例提供了:模块化设计,其允许容易地与商业软件库和应用集成,同时保持商业软件库块码的高性能;应对各种网络要求;简化或消除对多个分组生成的处理;为上层协议层提供低延迟和高可靠性;并且提供延迟、效率和可靠性之间的权衡,以及其他优点。

因此,本文所描述的概念、系统和技术的第一实施例提供了一种在存在分组擦除的情况下解码分组化数据的方法,该方法包括解码器重复执行若干过程。第一过程包括接收已编码分组,该已编码分组包括分组序列号、具有固定长度w的系数向量以及使用系数向量被编码为w个输入符号的线性组合的已编码符号。第二过程包括确定分组序列号是否在w个连续序列号的滑动窗口内,该w个连续序列号不大于解码器序列号。并且第三过程包括当分组序列号在滑动窗口内时,使用系数向量将已编码符号解码为w个输入符号中的一个或多个。

该方法可以包括以下变型的任何组合。可以根据数据经由数据信道在解码器与编码器之间行进的往返时间来预先确定滑动窗口的固定大小。已编码分组可以具有乱序的分组序列号。接收可以包括接收包括已编码分组的多个分组,并且解码可以包括根据前向纠错码来校正多个分组中的一个分组中的错误。此外,解码可以包括使用系统化码或线性网络码。解码可以包括当所接收的分组的分组序列号大于解码器序列号时,将解码器序列号设置为等于所接收分组的分组序列号。使用系数向量进行解码可以包括当系数向量具有与其序列号在滑动窗口之外的输入符号相关联的非零条目时,生成分组擦除。解码还可以包括对矩阵执行高斯消元,该矩阵中的一行包括系数向量。在该实施例中,在执行高斯消元之前,解码可以包括删除矩阵中的具有与其序列号在滑动窗口之外的输入符号相关联的非零系数条目的每一行。可替代地或也在该实施例中,执行高斯消元包括对矩阵中的其索引等于解码器序列号对滑动窗口的大小取模的列进行枢转。

解码器还可以经由数据信道向编码器提供反馈,从而使得编码器能够经由数据信道发送对解码器由于分组擦除而未解码的任何数据进行重新编码的一个或多个分组。

本文所描述的概念、系统和技术的另一实施例是一种有形的计算机可读存储介质,其中具有非暂时性存储的计算机程序代码,该非暂时性存储的计算机程序代码当由计算机处理器执行时,执行上述方法或其变型或修饰中的任一个。

本文所描述的概念、系统和技术的又一实施例是用于在存在分组擦除的情况下解码分组化数据的解码器。该解码器包括用于从已编码分组接收已编码符号的缓冲器,该已编码分组包括分组序列号、具有固定长度w的系数向量以及使用系数向量被编码为w个输入符号的线性组合的已编码符号。解码器还包括用于存储解码器序列号的寄存器。解码器还包括确定单元,以用于确定分组序列号是否在w个连续序列号的滑动窗口内,该w个连续序列号不大于存储在寄存器中的解码器序列号。解码器还包括解码模块,以用于当确定单元确定分组序列号在滑动窗口内时,使用系数向量将所接收的已编码符号解码为w个输入符号中的一个或多个。

解码器实施例可以以与上面所描述的方法类似的方式变化。因此,缓冲器可以从包括已编码分组的对应的多个分组接收包括已编码符号的多个符号,并且解码模块可以根据前向纠错码来校正多个分组中的一个分组中的错误。解码模块可以根据系统化码或线性网络码进行解码。当所接收的分组的分组序列号大于存储在寄存器中的解码器序列号时,解码模块可以将所接收的分组的分组序列号写入寄存器中。当系数向量具有与其序列号在滑动窗口之外的输入符号相关联的非零条目时,解码模块可以生成分组擦除。

解码器还可以包括用于存储矩阵的存储器,其中解码模块可以将系数向量存储在矩阵的一行中并对矩阵执行高斯消元。在该实施例中,解码模块可以在执行高斯消元之前从存储器中删除矩阵中的具有与其序列号在滑动窗口之外的输入符号相关联的非零系数条目的每一行。可替代地或另外地,解码模块可以通过对矩阵中的其索引等于解码器序列号对滑动窗口的大小取模的列进行枢转来执行高斯消元。

解码器还可以包括反馈模块,该反馈模块能够经由数据信道向编码器提供反馈,从而使得编码器能够经由数据信道发送对解码器由于分组擦除而未解码的任何数据进行重新编码的一个或多个分组。解码模块可以包括专用集成电路(asic)或现场可编程门阵列(fpga)。

本文所描述的概念、系统和技术的另一实施例是用于在存在分组擦除的情况下解码分组化数据的不同的解码器。该解码器包括从已编码分组接收已编码符号,该已编码分组包括分组序列号、具有固定长度w的系数向量以及使用系数向量被编码为w个输入符号的线性组合的已编码符号。该解码器还包括用于存储解码器序列号的存储单元。解码器还包括确定单元,其用于确定分组序列号是否在w个连续序列号的滑动窗口内,该w个连续序列号不大于存储在寄存器中的解码器序列号。另外,解码器包括解码单元,其用于当确定单元确定分组序列号在滑动窗口内时,使用系数向量将所接收的已编码符号解码为w个输入符号中的一个或多个。

本领域普通技术人员可以认识到用于体现本文所描述的概念、系统和技术的其他方式。

附图说明

通过参考附图可以认识到制造和使用所公开的实施例的方式和过程,其中:

图1是示出其中可以体现本文的原理的示例性系统的示意图;

图2是示出可以由编码器发送的已编码分组的示意图;

图3是根据实施例的编码器的操作的流程图;

图4是示出根据本文所描述的概念、系统和技术的实施例的编码器中的功能组件的示意图;

图5和图5a是根据实施例的解码器的操作的流程图;

图6、图6a和图6b是示出用于将与新的已编码符号相关的系数插入系数矩阵中的三种不同情况的系列示意图;

图7和图7a是示出不同的高斯消元策略的示意图;

图8是示出根据本文所描述的概念、系统和技术的实施例的解码器中的功能组件的示意图;

图9是根据实施例的重新编码器的操作的流程图;

图10是示出根据所本文描述的概念、系统和技术的实施例的重新编码器中的功能组件的示意图;

图11、图11a和图11b是示出用于具有码速率r=2/3的比较编码方案的示例的系列示意图;

图12是示出广义s-arq的示意图;

图13是示出滑动窗口s-arq提议的示意图;以及

图14、图14a、图14b和图14c是示出用于不同重新传输方案的系数矩阵的系列示意图。

具体实施方式

本文所描述的概念、系统和技术可以用于使用有限滑动窗口在编码机之间执行擦除编码。在详细描述这些概念、系统和技术之前,解释了本文使用的介绍性概念和术语。

“符号”是有限域gf(q)中的元素的向量。通常,q是素数幂;对于二进制数据通信,q是2的幂。

“序列号”是唯一地标识源符号序列中的源符号的编号。

“滑动窗口”是具有固定窗口大小的连续符号的序列。“编码器滑动窗口”具有表示为we的固定窗口大小,而“解码器滑动窗口”具有表示为wd的固定窗口大小。在编码器we和解码器wd中滑动窗口的大小可以是不同的。

“已编码符号”是gf(q)中的元素的向量,其是至多we个输入符号的线性组合,其中线性组合的每个系数是gf(q)中的元素。

“未编码分组”是要在两个编码机之间交换的数据单元,该数据单元包括序列号和未编码符号。

“已编码分组”是要在两个编码机之间交换的数据单元,该数据单元包括序列号、长度为we的系数向量,以及使用包括在系数向量中的系数被编码为线性组合的已编码符号。

“擦除”是序列中丢失的元素。

“擦除编码”表示将一个或多个输入符号编码为可以包括擦除的分组序列。

参考图1,系统包括由网络9连接的若干编码机2a至2n。编码机可以实现为计算机,或使用专用硬件、固件、软件或这些的组合。因此,例如,编码机2a可以实现为专用集成电路(asic)或现场可编程门阵列(fpga)或类似技术。编码机可以出现在网络中的任何节点上,并且不限于网络边缘。每个编码机2a至2n可以由相同或不同的组件构成,并且根据本文所描述的概念、系统和技术的实施例,系统中可以存在任何数量的这种编码机。

编码机2a至2n使用已编码分组和未编码分组彼此通信。可以使用本领域中已知的任何硬件或软件来执行对进一步用于这种通信的gf(q)中的元素的操纵。例如,由丹麦的steinwurfaps发布的fifi库可以用于此目的。

每个编码机2a至2n可以用于对分组进行编码、对分组进行解码、对分组进行重新编码或这些的任何组合。最普遍的情况是编码机执行这些功能中的全部三个。因此,下面详细描述示例性编码机2a的操作。然而,各种实施例可以包括仅发送分组的编码机(例如,编码机2c),因此仅要求编码器(例如,编码器115c,省略解码器1104c和重新编码器1106c)。其他实施例可以包括仅接收分组的编码机(例如,编码机2c),因此仅要求解码器(例如,解码器1104c,省略编码器115c和重新编码器1106c)。其他实施例可以包括仅转发分组的编码机(例如,编码机2c),因此仅要求重新编码器(例如,重新编码器1106c,省略编码器115c和解码器1104c)。

编码机2a具有编码器4a,该编码器4a将源符号的序列作为输入,并且生成对应的已编码分组或未编码分组的序列作为输出。因此,编码机2a适合于作为信道源发送信息。图2是示出可以由编码器4a发送的已编码分组的示意图。在图3中详细示出了编码器4a的操作。在图4中详细示出了编码器4a的实施例。

编码机2a还具有解码器6a,该解码器6a将已编码分组或未编码分组的序列作为输入,并且可选地按顺序生成对应的源符号的序列作为输出。因此,编码机2a适合于作为信道宿接收信息。参考图6和图7,在图5中详细示出了解码器6a的操作。在图8中详细示出了解码器6a的实施例。

编码机2a还具有重新编码器8a,该重新编码器8a将已编码分组或未编码分组的序列作为输入,并且生成对应的已编码分组和未编码分组的序列作为输出,其中输出已编码分组可以是重新编码的分组;即,其编码与输入已编码分组不同的已编码分组。因此,编码机2a适合于使用例如线性网络码将信息从信道源转发到信道宿。在图9中详细示出了重新编码器8a的操作。在图10中详细示出了重新编码器8a的实施例。

现在参考图2,通过参考一些已编码分组20a-20e来说明实施例的细节,因为这些已编码分组可能已经由编码器(例如,编码器4a)发送。每个已编码分组包括有效载荷12(例如,已编码符号),以及编码报头14、16、18。编码报头包括分组序列号(“psn”)14。psn14表示在将已编码符号编码为输入符号的线性组合中所使用的输入符号的最大序列号。因此,根据一个传输序列,第一psn14a可以是0,第二psn14b可以是1等等。然而,根据各种实施例,解码器可以乱序地接收已编码分组,或者编码器可以发送使用相同psn(例如,在经历许多擦除的数据信道上)对输入符号进行冗余地编码的已编码分组。

在一些实施例中,编码报头可选地包括系数向量16、18。即,在一些实施例中,当发送未编码分组时,系数向量16、18被省略或由其他数据替换以提供对编码器与解码器之间的数据信道的更高效的使用。可替代地,可以发送系数向量16、18,但是系数向量16、18在gf(q)中包含等于1的单个非零条目。无论如何,当发送系数向量时,该系数向量具有等于窗口长度we的预定的固定大小。系数向量可以用于在存在分组擦除的情况下恢复输入符号,如下面所描述的。

根据实施例,系数向量的索引由解码器以特殊方式解释。解码器索引用于跟踪哪些序列号在滑动窗口内,以及哪些不在滑动窗口内。为了帮助理解这个概念,图2示出了解码器索引并将系数向量分成较旧的分量16和较新的分量18。解码器索引从左向右移动通过系数向量,因此与滑动窗口中的最旧的(即,最小的)序列号相关联的系数索引是16n,并且系数索引16a到16e指代从左到右更新的序列号。下一个最新的序列号与系数索引18a相关联,并且它们仍然从18b-18k变得更新,后者是解码器索引。

在各种实施例中,解码器索引跟踪在数据分组中具有由解码器接收的最大序列号的源符号。在这种情况下,解码器索引可以被计算为该最大序列号对编码器的固定窗口大小we取模。如上面指出的,其他索引代表较旧的符号。这意味着每we个源符号重复使用索引,并且必须特别注意正确处理重复使用。

在系数向量的较新的分量18中存在的最新系数索引可以被进一步划分以识别具有宽度“f”的前向纠错(“fec”)窗口22。fec窗口22包括最新发送的符号以及其之前的f-1个符号。这些符号用于主动前向编码,例如,机会编码(即使没有反馈)。如果fec窗口22包括4个符号,则与系数18g-18k相关联的符号可以用于执行fec。反馈恢复窗口24、26包含与较旧符号相关联的系数,这些系数应仅在要求时使用,例如,在解码器检测到这些符号中的一个或多个丢失或无法被解码之后。

将恢复划分为fec窗口22和反馈恢复窗口24、26是有利的。这样做使fec窗口保持足够小以处理所发送的分组(例如,16个分组)的典型预期突发,同时使反馈恢复窗口24、26保持足够大以能够恢复在至少一个往返时间(“rtt”)期间发送的分组(包括所有缓冲(例如,128-256个分组))。因此,编码器和解码器可以通过交换数据以测量rtt来协商滑动窗口大小we,从而在编码器发送第一已编码分组之前预先确定固定大小we。下面描述使用fec窗口22的解码方法,并结合图11-14c与现有技术进行对比。

当网络9包括网状网络或者在编码机2a至2n之间存在多个路径或多个信道的其他网络时,发生对这些概念的特别有用的应用。总体的概念是(在具有反馈或不具有反馈的情况下)在多个不相交的信道或路径(例如,lte+wi-fi)上使用滑动窗口。为了应用多路径,重要的是包括考虑不同分组时延、乱序递送、滑动窗口大小等的规定。

在多路径操作中,编码器或任何重新编码器可以决定通过多于一条路径将分组发送到目的地解码器或中间节点。启动多路径操作的节点(典型地是包含编码器的源节点)此后称为“多路径节点”。通过哪条路径发送哪些分组的决策可以基于多路径节点已经在各种路径上接收或推断的信息。一些多路径机制包括但不限于以下内容。

多路径节点可以基于路径损耗确定或路径负载确定来将分组分配给路径。这样的确定可以基于由另一节点(例如,目的地、下游节点、网络管理)传送的状态信息,或者由多路径节点自身根据源-目的地业务(例如,在每条路径上监视反馈并且推断丢失的分组)或某种其他可用度量(例如,csi)进行推断。

多路径节点可以通过更快或更可靠的路径发送系统化(即,源、未编码)分组以降低解码复杂度并加速连接,因为这确保更多源分组在更短的时间内到达解码器,从而要求更少的用于解码和实现更快的源分组递送的线性操作。

多路径节点可以使用所推断的信息(例如,csi)或所接收的关于路径时延的信息(例如,反馈)来避免在其相关联的时延被视为使得分组在由目的地接收时无用的情况下(即,在接收时落在解码窗口外部)使用路径。

不同路径上的中间节点可以在其对所接收的分组的传输、其对所接收的分组的重新传输或其对已编码/已重新编码的分组的传输中是选择性的。可以应用分组采样过程(即,针对每m个所接收的分组发送一个分组),从而实现目标采样率(即,这里为1/m)。

该分组采样率可以由另一个节点(例如,源、目的地、网络管理)传送或者由多路径节点自身根据其在传输中的位置(例如,距目的地越近的节点以越低速率发送)、根据源-目的地业务、根据来自相邻节点的反馈或根据某种其他可用度量进行推断。

图3、图5、图5a和图11是示出可以在系统2(图1)内实现的处理的流程图。矩形元素(在图3中以元素30为代表)在本文中有时表示为“处理块”,其表示计算机软件指令或指令组。菱形元素(在图3中以元素40为代表)在本文中有时表示为“判定块”,并且表示影响由处理块表示的计算机软件指令的执行的计算机软件指令或指令组。

可替代地,处理块和判定块可以表示由功能上等效的电路执行的功能,例如,数字信号处理器电路或专用集成电路(asic)。流程图没有描绘任何特定编程语言的语法。相反,流程图示出了本领域普通技术人员制造电路或生成计算机软件以执行特定装置或设备所要求的处理要求的功能信息。应该注意的是,没有示出许多例程程序元素,例如,循环和变量的初始化以及对临时变量的使用。本领域普通技术人员将认识到,除非另有指示,否则流程图中描述的块的特定序列仅是说明性的,并且可以在不脱离所描述的概念、结构和技术的精神的情况下进行变型。因此,除非另有陈述,否则下面所描述的块是无序的,这意味着在可能的情况下,由块表示的功能可以以任何方便或期望的顺序执行。

现在转到图3,根据编码器实施例(例如,图1中所示的编码器)的编码方法以初始化过程30开始。说明性实施例使用该初始化过程30以例如将编码器序列号重置为零,或者与对应的解码器交换数据以确定往返时间(“rtt”),从而预先确定固定窗口大小we。本领域普通技术人员可以认识到可以执行的其他初始化,以及用于这样做的常规方法。

编码方法继续进行接收过程32,该接收过程32开始主编码循环。在该接收过程32中,编码器接收新的输入或源符号。例如,源符号可以从计算机网络作为数据接收,或者使用应用编程接口(api)或使用其他常规手段从应用程序接收。

然后,递增处理34对编码器序列号进行递增,并且编码器将新接收的源符号与新序列号相关联。该关联可以包括根据序列号将源符号存储在存储器位置中的输入缓冲器中(如下面更详细地描述的)。递增过程34使得编码器能够生成已编码符号。

接下来,分组生成过程36通过附接包含当前编码器序列号的报头来生成未编码分组。在一个实施例中,编码器发送的大多数分组是未编码的;即,这些未编码分组缺少系数向量,因为它们包含未编码符号。该实施例允许实现相对高的编码速率。然而,在另一实施例中,甚至未编码分组也包括具有系数向量的编码报头。在该实施例中,系数向量具有与有限滑动窗口大小we相等的长度。因为符号是未编码的,所以系数向量恰好包含有限域gf(q)的一个非零元素,例如,值1。说明性地,非零元素位于位置(esnmodwe),其中esn是编码器序列号的值。包括缓冲器或其他存储器的常规手段可以用于生成未编码分组。

该方法继续进行排队过程38,该排队过程38将由此形成的新的未编码分组放置在输出缓冲器中。在说明性实施例中,图3的方法是异步执行的;即,与源符号被接收一样快地生成新分组,而不是等待现有分组被递送到数据信道。因此,排队过程36将新的未编码分组传输到另一个过程可访问的共享输出缓冲器,以用于最终递送到网络。当然,替代实施例可以以同步方式操作,在继续之前等待直到确认每个分组已经向解码器发送。可以使用常规手段来执行这种异步传输。

根据图3中示出的实施例,该方法继续进行编码速率检查过程40,该编码速率检查过程40检查是否要求或期望对一个或多个已编码分组进行传输。可以通过跟踪未编码分组与所生成的总分组的比率(即,编码速率)以确保实现给定的编码速率来执行编码速率检查过程40。在一个实施例中,当当前编码器序列号是未编码分组(其要针对每个已编码分组发送)的数量n的倍数时,编码速率检查过程40返回是(yes)结果,否则返回否(no)。在这种情况下,编码速率被计算为n/n+1。当然,如何可以使用不同的测试来实现其他编码速率应该是清楚的。

如果不要求对已编码分组进行传输,则主循环返回其起始状态,在接收过程32中等待另一个源符号。然而,如果要求对已编码分组进行传输,则该方法前进到生成已编码分组的已编码分组生成过程42。在说明性实施例中,编码器使用系统化编码(即,它包括在所生成的已编码符号中的最新的源符号)或者从图2所示的fec窗口内发送冗余分组。因此,已编码分组生成过程42包括在要编码的滑动窗口中生成针对每个源符号具有gf(q)中的一个系数的系数向量。

由于编码器使用有限窗口,线性组合的分组的数量通常等于we,除了在当有限窗口中存在较少的源符号时(即,当编码器序列号小于we时)进行传输的初始阶段。然后,已编码分组生成过程42使用所生成的系数在有限滑动窗口中线性组合源符号,并通过将编码报头添加到已编码符号来形成已编码分组。

编码报头包含固定数量we的系数和分组序列号(其可以与编码器序列号不同)。在一个实施例中,以使得与每个系数相关联的源符号s隐含的方式重用系数位置。这通过将与源符号s相关联的系数放置在位置(esn(s)modwe)来完成,其中esn(s)是与源符号s相关联的编码器序列号。任何空系数时隙获得为零的系数。由此形成的系数向量在解码器处变为系数矩阵(r)的行,其中系数矩阵(r)是由解码器使用以执行解码的矩阵,如下面详述的。

一旦已经生成了已编码分组,排队过程44就将该已编码分组放置在输出缓冲器中。该排队过程44类似于排队过程38并且可以以类似的方式执行。该方法通过确定是否在编码速率检查过程40中发送附加的已编码分组而继续。如果不要求另外的已编码分组,则该方法通过返回到接收过程32(在其中等待下一个源符号)来结束其循环。

现在参考图4,本文所描述的概念的实施例是具有若干功能组件的编码器50,这些功能组件包括有限窗口控制模块52、符号缓冲器54、编码器序列号寄存器56、随机线性网络编码(“rlnc”)编码器58、分组生成器60和输出缓冲器62。现在描述这些组件的操作。

有限窗口控制模块52是用于控制编码器50的主要机制。有限窗口控制模块52接收源符号并将源符号存储在符号缓冲器54中。符号缓冲器120包含we个符号,其中we是有限编码器滑动窗口的大小,并且有限窗口控制模块52在陈旧的符号通过窗口外时逐出陈旧的符号。这样做是为了遵循编码窗口大小并控制解码复杂度。尽管使用本文所描述的技术,但是可以从无法解码符号的解码器接收反馈。当接收到反馈时,该反馈通常指代序列号小于编码器保持的序列号的符号。在这种情况下,来自编码器窗口大小之外的符号的反馈信息被丢弃。有限窗口控制模块52还在编码器序列号寄存器56中存储并更新编码器序列号,如结合图3所描述的。

编码器50还包括rlnc编码器58以计算在已编码分组中找到的已编码符号,例如,如上面在过程42中所描述的。例如,丹麦的steinwurfaps发布的kodo库可以在有限窗口控制模块52的指导下用于此目的。

分组生成器60创建未编码分组和已编码分组以用于发送到解码器或重新编码器。对于未编码分组,分组生成器60将从有限窗口控制模块52获得的未编码符号连接到存储在编码器序列号寄存器56中的相关联的序列号。对于已编码分组,分组生成器60将从rlnc编码器58接收的已编码符号连接到编码报头。编码报头包括用于对从rlnc编码器58获得的已编码符号进行编码的系数向量。编码报头还包括分组序列号,即,在将已编码符号编码为输入符号的线性组合中使用的任何输入符号的最大序列号。

最后,编码器50包括输出缓冲器62,该输出缓冲器62执行输出功能(即,发送、缓冲、递送到较低协议层等)。输出缓冲器62从分组生成器60接收所生成的分组。应当认识到,编码器50中的任何或所有功能组件可以以硬件、固件、软件或这些技术的任何组合来实现。

现在参考图5,根据解码器实施例(例如,图1中所示的解码器)的解码方法以初始化过程91开始,该初始化过程91对在解码中使用的矩阵进行初始化,如下面更详细描述的。与编码器初始化过程30一样,解码器初始化过程91也可以初始化状态变量,包括将解码器序列号设置为零。另外,解码器可以与对应的编码器交换数据以确定往返时间(“rtt”),从而在使用本文所描述的有限滑动窗口技术交换数据之前确定固定滑动窗口大小we。本领域普通技术人员可以认识到可以执行的其他初始化,以及用于这样做的常规方法。

在解码中使用的矩阵具有wd个行,每行包括指示用于对不同的已编码符号进行编码的系数的系数向量,其中wd具有固定值并且wd大于或等于we。这种矩阵的前we个列形成系数矩阵(r),并且该系数矩阵(r)可以通过执行行运算(例如,将行中的所有系数与相同的数相乘并加上行或减去行)来简化为单位矩阵。如本领域中已知的,如果对相关联的已编码符号执行对应的行运算,则该过程产生经解码的源符号。

一些实施例使用wd×1的符号矩阵和单独的wd×we的系数矩阵(r)来执行行运算,其中系数矩阵(r)的wd个行是对应的已编码符号的(长度为we的)系数向量。其他实施例使用“增强的”wd×(we+1)矩阵来协调行运算,其中前we个列形成系数矩阵(r)并且包括(针对wd个符号中的每一个的)we个系数向量,而最后一列(索引为we+1)包括相关联的符号。无论其形式如何,该矩阵在下文中称为“协调矩阵”。

图5的解码方法继续进行接收过程92,该接受过程92开始主解码循环。在该接收过程92中,解码器接收新分组。例如,分组可以从计算机网络作为数据接收,或者使用应用编程接口(api)或使用其他常规手段从应用程序接收。

接下来,解码方法在判定过程93、95和96中确定所接收的分组与解码状态之间的关系。除其他内容之外,解码器必须确定所接收的分组是否指代序列号比最近识别的符号更新、更旧或相同的符号。说明性实施例通过在每个已编码分组的编码报头中包括分组序列号(“psn”)并且将解码器序列号(“dsn”)维持为解码器状态的一部分来解决该问题。在实施例中,dsn可以与解码器接收的最大psn相对应,并且可以与最近接收的psn进行比较。

因此,在新颖度判定过程93中,解码器确定所接收的分组的psn是否大于解码器当前维持的dsn。当所接收的分组指代解码器先前未知的源符号时,会发生这种情况。如果是这种情况,则该方法前进到更新过程94,其中更新解码器序列号以反映所接收的分组具有更高的序列号。

更新过程94执行两个重要任务,参考图6a可以更全面地理解这两个重要任务,图6a示出了具有系数索引104的所接收的系数向量13和具有解码器索引106的系数矩阵103,其中wd=we=8。系数索引104被计算为(psnmodwe),并且解码器索引106被计算为(dsnmodwe)。图6、图6a和图6b中的阴影或交叉阴影框表示非零系数,并且这些图中的空白或非阴影框表示为零的系数。

首先,更新过程94将dsn更新为等于所接收的psn。解码器必须采取这一步骤,因为所接收的分组指代解码器先前未知的源符号(其具有所接收的psn)。在图6a中,这在更新后的系数矩阵108中示出,该系数矩阵108已经将解码器索引106向右移动两列以匹配分组索引104。

然而,增加dsn将有限滑动窗口“移位”,该有限滑动窗口覆盖取决于dsn的序列号范围。因此,系数矩阵现在可以包括这样的行:其系数指代序列号现在位于有限滑动窗口之外的源符号,因此更新过程94的第二个重要任务是从系数矩阵中逐出指代过时符号的系数的任何行(即,在与过时的源符号相关联的列中具有非零系数的行)。删除这些行可以降低解码新符号的概率。但是可以通过在每个机会执行高斯消元来限制这种影响,如下面所描述的。高斯消元将减少非零条目的数量,并由此降低逐出符号的概率。

为了说明逐出,再次参考图6a,在接收新系数向量13之前的解码器状态是具有三行系数的系数矩阵,并且解码器索引等于2(例如,dsn=138)。第一行包括针对具有所有八个先前序列号(例如,序列号131到138,包括端点)的符号的系数,因此其对应的已编码符号是所有相应的源符号的线性组合。然而,第二行和第三行包括仅针对前六个符号(例如,序列号133到138,包括端点)的非零系数。因此,在解码器接收到新系数向量13(其包括在具有psn=140的分组中)之后,dsn增加2(例如,增加到140,将滑动窗口移动到序列号133到140,包括端点)。由于行41a取决于具有序列号131和序列号132的符号(其现在在滑动窗口之外),因此行41a从系数矩阵中被逐出,如在更新后的系数矩阵108中所指示的。然而,由于行41b和行41c仅取决于具有序号133至138的符号,它们不被逐出。一旦解码器已经如所指示的那样更新其状态,该方法就前进到图5a,图5a示出了代数解码。

返回到新颖度判定过程93,如果所接收的分组的psn不大于dsn,则该方法继续到同一性判定过程95,其中解码器确定所接收的已编码分组的psn是否与dsn相同。如果相同,则不必更新dsn或解码器索引15并且可以立即开始进行代数解码,因此该方法如上所述地进行到图5a。这种情况在图6中示出。

如果所接收的分组的psn甚至不是至少与解码器当前已知的dsn一样大,则该分组可以指代过时的源符号,因此该方法进行到陈旧性判定过程96,其中解码器确定所接收的系数向量是否包括指代这样的源符号的非零系数:该源符号的序列号位于由dsn确定的当前滑动窗口之外。因此,陈旧性判定过程96类似于更新过程94的逐出任务,除了所接收的系数向量不是(尚不是)系数矩阵中的行。

如果所接收的分组包括仅是仍然在滑动窗口中的符号的线性组合的已编码符号(如所接收的系数向量所指示的),则该方法可以如所指示地进行到图5a。否则,在丢弃过程97中,解码器丢弃所接收的已编码分组,就好像是擦除一样,并返回到接收过程92以等待下一个分组的到达。这种情况在图6b中示出。为了完整性,请注意,虽然新接收的系数向量110具有小于dsn112的psn47(如通过分组索引47在解码器索引112的左侧所示),然而系数向量110具有仅针对其序列号最多比其psn小6的符号的非零系数,并且这6个序列号在定义滑动窗口的不大于dsn的8个序列号内。因此,系数向量110不被丢弃。

现在参考图5a,代数解码过程以加法过程91a开始,其中所接收的分组的系数向量作为一行与系数矩阵r相加以形成临时系数矩阵r’,如图6、图6a和图6b中所指示的。具有新的系数行的系数矩阵r’可以存储在临时存储器中以允许执行线性代数而不会丢失解码器的状态r。

如果所接收的分组是未编码分组,则它可能缺少系数向量。在这种情况下,其中包含的未编码符号可以表示为(其他we-1个符号中的每一个的零倍)加上(未编码分组索引的1倍)与对应的系数向量的线性组合。加法过程91a将该系数向量与系数矩阵r相加以形成临时系数矩阵r’。即使对于未编码分组也执行该加法过程91a,因为未编码分组的符号可以用于解码其他已编码符号(例如,如结合图11-14c所描述的)。此外,由于所接收的分组包含未编码符号,所以该方法可以如所指示地立即将未编码符号的副本发送到下面讨论的递送过程94a。

该方法继续进行高斯消元(行缩减)过程92a,其中临时系数矩阵r’通过枢转(pivoting)经历行缩减,因为该技术在本领域中是已知的。然而,与从第一列开始枢转的现有技术120(如图7中所示)不同,说明性实施例124从与dsn对窗口大小we取模相对应的解码器索引列122开始枢转(如图7a中所示)。因此,行缩减过程92a的结果是以“已移位的”行梯形形式的系数矩阵。

该方法继续到解码确定过程93a,其中解码器确定行缩减过程92a是否解码了任何新的源符号。如图7a中所示,当行缩减后的临时系数矩阵r’包括移位到解码器索引列右侧的m×m单位子矩阵(其大于原始系数矩阵r中的对应的已移位的n×n单位子矩阵)时,结果为是(yes)。在这种情况下,行缩减过程92a按照其序列号顺序成功地解码m-n个源符号,并且该方法继续到递送过程94a。否则,新接收的系数向量不按顺序解码附加的源符号,并且该方法继续到存储过程95a。

该算法相对于现有技术提供了显著的效率增益。具有高码速率的实施例的最可能的场景是新接收的分组未被编码并且具有恰好比当前dsn大1的psn。这需要更新过程94将解码器索引向右移动一列并且逐出系数的第一行。如可以从图7a认识到的,执行这两个动作保留了系数矩阵的“已移位的”行梯形形式。另外,如果所接收的分组未被编码,则其中包含的未编码符号可能具有由解码器接收的最大序列号并且可以被立即递送。相反,以传统方式执行高斯消元可能导致系数矩阵具有“未移位的”行梯形形式,并且必须在每个新接收的分组之后重新执行这种消元。

在递送过程94a中,解码器将新解码的源符号递送给符号消费者。这样的消费者可以是例如软件应用、符号缓冲器或一些其他设备、系统或过程。最后,代数解码以存储过程95a结束,其中“已移位的”行缩减的系数矩阵r’被存储为系数矩阵r。

现在参考图8,这些概念的实施例是解码器160。解码器160包括有限窗口控制模块162、序列号寄存器164、编码缓冲器166、随机线性网络码(“rlnc”)解码器168和递送模块170。现在描述这些组件的操作。

有限窗口控制模块162是用于控制解码器160的主要机制。有限窗口控制模块162接收未编码分组和已编码分组,并且在解码器序列号寄存器164中维持解码器序列号(dsn)。在各种实施例中,有限窗口控制模块162根据上面结合图5所描述的过程并且特别是更新过程94来维持dsn。

有限窗口控制模块162将所接收的符号(无论是未编码符号还是已编码符号)存储在编码缓冲器166中。编码缓冲器166包含wd个符号,其中wd是解码器滑动窗口的大小,并且有限窗口控制模块162在陈旧的符号通过窗口外时逐出陈旧的符号。例如,这可以根据上面结合更新过程94所描述的过程而发生。

在一些实施例中,当解码器160尽管使用本文所描述的技术也不能解码符号时,解码器160可以向相应的编码器提供适当的反馈。当发送反馈时,解码器160将按序列号引用未解码的符号。

解码器160还包括rlnc解码器168以根据在已编码分组中找到的已编码符号计算源符号,例如,如上面结合图5a所描述的。例如,丹麦的steinwurfaps发布的kodo库可以在有限窗口控制模块162的指导下用于此目的。

最后,解码器160包括执行输出功能(即,缓冲、递送到较高协议层等)的递送模块170。递送模块170从编码缓冲器166接收未编码的源符号,并且从rlnc解码器168接收经解码的源符号。应该认识到的是,解码器160中的任何或所有功能组件可以以硬件、固件、软件或这些技术的任何组合实现。

本发明的各种实施例还执行重新编码。重新编码是根据先前已编码的“源”分组和先前未编码的“源”分组创建新的已编码分组而不必首先对已编码分组进行解码的操作。这典型地需要(1)将线性组合应用于有效载荷,(2)根据源分组的系数计算新的已编码系数,以及(3)将新的已编码系数添加到新重新编码的分组。重新编码通常发生在中间节点,以通过以下方式来改进连接性能:(1)增加已编码分组的多样性(即,作为线性组合的一部分的源符号的数量),或(2)注入新的已编码分组以覆盖后续链路中的丢失。重新编码在多路径通信和信道绑定(例如,lte+wi-fi)、网状网络和用于串行链路的机会路由中得到重要应用。

通常,重新编码器应该针对反馈和源分组应用相同的过滤机制。当将多个符号与稀疏系数向量组合时,所得到的系数向量包含越来越多的非零元素。如果这些非零元素超过窗口大小,则分组将变得无用。为了避免这个问题,重新编码器可以采用以下机制:

重新编码的分组应该是稀疏的,例如,非零系数应该在fec窗口中。这可以通过应用禁止在具有相距太远(即,差异超过窗口大小)的序列号的分组之间进行重新编码的规则来强制执行。窗口大小可以与源/目的地窗口大小不同,并且可以由另一节点(例如,源、目的地、网络管理)传送或者由重新编码器自身根据源-目的地业务或某种其他可用度量进行推断。

重新编码器可以响应于在下一跳跃中或在网络的其余部分上的分组丢失率来调整已重新编码分组注入到流中(即,朝向目的地)的速率。丢失率可以由另一节点(例如,源、目的地、网络管理)传送,或者由重新编码器自身根据源-目的地业务或某种其他可用信息(例如,信道状态信息(csi))进行推断。

通常,重新编码器可以使其发送附加分组的决策以及其混合分组的方式基于关于滑动窗口、传输状态以及信道、链路或下一跳跃的质量的所接收的或所推断的状态信息。当将分组编码在一起时,重新编码器还可以考虑解码复杂度,因此即使所有符号仍然在编码滑动窗口内,也能够避免重新编码或创建已经达到本机混合分组的目标数量的分组。重新编码器可以通知其上游邻居所接收的/丢失的/看到的符号/自由度,从而通知其上游邻居其接收的符号以及链路质量,其中看到的符号是作为所接收的线性组合的一部分的尚未被解码的源符号,并且丢失的自由度表示对给定源符号或生成进行解码所要求的独立已编码符号的数量。

如果重新编码器能够通过传输已重新编码符号、已编码符号或源符号来满足对附加分组或自由度的请求,则重新编码器可以截取并终止来自下游节点(例如,目的地)的该请求。重新编码器可以机会性地且即时地解码以使得其存储的符号更稀疏。仅当重新编码器接收到足够的分组时,这才是可能的。并且当fec窗口保持不变或略微增加时,重新编码器可以通过对传入的后续分组进行组合来允许“简单的”重新编码而无需部分解码。重新编码可以允许适应下一链路的所要求的编码速率,该编码速率可能与先前的链路编码速率不同(更高和更低)。

因此,现在参考图9,根据重新编码实施例(例如,图1中所示的重新编码器)的重新编码方法包括图5中所示的解码过程130至142、图5a中所示的解码过程144至152以及图3中所示的编码过程154至158。具体地,图9中的过程130、132、134、136、138、140和142分别对应于图5的初始化过程91、接收过程92、同一性判定过程95、新颖度判定过程93、更新过程94、陈旧性判定过程96和丢弃过程97。因此,这些过程130至142以相同的顺序共同执行图5的解码过程,其中非功能性差异是在136之前而不是之后进行同一性判定134。唯一的功能性差异是在丢弃过程142之后,图9的方法不与图5和图5a的方法直接对应地返回到过程132,而是进行到编码过程154至158。

另外,图9的过程144、146、148、150和152分别对应于加法过程91a、行缩减过程92a、解码确定过程93a、递送过程94a和存储过程95a。因此,这些过程144至152以相同的顺序共同执行图5a的解码过程,其中唯一的功能性差异是在一些解码并转发的实施例中可选地执行确定过程148和递送过程150(如通过它们在虚线轮廓中的出现所指示的),并且存储过程152不与图5和图5a的方法直接对应地返回到过程132,而是进行到编码过程154至158。

图9的过程154至158分别对应于图3的码速率检查过程40、已编码分组生成过程42和排队过程44。因此,这些过程154至158以相同的顺序共同执行图3的已编码分组生成过程(但不是未编码分组生成过程),其中没有功能性差异。

现在参考图10,本文所描述的概念的实施例是重新编码器180,该重新编码器180包括有限窗口控制模块182、序列号寄存器184、编码缓冲器186、随机线性网络码(“rlnc”)重新编码器188和递送模块190。现在描述这些组件的操作。

有限窗口控制模块182是用于控制重新编码器180的主要机制。有限窗口控制模块182接收未编码分组和已编码分组,并且在重新编码器序列号寄存器184中维持重新编码器序列号(rsn)。在各种实施例中,该有限窗口控制模块182根据上面结合图5所描述的过程并且特别是用于更新解码器序列号(dsn)的更新过程94来维持rsn。

有限窗口控制模块182将所接收的符号(无论是未编码符号还是已编码符号)存储在编码缓冲器186中。编码缓冲器186包含多达wd个符号,其中wd是(部分)解码器滑动窗口的大小,并且有限窗口控制模块182在陈旧的符号通过窗口外时逐出陈旧的符号。例如,这可以根据上面结合更新过程94所描述的过程而发生。

重新编码器180还包括rlnc重新编码器188以对在相应的已编码分组中找到的已编码符号进行行缩减(例如,如上面结合图5a所描述的),并且如上面结合图3所描述地生成并转发已重新编码分组。例如,丹麦的steinwurfaps发布的kodo库可以在有限窗口控制模块182的指导下用于此目的。

根据一些实施例,rlnc重新编码器188根本不执行部分解码,而是通过发送其连续的已编码符号是越来越多的输入符号的线性组合的已编码分组来执行累积网络编码。因此,rlnc重新编码器188可以根据先前的已编码符号sn、系数c和新接收的输入符号s使用迭代公式sn+1=sn+c·s生成新的已编码符号sn+1,其中在有限域gf(q)中执行加法和乘法。以这种方式,重新编码器180可以增加或减少用于形成已编码符号的输入符号的数量;即,有限滑动窗口大小we。这种改变有利地允许重新编码器180在数据信道之间转发分组,因为不同的信道特性要求不同的码速率。

最后,重新编码器180包括执行输出功能(即,缓冲、递送到较高协议层等)的递送模块190。递送模块190从rlnc重新编码器188接收已重新编码分组,并且将已重新编码分组转发到下游编码机或下游节点。应该认识到的是,重新编码器180中的任何或所有功能组件可以以硬件、固件、软件或这些技术的任何组合来实现。

现在参考图11、图11a和图11b,在普通系统化块码(图11)和无限滑动窗口(图11a)的现有技术以及本文所描述的有限滑动窗口技术(图11b)中的分组内容之间进行了比较。每幅这样的图以发送顺序按行指示了所发送的(已编码)分组。每行通过点来指示哪些源符号(或源分组)在相应的已编码分组中通过线性组合编码。此外,每幅图提供了针对每个(冗余的)已编码符号对两个未编码符号的传输,因此示出了具有2/3的码速率的码。

图11的系统化块码示出了符号的三次生成190a、190b、190c。前四个发送的分组是未编码的,并且包括依次编号为1、2、3和4的源符号。第五分组和第六分组是已编码的并包含这些源符号的线性组合,这些源符号的线性组合可以用于在六个所发送的分组中的任何一个中存在至多两次擦除的情况下恢复源符号。下面结合图12讨论这种恢复。已经发送了在前六个分组中编号为1至4的符号的第一次生成,接下来的六个分组发送编号为5至8的符号的第二次生成,接下来的六个分组发送编号为9至12的符号的第三次生成,依此类推。

图11a的无限滑动窗口码68重复两个未编码分组接着是包含已编码符号的分组的模式,该已编码符号的分组是所有在前源符号(或所有在前源符号的某种动态子集)的线性组合。因此,前两个发送的分组是未编码的并且包括编号为1和2的源符号。第三分组是已编码的并包含编号为1至2的所有在前源符号的线性组合。接下来的两个分组是未编码的并且包括编号为3和4的源符号。第六分组是已编码的并包含编号为1至4的所有在前源符号的线性组合,依此类推。

现在参考图11b,描述了滑动窗口方法的基本概念。我们还没有考虑反馈或多路径,并且只考虑了单个链路。省略fec窗口大小,因为当通过不同路径发送分组并且预期重新排序时,或者当反馈可用时,fec更有用。因此,编码发生在整个生成期间。

根据本文所描述的概念和技术的实施例,图11b的有限滑动窗口码重复两个未编码分组接着是包含已编码符号的分组的模式,该已编码符号的分组是至多为固定窗口数量we个在前源符号的线性组合。图11b的有限滑动窗口码组合了无限滑动窗口码中缺少的系统化块码的有利简单性和存储界限,以及无限滑动窗口码相对于系统化块码的有利减少的解码时延。

图12示出了使用现有技术的选择性自动重复请求(s-arq)技术的源符号解码,其中系统化块码具有如图11中的生成。在该示例性图中,24个分组由编码器发送,但是由于分组擦除,解码器仅接收到15个分组,分组擦除由其点被删除的行指示。源符号以三次生成提供。

图12可以理解如下。解码器接收包含符号1的未编码分组0,从而允许以符号1的顺序递送到本地编码机以(例如,在更高的协议层处)进行进一步处理。接收包含符号2的未编码分组1,从而允许以符号2的顺序递送。包含符号3的未编码分组2被擦除,如同包含已编码符号的已编码分组3那样。因此,源符号3不能按顺序被递送。

在第二次生成中,接收到包含符号4的未编码分组4,但是符号4不能按顺序递送,因为符号3是未决递送的。同样地,擦除未编码分组5(符号5),接收未编码分组6(符号6),并且接收已编码分组7,从而允许恢复被擦除的符号5。

然而,已解码符号110中的任一个都不能按顺序递送,因为符号3仍然是未决递送的。因此,解码器在第一反馈接合点处(由分组7之后的水平线指示的)请求编码器发送用于第一次生成的新的线性独立的已编码符号。

对于第三次生成,编码器在已编码分组8中发送该已编码符号,但是该分组也被擦除。编码器继续发送未编码分组9、10和11(源符号7、8和9;全部被擦除)并且接收已编码分组12。由于已编码分组8被擦除,在第二反馈接合点处解码器再次请求对用于第一次生成的已编码符号进行传输。

对于第四次生成,解码器最终在已编码分组13中接收其所需要的已编码符号。接收已编码分组13允许对符号3的恢复(和递送)。由于源符号4、5和6已经被解码,它们也随后被递送。然后,解码器接收分别包含符号10、11和12的未编码分组14、15和16。然而,这些符号不能被递送,等待已擦除的符号7、8和9的递送。由于解码器获得了来自第三次生成的分组12中的一个已编码符号,该编码器请求用于第三次生成的3-1=2个线性独立的已编码符号。

对于第五次生成,解码器在已编码分组18和19中接收其用于第三次生成的所需要的已编码符号。给定分组12、18和19的三个线性独立已编码符号,高斯消元(如下面所讨论的)允许解码器恢复三个源符号7、8和9,源符号7、8和9立即与先前获得的符号10、11和12一起被递送。最后,解码器能够在接收到对应的未编码分组20、21和22之后立即递送源符号13、14和15。已编码分组23的擦除不影响这些符号的递送。

图13示出了根据本文描述的有限滑动窗口概念的实施例的使用修改后的s-arq技术的源符号解码。解码器使用编码器的滑动窗口和其中包含的较小的滑动fec窗口两者来处理分组序列,如图2中所示。在图13的示例性分组序列中,六个符号(即,两次生成)的fec窗口用于提供前向纠错。图1中所示的fec窗口设计允许编码器接收反馈,而滑动窗口仍然允许重新传输,因为所请求的分组仍然在编码器的滑动窗口中。

处理图13的分组序列的解码器接收未编码分组0、1、4和6以及已编码分组7(其包含符号1至6的线性组合),而分组2、3和5被擦除。因此,源符号1和源符号2被递送,未决符号3和未决符号5是未知的,并且未决符号4和未决符号6是已知的但不可递送。在第二次生成之后在第一反馈接合点处,解码器具有针对前两次生成中的六个符号的五个分组。因此,该解码器请求发送6-5=1个附加分组,该附加分组包含来自第一次生成的未知符号(即,源符号3)的线性组合。

对于第三次生成,包含符号3的未编码分组8被擦除,未编码分组9、10和11也被擦除,而包含符号4至9的线性组合的分组12被接收。因此,未决符号3、5、7、8和9是未知的,并且未决符号4和未决符号6仍然是已知的但不可递送。由于解码器仍然仅具有针对前两次生成中的六个符号的五个分组,该解码器请求发送6-5=1个附加分组,该附加分组包含来自前两次生成的未知符号(即,符号3和符号5)的线性组合。

对于第四次生成,解码器接收已编码分组13。与接收到的分组0、1、4、6和7组合,已编码分组13产生与六个源符号(we=6)相关联的六个分组(wd=6)。由于wd≥we,根据基本线性代数,这些分组中的线性组合产生了一个方程组,可以求解该方程组以恢复源符号1至6。因此,编号为3和5的未知未决符号被恢复并与编号为4和6的符号一起被递送。未决符号7、8和9是未知的,并且未决符号10、11和12是已知的但不可递送。

在接收到未编码分组14至16而不是已编码分组17之后,解码器具有针对第三次生成和第四次生成中的六个符号的四个分组(编号为12、14、15和16)。因此,编码器请求发送6-4=2个附加分组,该附加分组包含来自这些生成的未知符号(即,符号7、8和9)的(线性独立的)线性组合。注意,已编码分组12向第三次生成计数,因为其已编码符号跨第二次生成和第三次生成,但是第二次生成中的所有源符号都是已知的并且可以从线性组合中减去。

对于第五次生成,解码器接收已编码分组18和19,完成对第三次生成和第四次生成中的六个源符号解码所需要的六个分组。由此解码器恢复了与已知符号10、11和12一起递送的未知符号7、8和9。最后,解码器在接收到相应的未编码分组20、21和22时立即递送源符号13、14和15。

注意,图13的实施例是需要生成的,而图6和图7的实施例可以是不需要生成的,这表明本文所描述的有限滑动窗口技术可以应用于任一种情况。还要注意,在每次生成之后,仅提供关于作为有限滑动窗口的一部分的符号的反馈。例如,分组12是源符号4-9的线性组合,即滑动窗口的最后六个符号(即,fec窗口内的符号)。在接收到反馈时,编码器发送分组13,即丢失的分组3和分组5的线性组合。在这种情况下,尽管符号3在fec窗口之外,但符号3仍然在编码器的滑动窗口内,因此符号3可以包括在分组13中。

根据图13的实施例与图12的现有技术擦除编码相比具有不同之处和优点。图13的分组序列擦除与图12的序列相同编号的分组,但每个分组的内容是不同的。还要注意,图12和图13两者都指示在分组0之后递送源符号1、在分组1之后递送符号2、在分组13之后递送符号3至6等,并且图12和图13的解码器都具有类似的复杂度和存储界限。然而,有利地的是图13的解码器执行得更快,因为该解码器具有滑动窗口码而不是系统化块码的解码延迟。

图14、图14a、图14b和图14c示出了具有本文所描述的有限滑动窗口概念的反馈机制的四种不同应用,其中解码窗口大小是wd=5并且解码系数矩阵包含至少两个接收到的系数向量(1,a,b,0,0)和(0,0,0,1,c)。在每个图中,由列标签a、b、c、d和e指示的五个源符号分别对应于由分组p1、p2、p3、p4和p5携带的符号,并且水平线指示反馈请求,如图12和图13中所示。图14a和图14c示出了期望以吞吐量/效率对延迟权衡的形式的更低时延和更大灵活性的应用。

在图14中,arq应用于较高层。由于没有源符号被递送到arq层,解码器反馈请求所有五个源分组,因此重新传输p1、p2、p3、p4和p5。图14a、图14b和图14c示出了反馈与本文所描述的有限滑动窗口概念的更高效的组合,其中反馈与编码层集成。

在图14a中,代替请求所有源符号,解码器反馈过程请求三个完全编码的分组(即,三个分组,其中滑动窗口中的所有符号被组合)。在接收到第三已编码分组时,三个所接收的分组使得能够解码所有源符号,因为解码器具有五个分组,其包含这五个源符号的五个线性独立组合。

图14b示出了其中重新传输的分组是系统化的(即,未编码的)配置。与图14不同,图14b中的重新传输的分组可以由解码器使用。因此,在对解码器的第一存储分组(1,a,b,0,0)进行解码之后,解码器可以与p1一起递送p3。然而,在接收到第三分组之后冗余分组被递送。

图14c示出了最佳配置,其中解码器反馈请求系统化的(即,未编码的)分组,但是解码器知道解码器系数矩阵中存在的分组。因此,仅请求分组p1、p2和p4,从而允许通过第三次接收的重新传输来递送所有分组。虽然图14a和图14b中的两种方案都可以在第三次接收的重新传输时递送所有分组,但是图14c中的方案表现更好,因为图14c中的方案更早地递送分组中的一些(例如,p1,p2和p3)并且由于重新传输的系统化性质要求更少的解码操作。

因此,可以认识到,本文所描述的有限窗口概念允许系统化码,该系统化码不时地插入冗余分组或已编码分组,从而实现最小的延迟。特别是在反馈情况下,如果编码器系统化地发送分组,则解码器可以请求增加解码概率的分组。当然,编码器可以另外地发送冗余分组或已编码分组,如图14a所描绘的。

本文所描述的技术和结构可以以各种不同形式中的任何一种来实现。例如,本文所描述的概念、系统和技术的特征可以体现在这样的设备中:有线和无线的各种形式的通信设备;电视机;机顶盒;音频/视频设备;具有或不具有无线能力的膝上型计算机、掌上型计算机、台式计算机和平板计算机;个人数字助理(pda);电话;寻呼机;卫星通信器;具有通信能力的相机;网络接口卡(nic)和其他网络接口结构;基站;接入点;集成电路;作为指令和/或数据结构存储在机器可读介质上;和/或其他格式。可以使用的不同类型的机器可读介质的示例包括软盘、硬盘、光盘、压缩盘只读存储器(cd-rom)、数字视频盘(dvd)、蓝光盘、磁光盘、只读存储器(rom)、随机存取存储器(ram)、可擦除可编程rom(eprom)、电可擦除可编程rom(eeprom)、磁卡或光卡、闪速存储器和/或适用于存储电子指令或数据的其他类型的介质。

在前述的详细描述中,为了简化本公开,在一个或多个单独的实施例中将本文描述的概念、系统和技术的各种特征组合在一起。本公开的方法不应被解释为反映本文所描述的要求保护的概念、系统和技术要求比每项权利要求中明确引述的更多的特征的意图。相反,创造性方面可以在于少于每个公开的实施例的所有特征。

已经描述了用于说明作为本公开的主题的各种概念、结构和技术的实现方式,现在对于本领域普通技术人员来说显而易见的是,可以使用包含这些概念、结构和技术的其他实现方式。因此,认为该专利的范围不应限于所描述的实现方式,而是应仅受所附权利要求书的精神和范围的限制。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1