具体实施方式
参照特定实施例对本发明进行描述。本领域技术人员将认识到这些描述是为了解释,并提供了实现本发明的最佳模式。参照特定的无线装置和协议,本发明适用于很多不同类型的通信媒介、装置和协议。例如,虽然这里描述的是一种无线协议,但是本发明也适于其他的诸如有线通信之类的协议和通信技术,以及模拟和数字变种。同样,虽然描述了Reed-Solomon纠错,但是在本发明中也可以实现其他的纠错技术。另外,虽然这里描述了诸如包大小和存储器大小之类的特定参数,但是这些只是为了示例的需要,这是因为本发明也可以采用其他的包大小、存储器大小等等。
在本发明中,通过合并特定的擦除表来表示擦除信息,显著地降低了对数字信号处理操作的存储装置的需求。代替分别指定代码字的每个符号(或字节)的擦除信息,擦除表允许多个符号的擦除信息由(或者例如数据结构的)单个条目来表示。这允许表基本上在很多符号之间共享同一存储空间。另外,介绍了一种在解码操作期间将数据结构转换为与单个符号相关的擦除信息的技术。
图1描述了一个示范性无线网络100,其示出了广播电台110和多个从广播电台接收信号的无线装置112a-112b。这些装置具有与其他装置通信的能力。例如,装置112a-112b是电视接收器,但还可以是其他的移动装置,例如电话、个人数字助理(PDA)、便携式电脑或其他电子装置。而且,这些装置的一些是基于电池供电的,而其他的是由可得到的电源引出线供电的。在一些情况下,这些装置还可以通过有线网络(例如以太网或电缆连接)被连接至网络。
图2A描述了根据本发明实施例的示范性装置112。图2B描述了一个流程图,该流程图示出了在示范性装置中执行的方法。接收器和解调器120接收入站信号,将该信号变换为较低的频率,并生成传输流,使该信号可以被处理。在一个方面,该接收器包括一个纠错电路,其对解调后的包执行最初的纠错,并在TS包已损坏不能被纠错时设置传输错误指示符(TEI)。通过将入站信息解码为连同擦除信息的多协议封装前向纠错(MPE-FEC)段,以及分析MPE-FEC段来提取原始IP数据报,IP解包器122对传输流执行最初的处理。MPE-FEC解码器124接收MPE-FEC段,并处理根据本发明的实施例的Reed-Solomon代码字,产生已经纠错的IP数据报。用户接口126(例如,信源解码和呈现电路)处理在例如电视显示的用户接口上显示的信息。
对于纠错,示范性实施例采用Reed-Solomon代码。Reed-Solomon编码器采用数字数据块,并添加额外“冗余”位。由于多个原因(例如噪声或干扰、CD上的划痕等),在传送或存储期间发生错误。Reed-Solomon解码器对每个块进行处理,试图纠正错误并复原原始数据。可被纠正的错误的数量和类型取决于Reed-Solomon代码的特性。
Reed-Solomon代码被表示为具有s位符号的RS(n,k)。这意味着编码器采用k个均为s位的数据符号,并添加奇偶符号来形成一个n符号代码字。这些奇偶符号是每个均为s位的n-k个奇偶符号。Reed-Solomon解码器可以至多纠正代码字中的t个包含错误的符号,这里,2t=n-k。
图3A描述了根据本发明实施例的Reed-Solomon代码字。用在MPE-FEC中的Reed-Solomon代码被表示为具有8位符号的RS(255,191)。这意味着每个代码字包含255个代码字字节,其中,191个字节是数据,64个字节是奇偶符号。即,n=255,k=191,s=8,2t=64,以及t=32。解码器可以纠正在代码字中的任何32个符号错误,即:可以自动纠正在代码字中任何位置的32个字节的错误。假定符号大小为s,则Reed-Solomon代码的最大代码字长度n=2s-1。例如,具有8位符号(s=8)的代码的最大长度是255字节。编码和解码Reed-Solomon代码所需要的处理能力大小与每个代码字的奇偶符号的数量相关。t值大意味着大量的错误可以被纠正,但是比t值小需要更大的计算能力。当符号中的任意数量的位错误时,一个符号错误出现。
Reed-Solomon代数解码可以纠正错误和擦除。当已知出错符号的位置时,发生擦除。解码器至多可以纠正t个错误或2t个擦除。在示范性实施例中,擦除信息被估计,并被用来辅助识别接收到的有可能包含错误的符号。当代码字被解码时,如果2x+y<2t(x为错误,y为擦除),那么,可以复原最初传送的代码字。
应当注意的是,已知越多的擦除,就可以纠正越多的错误。从而,希望能够在Reed-Solomon解码之前能识别出尽可能多的擦除。另一方面,如果符号被错误地标示为擦除,将减少Reed-Solomon解码器可以纠正的错误量。例如,假定有8个擦除,其中6个不是错误代码,但被错误地标示为擦除。Reed-Solomon解码器只能纠正(64-8)/2=28个错误和2个擦除。另一方面,如果起初只识别出了两个擦除,那么Reed-Solomon可以纠正(64-2)/2=31个错误和两个擦除。从而,希望提供可靠的算法来可靠地标示擦除。
图3B-C描述了传输包与根据本发明实施例的MPE-FEC包之间的关系(未按比例绘制)。在表1和表2中分别示出了传输流(TS)包和数据报部分的格式。注意,在图3A中不需要TS包与MPE包之间的直接对应关系,MPE包可以穿过一个或多个TS包之间的边界。本发明的一个方面是在任意条件下如何协调和重建图4A中示出的MPE-FEC帧表400。
表1传输包格式(以它们出现在传输包中的顺序。第一行,即首先出现的同步字节)。
名称 |
位数 |
描述 |
同步字节 |
8 |
0×47的固定值 |
传输错误指示符(TEI) |
1 |
‘0’值表示没有错误,‘1’值表示在传输包中至少有一位错误 |
有效单元开始指示符(PUSI) |
1 |
‘1’值表示在这个传输包的有效部分中至少有一个MPE节头 |
传输优先权 |
1 |
|
PID |
13 |
0×0000:PAT0×0001:CAT0×0010-0×1FFE:网络、程序映射PID、基本PID或者其他0×1FFF:无效 |
传输扰码控制 |
2 |
00 |
调整字段控制 |
2 |
00:预留01:没有调整字段,只有有效负载10:只有调整字段,没有有效负载11:具有调整字段和有效负载 |
连续性计数器 |
4 |
|
调整字段 |
0或8 |
调整+填充 |
有效负载 |
183或184 |
PES包或PSI段或包的填充字节或私有数据 |
表2——MPE段格式
图4A-B描述了根据本发明实施例的存储器帧表400。该存储器表包括多个对应于目的代码字长度的列,其中,在这种情况下N=255字节。该表包括多个对应于存储器中的表的目的大小的行。
存储MPE-FEC解码器输入数据的MPE-FEC帧表的结构是一个具有255列和可变行数的矩阵。在一个为数字视频广播-手持(DVB-H)发送参数信令(TPS)设计的实施例中,no_of_rows(RowN)的最大允许值是1024,这使总的MPE-FEC帧大小几乎为2M比特。
矩阵中的每个位置均包含一个信息字节。由最左边的191个列组成的MPE-FEC帧的最后部分是用于IP数据报和可能的填充,被称为应用数据表。由最右边的64个列组成的MPE-FEC帧的右部分是用于FEC码的奇偶校验信息,被称为Reed-Solomon(RS)数据表。在应用数据表中的每个字节位置均具有从0到191×RowN的地址范围。以同样的方式,RS数据表中的每个字节位置均具有从0到64×RowN的地址范围。
图4A示出了每个由本发明重建的代码字的存储器400的MPE部分和FEC部分。图4B示出了IP数据报如何被接收被如何被编译进帧表400的列中的。
当IP数据报被提取出,从矩阵的左上角中的第一个数据报的第一个字节开始向第一列的下方行进,这些数据报被一个接一个地引出。数据报的长度可以在数字报之间任意变化。在一个数据报结束之后,立即开始下一个数据报。如果数据报没有在一个列的末端精确地结束,它会在下一列的顶端继续。当所有的数据报已经进入了应用数据表,用零字节填充任何没有被填充的字节位置,使最左边的191列被完全填充。
在所有最左边的191列被填充后,将64个奇偶校验字节填充到MPE-FEC帧中。采用的代码是Reed-Solomon RS(255,191)。那么,MPE-FEC表的每一行都包含一个RS代码字。如图4C所示,为了可以在解码后进行去校验位,RS数据表的最右边的一些列可能被丢弃掉而不被传送。RS列被去除的校验位的确切数字不需要很明确地标示出来,并可以在帧之间动态变化。这样,RS数据表也可以被完全填充,MPE-FEC帧是完整的。
MPE部分可以包括填充字节,其要在TS中被传送来填充表的部分,这些字节可能以可变的长度出现,这是因为MPE段长度是可变的。FEC段包通常是全长度,这是因为旨在尽可能高效地将他们插入到表的FEC部分。FEC部分可以包括在解码后被去除的奇偶校验位的字节来填充表的FEC部分,这些字节不被传送。
关于擦除,Reed-Solomon编码RS(255,191)可以至多纠正在255字节代码字中的32个错误,该编码是由DVB-H标准制定的示范性MPE-FEC解码功能。然而,如果提供了擦除,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比特的存储器。此外,如果支持移交功能,则加倍擦除表的存储器容量。
图5描述了MPE-FEC解码器124的概念性层次结构,该解码器包括RS解码器510、MPE-FEC帧表400、擦除表存储器552、擦除发生器554和擦除缓存器556。MPE-FEC帧表被存储在存储器中,该存储器提供了具有输入代码字字节的RS解码器,并存储了来自RS解码器的已纠正代码字。擦除信息被存储在擦除表存储器中。在RS解码过程中,擦除发生器提取擦除信息,该擦除信息被编码在代码字的每个字节的2个比特中。然后,它将该2个比特映射为1-位擦除,并将它存储在擦除缓存器中。擦除缓存器包含完整代码字的擦除。
在一个方面,通过引入特殊格式的数据结构来表示擦除信息,来减小擦除表存储器的大小。取代分离地表示代码字的每个字节的擦除信息,该数据结构允许由数据结构的单个实例来表示大量字节的擦除信息,来在很多字节之间共享同一存储器空间,该数据结构还被已知为在下列段中所描述的单元。然后,擦除发生器将数据结构转换为每个单个字节的擦除信息,这些单个字节的擦除信息是在MPE-FEC解码操作中所需要的。
在一个方面,解包器被配置以至少产生三个与如表3所示的数据报相关的擦除属性的层次,这导致2比特的擦除属性。在这个方面,解码器可以被配置为选择性地处理代码字来生成已经纠错的代码字,其中,该选择至少部分地基于擦除表中存储的属性。另外,解码器还可以被配置为选择性地绕过擦除表识别为已经纠错的或有太多错误需要纠正的代码字。在这个方面,引入了软擦除的概念。软擦除描述了错误的代价字中的符号的相似性。
例如,可以从接收到的传输包中提取代码字中的每个符号的软擦除值。例如,如果传输包的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解码子模块。
图6A描述了根据本发明实施例的擦除表。在本发明的一个方面中,配置解包器来产生与IP数据报相关的擦除属性,配置解码器来将擦除属性存储在擦除表中。可以配置解码器,以选择性地处理代码字来产生已经纠错的代码字,其中,该选择至少是部分基于存储在擦除表中的属性的。
随着从输入的传输流包中解包出IP数据报,提取出了擦除信息。将擦除表实现为存储整个MPE-FEC帧的擦除信息。
擦除表的布置如图6A所示。擦除表550包括255个条目。每个条目均与图4A中所示的MPE-FEC表的列相关。即,条目1与MPE-FEC表的第1列相关,条目2与MPE-FEC表的第2列相关,依此类推。
擦除表的每个条目由16个单元560组成。在示范性实施例中选择这个数字的原因是假定最小IP包的大小是40字节,一个列可以包含最多26个IP包。假定接收到的每个其他IP包都是不可靠的(即,在IP包中存在CRC错误),13个擦除单元用于每个擦除表条目,或用于MPE-FEC表的每个列。就由于TEI=1而被要求来修改和前一个条目存储在一起的擦除层次的单元而言,对于一个列,16个单元是足够的。
擦除表条目的每个单元都包括3个字段570:10位行开始地址、8位长度和2位擦除层次值。当示范性实施例被实现为存储器时,擦除表具有20比特×16×255=81600比特的大小。
由标准规定,MPE-FEC表的行数和列数都是从0开始的。假定MPE-FEC包的开始位置是X,则它开始的行数是(X/(MPE-FEC表的总行数))的余数,它开始的列数是(X/(MPE-FEC表的总行数))的商。列数将是擦除表的条目数。
图6B描述了一个示例,如果MPE-FEC表的总行数为1024,并且如果接收到具有TEI=1并且只包含一个IP数据报的传输流包(假定IP数据报处于位置200),那么,开始行数是200,即十六进制的C8,列数是0。从而,将对应的单元放入擦除表的第一个条目中,擦除表具有如图6A所示的内容。在这种情况下,擦除层次是11b。
如果在一个存储器中被实现,则擦除缓存器的端口宽度是320比特。这不是一个在当前技术下的好的高宽比。从而,提出了执行表映射和实现具有4个存储器的擦除表,每个存储器均具有255×80比特的大小。擦除表的每个条目被均匀地分布,并被分别存储在四个存储器中,第一组四单元被存储被第一存储器中,第二组四单元被存储被第二存储器中,依此类推。图6C示出了这种布局。
以仅当接收到不可靠的IP数据报时产生单元的方式来填充擦除表,不为被认为是可靠的IP数据报产生条目。从而,如果一整列中没有出现不可靠的IP数据报,则在擦除表中根本就没有对应条目的单元。当然,存在只有一些单元有效的情况。从而,本发明的一个方面标示出在条目中的哪一个单元是有效的。图6D描述了这种目的的指针表590。
如图6D所示,指针表590包括255个条目:每个条目对应于擦除表中的一个条目。一个条目包括5个比特,并被定义为如表4所示的结构。这些5比特被用于决定在擦除表中的什么位置写入条目的下一个单元。
表4指针表条目定义
位 |
描述 |
4 |
0值表示在擦除表的对应条目中无有效单元,因此,下一个单元应当被写入第一个存储器中的条目的第一个单元位置的擦除表中。1值表示在擦除表的对应条目中至少有一个有效单元,因此,下一个单元应当被写入最后被写入单元的位置的下一个位置。 |
3:2 |
如果条目的位4是1,这两位表示在下一次写入时在哪一个 |
|
存储器中写入。当位[3:2]=00时,它表示存储器1;当位[3:2]=01时,它表示存储器2;当位[3:2]=10时,它表示存储器3;当位[3:2]=11时,它表示存储器4。 |
1:0 |
这两位表示在下一次写入时,在擦除表中的对应条目的哪一个单元要被写入。当位[1:0]=00时,它表示存储器E1;当位[1:0]=01时,它表示存储器E2;当位[1:0]=10时,它表示存储器E3;当位[1:0]=11时,它表示存储器E4。 |
图7描述了根据本发明实施例的擦除发生器600。该擦除发生器主要由以下几方面组成:具有从0到15标号的16个比较器CMP 612、选择单元SEL 614、擦除层次缓存器616和擦除赋值逻辑618。擦除发生器采用256个周期来产生255个用于对代码字进行解码的擦除位。应该注意到,比较器的标号在确定擦除发生器的输出中是非常重要的。
在每个周期,比较器,也就是CMPn(0至15)从擦除表的条目中提出一个单元。比较器的另一个输入是当前代码字的行数。按顺序从擦除表中提取条目。即,在第一个周期,提取和处理擦除表的条目1,在第二个周期,处理条目2,依此类推,最后,处理条目255。在每个周期,比较器产生标志位和擦除层次。下文描述了如何确定这两个输出。
每个单元是如下的三元组:
(start_row,length,erasure level)
比较器检查擦除发生器输入的行数是否在start_row和start_row+length之间。如果是,则比较器设置它的输出擦除层次等于单元的擦除层次,设置它的输出标志位为1。否则,设置标志位为0。
在每个周期,选择单元614采用16对标志位和擦除层次,并产生擦除层次输出。如果来自比较器的所有标志位都为0,则选择单元输出擦除层次00b。否则,选择单元从具有最高标号以及其标志位被置为0的比较器的输出中选择擦除层次。在移位寄存器中对该选择单元的擦除层次输出进行缓存。
在255个迭代循环之后,255个擦除层次均被存储在缓存器616的移位寄存器中。然后,擦除赋值逻辑取用擦除层次并将它们转化为二进制擦除值。下面描述了这种转化。
1.如果擦除层次为00b,则擦除层次被指定为0;
2.如果擦除层次为11b,则擦除层次被指定为1;
3.如果擦除层次为01b或10b,那么,如果1的总数小于编程值(最大为64),则擦除值被指定为1,否则,擦除值被指定为0。
擦除缓存器616由一个255个触发器阵列组成,每个触发器均存储擦除信息的1位。当擦除位为0时,它表示当前的代码字节是可靠的(不是擦除),否则,它表示当前的代码字节是不可靠的(擦除)。
在Reed-Solomon解码器开始对代码字进行解码前,擦除产生擦除位,并将这些擦除位存储在擦除缓存器中。当解码开始时,擦除缓存器移位出触发器的值,并将一个擦除位提供给代码字中的每一个对应的应用代码字节。
作为存储器保存的示例,提供一种方案来计算擦除表所需的存储器的大小,以及确定利用本发明实施例所节省的存储器。
传统的擦除表的存储器大小是255×1024×2=522240比特=510K比特。
利用本发明,存储器大小是255×16×20比特=81600比特=79.68K比特。
节省的存储器为:522240-81600=440640比特=430K比特,转化为84.375%的节省。
表5总结计算——擦除表所需的存储器比较
采用本发明所需的存储器 |
79.68K比特 |
采用本发明节省的存储器 |
430K比特 |
本发明的优点包括改进的信号接收和信号处理,以及在移动无线装置中延长的电池寿命。
在公开了示范性实施例和最佳模式之后,可以对公开的实施例进行很多修改和变化,但是,这些修改和变化仍然在附属权利要求限定的本发明的主题和精神内。