| Redundancy allocation algorithm | Input: | L = number of layers | D(j) = quality increment of layer j | K(j) = number of packets of layer j | Ploss = Packet loss probability | Rtot = total number of redundancy packets | Output: | Ropt(j) = redundancy packets assigned layer | Q(j,h) = overall quality provided by layers j to L when | protected by a total redundancy of h | | function redund (L,D,K,Ploss,Rtot) | Variable initialization | r(j,h) = redundancy assigned to layer j given that | layers j to L have a total budget of hredundancy | blocks | r = 0; Q=0; | for h=0 : Rtot, | r(L,h) = h; | Q(L,h) = binocdf(K(L)+h,h,Ploss)(L); | endfor | Recursion | for j=L-1:-1:1, | for h=0:Rtot, | for g=0:h; | p_jh=binocdf(K(j)+g,g,Ploss); | Qtmp = p_jh(D(j)+Q(j+1,h-g)); | if Qtmp Q(j,h) | Q(j,h) =Qtmp; | r(j,h) = g; | endif | endfor | endfor | endfor | Search for the overall best allocation of the total | redundancy Rtot | Rres = Rtot; | for j=1:L, | Qopt = 0; | for h=0:Rres, | if Q(j,h)Qopt, | Qopt = Q(j,h) | Ropt(j) = r(j,h); | endif | Rres = Rres-Ropt(j); | endfor | return Q | return Ropt | Binomial CDF | function binocdf(n,m,p) | f= n!/(m!(n-m)!)pm(1-p)(n-m) | return f |
|