应用于对各类码进行编码和解码的原地变换

申请号 CN200680029326.0 申请日 2006-06-12 公开(公告)号 CN101243664B 公开(公告)日 2013-06-05
申请人 数字方敦股份有限公司; 发明人 M·G·卢比; M·A·肖克洛拉希;
摘要 在使用具有 存储器 限制的计算设备编码数据码元的 编码器 中,一种执行变换的方法包括:将源 块 加载到该计算设备的存储器中;执行小于该源块的全部的中间变换,然后在存储器中用中间结果替换该源块的一部分并随后以存储在存储器中的输出码元构成经编码码元的集合的方式完成该变换。一种 解码器 以允许基本使用同一存储器来存储接收到的数据和已解码的源块的顺序执行解码步骤,从而就像执行原地(in-place)变换一样。使用原地变换,随着接收到的数据被变换为经解码的源数据,为接收到的数据所预留的大部分存储器可被重写而不需要类似大小存储器来用于经解码的源数据。
权利要求

1.一种在将安排为多个源码元的数据编码为多个经编码的码元的编码器中执行从所述源码元到所述经编码的码元的变换的方法,其中所述源码元中的一定数目即k个将通过对于纠错码的生成矩阵B运算被变换为n个经编码的码元,所述生成矩阵B为方形矩阵,所述方法包括:
访问存储在第一存储器中的所述k个源码元;
从存储在所述第一存储器中的所述源码元形成源列向量S;
计算将所述生成矩阵B分解为置换矩阵P、下三矩阵L和上三角矩阵U的乘积;
通过使用所述上三角矩阵U变换所述源列向量S来计算第一经变换的列向量S',该变换包括所述上三角矩阵U乘所述源列向量S的向下方向上的第一原地矩阵变换,其中从所述源列向量S的第一码元开始并且到S的第n码元结束,用U中的一行与S的当前值的内积来代替S的码元;
在所述第一存储器存储所述第一经变换的列向量S'的码元,这些码元替换所述k个源码元中的至少一些;
通过使用所述下三角矩阵L变换所述第一经变换的列向量S'来计算第二经变换的列向量S″,该变换包括所述下三角矩阵L乘所述第一经变换的列向量S'的向上方向上的第二原地矩阵变换,其中从所述第一经变换的列向量S'的第一码元开始并且到S'的第n码元结束,用L中的一行与S’的当前值的内积来代替S'的码元;
在所述第一存储器存储所述第二经变换的列向量S″的码元,这些码元替换所述第一经变换的列向量S'的码元中的至少一些;
通过使用所述置换矩阵P变换所述第二经变换的列向量S″来计算第三经变换的列向量S″′,该变换包括所述置换矩阵P乘所述第二经变换的列向量S″的第三原地矩阵变换,其中从所述第二经变换的列向量S″的第一码元开始并且到S″的第n码元结束,如果(i,P[i])是P中值“1”的位置,则用S″[i]代替S″[P[i]],所述第三经编码的列向量S″′的码元包括所述经编码的码元;以及
在所述第一存储器存储所述第三经变换的列向量S″′的码元,这些码元替换所述第二经变换的列向量S″的码元中的至少一些。
2.如权利要求1所述的方法,其特征在于,在变换过程中所述第一存储器中的最大码元数目不大于n+1和k+1中的较大值。
3.如权利要求1所述的方法,其特征在于,在变换过程中所述第一存储器中的最大码元数目与n+1和k+1中的较大值的接近程度远高于其与k+n的接近程度。
4.如权利要求1所述的方法,其特征在于,n不等于k。
5.如权利要求1所述的方法,其特征在于,n等于k。
6.如权利要求1所述的方法,其特征在于,所述变换表示Reed-Solomon编码、广义重复积累编码、连反应编码、或LDPC编码中的一个。
7.如权利要求1所述的方法,其特征在于,在所述变换中使用的码元运算的数目大致与所述生成矩阵的非零元素的数目或与所述生成矩阵的逆的非零元素的数目成比例。
8.如权利要求1所述的方法,其特征在于,计算第一经变换的列向量包括当所述上三角矩阵是稀疏表示时对所述源列向量的多个码元进行时间线性的计算。
9.如权利要求1所述的方法,其特征在于,所述生成矩阵表示一种允许高效的原地编码的码。
10.如权利要求1所述的方法,其特征在于,差错纠正是删除纠正。
11.一种在将安排为多个经编码的源码元的数据解码为多个经解码的码元的解码器中执行从所述经编码的码元到所述经解码的码元的变换的方法,其中所述经编码的码元中的一定数目即r个将被变换为d个经解码的码元,所述方法包括:
访问存储在第一存储器中的所述r个经编码的码元,从k个源码元通过纠错码的生成矩阵B运算生成所述r个经编码的码元,所述生成矩阵B为方形矩阵;
从存储在所述第一存储器中的所述经编码的码元形成经编码列向量S;
计算将所述生成矩阵B分解为置换矩阵P、下三角矩阵L和上三角矩阵U的乘积;
通过使用所述置换矩阵P变换所述经编码列向量S来计算第一经变换的列向量S',该-1
变换包括所述置换矩阵的逆P 乘所述经编码列向量S的第一原地矩阵变换,其中从所述经-1 -1
编码列向量S的第一码元开始并且到S的第n码元结束,如果(i,P [i])是P 中值“1”的-1
位置,则用S[i]代替S[P [i]];
在所述第一存储器存储所述第一经变换的列向量S'的码元,这些码元替换所述r个经编码的码元中的至少一些;
通过使用所述下三角矩阵L变换所述第一经变换的列向量S'来计算第二经变换的列向量S″,该变换包括从所述下三角矩阵L导出的第一矩阵 乘所述第一经变换的列向量S'的向下方向上的第二原地矩阵变换,其中 中的元素对应于L使得并且该变换包括从所述第一经变换的列向量S'的第一
码元开始并且到S'的第n码元结束,用 中的第i行与S'的内积来代替S'[i];
在所述第一存储器存储所述第二经变换的列向量S″的码元,这些码元替换所述第一经变换的列向量S'的码元中的至少一些;
通过使用所述上三角矩阵U变换所述第二经变换的列向量S″来计算第三经变换的列向量S″′,该变换包括从所述上三角矩阵U导出的第二矩阵 乘所述第二经变换的列向量S″的向上方向上的的第三原地矩阵变换,其中 中的元素对应于U使得并且该变换包括从所述第二经变换的列向量S″的第
一码元开始并且到S″的第n码元结束,用 中的第i行与S″的内积来代替S″[i],所述第三经变换的列向量S″′的码元包括所述经解码的码元;以及
在所述第一存储器存储所述第三经变换的列向量S″′的码元,这些码元替换所述第二经变换的列向量S″的码元中的至少一些。
12.如权利要求11所述的方法,其特征在于,在变换过程中所述第一存储器中的最大码元数目不大于r+1和d+1中的较大值。
13.如权利要求11所述的方法,其特征在于,在变换过程中所述第一存储器中的最大码元数目与r+1和d+1中的较大值的接近程度远高于与r+d的接近程度。
14.如权利要求11所述的方法,其特征在于,所述变换表示Reed-Solomon解码、广义重复积累编码、连锁反应编码、或LDPC编码中的一个。
15.如权利要求11所述的方法,其特征在于,在所述变换中使用的码元运算的数目大致与所述生成矩阵的非零元素的数目或与所述生成矩阵的逆的非零元素的数目成比例。
16.如权利要求11所述的方法,其特征在于,计算第二经变换的列向量包括当所述下三角矩阵是稀疏表示时对所述第一经变换的列向量的多个码元进行时间线性的计算。
17.如权利要求11所述的方法,其特征在于,所述生成矩阵表示一种允许高效的原地解码的码。
18.如权利要求11所述的方法,其特征在于,差错纠正是删除纠正。
19.一种在将安排为多个源码元的数据编码为多个经编码的码元的编码器中执行从所述源码元到所述经编码的码元的变换的设备,其中所述源码元中的一定数目即k个将通过对于纠错码的生成矩阵B运算被变换为n个经编码的码元,所述生成矩阵B为方形矩阵,所述设备包括:
用于访问存储在第一存储器中的所述k个源码元的装置;
用于从存储在所述第一存储器中的所述源码元形成源列向量S的装置;
用于计算将所述生成矩阵B分解为置换矩阵P、下三角矩阵L和上三角矩阵U的乘积的装置;
用于通过使用所述上三角矩阵U变换所述源列向量S来计算第一经变换的列向量S'的装置,该变换包括所述上三角矩阵U乘所述源列向量S的向下方向上的第一原地矩阵变换,其中从所述源列向量S的第一码元开始并且到S的第n码元结束,用U中的一行与S的当前值的内积来代替S的码元,该装置还用于通过使用所述下三角矩阵L变换所述第一经变换的列向量S'来计算第二经变换的列向量S″,该变换包括所述下三角矩阵L乘所述第一经变换的列向量S'的向上方向上的第二原地矩阵变换,其中用L中的一行与S’的当前值的内积来代替所述第一经变换的列向量S'的码元,其中从所述第一经变换的列向量S'的第一码元开始并且到S'的第n码元结束,用L中的一行与S’的当前值的内积来代替S'的码元,并且该装置还用于通过使用所述置换矩阵P变换所述第二经变换的列向量S″来计算第三经变换的列向量S″′,该变换包括所述置换矩阵P乘所述第二经变换的列向量S″的第三原地矩阵变换,其中从所述第二经变换的列向量S″的第一码元开始并且到S″的第n码元结束,如果(i,P[i])是P中值“1”的位置,则用S″[i]代替S″[P[i]],所述第三经编码的列向量S″′的码元包括所述经编码的码元;
用于在所述第一存储器存储所述第一经变换的列向量S'的码元的装置,这些码元替换所述k个源码元中的至少一些,所述用于存储的装置还用于在所述第一存储器存储所述第二经变换的列向量S″的码元,这些码元替换所述第一经变换的列向量S'的码元中的至少一些,并且所述用于存储的装置还用于在所述第一存储器存储所述第三经变换的列向量S″′的码元,这些码元替换所述第二经变换的列向量S″的码元中的至少一些。
20.如权利要求19所述的设备,其特征在于,所述编码器在移动电话发射机和/或适于车用的发射机中。
21.如权利要求19所述的设备,其特征在于,所述编码器在数字媒体发射机。
22.一种在将安排为多个经编码的源码元的数据解码为多个经解码的码元的解码器中执行从所述经编码的码元到所述经解码的码元的变换的设备,其中所述经编码的码元中的一定数目即r个将被变换为d个经解码的码元,所述设备包括:
用于访问存储在第一存储器中的所述r个经编码的码元的装置,从k个源码元通过纠错码的生成矩阵B运算生成所述r个经编码的码元,所述生成矩阵B为方形矩阵;
用于从存储在所述第一存储器中的所述经编码的码元形成经编码列向量S的装置;
用于计算将所述生成矩阵B分解为置换矩阵P、下三角矩阵L和上三角矩阵U的乘积的装置;
用于通过使用所述置换矩阵P变换所述经编码列向量S来计算第一经变换的列向量S'-1
的装置,该变换包括所述置换矩阵的逆P 乘所述经编码列向量S的第一原地矩阵变换,其-1 -1
中从所述经编码列向量S的第一码元开始并且到S的第n码元结束,如果(i,P [i])是P-1
中值“1”的位置,则用S[i]代替S[P [i]],该装置还用于通过使用所述下三角矩阵L变换所述第一经变换的列向量S'来计算第二经变换的列向量S″,该变换包括从所述下三角矩阵L导出的第一矩阵 乘所述第一经变换的列向量S'的向下方向上的第二原地矩阵变换,其中 中的元素对应于L使得 并且该变换包括从所述第
一经变换的列向量S'的第一码元开始并且到S'的第n码元结束,用 中的第i行与S'的内积来代替S'[i],并且该装置还用于通过使用所述上三角矩阵U变换所述第二经变换的列向量S″来计算第三经变换的列向量S″′,该变换包括从所述上三角矩阵U导出的第二矩阵 乘所述第二经变换的列向量S'的向上方向上的的第三原地矩阵变换,其中 中的元素对应于U使得 并且该变换包括从所述第二经变换的
列向量S″的第一码元开始并且到S″的第n码元结束,用 中的第i行与S″的内积来代替S″[i],所述第三经变换的列向量S″′的码元包括所述经解码的码元;
用于在所述第一存储器存储所述第一经变换的列向量S'的码元的装置,这些码元替换所述r个经编码的码元中的至少一些,所述用于存储的装置还用于在所述第一存储器存储所述第二经变换的列向量S″的码元,这些码元替换所述第一经变换的列向量S'的码元中的至少一些,并且所述用于存储的装置还用于在所述第一存储器存储所述第三经变换的列向量S″′的码元,这些码元替换所述第二经变换的列向量S″的码元中的至少一些。
23.如权利要求22所述的设备,其特征在于,所述解码器在移动电话接收机和/或适于车用的接收机中。
24.如权利要求22所述的设备,其特征在于,所述解码器在数字媒体接收机中。

说明书全文

应用于对各类码进行编码和解码的原地变换

[0001] 相关申请的交叉引用
[0002] 本申请要求于2005年6月10日提交的、其内容出于所有用途通过全文援引包括于此的美国专利申请S/N 60/689,632的优先权并是其非临时申请。发明领域
[0003] 本申请一般涉及数据编解码,尤其涉及在无需使用大量辅助存储器的情况下计算数据的线性变换。
[0004] 发明背景
[0005] 许多应用通过变换在以下被称为“源”的给定数据块来实现它们的结果。如在此所使用的,措辞“源块”是指存储在一个或多个源上的任何数据。因此,来自文件服务器或计算机存储设备的文档、图像和文件都是源块的示例。源块可以具有未知大小(诸如从流送源的输出所取出的源块)或它们可以具有已知大小(诸如存储在硬盘上的一兆字节的图像)。总之,源块是一个或多个源码元的序列,其中每个源码元是该源块中具有位置和值的一段数据。
[0006] 这里,源块的变换是指为了实现某一结果而对该源块执行的动作。例如,在源块由诸如相机的外围设备来捕捉的情形中,一种可能的变换是将该源块压缩到显著更小的大小从而便于其在更小的存储设备上存储或便于更快地传输到一个或多个可能的预期接收者。作为另一示例,源块可被指定在诸如计算机网络的信道或其中具有预期的损坏或丢失的信道上传输。在这种情形中,可在传输前对源块进行变换以增强其关于传输差错的稳健性。
[0007] 在这些要求源块变换的许多应用中,特别有利的一点是执行变换以增强源块对抗传输中出现的差错的稳健性。传输是通过信道将源块从一个或多个发送器发送到一个或多个接收者以传递源块的过程。如果一个发送器通过一完美信道连接至任意数目的接收者,则由于所有数据都将被正确接收,所以接收到的数据可以是原始源块的精确副本。然而,在信道不完美的情形中,对于大多数实际信道都是这种情形,或者数据从一个以上的发送器发射,对于一些系统即是这种情形,所接收到的可能不是精确副本。
[0008] 信道不完整性可以表示数据删除、数据不完全性、或数据损坏。数据传输的动作不仅表示地理上相隔位置之间的数据传输,而且传输还可包括数据在物理上从未移动的情形。例如,存储在可能有缺陷的存储介质上的源块可构成一种形式的传输,因为当该源块被在此访问时可能会有数据损坏。
[0009] 一种用以保护源块对抗可能的传输差错的常见过程是编码。采用编码,源块被变换或从该源块计算出新的数据集(有时被称为“冗余”或“修复”数据)。经变换的源块通常包含从原始源块计算出的冗余信息,使用该内部冗余的目的是为了得到关于在传输过程中出现的差错的信息并纠正这些差错。关于设计和使用码的理论和实践已有大量文献。
[0010] 码的选择取决于具体应用以及将在其上进行传输的通信信道。通常,所选的码具有一定的线性特性。例如,在源块是由作为位组的一个或多个源码元构成的情形中,线性条件可保证两个源块的码元级(symbol-wise)和(映射)的编码等于这两个源块的编码的码元级和(映射)。这种线性条件可极为有利地用来描述和计算编解码过程。实际中使用的码的很大的子类都满足这种线性条件。
[0011] 导致对源块的编码的变换的逆过程是解码过程。在该过程中,经编码的源块的一(可能损坏的)版本以这种方式处理以得到对源块在传输前的原始状态的良好(或者有时为可能的最佳)估计。
[0012] 线性编码方案的许多益处之一是编码和解码过程可用矩阵来解释的事实。矩阵是以二维数组形式包含若干项的数学对象。如本领域的技术人员已知的,矩阵可被方便地用来表示对象之间的映射,例如组成源块的码元集之间的映射。
[0013] 编解码过程常常得益于用以存储中间结果的辅助存储器的使用。例如,一些解码过程可能要求在已解码的源块之外保持接收到的数据的副本。编解码过程所需的辅助存储器的量对于具有有限资源的设备而言可能过大。例如,在设备是类似于移动电话个人数字助理(PDA)等移动接收设备的情形中,设备上的存储器可能较小,和/或该存储器可能已被预留给要在该设备上运行的其它应用。在这种情形中,编解码过程应经济而有效地使用存储器,但这常常难以实现。发明概要
[0014] 在根据本发明的诸方面的解码器的一个实施例中,解码器被编程为以允许基本使用同一存储器来存储接收到的数据和已解码的源块的顺序执行解码步骤,从而就像执行原地(in-place)变换一样。使用原地变换,随着接收到的数据被变换为经解码的源数据,为接收到的数据所预留的大部分存储器可被重写而无需一大部分存储器用于接收到的数据以及近似大小的大部分存储器用于经解码的源数据。
[0015] 通常,原地变换的使用导致特定过程运行时间的减少,因为该过程将花费较少时间访问存储器,从而提供了除仅在于减小的存储器要求之外的更多益处。这避免了如果存储数据的总大小过大则处理单元可能被迫使访问辅助的较慢存储设备的问题。
[0016] 本发明的实施例使用在无需使用大量的辅助存储器的情况下执行原地线性变换的方法和过程。这些方法和过程可与源块的FEC编码和解码变换一起使用。
[0017] 结合附图的以下具体描述将提供对本发明的实质和优点的更好的理解。

附图说明

[0018] 这里的文本和等式示出了本发明的诸方面。
[0019] 图1是采用根据本发明的实施例的FEC编码的通信系统的高层示图。
[0020] 图2示出了与图1中的系统相类似但具有多个发送器和接收机的通信系统。
[0021] 图3示出了可被用来实现发送器和/或接收机的硬件的一个示例。
[0022] 图4示出了常规FEC解码过程。
[0023] 图5示出了根据本发明的原地FEC解码过程的一个实施例。
[0024] 图6是根据本发明的一实施例的变换过程的流程图
[0025] 图7是系统Reed-Solomon码的原地解码方法的流程图。
[0026] 图8是进一步示出了系统Reed-Solomon码的原地解码方法的流程图。
[0027] 图9是一种向量计算方法的流程图。
[0028] 图10是一种向量计算方法的流程图。
[0029] 图11示出了可用于解码的矩阵。
[0030] 图12示出了一矩阵及其变换。
[0031] 图13示出了可用于处理的数据结构。
[0032] 图14示出了一矩阵及其变换。
[0033] 图15示出了一矩阵及其变换。
[0034] 图16示出了一矩阵及其变换。
[0035] 图17是一种方法的流程图。
[0036] 图18是一种方法的流程图。
[0037] 图19是一种方法的流程图。
[0038] 图20是一种方法的流程图。
[0039] 图21是一种方法的流程图。
[0040] 图22是一种方法的流程图。
[0041] 图23是一种方法的流程图。
[0042] 图24是一种方法的流程图。
[0043] 发明具体描述
[0044] 基本使用同一存储器来存储接收到的数据和经解码的源块的过程通常被称为原地变换。原地变换的使用通常导致特定过程的运行时间减小,因为该过程将花费较少时间访问存储器。这是特别重要的,因为如果存储数据的总大小太大,则处理单元将被迫访问次级、较缓慢的存储设备。本发明的实施例使用在无需使用大量辅助存储器的情况下执行原地线性变换的方法和过程。这些方法和过程尤其适用于源块的FEC(前向纠错)编码和解码转换。
[0045] 虽然本发明适用于许多设备,但这里并没有明确描述所有情形。并非作为限制的示例包括移动电话、计算机、手持计算设备、媒体播放器、通信设备、和/或用以实现这些设备的硬件和/或软件
[0046] 概览
[0047] 图1中示出了在发送器110上采用FEC编码而在接收器140上采用FEC解码的通信系统的高层示图。应该理解的是,发送器110和接收器140可包括较广范围的设备。在许多实施例中,发送器和接收器被包含在单个收发器设备内并且两个或多个这种设备可在其之间进行通信。
[0048] 在图1中,发送器110包括FEC编码器120,该FEC编码器被用于向通过通信信道130被发送到包括FEC解码器150的接收器140的数据添加保护。发送器110可按包,例如网际协议(IP)包或其它形式的包,来发送由FEC编码器120生成的数据,这些数据在每个包中包括允许接收器140确定该包中的数据是如何生成和/或其表示发送数据的哪一部分的标识信息。
[0049] 信道130可以是网络信道、无线信道、PSTN信道、或其它信道。通常,信道130具有一些约束,在这些约束下由于某些条件而丢失数据。通常,对于包网络,如果接收到的包的一部分不可读,则整个包被丢弃。因此,具有一些从发送器110发送的包被认定为未在接收器140处接收到的情形,所以需要从这种丢失中恢复的机制。
[0050] 接收器140向FEC解码器150提供尽可能多的所需的接收到的包,而FEC解码器150恢复所有或部分数据。FEC(前向纠错)提供了预先设于前向信道上以允许在发生差错时进行纠错的机制。差错并不是一定存在,在这种情形下FEC工作仅是一种备份,而在某些情形中,可能会发生多于使用FEC所能恢复的差错,在这些情形下通信失败或者在请求重新传输等时发生辅助通信。
[0051] 传输无需是点对点的。如图2中所示,系统可具有多个发送器和多个接收器。图2示出了包括发送器210、接收器230、240以及发送器/接收器220的一种系统,其中各自包括FEC编码器(211)、FEC解码器(232、242)、或这两者(222、221)。在图2所示示例中,所有发送器、发送器/接收器以及接收器都可在信道250上通信,该信道250可包括集成IP网络、不相交(disjoint)网络的组合、或网络的其它类似组合。
[0052] 图3更具体地示出了可被用来实现发送器和/或接收器的硬件的示例。如这里所示的,FEC编码器/解码器305包括:CPU 310,用于执行操作;高速缓存320,为CPU 310提供具有非常快速存取的临时存储;RAM 330,为CPU 310提供具有相对快速存取的大量存储;以及盘340,为CPU 310提供具有合理存取速度的大量永久性存储。
[0053] 本实施例的许多其它变形是可能的。例如,高速缓存320可被划分为由操作系统(OS)控制的一部分以及在FEC编码/解码过程的控制下用以从其它存储器设备预载数据以备供CPU处理即直接存储器存取(DMA)操作的一部分。作为其它示例,可能有一个以上等级的高速缓存,可能有诸如FLASH(闪存)等其它类型的存储设备、以及可以省略诸如盘存储等某些存储类型。
[0054] 更一般地,具有存储器的计算设备经常具有不同类的存储器。某些类的存储器被认为比其它存储器“更近”,即更近存储器可能物理上更靠近处理器或具有更快的响应速率,这允许相对于较远、需要更长导线、或较慢的存储器而言处理器可更快地读取和/或写入该更近存储器。更具一般性地,由于等待时间、响应速率、用以读取/写入存储器的位置所需能量的量、用以维持存储器中的信息的能量的量、每位的成本以及其它考虑因素,一类存储器可能优于其它类。诸类存储器通常可按优选程度来排序,其中将最快、最具功率效率的存储器作为优选。标准工程和设计约束可指示多类存储器的使用。例如,可能不只是仅想要RAM高速缓存存储器,因为如果这样就可能没有永久存储,而且也可能不只是仅想要盘存储器,因为如果这样处理器存取就较慢。
[0055] 如以上刚解释的,设备可具有按优选程度排序的不同类的存储器。当最优选的存储器并非大至足以包含一特定计算操作的结果时,可能需要存储器管理,诸如换出至次优选的一类存储器。这些操作在等待时间、计算成本、功率使用方面增加成本,特别是在某些设备以及对于某些操作尤其如此,因此这里针对高效原地变换所述的方法和装置为设备的这些操作提供了极大益处。
[0056] 在图3的示图中,FEC编码器/解码器305可能控制各种存储器单元并且可能存在处于正在使用FEC编码器/解码器305的应用的控制下的其它部分。因此,例如当执行FEC编码时,该应用可控制其自己的要编码的源块副本,而FEC编码器在一单独存储器位置中可具有其自己的由该应用传给它的源块副本。
[0057] 在该示例中,不管该应用所使用的其它存储器如何,最小化FEC编码器所用的存储器可能较为重要,并且在该示例中可能有这种情形,即FEC编码器在其为该源块计算修复码元期间可重写部分或所有源块,因为该应用有其自己单独的源块副本和/或因为该应用已经向信道发送了源块的部分而无需保持源块的这些部分的副本。作为另一示例,通常在FEC解码期间,一旦编码码元已被用来恢复该源块的原始源码元则保持该编码码元的副本就不重要了。
[0058] 图4示出了常规FEC解码过程410(可能作为程序代码来实现),该过程可使用CPU405来根据存储在存储器420中的接收到的编码码元440生成源码元430的源块,其中存储器420可包括图3中所示的类型或其它类型。如图所示,FEC解码过程410用于码元存储所需的存储器的量通常为源块的总大小加编码码元的总大小。类似评论也适用于常规FEC编码过程。
[0059] 图5示出了根据本发明的原地FEC解码过程的一个实施例。在开始510时的原地FEC解码过程的快照示出了用以处理存储在存储器520中的接收到的编码码元530的CPU505,其中存储器520可包括图3中所示的类型或其它类型。在结束515时的原地FEC解码过程的快照示出了用以生成存储在最初由接收到的编码码元530所占用的同一存储器520中的源块540的经恢复的源码元的CPU 505。另外,在FEC解码过程的中间步骤中,用于码元的存储器略大于用以存储接收到的编码码元530所需的存储器的量和用以存储经恢复的源码元540所需的存储器的量中的最大值。因此,由于用以恢复源块所需的编码码元的总大小约为源块的大小,所以原地FEC解码过程510和515在解码过程中使用约为常规FEC解码过程410用于码元存储的存储器的一半。类似评论也适用于原地FEC编码过程。
[0060] 在后续章节中,我们介绍实现图5中所绘优点的方法和过程。具体而言,我们介绍对可被表示为线性码的FEC码的原地FEC编码和解码过程。
[0061] 线性运算符
[0062] 为了进一步示出示例实施例,我们将利用环的数学概念。在以下描述中,应该理解各种数学过程和步骤可由计算/通信设备通过硬件操作、程序指令执行等来实施。
[0063] 如本领域的技术人员所公知的,环是其上定义了满足分配律的加法和乘法这两种运算的集合。此外,仅考虑加法的该集合构成了阿贝尔群(abelian group),即加法的结果与被加数的排序无关,对于加法有一中性元素0,而对于每个元素都存在另一元素以使得这些元素的和为0。其它要求是乘法具有中性元素1,以使得任何元素与1的乘积不会改变该元素的值。对于普通环而言,我们不要求任何非零元素都具有乘法逆元素,也不要求乘法是可交换的。然而当这两个条件都满足时,则我们将该称为“域”。此概念是代数领域中的一个标准概念。
[0064] 如在此所用的,“码元”表示通常小于源块的一段数据。码元的大小通常可用位来M衡量,其中码元具有M个位的大小并且该码元是选自2 个码元的字母表。例如在通过包网络进行可靠信息传输的应用中,码元的大小可以等于包大小,或者可以更小以使得每个包包含一个或多个码元。
[0065] 映射(码元级和)是可在硬件和/或软件等中实现的将相同大小的码元对映射到该大小的另一码元的逻辑构造。我们用 来标示该映射,并用 来标示对码元对(S,T)的这种映射的镜像。这种映射的一个示例是逐位异或(XOR)
[0066] 这里使用的另一构造是一特殊类型的集合对码元的“动作”。假定A是具备了可交换加法运算“+”的集合,该加法运算具有一中性元素并且对于每一元素都包含其加性逆元素。这样一个集合通常也被称为阿贝尔群。该群对码元集合的“动作”是将由群元素r和码元S组成的对映射为另一码元的映射。当这种映射在群中遵守加法时,即对于群A中的每对元素a和b,都有 我们用r*S来标示这种镜像。如果A是环且该动作也遵守在A的乘法,其中在乘法运算符在A中为“·”,即(a·b)*S=a*(b*S),则我们将该动作称为“运算”。
[0067] 对码元的环或域操作的示例是很多的。以下提到了少量示例。该示例列表仅用于说明的目的,而不应被认为穷尽性列表,也不应被理解为限制本发明的范围。
[0068] 其中加法为异或(XOR)且乘法为逻辑运算AND(与)的由0和1组成的域GF(2),通过定义1*S=S和0*S=0来对码元集合进行操作,其中S标示任意码元而0标示全部由0组成的码元。
[0069] 域GF(4)由0、1、2、3四个元素组成,其中加法是整数的正常XOR而乘法通过表1来定义。
[0070] 表1.GF(4)的乘积
[0071]
[0072] 它按以下方式对相等大小的码元进行操作:对于码元S,我们分别用S[1]和S[2]来标示其前一半和后一半,从而S=(S[1],S[2])。然后,我们定义
[0073] 0*S=0
[0074] 1*S=S
[0075]
[0076]
[0077] 可快速验证这确实是一有效运算。可在具有2位的码元上定义该同一域的另一运算。在用整数0、1、2和3标识这些码元的情况下,可以看出该域的乘法表描述了与以上在2位码元情形中所定义的运算相吻合的运算。
[0078] 更一般地,如果K是度(degree)为d的GF(2)的扩展域,则可在其大小可被d除尽的码元上定义该域的一种运算。这种运算在作为1995年加利福尼亚州伯克利的国际计算机科学协会的技术报告编号TR-95-048出版的Bloemer等人的“An XOR-Based Erasure Resilient Coding Scheme(基于XOR的删除弹性编码方案)中进行了描述。这种方案使用了对作为具有二进制项的d×d矩阵的域K的所谓“正规表示(regular representation)”。
[0079] “线性变换”的概念可参照对码元的环运算的概念来定义。对于给定的整数m和n,由该运算导出的线性变换使用具有指定环中的项的矩阵空间将n个码元的向量映射为m个码元的向量。环R上的矩阵是项的2维集,其中每项都属于R。如果矩阵具有m行和n列,则其通常被称为m×n矩阵。对(m,n)被称为该矩阵的“格式”。同一格式的多个矩阵可使用底层域或环中的加法和减法来被作加或作减。如所公知的,格式为(m,n)的矩阵可与格式为(n,k)的矩阵相乘,从而产生格式为(m,k)的矩阵。
[0080] 如果B标示这样的一个矩阵,且B[j,k]标示B在位置(j,k)上的项,并且如果该矩阵对向量(S[1],S[2],...,S[n])进行变换并且如果(X[1],X[2],...X[m])标示变换后的向量,则以下关系有效:
[0081] 对于从1到m的所有j,
[0082] 如果S标示包括S[1],S[2],...,S[n]的列向量,并且X标示码元X[1],X[2],...X[m]的列向量,则该变换可被表示为
[0083]
[0084] 以上公式描述了在编码器或解码器中称为“简单变换过程”的从B和S计算X的过程,它可由以下步骤执行:
[0085] 1.将j设为1以及X[j]设为0。
[0086] 2.对于值从1到n的k,作
[0087] 3.将j递增1。如果j大于m,则停止,否则转到步骤2。
[0088] 这种线性变换在各种应用中是常见的。例如,在使用线性码来对一段数据或源块进行编码时,S可以是要编码的源块的源码元,X可以是S的经编码的版本,而B可以是该码的生成矩阵。在例如所用码是系统性的其它应用中,X可以是S的编码的冗余码元,而B可以是描述冗余码元对源码元的相关性的矩阵。在其它应用中,S可以是在传输后从接收到的一组码元得到的码元向量,而X可以对应于完全或部分未知的一组码元,以及B可以描述X与S之间的关系。例如当在面临删除或差错时解码Reed_Solomon码即是这种情形。后者在授予Shokrollahi等人的题为“Efficient List Decoding of Reed-Solomon Codes for Message Recovery in the Presence of High Noise Level(用于在存在高噪声电平情形下进行消息恢复的Reed-Solomon码的高效列表解码)”的美国专利No.6,631,172中进行了更具体的描述。
[0089] 在许多情形中,需要在不使用超过存储S所用的存储器太多的存储器的情况下从S计算出向量X。例如,在每个码元为512字节且m=n=1024的情形中,S和X各自为512千字节大小。如果该变换要在具有600千字节的存储器的设备上实现,在不使用辅助存储器的情况下将没有足够的存储器来同时保存S和X。
[0090] 在这些场合中,需要一种其中S的变换被原地实现的过程。如果X小于S,则这意味着S的前m项被X所代替,或者更一般地,S的一组指定的m个位置被X的诸位置所代替。在X大于S的情形中,则该原地变换可被解释为S在变换后包含X的前n项,或者更一般地,S在变换后包含X的一组指定的n项,而其余m-n项被存储在别处。如果X和S长度相同,则该原地变换可用X来代替S。在应用中,该过程不会使用太多的辅助存储器来实现其任务。因此,例如在其中计算出X并将其存储在别处而在随后将其复制到S的存储器位置的解决方案将是具有不足的解决方案。
[0091] 原地线性变换
[0092] 现在对原地线性变换的过程进行描述。令B为具有格式(m,n)的矩阵且令S为n个码元的列向量。给定B和S,将向下方向上B乘以S的原地线性矩阵变换B↓S定义如下:
[0093] 对于所有i=1,2,...m
[0094] 用B的第i行与当前S的内积来代替S[i]。
[0095] 参照图6对计算该原地运算的过程进行了解释。在步骤610,整数变量i被初始化为0。在步骤620,i的值被增至next(i),其中next(i)是使得B的行next(i)具有至少一个非零项的大于i的最小整数,并且如果行i后的所有行都具有全零项则将next(i)设为m+1。在步骤630,检查是否i>m,并且如果i>m则在步骤640停止处理,但如果r≤m则处理行进到步骤650,其中一临时码元值T被设为0并且整数变量j被设为0。在步骤660,值j被增至next(i,j),其中next(i,j)是使得在B的行i中B[i,next(i,j)]为非零项的大于j的最小整数,并且如果行i中B[i,j]之后的所有项全部为零就将next(i,j)设为n+1。在步骤670检查是否j>n,并且如果j>n则处理行进到步骤680,其中码元S[i]被设为T并随后处理返回到步骤620。如果在步骤670中j≤n则处理行进到步骤690,其中临时码元值T被重置为 并且随后处理返回到步骤660。
[0096] 从以上描述和图6可清楚看出,计算B↓S总共需要存储的码元数目是n+1个码元。
[0097] 令B为具有格式(m,n)的矩阵且令S为n个码元的列向量。给定B和S,将向上方向B乘以S的原地线性矩阵变换B↑S定义如下:
[0098] 对于所有i=m,m-1,...1
[0099] 用B的第i行与当前S的内积来代替S[i]。
[0100] 参照图7对计算该原地运算的过程进行了解释。在步骤710,整数变量i被初始化为m+1。在步骤720,值i被减至prev(i),其中prev(i)是使得B的行prev(i)具有至少一个非零项的小于i的最大整数,并且如果行i前的所有行都具有全零项则将prev(i)设为0。在步骤730,检查是否i<1,并且如果i<1则在步骤740停止处理,但如果i≥1则处理行进到步骤750,其中一临时码元值T被设为0并且整数变量j被设为0。在步骤760,值j被增至next(i,j),其中next(i,j)是使得在B的行i中B[i,next(i,j)]为非零项的大于j的最小整数,并且如果行i中B[i,j]之后的所有项全部为零就将next(i,j)设为n+1。在步骤770,检查是否j>n,并且如果j>n则处理行进到步780,其中码元S[i]被设为T并随后处理返回到步骤720。如果在步骤770中j≤n,则处理行进到步骤790,其中临时码元值T被重置为 并且随后处理返回到步骤760。
[0101] 从以上描述和图7可清楚看出,计算B↑S总共需要存储的码元数目是n+1个码元。
[0102] 令B为具有格式(n,n)的矩阵并且对于所有i=1,...,n,B[i,i]≠0。矩阵是从B如下推导出的矩阵:
[0103]
[0104] 注意,可容易地从B计算出 并且如果B是稀疏矩阵并且可被高效地存取,则 也是稀疏矩阵并且也可被高效地存取。还注意,如果B的各项是来自GF(2),则[0105] 以上定义的↑,↓和~运算具有以下特性:令B为具有格式(n,n)的矩阵且对于所0
有i=1,...,n,B[i,i]≠0,并且令S为n个码元的列向量。令S 标示S在应用任何变
0
换之前的值,即S=S。则:
[0106]
[0107]
[0108]
[0109]
[0110] 因此,例如 和B↑原地运算从以上意义上而言是互逆。如本领域的技术人员将认识到的,根据对称,我们也可定义例如S↓B和 形式的原地运算符,其中S是具有与以上所定义的相类似性质的m个码元的行向量。
[0111] 数类矩阵的原地变换
[0112] 现在对具有特殊性质的线性变换的原地计算过程进行描述。这些线性变换随后被用于为更具一般性的线性变换的计算构造原地过程的构件块。在下面,S标示m个码元的列向量,B标示例如可被视为GF(2)的扩展域(但该技术同样良好适用于一般的K)的域K上格式为(m,n)的矩阵,并且在该过程的结束时,用于码元向量S的存储存储变换 的结果。
[0113] 也有许多可用来最小化B所需的存储以及最小化计算这些运算所需的总计算量,但一般而言这是比用于正被变换的数据所需的存储量小的存储量。例如,当B为稀疏矩阵时,B的稀疏表示可能同样允许最小化计算所有运算所需的总计算量。例如当B为稀疏矩阵时,则有许多比顺序搜索更有效的方法来找到B的特定行或列中的下一非零项。在阅读本公开之后,这些类型的最优化以及可与这里所述的技术结合应用的其它最优化对于本领域的技术人员应是显而易见的。
[0114] 2.1置换矩阵
[0115] 在该情形中,B是格式为(n,n)的置换矩阵,即它在每一行和每一列中恰好具有一个非零项并且这些非零项为1。由于该矩阵是稀疏的,即具有非常少的非零项,所以在许多应用中希望不是将其表示为矩阵而是表示为列表(或比矩阵使用更少存储量的其它对象)。例如,B可以被表示为列表(B[1],...B[n]),其中(j,B[j])是B的非零项的位置。
[0116] 现在参照图18描述用B对S进行变换的过程。保存其中所有分量最初被初始化为0的二进制向量v[1],...,v[n]。该过程将使用一标示为T的附加码元。最初,T的值为全零。
[0117] 在步骤805,变量c被设为0。该变量对已经访问了对应于B的数组的多少个位置进行计数。在步骤810,该变量的值被递增1,并且在步骤815检查是否同时满足条件c<n+1和v[c]=1两者。若满足,则这意味着数组的该位置c已经被访问,并且还有其它位置要检查。过程返回到步骤810。若不满足,则c=n+1或者v[c]=0。在前一情形中,所有位置都已被访问,从而过程在步骤825结束。该测试是在步骤820执行的。如果在步骤820中c仍小于n+1,则必定v[c]=0,即位置c还未被访问。在该情形中,辅助变量d在步骤830中被设为B[c]。该值等于在变换后S[c]将所处的位置。在步骤835,作出查看d是否等于c的测试。若相等,则不再需要进一步的操作并且处理跳到步骤860。在步骤860,v[c]的值被设为1,并且计数c递增1。如果在步骤835中d不等于c,则在步骤840中交换T和S[c]的值。接着在步骤845,交换T和S[d]的值,将v[d]设成等于1,并且将d设成等于B[d]。在步骤850检查d的值是否等于c,并且如果为假则再次重复包括步骤845和850的循环。如果d等于c,则处理跳出该循环并在步骤855交换T和S[c]的值。在步骤860,将v[c]的值设为1,并且整个过程现在返回到c被递增1的步骤810。实际上,所述过程以循环的形式分解了矩阵B所给出的置换,并且逐个地寻找和处理这些循环。
[0118] 在许多情形中,并非在存储器中移动S的码元来计算用B对S进行原地变换,而是足以跟踪从S的码元的逻辑排序到S中的码元在存储器中的实际位置的映射而不用移动存储器中S的码元。例如,可以如下维护一映射:令p[1],...p[n]为从S的逻辑码元到它们在存储器中实际位置的映射,即对于所有i=1,...,n,p[i]为S中第i个逻辑码元在存储器中的位置。当使用该映射时,在通过置换矩阵B对S进行的变换中,上述过程可被应用至p[1],...,p[n]以重新计算S的逻辑到存储器的映射来代替如上所述地将其应用至S[1],...,S[n]。因此,用以描述图8中过程的变量T被用于临时存储p[c]的值而非码元S[c],并且图8中被应用至码元向量S[1],...,S[n]的所有逻辑都被代之以应用到向量p[1],...,p[n]。这种表示会是有利的,因为一般而言在CPU存储器带宽以及其它资源方面,通常在存储器中移动少得多的p[1],...,p[n]项比移动通常大得多的S[1],...,S[n]码元项成本要低。
[0119] 单项矩阵
[0120] 在该情形中,B是每一行和每一列中恰好一个非零项的格式为(n,n)的矩阵。置换矩阵是单项矩阵的一个特殊情形。现在参照图9描述计算单项矩阵的原地变换的过程。这种矩阵可被简单地描述为列表(B[1],...B[n];α[1],...,α[n]),其中对于j的所有相关值,B[j]是B的行j中非零元素的位置,而α[j]是该非零位置的值。
[0121] 计算关于B的原地变换的过程将用于计算关于B的置换部分的线性变换的过程用作子过程。在图9的步骤905,该过程使用图8中所述的过程来计算 其中C是通过用1代替B的非零项来从矩阵B得到的置换矩阵。在步骤910,整数变量i被初始化为0,并且随后在步骤920、940和950中执行一循环,其中对于1与n之间的每个值i,S[i]被用α[i]对该位置的该运算即α[i]*S[i]来代替。当该循环结束时,处理在步骤930停止。如本领域的技术人员所明晰的,参照图9所述的过程计算出 因为B可被写为对项为α[1],...,α[n]对角矩阵与矩阵C的乘积。此外,该过程中用于码元的存储为n+1。
[0122] 上三角矩阵
[0123] 令U是格式为(n,n)的上三角(对于所有j<i,U[i,j]=0)矩阵。则[0124]
[0125] 即,原地运算U↓S得到与U乘以S的结果相同的n个码元的向量。此外,如果U还是可逆的(对于所有i,U[i,i]≠0)则,
[0126]
[0127] 即,原地运算 导致与U的逆乘以S的结果相同的n个码元的向量。因此,矩阵乘法和矩阵逆的乘法两者可用上三角矩阵的原地运算来实现。注意,在U是稀疏矩阵的情形中,U↓S和 两者都是稀疏计算,即乘以U和乘以U的逆都可用稀疏原地计算来-1实现,即使U 不一定是稀疏矩阵。
[0128] 下三角矩阵
[0129] 令L是格式为(n,n)的下三角(对于所有j>i,L[i,j]=0)矩阵。则[0130]
[0131] 即,原地运算L↑S得到与L乘以S的结果相同的n个码元的向量。此外,如果L还是可逆的(对于所有i,L[i,i]≠0)则,
[0132]
[0133] 即,原地运算 导致与L的逆乘以S的结果相同的n个码元的向量。因此,矩阵乘法和矩阵逆的乘法两者可用下三角矩阵的原地运算来实现。注意,在L是稀疏矩阵的情形中,L↑S和 两者都是稀疏计算,即乘以L和乘以L的逆都可用稀疏原地计算来实-1现,即使L 不一定是稀疏矩阵。
[0134] 乘积
[0135] 在该情形中,B是数个上述类型的矩阵的乘积,即B是为M1·M2·...·Mt的乘积,其中每个Mj是置换矩阵、或单项矩阵、或上三角矩阵、或下三角矩阵中的任一矩阵。原地计算这种矩阵变换的过程是用Mt对S进行变换,然后用Mt-1对其结果进行变换,依此类推。
[0136] 普通方形矩阵
[0137] 对于格式为(n,n)的矩阵B,能够进行计算以将B分解成三个矩阵P、L、以及U的乘积,其中P是置换矩阵,L是在主对角上为1的下三角矩阵,以及U是上三角矩阵。这种分解可通过本领域的技术人员已知的各种过程来计算。这些过程中的一种是公知的Gaussian消元过程。然后,B对S的原地变换,即使用原地变换计算 简单地为:
[0138]
[0139] 现在参照图10更具体地来描述用于计算在任意方形矩阵B情形下的这种原地变换的过程。在步骤1010,计算出B的PLU分解。如上所提到的,这种分解可通过各种手段来计算。对于普通矩阵,一种可能方法是使用Gaussian消元法。对于例如稀疏矩阵、Cauchy矩阵等特殊矩阵,可采用更高效的方法,这是本领域的技术人员所公知的。在步骤1020,如参照图6所述的,计算出码元向量S的原地变换U↓S。接着,在步骤1030,经变换的码元集S被再次变换,这次如参照图7所述地计算原地变换L↑S。接着,在步骤1040再次对该经变换的新码元集作变换,如参照图8所述地计算置换矩阵P对S的原地变换。
[0140] 注意,如果B可逆,则以下过程将 计算为原地变换:
[0141]-1
[0142] 其中P 是为P的逆的置换矩阵。
[0143] 注意,使用上述原地变换过程计算 所需的计算量与 的基本相同。此外,如果U和L两者是稀疏表示的并且例如在n个非零项上仅具有线性,则 和两者都可使用上述原地变换在线性时间内被计算出。在上述原地变换的计算期间用于存储计算中任意时刻的码元的存储器或存储的量是n+1。
[0144] 应该注意,这里所述的过程是非常一般性的,但可能不是在所有感兴趣的情形中都是最高效的。以下描述了其它情形,在这些情形中可以比在一般情形中更高效地来实现该原地变换。
[0145] 非方形矩阵
[0146] 如果格式为(m,n)的矩阵B不是方形矩阵,则可利用与上述类似的方法以这种最小化存储器量的方式计算变换。例如,当该矩阵的行比列多时(即,m大于n),则仅仅原地计算出结果向量的前n个元素才是重要的。这按如下实现。
[0147] 令B’为标识由B的前n行构成的方形矩阵,并且令B”标识由B的后m-n行构成的矩阵。令S为最初保存要被变换的码元值的n个码元的列向量,并令S’标识附加的m-n个码元的列向量。然后, 可如下原地计算:
[0148] ·使用诸如在标题为“线性运算符”的章节中描述的“简单变换过程”等直接(straightforward)矩阵乘法将S’计算为
[0149] ·计算使得B′=P·L·U的P、L、U,其中P是置换矩阵,L是下三角矩阵而U是上三角矩阵。
[0150] ·计算原地变换
[0151] 注意,如果矩阵B’是下三角的,则以上过程的最后两步被简化为计算B′↑S,而如果矩阵B’是上三角的,则以上过程的最后两步被简化为计算B′↓S。
[0152] 类似地,如果n大于m,则可利用类似方法以如下替换向量S的前m项的方式来计算该变换。令B’标识由B的前m列构成的方形矩阵,并且令B”标识由B的后n-m列构成的矩阵。令S为最初保存要被变换的码元值的n个码元的列向量,并令S’标识S的前m个码元而令S”标识S的后n-m个码元。然后, 可按如下原地计算:
[0153] ·计算使得B′=P·L·U的P、L、U,其中P是置换矩阵,L是下三角矩阵而U是上三角矩阵。
[0154] ·计算原地变换
[0155] ·使用诸如在标题为“线性运算符”的章节中描述的“简单变换过程”等直接矩阵乘法的微小变形来将S’更新为 的结果。
[0156] 注意,如果矩阵B’是下三角的,则以上过程的前两步被简化为计算B′↑S′,而如果矩阵B’是上三角的,则以上过程的前两步被简化为计算B′↓S′。
[0157] 用于大多数稀疏矩阵的高效原地线性变换
[0158] 令M为图11中所示类型的格式为(n,n)的方形矩阵。在图11中,m≤n,L是格式为(m,m)的下三角可逆矩阵,A是格式为(m,n-m)的矩阵,B是格式为(n-m,m)的矩阵以及C是格式为(n-m,-m)的可逆矩阵。
[0159] 令S为n个码元的列向量。以下我们描述计算 和 的高效原地变换。这些原地变换为FEC编码和FEC解码方法以及稍后描述的即高效且原地的过程中的一些铺垫了基础。对于其中考虑类型M的矩阵的这些FEC码中的一些,M为稀疏矩阵,例如M中非零项的个数以n为量级,并且n-m相比于n较小,例如n-m是以n的平方根为量级。对于该示例,执行以下所述的计算 和 的原地变换所需的计算量以n个码元运算为量级,而在计算期间码元总共所用的空间或存储器最多为n+1。
[0160] 令M’为如图12所示地从M推导出的格式为(n,n)的方形矩阵。在图12中,L和B是与图11中所示的L和B相同的矩阵,由后n-m列与前m行构成的矩阵的所有项都为零,以及由后n-m列与后n-m行构成的矩阵是单位矩阵。注意,M’是可逆的下三角矩阵。图12-1还示出了M’的逆矩阵M’ 的形式。
[0161] 令D为图13A中所示的格式为(n,n-m)的矩阵。在图13A中,A和C是与图11中所示的A和C相同的矩阵。矩阵D还可被视为n个码元的列向量,其中每个码元是来自底层域K的n-m个域元素的级联。因此,当如上所述地将D视为n个码元的列向量时可定义格式为(n,n)的矩阵对D的运算,其中该矩阵对被视为n个码元的列向量的D的运算与在被视为矩阵时该矩阵与D的矩阵乘法相同。
[0162] 如上所述地将D视为n个码元的列向量,可以看出原地变换 得到具有如图13B所示的值的D,其中当E被视为格式为(m,n-m)的矩阵时,E=L-1·A,以及当F被视为格式为(n-m,n-m)的矩阵时,F=C-B·L-1·A。由于C和L都是可逆的,可以容易地验证F也是可逆的。令P、Λ和Y是格式为(n-m,n-m)的矩阵,其中F=P·Λ·Y,P为置换矩阵,Λ为下三角矩阵以及Y是上三角矩阵。这种因式分解可例如使用公知的Gaussian消元或类似技术来得到。
[0163] 令L’为如图14所示的格式为(n,n)的方形矩阵。在图14中,L是与图11中所示矩阵L相同的矩阵,由后n-m行与前m列构成的矩阵的所有项都为零,由后n-m列与前m行构成的矩阵的所有项都为零,以及由后n-m列与后n-m行构成的矩阵是单位矩阵。注意,L’是可逆的下三角矩阵。图14还示出了L’的逆矩阵L’-1的形式。
[0164] 令P’、Λ’和Y’分别是如图15A、15B和15C中所示的格式为(n-m,n-m)的方形矩阵,P、Λ和Y是使得F=P·Λ·Y的矩阵并且F如上所述,以及在P’、Λ’和Y’的每一个中,由后n-m列与前m行构成的矩阵的所有项都为零,由后n-m行与前m列构成的矩阵的所有项都为零,以及由前m行与前m列构成的矩阵是单位矩阵。注意,P’、Λ’和Y’是可逆矩阵。
[0165] 令N’为如图16所示的格式为(n,n)的方形矩阵。在图16中,L和A是与图11中所示的L和A相同的矩阵,由后n-m行与前m列构成的矩阵的所有项都为零,以及由后n-m列与后n-m行构成的矩阵是单位矩阵。注意,N’为可逆矩阵,并且虽然它不是字面意义上的下三角,但可以看出N′↑S原地计算出 的结果。图16还示出了N’的逆矩阵N’-1的形式。还可验证 原地计算出 的结果。
[0166] 基于以上介绍的概念,参照图17对计算在输入的M和S上的原地变换 的过程进行了描述。在步骤1710,计算出原地变换N′↑S。在步骤1720,计算出原地变换-1其中D如上所述,以及如上所述,矩阵F=C-B·L ·A是该变换结果的后n-m行。
在步骤1730,矩阵F被如上所述地因式分解为P、Λ和Y。在步骤1740,计算出原地变换Y′↓S。在步骤1750,计算出原地变换Λ′↑S。在步骤1760,计算出原地变换 在步骤1770,计算出原地变换 在步骤1780,计算出原地变换M′↑S。在步骤1790,由于原地变换结束所以过程停止。
[0167] 可以验证在图17中所述的过程结束时,向量S存储M乘以原始向量S的结果。注意,该过程中用于存储任意时刻的码元的存储至多为n+1,并且所有步骤上总计的码元运算2
的数目与M中非零项的数目和(n-m) 的和呈线性。
[0168] 图17中所述过程有许多可产生更高效率和优点的变形。例如,在原地运算期间,运算当中对单位子矩阵操作的那些部分可被跳过,因为这些运算不改变结果,即在计算N′↑S时可以跳过与N’的后n-m行的运算,因为这些运算不影响该原地变换的结果。作为另一变形的示例,可以在不影响其结果的情况下,将部分步骤重新排序。一种这样的变形是在步骤1730与步骤1740之间执行步骤1770。另一这样的变形是在步骤1740与步骤1750之间执行步骤1770,在这种情形下能够将步骤1740和1770组合为如图20中所示的一次原地变换,并将步骤1750和760组合为图21中所示的一次原地变换。作为变形的另一示例,步骤1730、1740、1750和1760可用将F乘以包括S的后n-m个码元的列向量并用结果替换S的后n-m个码元的步骤来代替。乘以F可以例如使用本公开中所述的原地变换或者诸如标准矩阵乘法等标准技术来执行。
[0169] 基于以上介绍的概念,参照图18对计算在输入的M和S上的原地变换 的过程的另一变形进行了描述。参照图18所述的原地变换使用总共存储的n+(n-m)+1个码元,即比参照图17所述的过程多n-m个码元,这具有码元运算的总数目与在 的直接非原地计算中所使用的相同的益处。因此,当M为稀疏时,以略多的码元存储为代价,以下参照图18所述的过程可采用比参照图17所述的过程更少的计算量。在到稍后描述的FEC码的应用中,n-m相比于n通常较小,因此参照图18所述的过程所需的额外的码元存储量与参照图17所述的过程所实现的最小码元存储量相比通常较小。
[0170] 令W为附加的n-m个码元的列向量。令Q标识包括M的前m行的格式为(m,n)的矩阵,并且令Q标识M的后n-m行的格式为(n-m,n)的矩阵。在图18的步骤1810中,使用直接矩阵乘法计算 在步骤1820,计算原地变换Q↑S。注意由于Q的前m列构成了下三角矩阵L,所以步骤1820中计算出的原地变换得到等于 的S的前m项。在步骤1830,W被复制到S的后n-m个码元。在步骤1840,由于该原地变换结束所以过程停止。
[0171] 基于以上介绍的概念,参照图19对计算在输入的M和S上的原地变换的过程进行了描述。在步骤1910,计算出原地变换 在步骤1920,计算出原地变换L′↑S。在步骤1930,计算出原地变换 其中D为如上所述,以及如上所述矩阵F=C-B·L-1·A是该变换结果的后n-m行。在步骤1940,矩阵F被如上所述地因式分解为P、Λ和Y。在步骤1950,计算出原地变换 在步骤1960,计算出原地变换 在步骤1970,计算出原地变换 在步骤1980,计算出原地变换 在步骤1990,由于该原地变换结束所以过程停止。
[0172] 可以验证在图19中所述的过程结束时,向量S存储M1乘以原始向量S的结果。注意,该过程中用于存储任意时刻的码元的存储至多为n+1,并且所有步骤上总计的码元运算2
的数目与M中非零项的数目和(n-m) 的和呈线性。
[0173] 以上参照图19所述的过程基本是参照图17所述的过程的逆。与参照图17所述的过程的情形一样,图19中所述过程有许多可得到更高效率和优点的变形。例如,步骤1940、-1 -11950、1960和1970可以用确定F 并随后将F 乘以包括S的后n-m个码元的列向量且用-1
其结果替换S的后n-m个码元的步骤来代替。F 的确定以及和它的乘法可以例如使用本公开所述的原地变换或诸如标准Gaussian消元和矩阵乘法等标准技术来执行。在为该步骤使用标准矩阵乘法的情形中,可能需要更多的码元存储,例如额外的n-m个存储码元,从而使得在该原地变换期间最大的码元存储为2·n-m+1个码元,然而在整个原地变换过程中用于码元的总存储量显著小于标准技术将使用的2·n,特别是当m接近n时。
[0174] 应用
[0175] Reed-Solomon码
[0176] 已知的一类用于在删除或损坏的情形中保护传输的线性码为Reed-Solomon码。有许多等效方式来描述这些码,诸如循环码、基于Vandermonde矩阵的码、基于Cauchy矩阵的码等。在所有这些情形中,可用矩阵与码元向量的乘法来描述编码过程。在源码元数目为k,输出码元数目为n,v标示要编码的k个源码元的列向量,以及w标示包含v的编码的n个码元的列向量的情形中,编码过程被描述为:
[0177]
[0178] 其中,M是格式为(n,k)的矩阵,它有时也被称为该码的生成矩阵。令M’标识包括M的前k行的格式为(k,k)的矩阵,并且令M”标识包括M的后r=n-k行的格式为(r,k)的矩阵。令w’标识w中的前k个码元,而令w”标识w中的后r个码元。
[0179] 在该码为系统性即在M与v的矩阵乘法之后结果的前k个码元w’与v的各项相一致的情形中,M’为单位矩阵。在系统码中,经编码的向量w’的各项被称为源位置。在这种情形中,M”被用于计算r个冗余码元w”。矩阵M可以各种方式来表示。例如,在需要非系统版本的情形中,M可以是Vandermonde矩阵。在系统的情形中,M”可以形成Cauchy矩阵。这些表示仅是出于示例性目的才提到的,而绝不构成穷尽性列表。
[0180] 当Reed-Solomon码为非系统时,参照图20所述的过程描述了在该过程中使用至多n+1个码元的存储来生成编码的原地变换。最初w’存储要编码的k个源码元。在该过程结束时,w存储编码结果,即w’存储前k个编码码元,而w”存储生成的剩余r个编码码元。在图20的步骤2010中,使用直接矩阵乘法,例如使用先前所述的“简单变换过程”将w”计算为 在步骤2020,M’被因式分解为P、L和U,其中这些矩阵的每一个都是(k,k)格式并且P为置换矩阵,L为下三角矩阵,以及U是上三角矩阵,因此M′=P·L·U。这种分解可用例如Gaussian消元法等各种方式来计算,或者当矩阵M’为Cauchy矩阵时,则该PLU分解可用公式来计算,由此降低了计算的计算复杂度。在步骤2030,计算出原地变换U ↓w′。在步骤2040,计算出原地变换L↑w′。在步骤2050,计算出原地变换 在步骤2060,由于原地变换结束所以过程停止。应该注意,在任意给定系统中发送编码码元的顺序无需是它们被存储的顺序,因此实际上可能不需要执行最后一个步骤2060。
[0181] 当Reed-Solomon码为系统的时,现在对在过程中使用至多m+1个码元的码元存储以从k个源码元生成r个冗余码元的原地变换进行描述,其中m是k和r的最大值。在这种情形中,最初存储在w’中的源码元全部或部分地被所生成的冗余码元所覆盖,因此被覆盖的源码元通常将被保存在由使用该FEC编码器的应用控制的另一存储空间中或者它们已经被发送而不再需要存储。当冗余码元的数目r大于或等于源码元的数目k时,可使用图20中所述过程的一个轻微变形来使用计算 的原地变换生成冗余码元,其中该原地变换至多使用r+1个存储码元。当r<k时,可利用这里参照图21所述的过程使用至多使用k+1个存储码元的原地变换来生成冗余码元。令v标识w’中的前r个码元,并且令v’标识w’中的后k-r个码元。最初w’存储要编码的k个源码元。在该过程结束时,w’的前r项即v存储该编码的r个冗余码元。令B为与M”的前r列相同的格式为(r,r)的矩阵,并且令B’为与M”的后k-r列相同的格式为(r,k-r)的矩阵。在图21的步骤2110中,B被因式分解为P、L和U,其中这些矩阵的每一个都是(k,k)格式并且P为置换矩阵,L为下三角矩阵,以及U是上三角矩阵,因此B=P·L·U。这种分解可用例如Gaussian消元法等各种方式来计算,或者当矩阵B为Cauchy矩阵时,则该PLU分解可用公式来计算,由此降低了计算的计算复杂度。在步骤2120,计算出原地变换U↓v。在步骤2130,计算出原地变换L↑v。在步骤2140,计算出原地变换 在步骤2150,使用诸如以上在标题为“线性运算符”章节中描述的“简单变换过程”等直接矩阵乘法的微小变形来将v更新为在步骤2160,由于原地变换结束所以过程停止。
[0182] 在其中发送的码元在接收前可能被删除的通信信道中,在用 定义该编码的情形中,解码问题是根据对充分多的经编码的码元的了解,即根据对w的充分多的项的了解,来确定原始源码元向量v。在Reed-Solomon码的情形中,术语“充分多的码元”可译为至少k个码元或多于k个码元,这取决于应用和该解码可用的计算和存储资源。
[0183] 在以下,描述了上述一般原地变换方法对系统Reed-Solomon码的原地解码的问题的一示例性应用。在阅读本公开之后,本领域的技术人员可容易地将所公开的方法推广到诸如非系统版等Reed-Solomon解码的其它情形。
[0184] 现在参照图22和23对原地解码系统Reed-Solomon码的方法进行描述。在图22所绘的该示例性过程中,步骤2205参照矩阵M”的列标识由p[1],...,p[e]标示的已删除的源码元位置,并在步骤2210参照矩阵M”的行标识接收到的冗余码元的位置r[1],...,r[e]。对于图22中所绘示例性过程,我们假定接收到的码元被存储在k个码元的列向量v中,其中位置p[1],...,p[e]中的码元是接收到的冗余码元,其中v的其它k-e个位置中的码元是在其正确位置中的接收到的源码元,而解码器的任务是将v在位置p[1],...,p[e]上的码元变换为丢失的e个源码元。在步骤2220到2250定义了关于变量i的外循环,从而针对1到被删除的源位置的数目e之间i值有效地运行这些步骤。在进入该循环前,i值在步骤2215被初始化为1。步骤2225到2240的循环检查1与k之间不等于p[1],...,p[e]中任何一个的j值,并且对于每个这样的j通过将v[p[i]]的值增加M”[r[i],j]*v[j]来更新v[p[i]]。
[0185] 在图23的过程中,我们用z来标示由v[p[1],...,p[e]]构成的向量,并用T标示由矩阵M”的行r[1],...,r[e]和列p[1],...,p[e]构成的矩阵的逆。如本领域的技术人员所知的,Reed-Solomon码的一般原理显示该矩阵总是可逆。在步骤2305中计算出该逆及其PLU分解。这种PLU分解可用例如Gaussian消元法等各种方式来计算,或者当矩阵M”为Cauchy矩阵时,则该PLU分解可用公式来计算,由此降低了计算的计算复杂度。注意,T的PLU分解可直接通过该过程来计算而无需显式地计算出矩阵T。在步骤2310,使用图6所述的过程计算出原地变换U ↓z。在步骤2320,使用图7中的过程计算出L↑z。在步骤2330,使用图8中的过程计算出原地变换 在步骤2340,由于Reed-Solomon码的原地解码结束所以过程停止。
[0186] 参照图23所述的总体原地变换在该过程中使用了至多k+1个码元存储。
[0187] 这里针对Reed-Solomon码所述的过程仅用于演示性目的,而无意限制本发明的范围。更具体地,非常类似的方法可被应用到相似类的码的原地解码,诸如代数-几何码(简写为AG码)、BCH码、或其生成矩阵明确已知的任何其它类的码。
[0188] 广义重复累积(GRA)码
[0189] 一般而言,这些是系统码,其中k是源码元的数目,r是冗余码元的数目,因此n=k+r是编码中码元的总数。在这种情形中,r个冗余码元的列向量z按如下从k个源码元的列向量v来构造:选择格式为(r,k)的矩阵A,并且选择为稀疏上或下三角矩阵的格式为(r,r)的另一矩阵U。对于该示例,U被任意地选择为一上三角矩阵。然后,[0190]
[0191] 常常在文献中见到的不规则重复累积(IRA)码的情形是这种构造的一种特殊情形,其中A被假定为从在每一行和每一列具有数字1的指定分布的一组矩阵中随机采样的二进制矩阵,而U是在主对角线上为1以及在紧邻该主对角线的上一对角线上为1而在其它项中全部为0的上三角矩阵,因此U是稀疏的。注意对于该示例,U-1是在主对角线以及主对角线以上的所有项都为1的稠密上三角矩阵。因此,对于该示例假定A是被选成在每一行有三个1以及在每一列有三个1的方形矩阵。在该示例中,计算出的冗余码元对源码元具有不规则的依存性,例如,z中最后一个冗余码元是v中三个源码元的XOR(异或),z中第二到最后一个冗余码元是v中6个源码元的XOR,等。
[0192] 现在参照图24描述对GRA码的原地编码过程。对于该示例,假定r至多为k,即冗余码元的数目至多是源码元的数目。对于r大于k的情形,使用将行数大于列数的矩阵乘以码元列向量的原地变换过程来代替将列数大于行数的矩阵乘以码元列向量的原地变换过程,可对过程进行修改。令A’标识由A的前r列构成的方形矩阵,而令A”标识由A的后k-r列构成的矩阵。令v为最初保存源码元的k个码元的列向量,而令v’标识v的前r个码元并且令v”标识v的后k-r个码元。在图24的步骤2410,矩阵A’被因式分解为P、L和Y,其中P为置换矩阵,L为下三角矩阵,以及Y是上三角矩阵,并且A′=P·L·Y。可使用各种方法来执行这种因式分解,包括使用标准Gaussian消元。在标准2420,计算出原地变换Y↓v′,在步骤2430,计算出原地变换L↑v′,以及在步骤2440,计算出原地变换在步骤2450,使用诸如以上在标题为“线性运算符”章节中描述的“简单变换过程”等直接矩阵乘法的微小变形来计算出原地变换
[0193] 在步骤2460,计算出原地变换 在步骤2470,计算停止,并且得到的r个冗余码元被存储在v的前r个码元中,即v’中。
[0194] 参照图24所述的过程有许多变形。例如,步骤2410、2420、2430以及2440可以用诸如在题为“Systems and Processes for Decoding Chain Reaction Codes Through Inactivation(通过钝化对连反应码的解码的系统和过程)”(下文被称为“钝化解码器(Inactivation Decoder)”)的美国专利No.6,856,263号中公开的更为复杂的方法来代替,以便以与图11中所显示的相类似的形式存写矩阵A并随后使用参照图17所述的过程的变形来使用原地变换计算 例如,如果A是随机选出的在每一行有三个1且在每一列有三个1的方形矩阵,即r=k,则能够将A改为图11中所示的形式,其中子矩阵L的格式近似为(0.86k,0.86k)而子矩阵C的格式近似为(0.14k,0.14k)。在该情形中,可使用参照图17所述的原地变换过程,由此最小化该过程中用于存储的码元数目。作为另一变形,可使用参照图18所述的原地变换过程来计算 由此使用3·k个码元运算,即和以直接方式计算 将使用的码元运算相同数目的码元运算,但仅使用了1.14·k个码元存储。
[0195] 连锁反应码在题为“Information Additive Code Generator and Decoder for Communications Systems(用于通信系统的信息加性码生成器和解码器)”的美国专利No.6,307,487和题为“Multi-Stage Code Generator and Decoder for Communications Systems(用于通信系统的多级码生成器和解码器)”的美国专利申请S/N.10/032,156号中进行了描述。已经为这种码设计了诸多解码器,例如“钝化解码器”中公开的解码器。在该解码器中,解码过程简化为求解以下形式的线性方程系:
[0196]
[0197] 其中,T是秩为n的格式为(s,n)的矩阵,其中s至少为n,其中n是中间码元的数目,其中k是源码元的数目,r是冗余码元的数目,因此n=k+r。注意,对于连锁反应码的一些实施例,冗余码元的数目r为0,而对于其它实施例,冗余码元的数目r大于0。T的行对应于动态输出码元并对应于冗余(预编码)码元,x是具有待求解的初始未知值的n个码元的的向量,其中包括源码元和冗余(预编码)码元,而z是具有已知值的s个码元的向量,包括接收到的码元和预编码的校验码元。在一些应用中,校验码元具有0值,而在其它应用中,该值可能是不同于0的值。不论如何设置校验码元,通过编码器与解码器之间的预先通信或通过其它步骤,它们对于解码器而言都是已知的。
[0198] “钝化解码器”使用通过将矩阵T变换为T=Q·M·P的形式来求解未知码元x的过程,其中Q是格式为(s,s)的置换矩阵,P是格式为(n,n)的置换矩阵,以及M是格式为(s,n)、秩为n的矩阵,它类似于图11中所示形式,区别在于B和C两者都包括s-m行而非n-m行。其中,矩阵L是格式为(m,m)的下三角二进制矩阵,以及A、B和C是适当大小的矩阵;在优选应用中,A和L可以是稀疏矩阵,即它们可能没有许多非零位置。使用这种因式分解,从接收到的码元向量z恢复未知向量x的问题可被转变为以下问题:(a)优选地原地计算 以使得结果都存储在z中,(b)优选地原地解方程系 求未知向量y,以使得结果y存储在z的前n项中,以及(c)优选地原地将x计算为 以使得结果x存储在z的前n项中。这些步骤彼此同步执行。任务(a)和(c)在先前章节中进行了描述,例如参照图8所述的过程即是使用原地变换执行任务(a)和(c)的一种方法。
[0199] 现在参照图11、图12、图13A、图13B、图14、图15、图16和图19提供了在给定z情况下解方程 求未知向量y的过程的一个实施例,其中S标识在过程开始时存储在z中的s个码元的向量,以及在过程结束时S的前n个码元等于向量y。参照图19所述的过程与当前过程之间的一个区别在于M具有s行而非图11中所示的n行。因此,当前实施例中的第一步是确定M当中一起构成秩为n的矩阵的n行并随后将M重新定义为得到的格式为(n,n)的满秩矩阵。参见图11、图12、图13A、图13B、图14、图15和图16,当前实施例中的其余步骤是执行先前参照图19所述的过程。
[0200] 刚才所述的实施例有许多变形。例如,不是在第一步中确定使用格式为(s,n)的原始矩阵M的哪n行,可使用例如在“钝化解码器”中所述的方法随着过程的行进逐步地确定子矩阵L、A、B和C。因此,图19的步骤1910和1930中所述过程的变形可使用“钝化解码器”中所述的方法来执行从而逐步地构成这些矩阵并执行图19的步骤1910和1930中所述步骤的等效形式。在这些步骤的结束时,M中秩为n的n行已被确定并在M的这些行已被逻辑地操作为图11中所示的形式。随后可以按恰当顺序应用图19中所示的剩余步骤以完成该原地变换过程。
[0201] 如本领域的技术人员将认识到的,刚才所述的两个实施例有许多变形。例如,参照图19所述的过程的变形也可应用于这两个实施例。
[0202] 连锁反应码的原地系统编码
[0203] 在Shokrollahi等人提交的题为“Systematic Encoding and Decoding of Chain Reaction Codes(连锁反应码的系统编码和解码)”的美国申请S/N.10/677,624号(下文“Shokrollahi I”)中,描述了一种用于连锁反应码,尤其是多级连锁反应码的系统编码的方法。在该方法中,首先使用线性变换将源码元变换为一组中间码元。该变换的形式为:
[0204]
[0205] 其中,T是行对应于源码元和冗余(预编码)码元的格式为(n,n)的满秩矩阵,x是具有待求解的初始未知值的中间码元的向量,而z是具有已知值的n个码元的向量,其对应于源码元和预编码的校验码元。
[0206] 当T为方形矩阵时,该方程系是章节“连锁反应码的原地解码”中所述更一般的情形中的一种特殊情形。因此,章节“连锁反应码的原地解码”中所述原地变换的实施例可用于使用原地变换从已知码元计算中间码元。
[0207] 连锁反应码的原地系统解码
[0208] Shokrollahi I中所述方法执行一系列步骤以从部分源码元和由系统编码器生成的部分输出码元的任意组合得到所有源码元。在该方法的优选实施例中,采集并解码包括部分源码元和其它输出码元的所有接收到的码元以得到一组中间码元。接着,对这些中间码元进行变换以得到丢失的源码元。根据接收到的码元对中间码元进行原地计算与以上在标题为“连锁反应码的原地解码”中所述的相同。在本章节中,将描述根据中间码元对源码元的原地计算。如根据Shokrollahi I显而易见并类似于上述情形的是,该问题可简化为计算以下问题:
[0209]
[0210] 其中,T是满秩的格式为(n,n)的矩阵,而S是n个中间码元的列向量。矩阵T可被表示成:
[0211] T=P·M·Q
[0212] 其中P和Q是格式为(n,n)的置换矩阵,而M是图11中所示形式的格式为(n,n)的矩阵。
[0213] 计算 的原地变换的实施例是参照图17,同时参照图11、图12、图13A、图13B、图14、图15、图16及图17所述的过程。该实施例在过程中至多使用n+1个码元存储。参照图17所述的过程的变形也适用于该实施例。
[0214] 计算 的原地变换的第二实施例是参照图18所述的过程。该实施例该过程中至多使用n+(n-m)+1个存储。在连锁反应码的优选实施例中,n-m相对于值n而言较小,因此在该过程中使用的码元存储的相对大小略大于n。参照图18所述的过程的变形也适用于该实施例。
[0215] 上述使用原地变换过程从接收到的输出码元计算中间码元的实施例以及上述使用原地变换过程从经恢复的输入码元计算源码元的实施例可被组合以提供使用原地变换从接收到的输出码元计算源码元的总体实施例,其中这两个过程的组合所用的码元存储至多为任一个过程单独所用的码元存储。
[0216] 以上描述仅出于说明目的,而无意限制本发明的范围。在读了本公开之后,许多等效版本和方法都是可能的。例如,在以上方法中,步骤2中对矩阵D的LU分解的计算可离线地实现。
[0217] 如已经所述的,示教了一种新颖的用以构造线性变换运算的具有存储器效率的方法。在这里所示的示例中,线性变换过程是对多个输入元素应用线性变换以导出多个输出元素的过程。在这里所述的过程中,存储器被分配用于存储可用于该线性变换过程的输入元素并且该存储器中的至少一部分可被再次用于存储所导出的输出元素。使用这种方法,不用要求大至足以保存上述多个输入元素的存储器和大至足以保存上述多个输出元素的存储器,足以保存上述多个中的最大数目的元素的存储器(按需加上一些较小的开销)就可工作,从而节省了有价值的存储器空间。
[0218] 这里所述的技术可被用于各种线性变换,诸如用于FEC编码或解码、删除编码或解码、纠错等的变换。FEC编码可涉及诸如Reed-Solomon码、连锁反应码、多级连锁反应码或任何其它线性码等各种码。用于执行该变换的逻辑可读取输入元素以生成输出元素并将用于已使用结束的输入元素的存储器再次用于存储生成的输出元素(或随后可能又被使用结束的中间元素)。
[0219] 虽然参照示例性实施例对本发明进行了描述,但本领域的技术人员将认识到各种修改是可能的。例如,这里所述的过程可使用硬件组件、软件组件、和/或它们的任意组合来实现。因此,虽然关于示例性实施例对本发明进行了描述,但应该认识到的是,本发明旨在涵盖落在所附权利要求的范围内的所有变形和等效方案。
QQ群二维码
意见反馈