3GPP喷泉码介绍
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
喷泉码标准
——3GPP MBMS Raptor是喷泉码的一种,即编码器能根据需要由源符号块将可能多的生成的编码符号,而解码器是能够从任何略多于源符号数的编码符号中将源符号解码出来。Raptor码前向纠错码可用于MBMS的文件传输和MBMS流媒体应用上。
1.定义和符合
1.1定义
源块(Sourceblock):是一个包含K个源符号的数据块.
源符号(Source symbol):用于编码的最小数据单元,任意一个源块中的源符号大小都是相同的。
编码符号(Encoding symbol):编码符号包含在数据包中.编码符号分为源符号和Repair符号,由某个源块中的源符号产生的Repair符号的大小和该源块中的源符号一样。
Repair symbol: 由源符号产生,而非源符号
编码符号组(Encoding symbol group): 由一组编码符号构成,这些编码符号一起被发送,并有相同的编码符号标识EncodingSymbolID
编码符号标识(Encoding Symbol ID):用于表示一个编码符号组中的编码符号和源符号的对应关系
编码包(Encoding packet):携带编码符号的数据包
子块(Sub-block):一个源块可以分为数个子块。对一个包含K个源符号的源块来说,它的每一个子块由K个字符号构成,而每个源符号每个子块中的相应的子符号组成。
子符号(Sub-symbol):一个符号的一部分,每个源符号每个子块中的相应的子符号组成。
源包(Source packet): 携带源符号的数据包
Repair packet: 携带Repair符号的数据包
1.2符号
i,j,x,h,a,b, d, v, m 代表正整数。
ceil(x) ﻩ表示大于或者等于x的最小正整数,即向上取整
choose(i,j)ﻩ表示在j个物品中不重复的取出i个物品的组合数
floor(x) 表示小于或者等于x的最大正整数,即向下取整
Cﻩ表示中间符号数组, C[0],C[1], C[2],…,C[L-1]
C’表示源符号数组,C’[0], C’[1], C’[2],…, C’[K-1] Xﻩﻩ表示非负整数
V0, V1ﻩ表示两数组,数组中元素皆为4字节的整数,V0[0], V0[1],…,V0[255] 和V1[0],V1[1],…, V1[255]
Rand[X, i, m] 表示伪随机数发生器
Deg[v]ﻩﻩ表示度发生器
LTEnc[K, C ,(d, a, b)] 表示LT的编码符号发生器
Trip[K,X] 表示一个三元发生函
2.数据文件
2.1构造源块
为了将Raptor编码应用在文件传输上,一个文件可以分为Z个数据块,这Z个源块能够由Raptor编码器独立编码。每一个源块有唯一的源块号(SBN)来区分,第一个源块的SBN为0,第二个源块的SBN为1,依此类推。每个源块由K个源符号组成,每个源符号的大小为T个字节,而每个源符号又由唯一的编码符号标识(ESI)来区分,第一个源符号的ESI为0,第二个源符号的ESI为1,等等。
每个源块可以划分为N个子块,而每个子块又由K个子符号构成,每个子符号的大小为T’字节。
注意到,对一个文件来说,其中的每个源块包含的源符号数即K值没有必要相同;对一个源块来说,其中的每个子块的子符号大小T’也可不同。但是,一个文件中的每个源块的源符号大小T必须相同,同时,一个源块中的每个子块包含的子符号数K也必须相同。
下图表示一个源块,其中每一个小框代表一个子符号大小为T’字节,每一行表示一个子块,而每一列表示一个源符号。可以看出该源块由N个子块构成,该源块一个包含了K个源符号。在本例中,每个子块的子符号大小都是T’字节(实际上可以不相同),这样每个源符号的大小T=N* T’。
2.2源块和子块的分割
源块和子块的分割需要知道如下参数:
- Fﻩ文件的大小,单位为字节
- A 符号标准参数, 单位为字节
-ﻩTﻩ源符号大小,必须为A的倍数,单位为字节
-Zﻩ源块数目
- Nﻩ每个源块中的子块数目
这些参数的设置必须满足ceil(ceil(F/T)/Z)≤ K MAX.
函数Partition[]:该函数的输入为一对整数(I,J) ,输出为四个整数(I L, I S, J L, JS) ,其中I L =ceil(I/J),IS=floor(I/J),J L= I–I S·J,J S = J - J L.
于是
K t = ceil(F/T)
(K L, K S, ZL, Z S) = Partition[Kt, Z ]
ﻩ(T L, TS, N L, N S) =Partition[T/A,N ]
这样,该文件就可以被分割为Z = Z L+ Z S个连续的源块, 前面的ZL个源块,每个长度为K L·T字节后面的ZS个源块,每个长度为K S·T字节. 如果K t·T >F,那么最后一个源符号需要填充K t·T – F字节的零比特。.
同时,每个源块可以被分为N =N L+N S个连续的子块,前面的NL个子块每个包含K个连续的大小为TL·A字节的子符号,后面的NS个子块每个包含K个连续的大小为TS·A字节的子符号。
2.3参数推导算法
首先需要知道如下参数:
-ﻩF文件大小,单位为字节
-Wﻩ子块的目标大小,单位为字节
-ﻩP最大包负载大小,单位为字节
-ﻩAﻩ符号标准参数, 单位为字节
- KMAX每个源块的源符号数目的最大值
-ﻩKMIN每个源块的源符号数目的最小目标值
-G MAX每个包的符号数目的最大目标值
于是
G = min{ceil(P ·KMIN/F),P/A, G MAX}ﻩﻩ - 每个源块的源符号数目的估计值
T= floor(P/(A·G))·A
Kt =ceil(F/T)ﻩﻩﻩﻩﻩﻩﻩ- 文件的总符号数目
ﻩZ = ceil(K t/KMAX)
N=min{ceil(ceil( K t/Z)·T/W),T/A}
上面所求的G和N的值实际上分别是它们的下界,实际操作上应略大于上述参考值。同时,上面的算法并不能保证T能够整除P,所以上面的P实际上也是个参考值。但是,如果选择的G值恰好能整除P/A,,那么T则是P的约数,此时这个P值能够直接使用。
我们给出W, A,K MIN和G MAX参考值如下
ﻩW= 256 KBﻩﻩA= 4 ﻩK MIN=1024ﻩﻩG MAX=10