具体实施方式
参考具体实施例对本发明进行描述。本领域的技术人员将认识到本说明书是用作例证并提供实践本发明的最佳模式。尽管参考了特定无线设备和协议时,本发明可适用于多种不同类型的通信介质、设备和协议。例如,尽管这里描述无线协议,本发明可适用于诸如有线通信之类的其它协议和通信技术,以及模拟和数字变体。同样地,尽管描述了Reed-Solomon纠错,也可以在本发明中实现其它纠错技术。此外,尽管这里描述了诸如分组大小和内存大小之类的特定参数,这些只是作为示例,因为本发明也可以连同其它分组大小、内存大小等等一起使用。
图1描述了一个示例性无线网络100,该网络示出了广播站110和用于从广播站接收信号的多个无线设备112a-112b。这些设备具有彼此通信的能力。例如,设备112a-112b为电视接收机,但同时也可以是其它移动设备,例如电话、个人数字助理(PDA),掌上电脑或其它电子设备。此外,这些设备中的一些可以是电池供电,而其它设备可以由可用的电源插座供电。在某些情况下,上述设备也可以通过有线网络(例如以太网)或电缆连接与网络相连。
图2A描述了一个根据本发明的实施例的示例性设备112。图2B描述了示出了在该示例性设备中所执行的方法的流程图。接收机和解调器120接收入站信号,将该信号转换至较低频率,并创建传输流,以使得该信号可处理。一方面,接收机包括纠错电路,该纠错电路用于对解调分组执行初始纠错,并且在TS分组发生错误且无法校正的情况下设置传输差错指示符(TEI)。IP解封装器122通过将入站信息解码为多协议前向纠错(MPE-FEC)区段和擦除信息、并解析MPE-FEC区段以提取原生IP数据报来对传输分组执行初始处理。MPE-FEC解码器124接收到MPE-FEC区段并根据本发明的实施例来处理Reed-Solomon码字,从而得到校正后的IP数据报。用户界面126(例如源解码和呈现电路)处理用于在用户界面上显示(例如电视显示)的信息。
对于纠错,一个示例性实施例使用Reed-Solomon码。Reed-Solomon编码器采用数字数据块并添加额外的“冗余”比特。由于多方面原因(例如噪声或干扰、CD上的划痕等等),在传输或存储过程中会出现差错。Reed-Solomon解码器处理每个块,并试图校正差错并恢复原始数据。可以被校正的差错的数目和类型取决于Reed-Solomon码的性能。
将Reed-Solomon码表示为RS(n,k),每个符号由s个比特组成。这意味着编码器取出k个数据符号(每个符号具有s个比特)并添加奇偶校验符号,以获得n个符号的码字。这些是n-k个奇偶符号,其中每个符号具有s个比特。Reed-Solomon解码器可以在码字中校正多达t个的包含差错的符号,其中2t=n-k。
图3A描述了一个根据本发明的实施例的Reed-Solomon码。将用于MPE-FEC的Reed-Solomon码表示为RS(255,191),其中每个符号具有8比特。这意味着每个码字都包括255个码字字节,其中191个字节是数据,而64个字节为奇偶校验。就是说:n=255,k=191,s=8,2t=64,t=32。该解码器可以校正码字中的任意32个符号的差错:即,可以自动校正码字中任何位置的多达32个字节的差错。给定符号大小s,Reed-Solomon码的最大码字长度n为n=2s-1。例如,以具有8比特符号(s=8)的码的最大长度为255字节。对Reed-Solomon码进行编码和解码所需要的处理功率量与每个码字的奇偶校验符号的数目有关。t值较大意味着可以校正大量差错,但需要的计算能力大于t值较小时所需要的计算能力。当符号中的任意数目的比特发生差错时,就会出现一个符号的差错。
Reed-Solomon代数解码过程可以校正差错和擦除。当错误符号的位置已知时就会出现擦除。解码器可以校正多达t个差错或2t个擦除。在本示例性实施例中,估算并处理擦除信息以有助于识别可能包含差错的接收符号。在对码字进行解码时,如果2x+y<2t(x个差错,y个擦除),则可以恢复出原始的传输码字。
应注意,已知的擦除越多,则可以校正越多的差错。因此,希望在Reed-Solomon解码之前可以识别出尽量多(当然,最多为64)的擦除。另一方面,如果符号被错误地标记为擦除,则将减少Reed-Solomon解码能够校正的差错数目。例如,假设有8个擦除,其中有6个不是误码但被错误地识别为擦除。Reed-Solomon解码器只能校正(64-8)/2=28个差错和2个擦除。另一方面,如果首先仅识别了2个擦除,则Reed-Solomon可以校正(64-2)/2=31个差错和2个擦除。因此,希望提供一种可靠的算法来可靠地标记擦除。
图3B-C描述了根据本发明的实施例的传输分组与MPE-FEC分组之间的关系(不按比例)。表1和表2分别示出了传输流(TS)分组和数据报区段的格式。注意,在图3A中TS分组与MPE分组之间不需要直接对应,并且MPE分组可以跨越一个或更多个TS分组之间的边界。本发明的一个方面是在所有条件下如何调整并重构图4A中所示的MPE-FEC帧表400。
表1-传输分组格式(按照其在传输分组中出现的顺序。第一行(即同步字节)首先出现)。
名称 |
比特数 |
描述 |
同步字节 |
8 |
值固定为0x47 |
传输差错指示符(TEI) |
1 |
值“0”指示为没有差错;值“1”指示传输分组中至少存在1比特的差错。 |
有效载荷单元起始指示符 |
1 |
值“1”指示在这个传输分组的有效载荷中至少有一个MPE区段头; |
|
|
值“0”指示在这个传输分组的有效载荷中没有MPE区段头。 |
传输优先级 |
1 |
|
PID |
13 |
0x0000:PAT;0x0001:CAT;0x0010-0x1FFFE:网络、程序图、主要的PID或其它;0x1FFF:无。 |
传输加扰控制 |
2 |
00 |
适配域控制 |
2 |
00:保留;01:没有适配域,只有有效载荷;10:只有适配域,没有效载荷;11:有适配域和有效载荷。 |
连续计数器 |
4 |
|
适配域 |
0或8 |
适配+填充 |
有效载荷 |
183或184 |
PES分组或PSI区段或分组填充字节或专用数据 |
表2-MPE区段格式。
名称 |
比特数 |
描述 |
表ID |
8 |
0x3E指示具有专用数据的DSM CC区段(ISO/IEC 138 18-6中的表9-3) |
区段语法指示符 |
1 |
1:CRC_32字段存在 |
专用指示符 |
1 |
0 |
保留 |
2 |
11 |
区段长度 |
12 |
紧随本字段的直到MPE区段末尾的MPE区段中的剩余字节数 |
MAC地址(字节6和5) |
16 |
|
保留 |
2 |
|
有效载荷加扰控制 |
2 |
00 |
地址加扰控制 |
2 |
00 |
LLC SNAP标记 |
1 |
“0”值指示区段携带一个未经LLCSNAP封装的IP数据报(由IP数据广播命令) |
当前下一个指示符 |
1 |
总是1 |
区段号 |
8 |
0:多个MPE区段上没有有效载荷分段;1...255:分段序列号。 |
最后一个区段号 |
8 |
携带最后一个有效载荷片段的区段序列号 |
MAC地址(字节4到1) |
32 |
|
数据有效载荷(IP数据报) |
|
|
区段填充字节 |
CRC_32 |
图4A-B描述了一个根据本发明的实施例的内存帧表400。该内存表包括与所需码字的长度(在本例中为N=255字节)相对应的多个列。该表包括与内存中的表的期望大小相对应的行。
将存储MPE-FEC解码器的输入数据的MPE-FEC帧表构造为具有255列和可变数目的行的矩阵。在为数字电视DVB-H(数字视频广播-手持设备)的传输参数信令(TPS)所设计的一个实施例中,no_of_rows(RowN)的最大允许值是1024,从而使得MPE-FEC帧总的大小达到2M比特。
矩阵中的每一个位置有一个信息字节。MPE-FEC帧的最后一部分(包括最左边的191列)专门用于IP数据报以及可能的填充数据,将这部分称为应用数据表。MPE-FEC帧的右部(包括最右边的64列)专门用于FEC码的奇偶校验信息,将这部分称为Reed-Solomon(RS)数据表。应用数据表中的每一个字节位置具有从0到191×行N的地址范围。同样地,RS数据表中的每一个字节的位置具有从0到64×行N的地址范围。
图4A示出了由本发明所要重构的针对每一个码字的内存400中的MPE部分和FEC部分。图4B示出了如何接收IP数据报以及如何将其编译到帧表400的列中。
在提取数据报时,从矩阵左上角的第一数据报的第一个字节开始并向下至第一列地逐数据报地引入这些数据报。数据报的长度可以任意地彼此不同。在一个数据结束之后,后面的数据报立即开始。如果数据报并不是正好在一列的结尾处结束,则该数据报将会从下一列的顶部继续。当所有数据报都已进入应用数据表时,任何没有被填满的字节位置都会被零字节填充,从而使得最左边的191列完全填满。
在所有最左边的191列填满之后,向MPE-FEC帧填入64个奇偶校验字节。所使用的码是Reed-Solomon RS(255,191)。MPE-FEC表中的每一行都包含一个RS码字。如图4C所示,RS数据表的最右边几列可以被丢弃并,并因此不被传输以实现穿孔。不需要显式地发信号通知穿孔RS列的具体数目,并且该数目可能在帧之间动态地改变。这样,RS数据表也被完全填满,并完成了MPE-FEC帧。
MPE部分可以包括通过TS传输的填充字节,用以填充表中的部分,由于MPE区段的长度是可变的,因此填充字节也将以不同长度出现。由于要尽可能有效地将FEC区段分组插入表中的FEC部分,因此FEC区段分组通常为全长。该FEC部分可以包括不被传输的穿孔字节,以填充表中的FEC部分。
关于擦除,作为DVB-H标准中指定的示例性MPE-FEC解码功能的Reed-Solomon RS(255,191)可以校正一个255字节的码字中多达32个差错。如果提供了擦除,那么RS(255,191)可以校正多达64个擦除。擦除指示码字中的哪一个字节被认为是错误的。因此,使用擦除属性可以充分地增加Reed-Solomon解码器的纠错能力。
由于MPE-FEC解码在MPE-FEC帧表400被填满之后开始,因此在本示例性实施例中使用至少2M比特的内存来单独存储MPE-FEC帧数据,但也可以使用其它大小的内存。如果支持切换功能,则MPE-FEC帧数据内存大小要加倍。
为了存储MPE-FEC帧中的码字中的每一个字节的擦除信息,一种直接或常规方法是存储码字中的每一个字节的至少1比特(‘0’指示没有擦除,‘1’指示存在擦除。)。这意味着擦除表至少需要255×1024比特=255K比特大小的内存。如果码字中的每一个字节的擦除用两个比特来表示(为了稍后将描述的擦除预处理),则使用510K比特的内存。同样地,如果支持切换功能,则对于擦除表而言,内存的大小要加倍。
在一个方面,解封装器被配置为产生与表3中所示的数据报相关联的至少3个等级的擦除属性,从而产生2比特的擦除属性。在这方面,解码器可被配置为选择性地处理码字以创建校正后的码字,其中该选择至少部分地基于擦除表中所存储的属性。同样地,该解码器可被配置为选择性地绕过擦除表将其识别为正确的码字或者具有太多差错而无法校正的码字。在这方面,引入了软擦除的概念。软擦除描述了为码字中的符号出错的可能性。
表3-软擦除属性。
软擦除值 |
描述 |
0(00) |
符号出错的可能性为0 |
1(01) |
符号出错的可能性小于0.5 |
2(10) |
符号出错的可能性大于0.5 |
3(11) |
符号出错的可能性为1 |
例如,可以从接收到的传输分组中提取出码字中的每个符号的软擦除值。例如,如果将传输分组的TEI(传输差错指示符)设置为1,则可以给传输分组中的有效载荷的软擦除值分配2,如果将TEI设置为0,则可以给该软擦除值分配1。对于MPE应用数据表中的填充字节或通过CRC(循环冗余校验)校验的传输分组中的有效载荷,例如可以给该软擦除值分配0。而对于MPE-FEC Reed-Solomon数据表中的穿孔字节,例如给该软擦除值分配3。
这些示例示出了如何确定软擦除值。对于软擦除值,还可能存在其它情况。例如,可以使用传输分组中的连续计数比特来确定是否存在被丢弃的分组。在有分组被丢弃的情况下,可以给整个分组的软擦除值分配3,当然在这种情况下所有的符号都是错误的。
尽管存在用于构建软擦除表的多种技术,通过为每个码字产生硬擦除并最小化表大小的方式来构建该表是有用的。简化的硬擦除发生器和小的软擦除表转化为降低的成本和功耗。
在本发明的一个方面,在完全构建了MPE-FEC帧并填充了软擦除表之后产生硬擦除。硬擦除值是二进制的。当硬擦除值为1时,其指示码字中的当前符号为擦除。当硬擦除值为0时,其指示码字中的当前符号不为擦除。Reed-Solomon解码器随后使用该硬擦除。然而,本发明不局限于特定的Reed-Solomon解码器实现。
硬擦除发生器通常涉及如何构建软擦除表。在本发明的一个方面,硬擦除发生器在每一次执行时为一个完整的码字产生硬擦除。在一次执行结束时,如果满足下列条件中的任何一个条件,则硬擦除发生器确定不需要Reed-Solomon解码:(a)码字中的每个符号的硬擦除为0;或(b)硬擦除为1的符号数超过了Reed-Solomon解码器的限制,即在DVB-H(数字视频广播-手持设备)的情况下为64。通常,当且仅当码字中的所有符号的软擦除为0时,满足第一条件,以及当且仅当码字中的至少65(在DVB-H的情况下)个符号的软擦除为0时,满足第二条件。
注意,本发明对于不使用擦除的Reed-Solomon解码也起作用。在这种情况下,硬擦除发生器的唯一功能是确定是否需要Reed-Solomon解码。没有硬擦除输出到Reed-Solomon解码子模块。
图4C描述了根据本发明的实施例的擦除表450。本发明的一个方面在于,将解封装器配置为产生与数据报相关联的擦除属性,以及将解码器配置为将该擦除属性存储在擦除表中。该解码器可配置为选择性地处理码字以创建校正后的码字,其中该选择至少部分地基于擦除表中所存储的属性。该解码器被配置为选择性地绕过擦除表将其识别为正确的码字。
当IP数据报从输入的传输流分组中解封时,提取出擦除信息。该擦除表用于存储整个MPE-FEC帧的擦除信息。
图5A-B描述了基于本发明的实施例的流程图500。参照图5A,在步骤502中,IP解封装器122接收到传输流(TS)。在步骤504中,如果传输差错指示符为1(而不是0),则认为该分组并非必要地有效,步骤506检查MPE区段是否是未决的。如果并非未决的,则步骤506使该方法返回至步骤502。当TS并非必要地有效(TEI=1)但仍然未决时,步骤506假定该分组具有PID匹配,并且步骤508将该传输分组有效载荷存储在MPE-FEC帧400的相邻字节中。在这种情况下,擦除表450通过写入擦除等级=“01”或“10”来进行记录(该数据和地址的可靠性在于0与1之间,但不包括0和1)。该分组实际上既可以具有PID匹配,也可以不具有PID匹配。这将通过检查分组和序列中后续的分组的连续计算器来确定,这将在步骤510中开始。
如果TEI是1,则步骤510试图使分组ID(PID)与已编程设定的ID匹配。如果PID不匹配,则该分组不是针对该接收机(即,前往不同的接收机),并丢弃该分组,然后该方法返回至步骤502。如果PID匹配,则该方法继续前进至步骤512,以确定该分组是否未决。如果不匹配,步骤514检查有效负荷单元起始指示符(PUSI),以查看该指示符是否为真(例如=1),如果不为真,则该方法返回至步骤502。如果PUSI=1,则步骤516检查该连续计算器以确定该计算器是否正确地递增1。如果不是正确地递增1,则步骤518设置空洞检测寄存器(hole_det)。如果正确地递增1,则步骤520转到MPE区段的开始处。无论哪种情况,本方法继续执行到泡状框A。
如果在步骤512中该区段仍然未决,则步骤522检查连续计算器(CC)以确保计算器正确地递增(递增1或CC限制)。如果CC是错误的,则步骤524设置空洞检测寄存器(hole_det)并使该方法返回至步骤502。如果是正确的,步骤526将IP分组存储在内存中。步骤528检查先前的TS是否具有TEI=1,如果是,则针对最近写入的地址以等级=“00”写该擦除表。无论哪种情况,该方法继续前进到泡状框B。
参照图5B,泡状框B继续到步骤532,步骤532检查有效载荷单元起始指示符(PUSI)以查看其是否为真(例如=1),如果不是,则步骤534检查IP数据报是否完整。如果IP数据报是完整的,则步骤536将区段未决设定为否定的(section_pending=0),并跳过CRC和填充字节。无论哪种情况,该方法都将泡状框C返回至步骤502。
如果步骤532为真,或者如果该方法从泡状框A继续,则步骤540检查是否检测到空洞。如果检测到,则步骤542针对当前存储的地址以等级=“1”写该擦除表。无论哪种情况,步骤544都将区段未决设定为肯定的(section_pending=1)并基于长度定义CC限制(如果长度不可用,则将CC限制设定为未定义的)。步骤546检查TS是否结束,如果结束,通过泡状框C返回至步骤502。如果TS未结束,则步骤548根据所保存的地址将后续的IP数据报写入内存,直到TS结束的数据报的结尾为止,而不论哪一个先进行。步骤550检查TS是否已结束,如果是,则通过泡状框C使该方法返回至步骤502,如果不是,则该方法以区段未决继续回到步骤544,直到TS结束为止。
通过前面提到的方法,本发明能够以自适应的方式来标记可靠性信息,并由此提高MPE-FEC的性能。
注意,这里假定MPE-FEC不得不只处理具有携带IP数据报的MPE区段的传输分组。所有其它携带PAT、PMT信息的传输分组应由更高层的模块处理。
本发明包括几个关键特征,包括对擦除的分级标记和自适应标记。
擦除的分级标记意味着将传输流分组分成4类:(1)明确不是擦除的分组;(2)明确是擦除的分组;(3)不太可能是擦除的分组以及(4)很可能是擦除的分组。对于这些分类,分别给“00”、“11”、“01”、“11”的擦除等级分配了2个比特。当从随后的传输流分组收集到更多的信息时,可以调整擦除等级“01”和“10”。
自适应标记意味着,对于Reed-Solomon解码器而言,只能为每一个码字标记最多64个擦除。对于一个码字而言,如果擦除等级为“11”的传输流分组的数目达到特定阈值(可编程的),则使用原始擦除等级“10”或“01”至“00”来重新标记该分组。至少在将码字传到Reed-Solomon解码器时,将擦除等级为“11”的分组视为错误的(不可靠的),而将擦除等级为“00”的分组被视为“无错”(可靠的)。
对擦除的这种分级和自适应标记包括若干方面的优点。与简单地使用每一个孤立的传输流分组的直接标记相比,分级标记可以获得更高的可靠性。分级标记利用了分组序列号和连续计数器的优点,因此可以提高可靠性。本发明可以自适应地提供对适于校正的最大数目的差错的校正。通过使用自适应标记,本发明的算法可以标记每一个码字中可用的最大数目的擦除,而最大数目的擦除使得可以校正最大数目的差错。
本说明公开了示例性实施例和最佳模式,在保持在下列权利要求所限定的本发明的主题和精神的同时,可以对所公开的实施例进行修改和改变。