Content deleted Content added
Added and updated references to implementations of the RaptorQ code |
Made new section for RaptorQ code (since it is the most advanced Raptor code, and moved up the reference to Online codes to the previous section so that the reference is not in the new RaptorQ code section, since online codes are not in the family of Raptor codes. Added some more information about the properties of the RaptorQ code |
||
Line 2:
In [[computer science]], '''Raptor codes''' ('''''rap'''id '''tor'''nado'';<ref>{{cite speech|author=Amin Shokrollahi|title=The Development of Raptor Codes|event=Invited talk at the [[Kungliga Tekniska högskolan]]|date=31 January 2011|url=http://bambuser.com/v/1372056|accessdate=24 February 2012}}</ref> see [[Tornado codes]]) are the first known class of [[fountain codes]] with linear time encoding and decoding. They were invented by [[Amin Shokrollahi]] in 2000/2001 and were first published in 2004 as an extended abstract. Raptor codes are a significant theoretical and practical improvement over [[LT codes]], which were the first practical class of [[fountain codes]].
Raptor codes, as with fountain codes in general, encode a given source block of data consisting of a number ''k'' of equal size source symbols into a potentially limitless sequence of [[encoding symbol]]s such that reception of any ''k'' or more encoding symbols allows the source block to be recovered with some non-zero probability. The probability that the source block can be recovered increases with the number of encoding symbols received above ''k'' becoming very close to 1, once the number of received encoding symbols is only very slightly larger than ''k''. For example, with the latest generation of Raptor codes, the [http://tools.ietf.org/html/rfc6330 RaptorQ] codes, the chance of decoding failure when ''k'' encoding symbols have been received is less than 1%, and the chance of decoding failure when ''k+2'' encoding symbols have been received is less than one in a million. (See ''Recovery probability and overhead'' section below for more discussion on this.) A symbol can be any size, from a single byte to hundreds or thousands of bytes.
Raptor codes may be systematic or non-systematic. In the systematic case, the symbols of the original source block, i.e. the source symbols, are included within the set of encoding symbols. An example of a systematic Raptor code is the code defined by the [[3rd Generation Partnership Project]] for use in [[mobile cellular wireless]] broadcast and multicast and also used by [[DVB-H standard]]s for IP datacast to handheld devices (see external links). The Raptor codes in these standards is defined also in [[IETF]] RFC 5053.
[[Online codes]] are another example of a non-systematic fountain code. ▼
The most advanced version of a practical Raptor code is RaptorQ defined in [[IETF]] RFC 6330. There are several implementations of RaptorQ available, including TvRq (see https://github.com/lorinder/TvRQ), the OpenRQ project (see https://openrq-team.github.io/openrq/), libRaptorQ (see https://github.com/LucaFulchir/libRaptorQ), a RUST implementation of RaptorQ (see https://github.com/cberner/raptorq), and a high performance implementation of RaptorQ (see https://www.bitripple.com/rq). ▼
== RaptorQ code ==
▲[[Online codes]] are another example of a non-systematic fountain code.
▲The most advanced version of a practical Raptor code is RaptorQ defined in [[IETF]] RFC 6330. The RaptorQ code is a systematic code, can be implemented in a way to achieve linear time encoding and decoding performance, has near-optimal recovery properties (see Recovery probability and overhead section below for more details), supports up to 56,403 source symbols, and can support an essentially unlimited number of encoding symbols. There are several implementations of RaptorQ available, including TvRq (see https://github.com/lorinder/TvRQ), the OpenRQ project (see https://openrq-team.github.io/openrq/), libRaptorQ (see https://github.com/LucaFulchir/libRaptorQ), a RUST implementation of RaptorQ (see https://github.com/cberner/raptorq), and a high performance implementation of RaptorQ (see https://www.bitripple.com/rq).
== Overview ==
Line 41 ⟶ 43:
(Based on elementary information theory considerations, complete recovery of a source block with ''k'' source symbols is not possible if less than ''k'' encoding symbols are received.)
The recovery probability is the probability that the source block is completely recovered upon receiving a given number of random encoding symbols generated from the source block.
The RaptorQ code specified in [[IETF]] RFC 6330 has the following trade-off between recovery probability and recovery overhead:
* Greater than 99% recovery probability with overhead of 0 symbols (recovery from ''k'' received encoding symbols).
|