Rework coarse energy coding.
authorTimothy B. Terriberry <tterribe@xiph.org>
Wed, 11 Aug 2010 15:35:24 +0000 (08:35 -0700)
committerJean-Marc Valin <jean-marc.valin@usherbrooke.ca>
Thu, 12 Aug 2010 00:38:45 +0000 (20:38 -0400)
commitc1c40a76c24fd918bc2db9171d1c01794d7ab94e
treed61a7e032241dc9f1bdd462014bb8d8665d5166c
parent6ac26ecf2df52748b3fd8991a424ef42462364ae
Rework coarse energy coding.

This changes how the PDF used to code coarse energy.
New features:
1) The probability of 0 (p0) is now indepedent of the decay rate
 of the remaining values; this additional flexibility will allow
 us to model the actual distribution better, though that
 improvement is not part of this patch.
2) There is a guaranteed minimum number of encodable energy
    deltas.
   This ensures that even the most extreme sudden volume changes
    can be accurately represented.
3) The tail end of the distribution has an adjustable (through a
    constant in the code) minimum probability.
   This allows us to lower the worst-case bit cost of a single
    delta.
4) The codebook is interleaved as 0, -1, +1, -2, +2, ... instead
    of the 0, +1, -1, +2, -2, ... order used before (see 5).
5) There is no restriction that p0 be even.
   Any remaining, unused part of the code is assigned to an
    additional negative value (collected inter data suggests that
    very large negative deltas are more common than very large
    positive ones).
   If the minimum probability is greater than 1, then an
    additional positive delta with a smaller probablity may also
    be added.
6) Once the tail of the distribution is reached, the energy delta
    is computed directly, instead of continuing to loop through
    the codebook.
   This reduces the worst-case computational cost.
libcelt/laplace.c