具体实施方式
现在将参考附图详细描述基于本申请的具体实施例。各个图中的相同元件由相同的附图标记表示以保持一致性。
本申请提供了用于解码线性分组码的系统和方法,例如但不限于矩形奇偶校验、汉明码和低密度奇偶校验(LDPC)码。线性分组码可以由m×n矩阵H指定,其中n是码字中的比特数,m是冗余比特的数量(例如,奇偶校验比特)。对于LDPC码,矩阵H可以是具有低密度非零元素的稀疏矩阵。当满足矩阵方程Hc
T=0时,n比特码字c=[c1,c2,c3,…,cn]是有效码字,其中c
T是c的转置,矢量
可以被称为c的校验子(syndrome)。线性分组码也可以通过Tanner图以图形形式表示。对应于m×n矩阵H的Tanner图可以包括两组顶点:用于码字比特(比特节点)的n个顶点,以及用于奇偶校验方程(校验节点)的m个顶点。本申请的一个或多个实施例提供了一种线性分组解码方法,包括对码字执行第一解码,确定比特节点的校验运算成功和未成功的校验节点数量,校验运算成功和未成功的校验节点数量生成用于比特节点的软对数似然比(LLR),并使用软LLR作为第二解码器的输入执行第二解码。
图1示意性地示出了根据一个实施例的线性分组解码器100。线性分组解码器100可以是复合或级联解码器,其包括第一解码器104和第二解码器106。另外,线性分组解码器100还可以包括码字缓冲器102,软LLR生成器108,仲裁器110和交换缓冲器112。码字缓冲器102可以是用于码字的临时存储器。可以从,例如通信信道或存储器(诸如内存或硬盘驱动器),接收码字。码字可以包括有效码字,每个有效码字可以具有零的校验子。也就是说,它们满足方程HcT=0。然而,码字缓冲器102中的许多码字可能是无效的。也就是说,这些码字不满足HcT=0的矩阵方程,需要解码成有效的码字。在一个实施例中,线性分组解码器100可以是LDPC解码器。
第一解码器104可以是要应用于存储在码字缓冲器102中的码字的第一解码器。第一解码器104可以从码字缓冲器102接收码字并确定该码字的校验子是否为零。如果该码字的校验子为零,则该码字不需要被解码并且可以被发送到仲裁器110。仲裁器110可以从线性分组解码器100输出码字。如果码字的校验子不为零,则需要对码字进行解码。第一解码器104可以执行第一解码操作。第一解码操作可以是硬式判决解码操作,其可以是例如迭代解码操作,例如但不限于业内已知的比特翻转算法,或者还有待开发的任何其他技术。如果第一解码操作成功解码码字,则可以将解码的码字发送到仲裁器110,并且仲裁器110可以从线性分组解码器100输出解码的码字。然而,如果第一解码器104不能成功解码码字,则可以将在解码过程期间生成的数据发送到软LLR生成器108。
在一个实施例中,第一解码器104可以设置有预先配置的最大迭代次数,并且第一解码器104可以在确定它不能成功解码码字之前按预先配置的最大迭代次数执行解码操作。在另一实施例中,第一解码器104可具有收敛确定机制。例如,在每次迭代完成之后,第一解码器104可以确定码字中是否存在任何改进,例如,更多的校验节点变得满足。如果在一次迭代或可配置次数的迭代完成之后没有改进,则第一解码器104可以确定它不能成功地解码码字,并把码字留给第二解码器106解码。
软LLR生成器108可以被配置为基于第一解码器104的解码操作生成软对数似然比(LLR)。在一个实施例中,例如,在每次解码操作的迭代完成之后,对于一个比特节点,码字的一些校验节点的校验被满足,而该码字的另一些校验节点的校验未被满足。软LLR生成器108可以基于被满足的校验节点和未被满足的校验节点的数量来为比特节点生成软LLR。生成的LLR信息可以被发送到交换缓冲器112,交换缓冲器112还可以从码字缓冲器102接收码字,并且将LLR信息和对应的码字都提供给第二解码器106。
在一个实施例中,交换缓冲器112可以从第一解码器104接收经处理的码字。例如,尽管第一解码器104不能成功解码码字,但是在执行每次迭代完成之后可以翻转码字的一个或多个符号位元值。在第一次迭代完成之后被翻转了一个或多个符号位元值的码字可以在第一次迭代完成之后临时存储为经处理的码字,在第二次迭代完成之后被翻转了一个或多个符号位元值的码字可以在第二次迭代完成之后临时存储为经处理的码字,等等。尽管软LLR生成器108可以在图1中示出为与第一解码器104分离的组件,但是在一个实施例中,软LLR生成器108可以实现为第一解码器104的一部分。
如果第一解码器104未能成功解码码字,则第二解码器106可以是要被应用于该码字的第二解码器。第二解码器106可以执行第二解码操作,该第二解码操作可以将所生成的LLR信息用于码字的比特节点。第二解码操作可以是基于业界已知或尚待开发的任何软式判决算法的软式判决解码的实现。例如,在一个实施例中,第二解码操作可以是业界已知的或尚待开发的消息传递算法(message passing algorithm,MPA),例如但不限于,和积算法(sum-product algorithm,SPA),min-sum算法,随机解码算法或它们的变体。当第二解码器106成功解码码字时,第二解码器106可以将解码的码字发送到仲裁器110,并且仲裁器110可以从线性分组解码器100输出解码的码字。
在一个实施例中,第一解码器104可以被称为主解码器(“MDEC”),第二解码器106可以被称为强力解码器(powerful decoder,“PDEC”)。此外,在一个实施例中,线性分组解码器100可包括多个第一解码器104(例如,2个,3个,4个,8个,16个等)。作为一个例子,第二个第一解码器104以虚线示出。多个第一解码器104可以在来自码字缓冲器102的不同码字上并行地执行第一解码。另外,在一个实施例中,线性分组解码器100可包括多个第二解码器106(例如,2个,3个,4个,8个,16个等)。作为一个例子,第二个第二解码器106以虚线示出。多个第二解码器106可以在未被第一解码器104成功解码的不同码字上并行地执行第二解码。
图2A是根据本申请一个实施例的用于码字的Tanner图200的图示。Tanner图200可以是二分图,其示出了诸如汉明码或LDPC码的块码的奇偶校验约束。可以在奇偶校验矩阵HE中指定奇偶校验约束。对于LDPC码,奇偶校验矩阵HE可以是低密度,稀疏的n×m矩阵,其中n可以是码字中的符号位元的数量,m是校验节点的数量。奇偶校验矩阵HE不一定是唯一的,并且可以通过任何已知技术或将来开发的任何技术来选择。
奇偶校验矩阵HE的每一行可以对应于一个校验节点,并且每列可以对应于一个比特节点。在二进制代码中,奇偶校验矩阵的元素是0或1,但是对于非二进制LDPC码,奇偶校验矩阵的元素可以具有非二进制值。奇偶校验矩阵的每一行可以形成奇偶校验方程的系数。例如,对于图2A中描绘的节点,奇偶校验矩阵HE可以如下:
Tanner图中示出了两种类型的节点。如图2A所示,校验节点202,204,206,208,210,212,214,216和218可以用方块表示,并且可以表示有效码字或成功解码的码字必须满足的奇偶校验方程。比特节点220,222,224,226,228,230,232,234,236,238,240和242可以表示为圆圈,并且可以表示码字中的符号位元(即,二进制码的比特),例如比特节点220,222,224,226,228,230,232,234,236,238,240和242可以分别表示代码字c=[c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12]中的c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11和c12。
校验节点和比特节点之间的连接可以表示奇偶校验约束。例如,校验节点202可以表示在上面示出的奇偶校验矩阵HE中指定的第一行奇偶校验方程,其在列3,6,7和8中具有非零值。码字中的符号位元c3,c6,c7和c8可以对应于奇偶校验矩阵HE的第一行中的这些非零位置,并且第一行奇偶校验方程可以由数学方程表示:c3⊕c6⊕c7⊕c8=0,其中⊕是二进制码字的模2加法。因为比特节点224,230,232和234对应于符号位元c3,c6,c7和c8,所以校验节点202可以连接到这些比特节点。也就是说,可以认为校验节点202“校验”比特节点⊕224,230,232和234。类似地,校验节点204可以表示在上面示出的奇偶校验矩阵HE中指定的第二行奇偶校验方程,其在列1,2,5和12中具有非零值,并且第二行奇偶校验方程可以由数学方程表示:c1⊕c2⊕c5⊕c12=0,其中⊕是二进制码字的模2加法。因为比特节点220,222,228和242可以对应于符号位元c1,c2,c5和c12,所以校验节点204可以连接到这些比特节点。可以认为校验节点204“校验”比特节点220,222,228和242。其他校验节点可以根据相应的奇偶校验约束连接到比特节点。应当注意,因为每行具有四个非零位置,所以每个校验节点可以连接到四个比特节点。
从比特节点的角度来看,上面示出的奇偶校验矩阵HE中的每列可以在三行中非零。也就是说,码字中的每个符号位元可以由三个奇偶校验方程“校验”。相应地,每个比特节点可以连接到三个校验节点。例如,可以在第二,第五和第七奇偶校验方程(矩阵HE的第二,第五和第七行)中校验码字中的第一个符号位元。可以表示码字中的第一个符号位元的比特节点220可以被连接到校验节点204,210和214。可以表示码字中的第二符号位元的比特节点222可以被连接到校验节点204,208和218。其他的比特节点可以根据相应的奇偶校验约束连接到校验节点。从比特节点的角度的全部连接和从校验节点的角度的全部连接是相同的。
图2B和2C是根据本申请一个实施例的在Tanner图200中传递用于码字的信息的图示。Tanner图200可以用于码字的迭代解码。如图2A所示,校验节点208可以连接到比特节点222,230,232和238。也就是说,校验节点208可以“校验”比特节点222,230,232和238。图2B中的箭头指示,信息可以从比特节点222,230,232和238流到校验节点208。校验节点208可以根据从这些比特节点传递来的信息执行“校验”比特节点222,230,232和238的操作。这可以被称为迭代解码操作中的“符号位元到校验”步骤。校验节点可以根据由解码器(例如,硬式判决算法或软式判决解码算法)实现的解码算法来执行“校验”操作。
在一个实施例中,从比特节点传递到校验节点的信息可以包括每个比特节点的符号位元值。对于二进制符号位元值,例如,可以执行输入符号位元值的模2和,并且可以确定模2和是否为零。如果模2和为零,则可以将校验节点标记为被满足的校验节点。如果模2和不为零,则可以将校验节点标记为未被满足的校验节点。在另一实施例中,除了比特节点的符号位元值之外,每个符号位元值的可靠性信息(例如LLR)可以从比特节点传递到校验节点。在该实施例中,除了确定校验节点被满足或未被满足之外,解码器还可以确定该校验节点被满足或未被满足的可信度(或置信度如何)。
此外,图2A中的Tanner图200示出了比特节点226可以连接到校验节点206,212和214。也就是说,比特节点226可以由校验节点206,212和214“校验”。图2C中的箭头指示,信息可以从校验节点206,212和214流到比特节点226。比特节点226可以基于来自校验节点206,212和214的信息执行更新其信息(例如,符号位元值,符号位元值的可靠性)的操作。这可以被称为迭代解码操作中的“校验到符号位元”步骤。
在一个实施例中,从校验节点传递到比特节点的信息可以包括该比特节点的被满足的校验节点和未被满足的校验节点的数量。比特节点可以使用该信息来确定是否需要改变它们各自的符号位元值。例如,如果符号位元值是二进制的,并且被满足的校验节点比未被满足的校验节点更多地连接到比特节点,则该比特节点可以翻转其符号位元值。在另一个实施例中,除了比特节点的被满足的校验节点和未被满足的校验节点的数量之外,还可以将校验节点如何被满足或未被满足的可信度信息从校验节点传递给比特节点。在该实施例中,解码器确定是否更新比特节点的符号位元值时,可以不仅基于被满足和未被满足的校验节点的数量,而且基于每个校验节点的被满足或未被满足有多可靠。
图3示意性地示出了根据一个实施例的第一解码器104的组件图。第一解码器104可以包括比特节点存储器302,校验子计算器304,码字收敛检测器306和比特翻转控制308。比特节点存储器302可以是用于码字的符号位元值的存储器。在解码操作的第一次迭代之前,比特节点存储器302中的码字的符号位元值可以是来自码字缓冲器102的初始符号位元值。在每次迭代完成之后,如果码字不满足任何奇偶校验约束,则可以改变被解码的码字的一个或多个符号位元值,并且可以更新存储在比特节点存储器302中的码字的符号位元值以反映这些改变。
校验子计算器304可以被配置为计算正被解码的码字的校验子。例如,校验子计算可以包括计算码字的每个奇偶校验方程。码字收敛检测器306可以被配置为基于校验子计算确定被解码的码字是否为一个有效码字。如果针对码字计算的校验子为零,则该码字是一个有效码字,并且可以由第一解码器104发送到仲裁器110。如果计算出的码字校验子不为零,则该码字无效。无效码字可以由第一解码器104在另一次迭代中继续解码,或者如果已经达到最大迭代次数,则第一解码器104可以将校验节点满足度信息传递给LLR生成器108并且将该码字留给第二解码器106解码。
比特翻转控制308可以包括比特翻转阈值,并且可以被配置为确定是否需要更新正被解码的码字中的符号位元值。在一个实施例中,比特翻转阈值可以以简单多数规则实现。例如,比特节点可以连接到总数为T的校验节点,并且T=#U+#S,其中#U可以表示未被满足的校验节点的数量,#S可以表示被满足的校验节点的数量。根据简单多数规则,只要未被满足的校验节点的数量大于被满足的校验节点的数量(例如,#U>#S),比特节点的符号位元值可以根据接收到的#U和#S信息而被翻转。在另一个实施例中,比特翻转阈值可以被配置为比简单多数规则更加复杂一点。例如,比特翻转阈值可以是未被满足的校验节点的数量大于被满足校验的数量和数字M的总和,由不等式#U>#S+M表示。数字M可以是正整数(例如,1,2,3,5,10等),总数T的百分比(例如,T的10%,T的15%,T的30%)),未被满足的校验节点数量的百分比(例如,#U的10%,#U的15%,#U的30%)或被满足的校验节点总数的百分比(例如,10%的#S,15%的#S,30%的#S)。
在一个或多个实施例中,比特翻转阈值可以是可配置的。例如,可以将其设置为一个阈值以解码一组码字,并设置为另一阈值以解码另一组码字。此外,在解码操作期间可以实时调整比特翻转阈值。例如,可以针对解码操作的某一次迭代的将其设置为一个阈值,并且针对解码操作的另一次迭代将其调整为另一阈值。
图4示意性地示出了根据一个实施例的第二解码器106的组件图。第二解码器106可以包括LLR存储器402,比特节点处理器404,校验节点处理器406,校验子计算器408,校验比特(check-to-bit,C2B)存储器410和LLR计算器412。LLR存储器402可以是用于LLR信息的存储。最初,LLR存储器402可以存储从LLR生成器108接收的LLR信息。在第二解码器106的每次解码迭代完成之后,LLR存储器402可以存储由LLR计算器412生成的更新过的LLR信息。
比特节点处理器404可以被配置为基于由第二解码器106实现的解码算法来执行操作。在一个实施例中,第二解码器106可以实现最小和(min-sum)解码算法,并且比特节点处理器404可以被配置为执行要在最小和解码算法中执行的比特节点操作。在另一实施例中,第二解码器106可以实现随机解码算法,并且比特节点处理器404可以被配置为执行要在随机解码算法中执行的比特节点操作。
校验节点处理器406也可以被配置为基于由第二解码器106实现的解码算法来执行操作。在第二解码器106实现最小和解码算法的实施例中,校验节点处理器406可以被配置为执行要在最小和解码算法中执行的校验节点操作。在第二解码器106实现随机解码算法的另一实施例中,校验节点处理器406可以被配置为执行要在随机解码算法中执行的校验节点操作。
校验比特(check-to-bit,C2B)存储器410可以是用于需要从校验节点处理器406传递到比特节点处理器404的信息的存储器。例如,基于由第二解码器106实现的解码算法,存储在C2B存储器410中的信息可以是最不可靠的LLR及其位置(例如,对应于哪个比特节点),第二最不可靠的LLR及其位置(例如,对应于哪个比特节点),以及连接到相应校验节点的比特节点的累积符号位元值。
校验子计算器408可以被配置为计算正被解码的码字的校验子。例如,校验子计算可以是计算码字的每个奇偶校验方程。如果正被解码的码字的计算结果校验子为零,则该码字已成功解码,并且可由第二解码器106发送到仲裁器110。如果正被解码的码字的计算结果校验子非零,则该码字尚未被成功解码,并且第二解码器106可以执行另一次迭代。
LLR计算器412可以被配置为基于第二解码器106的解码操作来计算软对数似然比(LLR)。在一个实施例中,例如,第二解码器106可以实现最小和解码算法,并且LLR计算器412可以被配置为根据最小和解码算法执行LLR计算。在另一实施例中,第二解码器106可以实现随机解码算法,并且LLR计算器412可以被配置为根据随机解码算法执行LLR计算。在一个或多个实施例中,可以将计算出的LLR信息传递到LLR存储器402以进行解码操作的下一次迭代。
图5示意性地示出了根据本申请一个实施例的LLR生成。图5中的Tanner图可以是用于奇偶校验矩阵的部分Tanner图,其中每个比特节点可以被六个校验节点“校验”。例如,如图5所示,比特节点514可以连接到六个校验节点502,504,506,508,510和512。在一次解码迭代中的“符号位元到校验”步骤之后,校验节点502,504,508和510可能被满足,而校验节点506和512可能被未满足,可以基于关于被满足的校验节点的数量(例如,#S)和未被满足的校验节点的数量(例如,#U)生成软LLR。
在一个实施例中,可以将初始LLR幅度分配给一个值X,可以将比例因子分配给一个值Q,将比特节点的符号位元值表示为D,然后根据P=#S*Q*D*X-#U*Q*D*X+D*X=(#S*Q-#U*Q+1)*D*X=((#S-#U)*Q+1)*D*X生成软LLR,其中“*”是乘号。例如,如图5所示,四个校验节点502,504,508和510可以是被满足,并且校验节点506和512可以是未被满足。因此,#S是4,#U是2。如果初始LLR幅度X=8,缩放因子Q=0.5,并且比特节点514的符号位元值D=+1,则软LLR P可以被生成为P=((4-2)*0.5+1)*8*1=16。在另一示例中,在一次解码迭代中的“符号位元到校验”步骤之后,#S可以是1,并且#U可以是5。如果初始LLR幅度X=8,缩放因子Q=0.5,并且比特节点514的符号位元值D=+1,则软LLR P可以被生成为P=((1-5)*0.5+1)*8*1=-8。
在一些实施例中,软LLR和任何后续计算生成的LLR可具有硬件约束。例如,软LLR和任何后续计算的LLR可以具有有限比特位宽,例如但不限于4比特,5比特,6比特,7比特或8比特,并且其中一个比特可以是符号比特(例如,最高比特(most significant bit,MSB))。初始的LLR幅度X和缩放因子Q需要合适的选择以满足硬件约束。例如,X和Q的值可以是任意值,该任意值可以使得生成的软LLR值和任何后续计算生成的LLR值落入由有限比特位宽限制的值范围内。另外,在一些实施例中,可以选择X和Q的值,使得生成的软LLR值和任何后续计算生成的LLR值不仅落入由有限比特位宽限制的值范围内,而且还覆盖尽可能大的范围。在一个实施例中,例如,具有误码率(BER)的二进制系统可以具有基于BER计算的LLR,并且可以将计算的LLR缩放为整数并选择为初始LLR幅度X。缩放因子可以通过模拟仿真计算确定。
在一个实施例中,对于二进制码字,比特节点的符号位元值D可以是+1或-1,其可以是来自码字缓冲器102的初始符号位元值,或者在上一次解码迭代中由第一解码器104翻转。
在一个或多个实施例中,图5中所示的软LLR生成可以在软LLR生成器108中实现。在一个实施例中,可以在第一解码器104进行可配置数量的解码迭代完成之后生成软LLR。例如,可配置数量可以是一次,两次,三次或为第一解码器104配置的最大迭代次数,并且线性分组解码器100可以被配置为使用所生成的软LLR作为第二解码器106的输入,无论最终由第一解码器104执行了多少次迭代解码操作。在另一实施例中,可以在第一解码器104每次解码迭代完成之后生成软LLR,并且线性分组解码器100可以被配置为选择所生成的软LLR中的任何一个作为第二解码器106的输入,而不管最终由第一解码器104执行了多少次迭代解码操作。在又一个实施例中,软LLR生成器108可以被配置为针对若干所选迭代生成软LLR,例如,在第一次迭代,第三次迭代,第五次迭代等之后,要选择哪些迭代可以是可配置的。
图6示出了根据一个实施例的用于解码线性分组码字的过程600的流程图。在框602中,可以对码字执行第一解码。例如,第一解码器104可以从码字缓冲器102获取码字并且对码字执行第一解码操作。在框604中,可以为比特节点确定被满足的校验节点和未被满足的校验节点的数量。例如,在第一解码操作的一次迭代(可以是第一次迭代,第二次迭代,或任何次数的迭代)之后,可以为比特节点确定被满足的校验节点的数量和未被满足的校验节点的数量。在框606中,可以基于被满足和未被满足的校验节点的数量来生成用于比特节点的软LLR。如图5中所示并且在此描述的,可以基于被满足和未被满足的校验节点的数量来生成用于比特节点的软LLR。在框608中,可以使用软LLR作为输入来执行第二解码。例如,第二解码器106可以使用用于比特节点的软LLR信息对码字执行第二解码操作。
过程600可以使用软件(例如,可由计算机处理器(CPU,GPU,或两者的组合)执行)、硬件(例如,现场可编程门阵列(FPGA)或专用IC(ASIC))、固件、或三者的任意合适组合来实现。在一个实施例中,例如,线性分组解码器100的组件可以以硬件电路实现,并且过程600可以在硬件中实现。在另一个实施例中,例如,线性分组解码器100的组件可以用软件模拟,并且过程600可以以计算机处理器可执行指令编程,并由执行可执行指令的计算机处理器执行。
图7示意性地示出了包括本文所述的线性分组解码器100的系统700。系统700可以是存储系统,例如但不限于内存或硬盘驱动器系统。系统700可以包括数据存储器702和解码器704。数据存储器702可以是,例如,内存或硬盘驱动器。解码器704可以是图1中所示的线性分组解码器100的实施例。从数据存储器702读取的数据可能已损坏,并且解码器704可解码损坏的数据并恢复正确的数据信息。
图8示意性地示出了包括本申请所述的线性分组解码器100的另一系统800。系统800可以是通信系统,例如但不限于有线或无线通信系统。系统800可以包括接收器802,解调器804和解码器806。接收器802可以是例如用于无线通信的天线或用于有线通信的接收器。解调器804可以被配置为解调由接收器802接收的信号并生成数字信号。解码器806可以是图1中所示的线性分组解码器100的实施例。由接收器802接收的数据可能已损坏,解码器806可解码损坏的数据并恢复正确的数据信息。
本申请任何所公开的方法和操作可以实现为存储在一个或多个计算机可读存储介质上的计算机可执行指令(例如,线性分组解码器100的软件模拟),并在计算机上执行(例如,任何商用计算机,包括智能电话或其他包含计算硬件的移动设备)。计算机可读存储介质可以是例如非暂时性的计算机可读存储介质,例如一个或多个光学媒体盘,易失性存储器组件(例如DRAM或SRAM),或非易失性存储器组件(例如硬盘驱动器)等等。用于实现所公开的技术的任何计算机可执行指令以及在所公开的实施例的实现期间创建和使用的任何数据可以存储在一个或多个计算机可读介质(例如,非暂时性计算机可读介质)上。计算机可执行指令可以是例如存储器访问控制或数字信号通信的一部分。这样的软件可以例如在单个本地计算设备(例如,任何合适的商用计算机或移动设备)上或在网络环境中使用一个或多个网络计算机执行,网络环境可以是例如通过因特网、广域网、局域网、客户端-服务器网络(例如云计算网络)、或其他此类网络。
应当注意,在若干示例和实施例中,LDPC可以用作线性分组码的示例。然而,本申请的实施例也可以以其他类型的线性分组码实现,例如但不限于矩形奇偶校验和汉明码。例如,在一个实施例中,线性分组解码器100可以作为汉明码解码器而用于汉明码,并且第一解码器104和第二解码器106可以实现汉明码的解码操作。此外,诸如在“线性分组码”,“LDPC码”或“汉明码”中使用的词“码”可以一般性地指码的类型。并且“码字”一词可以指用线性分组码编码的单位数据块。
虽然本文已经公开了各种方面和实施例,但是其他方面和实施例对于本领域技术人员而言将是显而易见的。这里公开的各个方面和实施例是出于说明的目的而不是限制性的,真正的范围和精神由所附权利要求指示。