Moves opus_compare to the same base64 tar.gz as the rest of the code
[opus.git] / doc / draft-ietf-codec-opus.xml
1 <?xml version="1.0" encoding="utf-8"?>
2 <!DOCTYPE rfc SYSTEM 'rfc2629.dtd'>
3 <?rfc toc="yes" symrefs="yes" ?>
4
5 <rfc ipr="trust200902" category="std" docName="draft-ietf-codec-opus-08">
6
7 <front>
8 <title abbrev="Interactive Audio Codec">Definition of the Opus Audio Codec</title>
9
10
11 <author initials="JM" surname="Valin" fullname="Jean-Marc Valin">
12 <organization>Mozilla</organization>
13 <address>
14 <postal>
15 <street>650 Castro Street</street>
16 <city>Mountain View</city>
17 <region>CA</region>
18 <code>94041</code>
19 <country>USA</country>
20 </postal>
21 <phone>+1 650 903-0800</phone>
22 <email>jmvalin@jmvalin.ca</email>
23 </address>
24 </author>
25
26 <author initials="K." surname="Vos" fullname="Koen Vos">
27 <organization>Skype Technologies S.A.</organization>
28 <address>
29 <postal>
30 <street>Stadsgarden 6</street>
31 <city>Stockholm</city>
32 <region></region>
33 <code>11645</code>
34 <country>SE</country>
35 </postal>
36 <phone>+46 855 921 989</phone>
37 <email>koen.vos@skype.net</email>
38 </address>
39 </author>
40
41 <author initials="T." surname="Terriberry" fullname="Timothy Terriberry">
42 <organization>Mozilla Corporation</organization>
43 <address>
44 <postal>
45 <street>650 Castro Street</street>
46 <city>Mountain View</city>
47 <region>CA</region>
48 <code>94041</code>
49 <country>USA</country>
50 </postal>
51 <phone>+1 650 903-0800</phone>
52 <email>tterriberry@mozilla.com</email>
53 </address>
54 </author>
55
56 <date day="16" month="August" year="2011" />
57
58 <area>General</area>
59
60 <workgroup></workgroup>
61
62 <abstract>
63 <t>
64 This document defines the Opus codec, designed for interactive speech and audio
65  transmission over the Internet.
66 </t>
67 </abstract>
68 </front>
69
70 <middle>
71
72 <section anchor="introduction" title="Introduction">
73 <t>
74 The Opus codec is a real-time interactive audio codec composed of a linear
75  prediction (LP)-based layer and a Modified Discrete Cosine Transform
76  (MDCT)-based layer.
77 The main idea behind using two layers is that in speech, linear prediction
78  techniques (such as CELP) code low frequencies more efficiently than transform
79  (e.g., MDCT) domain techniques, while the situation is reversed for music and
80  higher speech frequencies.
81 Thus a codec with both layers available can operate over a wider range than
82  either one alone and, by combining them, achieve better quality than either
83  one individually.
84 </t>
85
86 <t>
87 The primary normative part of this specification is provided by the source code
88  in <xref target="ref-implementation"></xref>.
89 In general, only the decoder portion of this software is normative, though a
90  significant amount of code is shared by both the encoder and decoder.
91 <!--TODO: Forward reference conformance test-->
92 The decoder contains significant amounts of integer and fixed-point arithmetic
93  which must be performed exactly, including all rounding considerations, so any
94  useful specification must make extensive use of domain-specific symbolic
95  language to adequately define these operations.
96 Additionally, any
97 conflict between the symbolic representation and the included reference
98 implementation must be resolved. For the practical reasons of compatibility and
99 testability it would be advantageous to give the reference implementation
100 priority in any disagreement. The C language is also one of the most
101 widely understood human-readable symbolic representations for machine
102 behavior.
103 For these reasons this RFC uses the reference implementation as the sole
104  symbolic representation of the codec.
105 </t>
106
107 <!--TODO: C is not unambiguous; many parts are implementation-defined-->
108 <t>While the symbolic representation is unambiguous and complete it is not
109 always the easiest way to understand the codec's operation. For this reason
110 this document also describes significant parts of the codec in English and
111 takes the opportunity to explain the rationale behind many of the more
112 surprising elements of the design. These descriptions are intended to be
113 accurate and informative, but the limitations of common English sometimes
114 result in ambiguity, so it is expected that the reader will always read
115 them alongside the symbolic representation. Numerous references to the
116 implementation are provided for this purpose. The descriptions sometimes
117 differ from the reference in ordering or through mathematical simplification
118 wherever such deviation makes an explanation easier to understand.
119 For example, the right shift and left shift operations in the reference
120 implementation are often described using division and multiplication in the text.
121 In general, the text is focused on the "what" and "why" while the symbolic
122 representation most clearly provides the "how".
123 </t>
124
125 <section anchor="notation" title="Notation and Conventions">
126 <t>
127 The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD",
128  "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be
129  interpreted as described in RFC 2119.
130 </t>
131 <t>
132 Even when using floating-point, various operations in the codec require
133  bit-exact fixed-point behavior.
134 The notation "Q&lt;n&gt;", where n is an integer, denotes the number of binary
135  digits to the right of the decimal point in a fixed-point number.
136 For example, a signed Q14 value in a 16-bit word can represent values from
137  -2.0 to 1.99993896484375, inclusive.
138 This notation is for informational purposes only.
139 Arithmetic, when described, always operates on the underlying integer.
140 E.g., the text will explicitly indicate any shifts required after a
141  multiplication.
142 </t>
143 <t>
144 Expressions, where included in the text, follow C operator rules and
145  precedence, with the exception that syntax like "2**n" is used to indicate 2
146  raised to the power n.
147 The text also makes use of the following functions:
148 </t>
149
150 <section anchor="min" title="min(x,y)">
151 <t>
152 The smallest of two values x and y.
153 </t>
154 </section>
155
156 <section anchor="max" title="max(x,y)">
157 <t>
158 The largest of two values x and y.
159 </t>
160 </section>
161
162 <section anchor="clamp" title="clamp(lo,x,hi)">
163 <figure align="center">
164 <artwork align="center"><![CDATA[
165 clamp(lo,x,hi) = max(lo,min(x,hi))
166 ]]></artwork>
167 </figure>
168 <t>
169 With this definition, if lo&gt;hi, the lower bound is the one that is enforced.
170 </t>
171 </section>
172
173 <section anchor="sign" title="sign(x)">
174 <t>
175 The sign of x, i.e.,
176 <figure align="center">
177 <artwork align="center"><![CDATA[
178           ( -1,  x < 0 ,
179 sign(x) = <  0,  x == 0 ,
180           (  1,  x > 0 .
181 ]]></artwork>
182 </figure>
183 </t>
184 </section>
185
186 <section anchor="log2" title="log2(f)">
187 <t>
188 The base-two logarithm of f.
189 </t>
190 </section>
191
192 <section anchor="ilog" title="ilog(n)">
193 <t>
194 The minimum number of bits required to store a positive integer n in two's
195  complement notation, or 0 for a non-positive integer n.
196 <figure align="center">
197 <artwork align="center"><![CDATA[
198           ( 0,                 n <= 0,
199 ilog(n) = <
200           ( floor(log2(n))+1,  n > 0
201 ]]></artwork>
202 </figure>
203 Examples:
204 <list style="symbols">
205 <t>ilog(-1) = 0</t>
206 <t>ilog(0) = 0</t>
207 <t>ilog(1) = 1</t>
208 <t>ilog(2) = 2</t>
209 <t>ilog(3) = 2</t>
210 <t>ilog(4) = 3</t>
211 <t>ilog(7) = 3</t>
212 </list>
213 </t>
214 </section>
215
216 </section>
217
218 </section>
219
220 <section anchor="overview" title="Opus Codec Overview">
221
222 <t>
223 The Opus codec scales from 6&nbsp;kb/s narrowband mono speech to 510&nbsp;kb/s
224  fullband stereo music, with algorithmic delays ranging from 5&nbsp;ms to
225  65.2&nbsp;ms.
226 At any given time, either the LP layer, the MDCT layer, or both, may be active.
227 It can seamlessly switch between all of its various operating modes, giving it
228  a great deal of flexibility to adapt to varying content and network
229  conditions without renegotiating the current session.
230 Internally, the codec always operates at a 48&nbsp;kHz sampling rate, though it
231  allows input and output of various bandwidths, defined as follows:
232 </t>
233 <texttable>
234 <ttcol>Abbreviation</ttcol>
235 <ttcol align="right">Audio Bandwidth</ttcol>
236 <ttcol align="right">Sampling Rate (Effective)</ttcol>
237 <c>NB (narrowband)</c>       <c>4&nbsp;kHz</c>  <c>8&nbsp;kHz</c>
238 <c>MB (medium-band)</c>      <c>6&nbsp;kHz</c> <c>12&nbsp;kHz</c>
239 <c>WB (wideband)</c>         <c>8&nbsp;kHz</c> <c>16&nbsp;kHz</c>
240 <c>SWB (super-wideband)</c> <c>12&nbsp;kHz</c> <c>24&nbsp;kHz</c>
241 <c>FB (fullband)</c>        <c>20&nbsp;kHz</c> <c>48&nbsp;kHz</c>
242 </texttable>
243 <t>
244 These can be chosen independently on the encoder and decoder side, e.g., a
245  fullband signal can be decoded as wideband, or vice versa.
246 This approach ensures a sender and receiver can always interoperate, regardless
247  of the capabilities of their actual audio hardware.
248 </t>
249
250 <t>
251 Opus defines super-wideband (SWB) mode to have an effective sampling rate of
252  24&nbsp;kHz, unlike some other audio coding standards that use 32&nbsp;kHz.
253 This was chosen for a number of reasons.
254 The band layout in the MDCT layer naturally allows skipping coefficients for
255  frequencies over 12&nbsp;kHz, but does not allow cleanly dropping frequencies
256  over 16&nbsp;kHz.
257 The choice of 24&nbsp;kHz also makes resampling in the MDCT layer easier, as 24
258  evenly divides 48, and when 24&nbsp;kHz is sufficient, it can save computation
259  in other processing, such as Acoustic Echo Cancellation (AEC).
260 Experimental changes to the band layout to allow a 16&nbsp;kHz cutoff showed
261  potential quality degredations, and at typical bitrates the number of bits
262  saved by using such a cutoff instead of coding in fullband (FB) mode is very
263  small.
264 Therefore, if an application wishes to process a signal sampled at 32&nbsp;kHz,
265  it should just use FB mode.
266 </t>
267
268 <t>
269 The LP layer is based on the
270  <eref target='http://developer.skype.com/silk'>SILK</eref> codec
271  <xref target="SILK"></xref>.
272 It supports NB, MB, or WB audio and frame sizes from 10&nbsp;ms to 60&nbsp;ms,
273  and requires an additional 5.2&nbsp;ms look-ahead for noise shaping estimation
274  (5&nbsp;ms) and internal resampling (0.2&nbsp;ms).
275 Like Vorbis and many other modern codecs, SILK is inherently designed for
276  variable-bitrate (VBR) coding, though an encoder can with sufficient effort
277  produce constant-bitrate (CBR) or near-CBR streams.
278 </t>
279
280 <t>
281 The MDCT layer is based on the
282  <eref target='http://www.celt-codec.org/'>CELT</eref>  codec
283  <xref target="CELT"></xref>.
284 It supports sampling NB, WB, SWB, or FB audio and frame sizes from 2.5&nbsp;ms
285  to 20&nbsp;ms, and requires an additional 2.5&nbsp;ms look-ahead due to the
286  overlapping MDCT windows.
287 The CELT codec is inherently designed for CBR coding, but unlike many CBR
288  codecs it is not limited to a set of predetermined rates.
289 It internally allocates bits to exactly fill any given target budget, and an
290  encoder can produce a VBR stream by varying the target on a per-frame basis.
291 The MDCT layer is not used for speech when the audio bandwidth is WB or less,
292  as it is not useful there.
293 On the other hand, non-speech signals are not always adequately coded using
294  linear prediction, so for music only the MDCT layer should be used.
295 </t>
296
297 <t>
298 A hybrid mode allows the use of both layers simultaneously with a frame size of
299  10 or 20&nbsp;ms and a SWB or FB audio bandwidth.
300 Each frame is split into a low frequency signal and a high frequency signal,
301  with a cutoff of 8&nbsp;kHz.
302 The LP layer then codes the low frequency signal, followed by the MDCT layer
303  coding the high frequency signal.
304 In the MDCT layer, all bands below 8&nbsp;kHz are discarded, so there is no
305  coding redundancy between the two layers.
306 </t>
307
308 <t>
309 At the decoder, the two decoder outputs are simply added together.
310 To compensate for the different look-aheads required by each layer, the CELT
311  encoder input is delayed by an additional 2.7&nbsp;ms.
312 This ensures that low frequencies and high frequencies arrive at the same time.
313 This extra delay MAY be reduced by an encoder by using less look-ahead for noise
314  shaping or using a simpler resampler in the LP layer, but this will reduce
315  quality.
316 However, the base 2.5&nbsp;ms look-ahead in the CELT layer cannot be reduced in
317  the encoder because it is needed for the MDCT overlap, whose size is fixed by
318  the decoder.
319 </t>
320
321 <t>
322 Both layers use the same entropy coder, avoiding any waste from "padding bits"
323  between them.
324 The hybrid approach makes it easy to support both CBR and VBR coding.
325 Although the LP layer is VBR, the bit allocation of the MDCT layer can produce
326  a final stream that is CBR by using all the bits left unused by the LP layer.
327 </t>
328
329 </section>
330
331 <section anchor="modes" title="Codec Modes">
332 <t>
333 As described, the two layers can be combined in three possible operating modes:
334 <list style="numbers">
335 <t>A LP-only mode for use in low bitrate connections with an audio bandwidth of
336  WB or less,</t>
337 <t>A hybrid (LP+MDCT) mode for SWB or FB speech at medium bitrates, and</t>
338 <t>An MDCT-only mode for very low delay speech transmission as well as music
339  transmission.</t>
340 </list>
341 </t>
342 <t>
343 A single packet may contain multiple audio frames.
344 However, they must share a common set of parameters, including the operating
345  mode, audio bandwidth, frame size, and channel count.
346 This section describes the possible combinations of these parameters and the
347  internal framing used to pack multiple frames into a single packet.
348 This framing is not self-delimiting.
349 Instead, it assumes that a higher layer (such as UDP or RTP or Ogg or Matroska)
350  will communicate the length, in bytes, of the packet, and it uses this
351  information to reduce the framing overhead in the packet itself.
352 A decoder implementation MUST support the framing described in this section.
353 An alternative, self-delimiting variant of the framing is described in
354  <xref target="self-delimiting-framing"/>.
355 Support for that variant is OPTIONAL.
356 </t>
357
358 <section anchor="toc_byte" title="The TOC Byte">
359 <t>
360 An Opus packet begins with a single-byte table-of-contents (TOC) header that
361  signals which of the various modes and configurations a given packet uses.
362 It is composed of a frame count code, "c", a stereo flag, "s", and a
363  configuration number, "config", arranged as illustrated in
364  <xref target="toc_byte_fig"/>.
365 A description of each of these fields follows.
366 </t>
367
368 <figure anchor="toc_byte_fig" title="The TOC byte">
369 <artwork align="center"><![CDATA[
370  0
371  0 1 2 3 4 5 6 7
372 +-+-+-+-+-+-+-+-+
373 | c |s| config  |
374 +-+-+-+-+-+-+-+-+
375 ]]></artwork>
376 </figure>
377
378 <t>
379 The top five bits of the TOC byte, labeled "config", encode one of 32 possible
380  configurations of operating mode, audio bandwidth, and frame size.
381 <xref target="config_bits"/> lists the parameters for each configuration.
382 </t>
383 <texttable anchor="config_bits" title="TOC Byte Configuration Parameters">
384 <ttcol>Configuration Number(s)</ttcol>
385 <ttcol>Mode</ttcol>
386 <ttcol>Bandwidth</ttcol>
387 <ttcol>Frame Size(s)</ttcol>
388 <c>0...3</c>   <c>LP-only</c>   <c>NB</c>  <c>10, 20, 40, 60&nbsp;ms</c>
389 <c>4...7</c>   <c>LP-only</c>   <c>MB</c>  <c>10, 20, 40, 60&nbsp;ms</c>
390 <c>8...11</c>  <c>LP-only</c>   <c>WB</c>  <c>10, 20, 40, 60&nbsp;ms</c>
391 <c>12...13</c> <c>Hybrid</c>    <c>SWB</c> <c>10, 20&nbsp;ms</c>
392 <c>14...15</c> <c>Hybrid</c>    <c>FB</c>  <c>10, 20&nbsp;ms</c>
393 <c>16...19</c> <c>MDCT-only</c> <c>NB</c>  <c>2.5, 5, 10, 20&nbsp;ms</c>
394 <c>20...23</c> <c>MDCT-only</c> <c>WB</c>  <c>2.5, 5, 10, 20&nbsp;ms</c>
395 <c>24...27</c> <c>MDCT-only</c> <c>SWB</c> <c>2.5, 5, 10, 20&nbsp;ms</c>
396 <c>28...31</c> <c>MDCT-only</c> <c>FB</c>  <c>2.5, 5, 10, 20&nbsp;ms</c>
397 </texttable>
398
399 <t>
400 One additional bit, labeled "s", is used to signal mono vs. stereo, with 0
401  indicating mono and 1 indicating stereo.
402 </t>
403
404 <t>
405 The remaining two bits of the TOC byte, labeled "c", code the number of frames
406  per packet (codes 0 to 3) as follows:
407 <list style="symbols">
408 <t>0:    1 frame in the packet</t>
409 <t>1:    2 frames in the packet, each with equal compressed size</t>
410 <t>2:    2 frames in the packet, with different compressed sizes</t>
411 <t>3:    an arbitrary number of frames in the packet</t>
412 </list>
413 This draft refers to a packet as a code 0 packet, code 1 packet, etc., based on
414  the value of "c".
415 </t>
416
417 <t>
418 A well-formed Opus packet MUST contain at least one byte with the TOC
419  information, though the frame(s) within a packet MAY be zero bytes long.
420 </t>
421 </section>
422
423 <section title="Frame Packing">
424
425 <t>
426 This section describes how frames are packed according to each possible value
427  of "c" in the TOC byte.
428 </t>
429
430 <section anchor="frame-length-coding" title="Frame Length Coding">
431 <t>
432 When a packet contains multiple VBR frames, the compressed length of one or
433  more of these frames is indicated with a one or two byte sequence, with the
434  meaning of the first byte as follows:
435 <list style="symbols">
436 <t>0:          No frame (discontinuous transmission (DTX) or lost packet)</t>
437 <!--TODO: Would be nice to be clearer about the distinction between "frame
438  size" (in samples or ms) and "the compressed size of the frame" (in bytes).
439 "the compressed length of the frame" is maybe a little better, but not when we
440  jump back and forth to talking about sizes.-->
441 <t>1...251:    Size of the frame in bytes</t>
442 <t>252...255:  A second byte is needed. The total size is (size[1]*4)+size[0]</t>
443 </list>
444 </t>
445
446 <t>
447 The maximum representable size is 255*4+255=1275&nbsp;bytes. This limit MUST NOT
448 be exceeded, even when no length field is used.
449 For 20&nbsp;ms frames, this represents a bitrate of 510&nbsp;kb/s, which is
450  approximately the highest useful rate for lossily compressed fullband stereo
451  music.
452 Beyond this point, lossless codecs are more appropriate.
453 It is also roughly the maximum useful rate of the MDCT layer, as shortly
454  thereafter quality no longer improves with additional bits due to limitations
455  on the codebook sizes.
456 </t>
457
458 <t>
459 No length is transmitted for the last frame in a VBR packet, or for any of the
460  frames in a CBR packet, as it can be inferred from the total size of the
461  packet and the size of all other data in the packet.
462 However, the length of any individual frame MUST NOT exceed 1275&nbsp;bytes, to
463  allow for repacketization by gateways, conference bridges, or other software.
464 </t>
465 </section>
466
467 <section title="One Frame in the Packet (Code&nbsp;0)">
468
469 <t>
470 For code&nbsp;0 packets, the TOC byte is immediately followed by N-1&nbsp;bytes
471  of compressed data for a single frame (where N is the size of the packet),
472  as illustrated in <xref target="code0_packet"/>.
473 </t>
474 <figure anchor="code0_packet" title="A Code 0 Packet" align="center">
475 <artwork align="center"><![CDATA[
476  0                   1                   2                   3
477  0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
478 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
479 |0|0|s| config  |                                               |
480 +-+-+-+-+-+-+-+-+                                               |
481 |                    Compressed frame 1 (N-1 bytes)...          :
482 :                                                               |
483 |                                                               |
484 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
485 ]]></artwork>
486 </figure>
487 </section>
488
489 <section title="Two Frames in the Packet, Each with Equal Compressed Size (Code&nbsp;1)">
490 <t>
491 For code 1 packets, the TOC byte is immediately followed by the
492  (N-1)/2&nbsp;bytes of compressed data for the first frame, followed by
493  (N-1)/2&nbsp;bytes of compressed data for the second frame, as illustrated in
494  <xref target="code1_packet"/>.
495 The number of payload bytes available for compressed data, N-1, MUST be even
496  for all code 1 packets.
497 </t>
498 <figure anchor="code1_packet" title="A Code 1 Packet" align="center">
499 <artwork align="center"><![CDATA[
500  0                   1                   2                   3
501  0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
502 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
503 |1|0|s| config  |                                               |
504 +-+-+-+-+-+-+-+-+                                               :
505 |             Compressed frame 1 ((N-1)/2 bytes)...             |
506 :                               +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
507 |                               |                               |
508 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+                               :
509 |             Compressed frame 2 ((N-1)/2 bytes)...             |
510 :                                               +-+-+-+-+-+-+-+-+
511 |                                               |
512 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
513 ]]></artwork>
514 </figure>
515 </section>
516
517 <section title="Two Frames in the Packet, with Different Compressed Sizes (Code&nbsp;2)">
518 <t>
519 For code 2 packets, the TOC byte is followed by a one or two byte sequence
520  indicating the length of the first frame (marked N1 in the figure below),
521  followed by N1 bytes of compressed data for the first frame.
522 The remaining N-N1-2 or N-N1-3&nbsp;bytes are the compressed data for the
523  second frame.
524 This is illustrated in <xref target="code2_packet"/>.
525 The length of the first frame, N1, MUST be no larger than the size of the
526  payload remaining after decoding that length for all code 2 packets.
527 </t>
528 <figure anchor="code2_packet" title="A Code 2 Packet" align="center">
529 <artwork align="center"><![CDATA[
530  0                   1                   2                   3
531  0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
532 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
533 |0|1|s| config  | N1 (1-2 bytes):                               |
534 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+                               :
535 |               Compressed frame 1 (N1 bytes)...                |
536 :                               +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
537 |                               |                               |
538 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+                               |
539 |                     Compressed frame 2...                     :
540 :                                                               |
541 |                                                               |
542 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
543 ]]></artwork>
544 </figure>
545 </section>
546
547 <section title="An Arbitrary Number of Frames in the Packet (Code&nbsp;3)">
548 <t>
549 Code 3 packets may encode an arbitrary number of frames, as well as additional
550  padding, called "Opus padding" to indicate that this padding is added at the
551  Opus layer, rather than at the transport layer.
552 For code 3 packets, the TOC byte is followed by a byte encoding the number of
553  frames in the packet in bits 0 to 5 (marked "M" in the figure below), with bit
554  6 indicating whether or not Opus padding is inserted (marked "p" in the figure
555  below), and bit 7 indicating VBR (marked "v" in the figure below).
556 M MUST NOT be zero, and the audio duration contained within a packet MUST NOT
557  exceed 120&nbsp;ms.
558 This limits the maximum frame count for any frame size to 48 (for 2.5&nbsp;ms
559  frames), with lower limits for longer frame sizes.
560 <xref target="frame_count_byte"/> illustrates the layout of the frame count
561  byte.
562 </t>
563 <figure anchor="frame_count_byte" title="The frame count byte">
564 <artwork align="center"><![CDATA[
565  0
566  0 1 2 3 4 5 6 7
567 +-+-+-+-+-+-+-+-+
568 |     M     |p|v|
569 +-+-+-+-+-+-+-+-+
570 ]]></artwork>
571 </figure>
572 <t>
573 When Opus padding is used, the number of bytes of padding is encoded in the
574  bytes following the frame count byte.
575 Values from 0...254 indicate that 0...254&nbsp;bytes of padding are included,
576  in addition to the byte(s) used to indicate the size of the padding.
577 If the value is 255, then the size of the additional padding is 254&nbsp;bytes,
578  plus the padding value encoded in the next byte.
579 The additional padding bytes appear at the end of the packet, and SHOULD be set
580  to zero by the encoder.
581 The decoder MUST accept any value for the padding bytes, however.
582 By using code 255 multiple times, it is possible to create a packet of any
583  specific, desired size.
584 Let P be the total amount of padding, including both the trailing padding bytes
585  themselves and the header bytes used to indicate how many there are.
586 Then P MUST be no more than N-2 for CBR packets, or N-M-1 for VBR packets.
587 </t>
588 <t>
589 In the CBR case, the compressed length of each frame in bytes is equal to the
590  number of remaining bytes in the packet after subtracting the (optional)
591  padding, (N-2-P), divided by M.
592 This number MUST be an integer multiple of M.
593 The compressed data for all M frames then follows, each of size
594  (N-2-P)/M&nbsp;bytes, as illustrated in <xref target="code3cbr_packet"/>.
595 </t>
596
597 <figure anchor="code3cbr_packet" title="A CBR Code 3 Packet" align="center">
598 <artwork align="center"><![CDATA[
599  0                   1                   2                   3
600  0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
601 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
602 |1|1|s| config  |     M     |p|0|  Padding length (Optional)    :
603 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
604 |                                                               |
605 :            Compressed frame 1 ((N-2-P)/M bytes)...            :
606 |                                                               |
607 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
608 |                                                               |
609 :            Compressed frame 2 ((N-2-P)/M bytes)...            :
610 |                                                               |
611 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
612 |                                                               |
613 :                              ...                              :
614 |                                                               |
615 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
616 |                                                               |
617 :            Compressed frame M ((N-2-P)/M bytes)...            :
618 |                                                               |
619 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
620 :                  Opus Padding (Optional)...                   |
621 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
622 ]]></artwork>
623 </figure>
624
625 <t>
626 In the VBR case, the (optional) padding length is followed by M-1 frame
627  lengths (indicated by "N1" to "N[M-1]" in the figure below), each encoded in a
628  one or two byte sequence as described above.
629 The packet MUST contain enough data for the M-1 lengths after the (optional)
630  padding, and the sum of these lengths MUST be no larger than the number of
631  bytes remaining in the packet after decoding them.
632 The compressed data for all M frames follows, each frame consisting of the
633  indicated number of bytes, with the final frame consuming any remaining bytes
634  before the final padding, as illustrated in <xref target="code3cbr_packet"/>.
635 The number of header bytes (TOC byte, frame count byte, padding length bytes,
636  and frame length bytes), plus the length of the first M-1 frames themselves,
637  plus the length of the padding MUST be no larger than N, the total size of the
638  packet.
639 </t>
640
641 <figure anchor="code3vbr_packet" title="A VBR Code 3 Packet" align="center">
642 <artwork align="center"><![CDATA[
643  0                   1                   2                   3
644  0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
645 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
646 |1|1|s| config  |     M     |p|1| Padding length (Optional)     :
647 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
648 : N1 (1-2 bytes): N2 (1-2 bytes):     ...       :     N[M-1]    |
649 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
650 |                                                               |
651 :               Compressed frame 1 (N1 bytes)...                :
652 |                                                               |
653 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
654 |                                                               |
655 :               Compressed frame 2 (N2 bytes)...                :
656 |                                                               |
657 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
658 |                                                               |
659 :                              ...                              :
660 |                                                               |
661 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
662 |                                                               |
663 :                     Compressed frame M...                     :
664 |                                                               |
665 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
666 :                  Opus Padding (Optional)...                   |
667 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
668 ]]></artwork>
669 </figure>
670 </section>
671 </section>
672
673 <section anchor="examples" title="Examples">
674 <t>
675 Simplest case, one NB mono 20&nbsp;ms SILK frame:
676 </t>
677
678 <figure>
679 <artwork><![CDATA[
680  0                   1                   2                   3
681  0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
682 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
683 |0|0|0|    1    |               compressed data...              :
684 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
685 ]]></artwork>
686 </figure>
687
688 <t>
689 Two FB mono 5&nbsp;ms CELT frames of the same compressed size:
690 </t>
691
692 <figure>
693 <artwork><![CDATA[
694  0                   1                   2                   3
695  0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
696 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
697 |1|0|0|   29    |               compressed data...              :
698 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
699 ]]></artwork>
700 </figure>
701
702 <t>
703 Two FB mono 20&nbsp;ms hybrid frames of different compressed size:
704 </t>
705
706 <figure>
707 <artwork><![CDATA[
708  0                   1                   2                   3
709  0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
710 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
711 |1|1|0|   15    |     2     |0|1|      N1       |               |
712 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+               |
713 |                       compressed data...                      :
714 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
715 ]]></artwork>
716 </figure>
717
718 <t>
719 Four FB stereo 20&nbsp;ms CELT frames of the same compressed size:
720 </t>
721
722 <figure>
723 <artwork><![CDATA[
724  0                   1                   2                   3
725  0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
726 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
727 |1|1|1|   31    |     4     |0|0|      compressed data...       :
728 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
729 ]]></artwork>
730 </figure>
731 </section>
732
733 <section title="Extending Opus">
734 <t>
735 A receiver MUST NOT process packets which violate the rules above as normal
736  Opus packets.
737 They are reserved for future applications, such as in-band headers (containing
738  metadata, etc.) or multichannel support.
739 </t>
740 </section>
741
742 </section>
743
744 <section title="Opus Decoder">
745 <t>
746 The Opus decoder consists of two main blocks: the SILK decoder and the CELT decoder.
747 The output of the Opus decode is the sum of the outputs from the SILK and CELT decoders
748 with proper sample rate conversion and delay compensation as illustrated in the
749 block diagram below. At any given time, one or both of the SILK and CELT decoders
750 may be active.
751 </t>
752 <figure>
753 <artwork>
754 <![CDATA[
755                        +-------+    +----------+
756                        | SILK  |    |  sample  |
757                     +->|decoder|--->|   rate   |----+
758 bit-    +-------+   |  |       |    |conversion|    v
759 stream  | Range |---+  +-------+    +----------+  /---\  audio
760 ------->|decoder|                                 | + |------>
761         |       |---+               +-------+     \---/
762         +-------+   |               | CELT  |       ^
763                     +-------------->|decoder|-------+
764                                     |       |
765                                     +-------+
766 ]]>
767 </artwork>
768 </figure>
769
770 <section anchor="range-decoder" title="Range Decoder">
771 <t>
772 Opus uses an entropy coder based on <xref target="range-coding"></xref>,
773 which is itself a rediscovery of the FIFO arithmetic code introduced by <xref target="coding-thesis"></xref>.
774 It is very similar to arithmetic encoding, except that encoding is done with
775 digits in any base instead of with bits,
776 so it is faster when using larger bases (i.e., an octet). All of the
777 calculations in the range coder must use bit-exact integer arithmetic.
778 </t>
779 <t>
780 Symbols may also be coded as "raw bits" packed directly into the bitstream,
781  bypassing the range coder.
782 These are packed backwards starting at the end of the frame, as illustrated in
783  <xref target="rawbits-example"/>.
784 This reduces complexity and makes the stream more resilient to bit errors, as
785  corruption in the raw bits will not desynchronize the decoding process, unlike
786  corruption in the input to the range decoder.
787 Raw bits are only used in the CELT layer.
788 </t>
789
790 <figure anchor="rawbits-example" title="Illustrative example of packing range
791  coder and raw bits data">
792 <artwork align="center"><![CDATA[
793  0               1               2               3
794  7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0
795 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
796 | Range coder data (packed MSb to LSb) ->                       :
797 +                                                               +
798 :                                                               :
799 +     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
800 :     | <- Boundary occurs at an arbitrary bit position         :
801 +-+-+-+                                                         +
802 :                          <- Raw bits data (packed LSb to MSb) |
803 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
804 ]]></artwork>
805 </figure>
806
807 <t>
808 Each symbol coded by the range coder is drawn from a finite alphabet and coded
809  in a separate "context", which describes the size of the alphabet and the
810  relative frequency of each symbol in that alphabet.
811 </t>
812 <t>
813 Suppose there is a context with n symbols, identified with an index that ranges
814  from 0 to n-1.
815 The parameters needed to encode or decode a symbol in this context are
816  represented by a three-tuple (fl[k],&nbsp;fh[k],&nbsp;ft), with
817  0&nbsp;&lt;=&nbsp;fl[k]&nbsp;&lt;&nbsp;fh[k]&nbsp;&lt;=&nbsp;ft&nbsp;&lt;=&nbsp;65535.
818 The values of this tuple are derived from the probability model for the
819  symbol, represented by traditional "frequency counts". Because Opus
820  uses static contexts these are not updated as symbols are decoded.
821 Let f[i] be the frequency of symbol i.
822 Then the three-tuple corresponding to symbol k is given by
823 </t>
824 <figure align="center">
825 <artwork align="center"><![CDATA[
826         k-1                                      n-1
827         __                                       __
828 fl[k] = \  f[i],  fh[k] = fl[k] + f[k],  ft[k] = \  f[i]
829         /_                                       /_
830         i=0                                      i=0
831 ]]></artwork>
832 </figure>
833 <t>
834 The range decoder extracts the symbols and integers encoded using the range
835  encoder in <xref target="range-encoder"/>.
836 The range decoder maintains an internal state vector composed of the two-tuple
837  (val,rng), representing the difference between the high end of the current
838  range and the actual coded value, minus one, and the size of the current
839  range, respectively.
840 Both val and rng are 32-bit unsigned integer values.
841 The decoder initializes rng to 128 and initializes val to 127 minus the top 7
842  bits of the first input octet.
843 The remaining bit is saved for use in the renormalization procedure described
844  in <xref target="range-decoder-renorm"/>, which the decoder invokes
845  immediately after initialization to read additional bits and establish the
846  invariant that rng&nbsp;&gt;&nbsp;2**23.
847 </t>
848
849 <section anchor="decoding-symbols" title="Decoding Symbols">
850 <t>
851 Decoding a symbol is a two-step process.
852 The first step determines a 16-bit unsigned value fs, which lies within the
853  range of some symbol in the current context.
854 The second step updates the range decoder state with the three-tuple
855  (fl[k],&nbsp;fh[k],&nbsp;ft) corresponding to that symbol.
856 </t>
857 <t>
858 The first step is implemented by ec_decode() (entdec.c), which computes
859 <figure align="center">
860 <artwork align="center"><![CDATA[
861 fs = ft - min(val/(rng/ft)+1, ft) .
862 ]]></artwork>
863 </figure>
864 The divisions here are exact integer division.
865 </t>
866 <t>
867 The decoder then identifies the symbol in the current context corresponding to
868  fs; i.e., the value of k whose three-tuple (fl[k],&nbsp;fh[k],&nbsp;ft)
869  satisfies fl[k]&nbsp;&lt;=&nbsp;fs&nbsp;&lt;&nbsp;fh[k].
870 It uses this tuple to update val according to
871 <figure align="center">
872 <artwork align="center"><![CDATA[
873 val = val - (rng/ft)*(ft-fh[k]) .
874 ]]></artwork>
875 </figure>
876 If fl[k] is greater than zero, then the decoder updates rng using
877 <figure align="center">
878 <artwork align="center"><![CDATA[
879 rng = (rng/ft)*(fh[k]-fl[k]) .
880 ]]></artwork>
881 </figure>
882 Otherwise, it updates rng using
883 <figure align="center">
884 <artwork align="center"><![CDATA[
885 rng = rng - (rng/ft)*(ft-fh[k]).
886 ]]></artwork>
887 </figure>
888 </t>
889 <t>
890 Using a special case for the first symbol (rather than the last symbol, as is
891  commonly done in other arithmetic coders) ensures that all the truncation
892  error from the finite precision arithmetic accumulates in symbol 0.
893 This makes the cost of coding a 0 slightly smaller, on average, than its
894  estimated probability indicates and makes the cost of coding any other symbol
895  slightly larger.
896 When contexts are designed so that 0 is the most probable symbol, which is
897  often the case, this strategy minimizes the inefficiency introduced by the
898  finite precision.
899 It also makes some of the special-case decoding routines in
900  <xref target="decoding-alternate"/> particularly simple.
901 </t>
902 <t>
903 After the updates, implemented by ec_dec_update() (entdec.c), the decoder
904  normalizes the range using the procedure in the next section, and returns the
905  index k.
906 </t>
907
908 <section anchor="range-decoder-renorm" title="Renormalization">
909 <t>
910 To normalize the range, the decoder repeats the following process, implemented
911  by ec_dec_normalize() (entdec.c), until rng&nbsp;&gt;&nbsp;2**23.
912 If rng is already greater than 2**23, the entire process is skipped.
913 First, it sets rng to (rng&lt;&lt;8).
914 Then it reads the next octet of the payload and combines it with the left-over
915  bit buffered from the previous octet to form the 8-bit value sym.
916 It takes the left-over bit as the high bit (bit 7) of sym, and the top 7 bits
917  of the octet it just read as the other 7 bits of sym.
918 The remaining bit in the octet just read is buffered for use in the next
919  iteration.
920 If no more input octets remain, it uses zero bits instead.
921 Then, it sets
922 <figure align="center">
923 <artwork align="center"><![CDATA[
924 val = ((val<<8) + (255-sym)) & 0x7FFFFFFF .
925 ]]></artwork>
926 </figure>
927 </t>
928 <t>
929 It is normal and expected that the range decoder will read several bytes
930  into the raw bits data (if any) at the end of the packet by the time the frame
931  is completely decoded, as illustrated in <xref target="finalize-example"/>.
932 This same data MUST also be returned as raw bits when requested.
933 The encoder is expected to terminate the stream in such a way that the decoder
934  will decode the intended values regardless of the data contained in the raw
935  bits.
936 <xref target="encoder-finalizing"/> describes a procedure for doing this.
937 If the range decoder consumes all of the bytes belonging to the current frame,
938  it MUST continue to use zero when any further input bytes are required, even
939  if there is additional data in the current packet from padding or other
940  frames.
941 </t>
942
943 <figure anchor="finalize-example" title="Illustrative example of raw bits
944  overlapping range coder data">
945 <artwork align="center"><![CDATA[
946  n               n+1             n+2             n+3
947  7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0
948 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
949 :     | <----------- Overlap region ------------> |             :
950 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
951       ^                                           ^
952       |   End of data buffered by the range coder |
953 ...-----------------------------------------------+
954       |
955       | End of data consumed by raw bits
956       +-------------------------------------------------------...
957 ]]></artwork>
958 </figure>
959 </section>
960 </section>
961
962 <section anchor="decoding-alternate" title="Alternate Decoding Methods">
963 <t>
964 The reference implementation uses three additional decoding methods that are
965  exactly equivalent to the above, but make assumptions and simplifications that
966  allow for a more efficient implementation.
967 </t>
968 <section title="ec_decode_bin()">
969 <t>
970 The first is ec_decode_bin() (entdec.c), defined using the parameter ftb
971  instead of ft.
972 It is mathematically equivalent to calling ec_decode() with
973  ft = (1&lt;&lt;ftb), but avoids one of the divisions.
974 </t>
975 </section>
976 <section title="ec_dec_bit_logp()">
977 <t>
978 The next is ec_dec_bit_logp() (entdec.c), which decodes a single binary symbol,
979  replacing both the ec_decode() and ec_dec_update() steps.
980 The context is described by a single parameter, logp, which is the absolute
981  value of the base-2 logarithm of the probability of a "1".
982 It is mathematically equivalent to calling ec_decode() with
983  ft&nbsp;=&nbsp;(1&lt;&lt;logp), followed by ec_dec_update() with
984  the 3-tuple (fl[k]&nbsp;=&nbsp;0, fh[k]&nbsp;=&nbsp;(1&lt;&lt;logp)-1,
985  ft&nbsp;=&nbsp;(1&lt;&lt;logp)) if the returned value
986  of fs is less than (1&lt;&lt;logp)-1 (a "0" was decoded), and with
987  (fl[k]&nbsp;=&nbsp;(1&lt;&lt;logp)-1,
988  fh[k]&nbsp;=&nbsp;ft&nbsp;=&nbsp;(1&lt;&lt;logp)) otherwise (a "1" was
989  decoded).
990 The implementation requires no multiplications or divisions.
991 </t>
992 </section>
993 <section title="ec_dec_icdf()">
994 <t>
995 The last is ec_dec_icdf() (entdec.c), which decodes a single symbol with a
996  table-based context of up to 8 bits, also replacing both the ec_decode() and
997  ec_dec_update() steps, as well as the search for the decoded symbol in between.
998 The context is described by two parameters, an icdf
999  ("inverse" cumulative distribution function) table and ftb.
1000 As with ec_decode_bin(), (1&lt;&lt;ftb) is equivalent to ft.
1001 idcf[k], on the other hand, stores (1&lt;&lt;ftb)-fh[k], which is equal to
1002  (1&lt;&lt;ftb)-fl[k+1].
1003 fl[0] is assumed to be 0, and the table is terminated by a value of 0 (where
1004  fh[k]&nbsp;==&nbsp;ft).
1005 </t>
1006 <t>
1007 The function is mathematically equivalent to calling ec_decode() with
1008  ft&nbsp;=&nbsp;(1&lt;&lt;ftb), using the returned value fs to search the table
1009  for the first entry where fs&nbsp;&lt;&nbsp;(1&lt;&lt;ftb)-icdf[k], and
1010  calling ec_dec_update() with fl[k]&nbsp;=&nbsp;(1&lt;&lt;ftb)-icdf[k-1] (or 0
1011  if k&nbsp;==&nbsp;0), fh[k]&nbsp;=&nbsp;(1&lt;&lt;ftb)-idcf[k], and
1012  ft&nbsp;=&nbsp;(1&lt;&lt;ftb).
1013 Combining the search with the update allows the division to be replaced by a
1014  series of multiplications (which are usually much cheaper), and using an
1015  inverse CDF allows the use of an ftb as large as 8 in an 8-bit table without
1016  any special cases.
1017 This is the primary interface with the range decoder in the SILK layer, though
1018  it is used in a few places in the CELT layer as well.
1019 </t>
1020 <t>
1021 Although icdf[k] is more convenient for the code, the frequency counts, f[k],
1022  are a more natural representation of the probability distribution function
1023  (PDF) for a given symbol.
1024 Therefore this draft lists the latter, not the former, when describing the
1025  context in which a symbol is coded as a list, e.g., {4, 4, 4, 4}/16 for a
1026  uniform context with four possible values and ft=16.
1027 The value of ft after the slash is always the sum of the entries in the PDF,
1028  but is included for convenience.
1029 Contexts with identical probabilities, f[k]/ft, but different values of ft
1030  (or equivalently, ftb) are not the same, and cannot, in general, be used in
1031  place of one another.
1032 An icdf table is also not capable of representing a PDF where the first symbol
1033  has 0 probability.
1034 In such contexts, ec_dec_icdf() can decode the symbol by using a table that
1035  drops the entries for any initial zero-probability values and adding the
1036  constant offset of the first value with a non-zero probability to its return
1037  value.
1038 </t>
1039 </section>
1040 </section>
1041
1042 <section anchor="decoding-bits" title="Decoding Raw Bits">
1043 <t>
1044 The raw bits used by the CELT layer are packed at the end of the packet, with
1045  the least significant bit of the first value packed in the least significant
1046  bit of the last byte, filling up to the most significant bit in the last byte,
1047  continuing on to the least significant bit of the penultimate byte, and so on.
1048 The reference implementation reads them using ec_dec_bits() (entdec.c).
1049 Because the range decoder must read several bytes ahead in the stream, as
1050  described in <xref target="range-decoder-renorm"/>, the input consumed by the
1051  raw bits MAY overlap with the input consumed by the range coder, and a decoder
1052  MUST allow this.
1053 The format should render it impossible to attempt to read more raw bits than
1054  there are actual bits in the frame, though a decoder MAY wish to check for
1055  this and report an error.
1056 </t>
1057 </section>
1058
1059 <section anchor="decoding-ints" title="Decoding Uniformly Distributed Integers">
1060 <t>
1061 The ec_dec_uint() (entdec.c) function decodes one of ft equiprobable values in
1062  the range 0 to ft-1, inclusive, each with a frequency of 1, where ft may be as
1063  large as 2**32-1.
1064 Because ec_decode() is limited to a total frequency of 2**16-1, this is split
1065  up into a range coded symbol representing up to 8 of the high bits of the
1066  value, and, if necessary, raw bits representing the remaining bits.
1067 The limit of 8 bits in the range coded symbol is a trade-off between
1068  implementation complexity, modeling error (since the symbols no longer truly
1069  have equal coding cost), and rounding error introduced by the range coder
1070  itself (which gets larger as more bits are included).
1071 Using raw bits reduces the maximum number of divisions required in the worst
1072  case, but means that it may be possible to decode a value outside the range
1073  0 to ft-1, inclusive.
1074 </t>
1075
1076 <t>
1077 ec_dec_uint() takes a single, positive parameter, ft, which is not necessarily
1078  a power of two, and returns an integer, t, whose value lies between 0 and
1079  ft-1, inclusive.
1080 Let ftb = ilog(ft-1), i.e., the number of bits required to store ft-1 in two's
1081  complement notation.
1082 If ftb is 8 or less, then t is decoded with t = ec_decode(ft), and the range
1083  coder state is updated using the three-tuple (t,t+1,ft).
1084 </t>
1085 <t>
1086 If ftb is greater than 8, then the top 8 bits of t are decoded using
1087  t = ec_decode((ft-1&gt;&gt;ftb-8)+1),
1088  the decoder state is updated using the three-tuple
1089  (t,t+1,(ft-1&gt;&gt;ftb-8)+1), and the remaining bits are decoded as raw bits,
1090  setting t = t&lt;&lt;ftb-8|ec_dec_bits(ftb-8).
1091 If, at this point, t >= ft, then the current frame is corrupt.
1092 In that case, the decoder should assume there has been an error in the coding,
1093  decoding, or transmission and SHOULD take measures to conceal the
1094  error and/or report to the application that a problem has occurred.
1095 </t>
1096
1097 </section>
1098
1099 <section anchor="decoder-tell" title="Current Bit Usage">
1100 <t>
1101 The bit allocation routines in the CELT decoder need a conservative upper bound
1102  on the number of bits that have been used from the current frame thus far,
1103  including both range coder bits and raw bits.
1104 This drives allocation decisions that must match those made in the encoder.
1105 The upper bound is computed in the reference implementation to whole-bit
1106  precision by the function ec_tell() (entcode.h) and to fractional 1/8th bit
1107  precision by the function ec_tell_frac() (entcode.c).
1108 Like all operations in the range coder, it must be implemented in a bit-exact
1109  manner, and must produce exactly the same value returned by the same functions
1110  in the encoder after encoding the same symbols.
1111 </t>
1112 <t>
1113 ec_tell() is guaranteed to return ceil(ec_tell_frac()/8.0).
1114 In various places the codec will check to ensure there is enough room to
1115  contain a symbol before attempting to decode it.
1116 In practice, although the number of bits used so far is an upper bound,
1117  decoding a symbol whose probability model suggests it has a worst-case cost of
1118  p 1/8th bits may actually advance the return value of ec_tell_frac() by
1119  p-1, p, or p+1 1/8th bits, due to approximation error in that upper bound,
1120  truncation error in the range coder, and for large values of ft, modeling
1121  error in ec_dec_uint().
1122 </t>
1123 <t>
1124 However, this error is bounded, and periodic calls to ec_tell() or
1125  ec_tell_frac() at precisely defined points in the decoding process prevent it
1126  from accumulating.
1127 For a range coder symbol that requires a whole number of bits (i.e.,
1128  ft/(fh[k]-fl[k]) is a power of two), where there are at least p 1/8th bits
1129  available, decoding the symbol will never advance the decoder past the end of
1130  the frame ("bust the budget").
1131 In this case the return value of ec_tell_frac() will only advance by more than
1132  p 1/8th bits if there was an additional, fractional number of bits remaining,
1133  and it will never advance beyond the next whole-bit boundary, which is safe,
1134  since frames always contain a whole number of bits.
1135 However, when p is not a whole number of bits, an extra 1/8th bit is required
1136  to ensure that decoding the symbol will not bust the budget.
1137 </t>
1138 <t>
1139 The reference implementation keeps track of the total number of whole bits that
1140  have been processed by the decoder so far in the variable nbits_total,
1141  including the (possibly fractional) number of bits that are currently
1142  buffered, but not consumed, inside the range coder.
1143 nbits_total is initialized to 33 just after the initial range renormalization
1144  process completes (or equivalently, it can be initialized to 9 before the
1145  first renormalization).
1146 The extra two bits over the actual amount buffered by the range coder
1147  guarantees that it is an upper bound and that there is enough room for the
1148  encoder to terminate the stream.
1149 Each iteration through the range coder's renormalization loop increases
1150  nbits_total by 8.
1151 Reading raw bits increases nbits_total by the number of raw bits read.
1152 </t>
1153
1154 <section anchor="ec_tell" title="ec_tell()">
1155 <t>
1156 The whole number of bits buffered in rng may be estimated via l = ilog(rng).
1157 ec_tell() then becomes a simple matter of removing these bits from the total.
1158 It returns (nbits_total - l).
1159 </t>
1160 <t>
1161 In a newly initialized decoder, before any symbols have been read, this reports
1162  that 1 bit has been used.
1163 This is the bit reserved for termination of the encoder.
1164 </t>
1165 </section>
1166
1167 <section anchor="ec_tell_frac" title="ec_tell_frac()">
1168 <t>
1169 ec_tell_frac() estimates the number of bits buffered in rng to fractional
1170  precision.
1171 Since rng must be greater than 2**23 after renormalization, l must be at least
1172  24.
1173 Let r = rng&gt;&gt;(l-16), so that 32768 &lt;= r &lt; 65536, an unsigned Q15
1174  value representing the fractional part of rng.
1175 Then the following procedure can be used to add one bit of precision to l.
1176 First, update r = r*r&gt;&gt;15.
1177 Then add the 16th bit of r to l via l = 2*l + (r&gt;&gt;16).
1178 Finally, if this bit was a 1, reduce r by a factor of two via r = r&gt;&gt;1,
1179  so that it once again lies in the range 32768 &lt;= r &lt; 65536.
1180 </t>
1181 <t>
1182 This procedure is repeated three times to extend l to 1/8th bit precision.
1183 ec_tell_frac() then returns (nbits_total*8 - l).
1184 </t>
1185 </section>
1186
1187 </section>
1188
1189 </section>
1190
1191 <section anchor='outline_decoder' title='SILK Decoder'>
1192 <t>
1193 The decoder's LP layer uses a modified version of the SILK codec (herein simply
1194  called "SILK"), which runs a decoded excitation signal through adaptive
1195  long-term and short-term prediction synthesis filters.
1196 It runs in NB, MB, and WB modes internally.
1197 When used in a hybrid frame in SWB or FB mode, the LP layer itself still only
1198  runs in WB mode.
1199 </t>
1200 <t>
1201 Internally, the LP layer of a single Opus frame is composed of either a single
1202  10&nbsp;ms regular SILK frame or between one and three 20&nbsp;ms regular SILK
1203  frames.
1204 A stereo Opus frame may double the number of regular SILK frames (up to a total
1205  of six), since it includes separate frames for a mid channel and, optionally,
1206  a side channel.
1207 Optional Low Bit-Rate Redundancy (LBRR) frames, which are reduced-bitrate
1208  encodings of previous SILK frames, may be included to aid in recovery from
1209  packet loss.
1210 If present, these appear before the regular SILK frames.
1211 They are in most respects identical to regular, active SILK frames, except that
1212  they are usually encoded with a lower bitrate.
1213 This draft uses "SILK frame" to refer to either one and "regular SILK frame" if
1214  it needs to draw a distinction between the two.
1215 </t>
1216 <t>
1217 Each SILK frame is in turn composed of either two or four 5&nbsp;ms subframes.
1218 Various parameters, such as the quantization gain of the excitation and the
1219  pitch lag and filter coefficients can vary on a subframe-by-subframe basis.
1220 </t>
1221 <t>
1222 All of these frames and subframes are decoded from the same range coder, with
1223  no padding between them.
1224 Thus packing multiple SILK frames in a single Opus frame saves, on average,
1225  half a byte per SILK frame.
1226 It also allows some parameters to be predicted from prior SILK frames in the
1227  same Opus frame, since this does not degrade packet loss robustness (beyond
1228  any penalty for merely using fewer, larger packets to store multiple frames).
1229 </t>
1230
1231 <t>
1232 Stereo support in SILK uses a variant of mid-side coding, allowing a mono
1233  decoder to simply decode the mid channel.
1234 However, the data for the two channels is interleaved, so a mono decoder must
1235  still unpack the data for the side channel.
1236 It would be required to do so anyway for hybrid Opus frames, or to support
1237  decoding individual 20&nbsp;ms frames.
1238 </t>
1239
1240 <texttable anchor="silk_symbols">
1241 <ttcol align="center">Symbol(s)</ttcol>
1242 <ttcol align="center">PDF(s)</ttcol>
1243 <ttcol align="center">Condition</ttcol>
1244
1245 <c>VAD flags</c>
1246 <c>{1, 1}/2</c>
1247 <c/>
1248
1249 <c>LBRR flag</c>
1250 <c>{1, 1}/2</c>
1251 <c/>
1252
1253 <c>Per-frame LBRR flags</c>
1254 <c><xref target="silk_lbrr_flag_pdfs"/></c>
1255 <c><xref target="silk_lbrr_flags"/></c>
1256
1257 <c>LBRR Frame(s)</c>
1258 <c><xref target="silk_frame"/></c>
1259 <c><xref target="silk_lbrr_flags"/></c>
1260
1261 <c>Regular SILK Frame(s)</c>
1262 <c><xref target="silk_frame"/></c>
1263 <c/>
1264
1265 <postamble>
1266 Organization of the SILK layer of an Opus frame.
1267 </postamble>
1268 </texttable>
1269
1270 <section title="Decoder Modules">
1271 <t>
1272 An overview of the decoder is given in <xref target="decoder_figure"/>.
1273 </t>
1274 <figure align="center" anchor="decoder_figure">
1275 <artwork align="center">
1276 <![CDATA[
1277
1278    +---------+    +------------+
1279 -->| Range   |--->| Decode     |---------------------------+
1280  1 | Decoder | 2  | Parameters |----------+       5        |
1281    +---------+    +------------+     4    |                |
1282                        3 |                |                |
1283                         \/               \/               \/
1284                   +------------+   +------------+   +------------+
1285                   | Generate   |-->| LTP        |-->| LPC        |-->
1286                   | Excitation |   | Synthesis  |   | Synthesis  | 6
1287                   +------------+   +------------+   +------------+
1288
1289 1: Range encoded bitstream
1290 2: Coded parameters
1291 3: Pulses and gains
1292 4: Pitch lags and LTP coefficients
1293 5: LPC coefficients
1294 6: Decoded signal
1295 ]]>
1296 </artwork>
1297 <postamble>Decoder block diagram.</postamble>
1298 </figure>
1299
1300           <section title='Range Decoder'>
1301             <t>
1302               The range decoder decodes the encoded parameters from the received bitstream. Output from this function includes the pulses and gains for generating the excitation signal, as well as LTP and LSF codebook indices, which are needed for decoding LTP and LPC coefficients needed for LTP and LPC synthesis filtering the excitation signal, respectively.
1303             </t>
1304           </section>
1305
1306           <section title='Decode Parameters'>
1307             <t>
1308               Pulses and gains are decoded from the parameters that were decoded by the range decoder.
1309             </t>
1310
1311             <t>
1312               When a voiced frame is decoded and LTP codebook selection and indices are received, LTP coefficients are decoded using the selected codebook by choosing the vector that corresponds to the given codebook index in that codebook. This is done for each of the four subframes.
1313               The LPC coefficients are decoded from the LSF codebook by first adding the chosen LSF vector and the decoded LSF residual signal. The resulting LSF vector is stabilized using the same method that was used in the encoder; see
1314               <xref target='lsf_stabilizer_overview_section' />. The LSF coefficients are then converted to LPC coefficients, and passed on to the LPC synthesis filter.
1315             </t>
1316           </section>
1317
1318           <section title='Generate Excitation'>
1319             <t>
1320               The pulses signal is multiplied with the quantization gain to create the excitation signal.
1321             </t>
1322           </section>
1323
1324           <section title='LTP Synthesis'>
1325             <t>
1326               For voiced speech, the excitation signal e(n) is input to an LTP synthesis filter that recreates the long-term correlation removed in the LTP analysis filter and generates an LPC excitation signal e_LPC(n), according to
1327               <figure align="center">
1328                 <artwork align="center">
1329                   <![CDATA[
1330                    d
1331                   __
1332 e_LPC(n) = e(n) + \  e_LPC(n - L - i) * b_i,
1333                   /_
1334                  i=-d
1335 ]]>
1336                 </artwork>
1337               </figure>
1338               using the pitch lag L, and the decoded LTP coefficients b_i.
1339               The number of LTP coefficients is 5, and thus d&nbsp;=&nbsp;2.
1340
1341               For unvoiced speech, the output signal is simply a copy of the excitation signal, i.e., e_LPC(n) = e(n).
1342             </t>
1343           </section>
1344
1345           <section title='LPC Synthesis'>
1346             <t>
1347               In a similar manner, the short-term correlation that was removed in the LPC analysis filter is recreated in the LPC synthesis filter. The LPC excitation signal e_LPC(n) is filtered using the LTP coefficients a_i, according to
1348               <figure align="center">
1349                 <artwork align="center">
1350                   <![CDATA[
1351                  d_LPC
1352                   __
1353 y(n) = e_LPC(n) + \  y(n - i) * a_i,
1354                   /_
1355                   i=1
1356 ]]>
1357                 </artwork>
1358               </figure>
1359               where d_LPC is the LPC synthesis filter order, and y(n) is the decoded output signal.
1360             </t>
1361           </section>
1362         </section>
1363
1364 <!--TODO: Document mandated decoder resets-->
1365
1366 <section title="Header Bits">
1367 <t>
1368 The LP layer begins with two to eight header bits, decoded in silk_Decode()
1369  (silk_dec_API.c).
1370 These consist of one Voice Activity Detection (VAD) bit per frame (up to 3),
1371  followed by a single flag indicating the presence of LBRR frames.
1372 For a stereo packet, these flags correspond to the mid channel, and a second
1373  set of flags is included for the side channel.
1374 </t>
1375 <t>
1376 Because these are the first symbols decoded by the range coder, they can be
1377  extracted directly from the upper bits of the first byte of compressed data.
1378 Thus, a receiver can determine if an Opus frame contains any active SILK frames
1379  without the overhead of using the range decoder.
1380 </t>
1381 </section>
1382
1383 <section anchor="silk_lbrr_flags" title="LBRR Flags">
1384 <t>
1385 For Opus frames longer than 20&nbsp;ms, a set of per-frame LBRR flags is
1386  decoded for each channel that has its LBRR flag set.
1387 For 40&nbsp;ms Opus frames the 2-frame LBRR flag PDF from
1388  <xref target="silk_lbrr_flag_pdfs"/> is used, and for 60&nbsp;ms Opus frames
1389  the 3-frame LBRR flag PDF is used.
1390 For each channel, the resulting 2- or 3-bit integer contains the corresponding
1391  LBRR flag for each frame, packed in order from the LSb to the MSb.
1392 </t>
1393
1394 <texttable anchor="silk_lbrr_flag_pdfs" title="LBRR Flag PDFs">
1395 <ttcol>Frame Size</ttcol>
1396 <ttcol>PDF</ttcol>
1397 <c>40&nbsp;ms</c> <c>{0, 53, 53, 150}/256</c>
1398 <c>60&nbsp;ms</c> <c>{0, 41, 20, 29, 41, 15, 28, 82}/256</c>
1399 </texttable>
1400
1401 </section>
1402
1403 <section anchor="silk_lbrr_frames" title="LBRR Frames">
1404 <t>
1405 The LBRR frames, if present, immediately follow, one per set LBRR flag, and
1406  prior to any regular SILK frames.
1407 <xref target="silk_frame"/> describes their exact contents.
1408 LBRR frames do not include their own separate VAD flags.
1409 LBRR frames are only meant to be transmitted for active speech, thus all LBRR
1410  frames are treated as active.
1411 </t>
1412
1413 <t>
1414 In a stereo Opus frame longer than 20&nbsp;ms, although all the per-frame LBRR
1415  flags for the mid channel are coded before the per-frame LBRR flags for the
1416  side channel, the LBRR frames themselves are interleaved.
1417 The LBRR frame for the mid channel of a given 20&nbsp;ms interval (if present)
1418  is immediately followed by the corresponding LBRR frame for the side channel
1419  (if present).
1420 </t>
1421 </section>
1422
1423 <section anchor="silk_regular_frames" title="Regular SILK Frames">
1424 <t>
1425 The regular SILK frame(s) follow the LBRR frames (if any).
1426 <xref target="silk_frame"/> describes their contents, as well.
1427 Unlike the LBRR frames, a regular SILK frame is always coded for each time
1428  interval in an Opus frame, even if the corresponding VAD flag is unset.
1429 Like the LBRR frames, in stereo Opus frames longer than 20&nbsp;ms, the mid and
1430  side frames are interleaved for each 20&nbsp;ms interval.
1431 The side frame may be skipped by coding an appropriate flag, as detailed in
1432  <xref target="silk_mid_only_flag"/>.
1433 </t>
1434 </section>
1435
1436 <section anchor="silk_frame" title="SILK Frame Contents">
1437 <t>
1438 Each SILK frame includes a set of side information that encodes the frame type,
1439  quantization type and gains, short-term prediction filter coefficients, an LSF
1440  interpolation weight, long-term prediction filter lags and gains, and a
1441  linear congruential generator (LCG) seed.
1442 The quantized excitation signal follows these at the end of the frame.
1443 <xref target="silk_frame_symbols"/> details the overall organization of a
1444  SILK frame.
1445 </t>
1446
1447 <texttable anchor="silk_frame_symbols">
1448 <ttcol align="center">Symbol(s)</ttcol>
1449 <ttcol align="center">PDF(s)</ttcol>
1450 <ttcol align="center">Condition</ttcol>
1451
1452 <c>Stereo Prediction Weights</c>
1453 <c><xref target="silk_stereo_pred_pdfs"/></c>
1454 <c><xref target="silk_stereo_pred"/></c>
1455
1456 <c>Mid-Only Flag</c>
1457 <c><xref target="silk_mid_only_pdf"/></c>
1458 <c><xref target="silk_mid_only_flag"/></c>
1459
1460 <c>Frame Type</c>
1461 <c><xref target="silk_frame_type"/></c>
1462 <c/>
1463
1464 <c>Subframe Gains</c>
1465 <c><xref target="silk_gains"/></c>
1466 <c/>
1467
1468 <c>Normalized LSF Stage 1 Index</c>
1469 <c><xref target="silk_nlsf_stage1_pdfs"/></c>
1470 <c/>
1471
1472 <c>Normalized LSF Stage 2 Residual</c>
1473 <c><xref target="silk_nlsf_stage2"/></c>
1474 <c/>
1475
1476 <c>Normalized LSF Interpolation Weight</c>
1477 <c><xref target="silk_nlsf_interp_pdf"/></c>
1478 <c><xref target="silk_nlsf_interpolation"/></c>
1479
1480 <c>Primary Pitch Lag</c>
1481 <c><xref target="silk_ltp_lags"/></c>
1482 <c>Voiced frame</c>
1483
1484 <c>Subframe Pitch Contour</c>
1485 <c><xref target="silk_pitch_contour_pdfs"/></c>
1486 <c>Voiced frame</c>
1487
1488 <c>Periodicity Index</c>
1489 <c><xref target="silk_perindex_pdf"/></c>
1490 <c>Voiced frame</c>
1491
1492 <c>LTP Filter</c>
1493 <c><xref target="silk_ltp_filter_pdfs"/></c>
1494 <c>Voiced frame</c>
1495
1496 <c>LTP Scaling</c>
1497 <c><xref target="silk_ltp_scaling_pdf"/></c>
1498 <c><xref target="silk_ltp_scaling"/></c>
1499
1500 <c>LCG Seed</c>
1501 <c><xref target="silk_seed_pdf"/></c>
1502 <c/>
1503
1504 <c>Excitation Rate Level</c>
1505 <c><xref target="silk_rate_level_pdfs"/></c>
1506 <c/>
1507
1508 <c>Excitation Pulse Counts</c>
1509 <c><xref target="silk_pulse_count_pdfs"/></c>
1510 <c/>
1511
1512 <c>Excitation Pulse Locations</c>
1513 <c><xref target="silk_pulse_locations"/></c>
1514 <c>Non-zero pulse count</c>
1515
1516 <c>Excitation LSb's</c>
1517 <c><xref target="silk_shell_lsb_pdf"/></c>
1518 <c><xref target="silk_pulse_counts"/></c>
1519
1520 <c>Excitation Signs</c>
1521 <c><xref target="silk_sign_pdfs"/></c>
1522 <c><xref target="silk_signs"/></c>
1523
1524 <postamble>
1525 Order of the symbols in an individual SILK frame.
1526 </postamble>
1527 </texttable>
1528
1529 <section anchor="silk_stereo_pred" title="Stereo Prediction Weights">
1530 <t>
1531 A SILK frame corresponding to the mid channel of a stereo Opus frame begins
1532  with a pair of side channel prediction weights, designed such that zeros
1533  indicate normal mid-side coupling.
1534 Since these weights can change on every frame, the first portion of each frame
1535  linearly interpolates between the previous weights and the current ones, using
1536  zeros for the previous weights if none are available.
1537 These prediction weights are never included in a mono Opus frame, and the
1538  previous weights are reset to zeros on any transition from a mono to stereo.
1539 They are also not included in an LBRR frame for the side channel, even if the
1540  LBRR flags indicate the corresponding mid channel was not coded.
1541 In that case, the previous weights are used, again substituting in zeros if no
1542  previous weights are available since the last decoder reset.
1543 </t>
1544
1545 <t>
1546 The prediction weights are coded in three separate pieces, which are decoded
1547  by silk_stereo_decode_pred() (silk_decode_stereo_pred.c).
1548 The first piece jointly codes the high-order part of a table index for both
1549  weights.
1550 The second piece codes the low-order part of each table index.
1551 The third piece codes an offset used to linearly interpolate between table
1552  indices.
1553 The details are as follows.
1554 </t>
1555
1556 <t>
1557 Let n be an index decoded with the 25-element stage-1 PDF in
1558  <xref target="silk_stereo_pred_pdfs"/>.
1559 Then let i0 and i1 be indices decoded with the stage-2 and stage-3 PDFs in
1560  <xref target="silk_stereo_pred_pdfs"/>, respectively, and let i2 and i3
1561  be two more indices decoded with the stage-2 and stage-3 PDFs, all in that
1562  order.
1563 </t>
1564
1565 <texttable anchor="silk_stereo_pred_pdfs" title="Stereo Weight PDFs">
1566 <ttcol align="left">Stage</ttcol>
1567 <ttcol align="left">PDF</ttcol>
1568 <c>Stage 1</c>
1569 <c>{7,  2,  1,  1,  1,
1570    10, 24,  8,  1,  1,
1571     3, 23, 92, 23,  3,
1572     1,  1,  8, 24, 10,
1573     1,  1,  1,  2,  7}/256</c>
1574
1575 <c>Stage 2</c>
1576 <c>{85, 86, 85}/256</c>
1577
1578 <c>Stage 3</c>
1579 <c>{51, 51, 52, 51, 51}/256</c>
1580 </texttable>
1581
1582 <t>
1583 Then use n, i0, and i2 to form two table indices, wi0 and wi1, according to
1584 <figure align="center">
1585 <artwork align="center"><![CDATA[
1586 wi0 = i0 + 3*(n/5)
1587 wi1 = i2 + 3*(n%5)
1588 ]]></artwork>
1589 </figure>
1590  where the division is exact integer division.
1591 The range of these indices is 0 to 14, inclusive.
1592 Let w[i] be the i'th weight from <xref target="silk_stereo_weights_table"/>.
1593 Then the two prediction weights, w0_Q13 and w1_Q13, are
1594 <figure align="center">
1595 <artwork align="center"><![CDATA[
1596 w1_Q13 = w_Q13[wi1]
1597          + ((w_Q13[wi1+1] - w_Q13[wi1])*6554) >> 16)*(2*i3 + 1)
1598
1599 w0_Q13 = w_Q13[wi0]
1600          + ((w_Q13[wi0+1] - w_Q13[wi0])*6554) >> 16)*(2*i1 + 1)
1601          - w1_Q13
1602 ]]></artwork>
1603 </figure>
1604 </t>
1605
1606 <texttable anchor="silk_stereo_weights_table"
1607  title="Stereo Weight Table">
1608 <ttcol align="left">Index</ttcol>
1609 <ttcol align="right">Weight (Q13)</ttcol>
1610  <c>0</c> <c>-13732</c>
1611  <c>1</c> <c>-10050</c>
1612  <c>2</c>  <c>-8266</c>
1613  <c>3</c>  <c>-7526</c>
1614  <c>4</c>  <c>-6500</c>
1615  <c>5</c>  <c>-5000</c>
1616  <c>6</c>  <c>-2950</c>
1617  <c>7</c>   <c>-820</c>
1618  <c>8</c>    <c>820</c>
1619  <c>9</c>   <c>2950</c>
1620 <c>10</c>   <c>5000</c>
1621 <c>11</c>   <c>6500</c>
1622 <c>12</c>   <c>7526</c>
1623 <c>13</c>   <c>8266</c>
1624 <c>14</c>  <c>10050</c>
1625 <c>15</c>  <c>13732</c>
1626 </texttable>
1627
1628 </section>
1629
1630 <section anchor="silk_mid_only_flag" title="Mid-Only Flag">
1631 <t>
1632 A flag appears after the stereo prediction weights that indicates if only the
1633  mid channel is coded for this time interval.
1634 It is omitted when there are no stereo weights, i.e., unless the SILK frame
1635  corresponds to the mid channel of a stereo Opus frame, and it is also omitted
1636  for an LBRR frame when the corresponding LBRR flags indicate the side channel
1637  is present.
1638 When present, the decoder reads a single value using the PDF in
1639  <xref target="silk_mid_only_pdf"/>, as implemented in
1640  silk_stereo_decode_mid_only() (silk_decode_stereo_pred.c).
1641 If the flag is set, then there is no corresponding SILK frame for the side
1642  channel, the entire decoding process for the side channel is skipped, and
1643  zeros are used during the stereo unmixing process<!--TODO: ref-->.
1644 As stated above, LBRR frames still include this flag when the LBRR flag
1645  indicates that the side channel is not coded.
1646 In that case, if this flag is zero (indicating that there should be a side
1647  channel), then Packet Loss Concealment (PLC, see
1648  <xref target="Packet Loss Concealment"/>) SHOULD be invoked to recover a
1649  side channel signal.
1650 </t>
1651
1652 <texttable anchor="silk_mid_only_pdf" title="Mid-Only Flag PDF">
1653 <ttcol align="left">PDF</ttcol>
1654 <c>{192, 64}/256</c>
1655 </texttable>
1656
1657 </section>
1658
1659 <section anchor="silk_frame_type" title="Frame Type">
1660 <t>
1661 Each SILK frame contains a single "frame type" symbol that jointly codes the
1662  signal type and quantization offset type of the corresponding frame.
1663 If the current frame is a regular SILK frame whose VAD bit was not set (an
1664  "inactive" frame), then the frame type symbol takes on a value of either 0 or
1665  1 and is decoded using the first PDF in <xref target="silk_frame_type_pdfs"/>.
1666 If the frame is an LBRR frame or a regular SILK frame whose VAD flag was set
1667  (an "active" frame), then the value of the symbol may range from 2 to 5,
1668  inclusive, and is decoded using the second PDF in
1669  <xref target="silk_frame_type_pdfs"/>.
1670 <xref target="silk_frame_type_table"/> translates between the value of the
1671  frame type symbol and the corresponding signal type and quantization offset
1672  type.
1673 </t>
1674
1675 <texttable anchor="silk_frame_type_pdfs" title="Frame Type PDFs">
1676 <ttcol>VAD Flag</ttcol>
1677 <ttcol>PDF</ttcol>
1678 <c>Inactive</c> <c>{26, 230, 0, 0, 0, 0}/256</c>
1679 <c>Active</c>   <c>{0, 0, 24, 74, 148, 10}/256</c>
1680 </texttable>
1681
1682 <texttable anchor="silk_frame_type_table"
1683  title="Signal Type and Quantization Offset Type from Frame Type">
1684 <ttcol>Frame Type</ttcol>
1685 <ttcol>Signal Type</ttcol>
1686 <ttcol align="right">Quantization Offset Type</ttcol>
1687 <c>0</c> <c>Inactive</c> <c>Low</c>
1688 <c>1</c> <c>Inactive</c> <c>High</c>
1689 <c>2</c> <c>Unvoiced</c> <c>Low</c>
1690 <c>3</c> <c>Unvoiced</c> <c>High</c>
1691 <c>4</c> <c>Voiced</c>   <c>Low</c>
1692 <c>5</c> <c>Voiced</c>   <c>High</c>
1693 </texttable>
1694
1695 </section>
1696
1697 <section anchor="silk_gains" title="Subframe Gains">
1698 <t>
1699 A separate quantization gain is coded for each 5&nbsp;ms subframe.
1700 These gains control the step size between quantization levels of the excitation
1701  signal and, therefore, the quality of the reconstruction.
1702 They are independent of the pitch gains coded for voiced frames.
1703 The quantization gains are themselves uniformly quantized to 6&nbsp;bits on a
1704  log scale, giving them a resolution of approximately 1.369&nbsp;dB and a range
1705  of approximately 1.94&nbsp;dB to 88.21&nbsp;dB.
1706 </t>
1707 <t>
1708 For the first LBRR frame, an LBRR frame where the previous LBRR frame in the
1709  same channel is not coded, or the first regular SILK frame in the current
1710  channel of an Opus frame, the first subframe uses an independent coding
1711  method.
1712 In a stereo Opus frame, the mid-only flag (from
1713  <xref target="silk_mid_only_flag"/>) may cause the first regular SILK frame in
1714  the side channel to occur in a later time interval than the first regular SILK
1715  frame in the mid channel.
1716 The 3 most significant bits of the quantization gain are decoded using a PDF
1717  selected from <xref target="silk_independent_gain_msb_pdfs"/> based on the
1718  decoded signal type.
1719 </t>
1720
1721 <texttable anchor="silk_independent_gain_msb_pdfs"
1722  title="PDFs for Independent Quantization Gain MSb Coding">
1723 <ttcol align="left">Signal Type</ttcol>
1724 <ttcol align="left">PDF</ttcol>
1725 <c>Inactive</c> <c>{32, 112, 68, 29, 12,  1,  1, 1}/256</c>
1726 <c>Unvoiced</c>  <c>{2,  17, 45, 60, 62, 47, 19, 4}/256</c>
1727 <c>Voiced</c>    <c>{1,   3, 26, 71, 94, 50,  9, 2}/256</c>
1728 </texttable>
1729
1730 <t>
1731 The 3 least significant bits are decoded using a uniform PDF:
1732 </t>
1733 <texttable anchor="silk_independent_gain_lsb_pdf"
1734  title="PDF for Independent Quantization Gain LSb Coding">
1735 <ttcol align="left">PDF</ttcol>
1736 <c>{32, 32, 32, 32, 32, 32, 32, 32}/256</c>
1737 </texttable>
1738
1739 <t>
1740 For all other subframes (including the first subframe of frames not listed as
1741  using independent coding above), the quantization gain is coded relative to
1742  the gain from the previous subframe (in the same channel).
1743 In particular, unlike an LBRR frame where the previous frame is not coded, in a
1744  60&nbsp;ms stereo Opus frame, if the first and third regular SILK frames
1745  in the side channel are coded, but the second is not, the first subframe of
1746  the third frame is still coded relative to the last subframe in the first
1747  frame.
1748 The PDF in <xref target="silk_delta_gain_pdf"/> yields a delta gain index
1749  between 0 and 40, inclusive.
1750 </t>
1751 <texttable anchor="silk_delta_gain_pdf"
1752  title="PDF for Delta Quantization Gain Coding">
1753 <ttcol align="left">PDF</ttcol>
1754 <c>{6,   5,  11,  31, 132,  21,   8,   4,
1755     3,   2,   2,   2,   1,   1,   1,   1,
1756     1,   1,   1,   1,   1,   1,   1,   1,
1757     1,   1,   1,   1,   1,   1,   1,   1,
1758     1,   1,   1,   1,   1,   1,   1,   1,   1}/256</c>
1759 </texttable>
1760 <t>
1761 The following formula translates this index into a quantization gain for the
1762  current subframe using the gain from the previous subframe:
1763 </t>
1764 <figure align="center">
1765 <artwork align="center"><![CDATA[
1766 log_gain = min(max(2*gain_index - 16,
1767                    previous_log_gain + gain_index - 4), 63)
1768 ]]></artwork>
1769 </figure>
1770 <t>
1771 silk_gains_dequant() (silk_gain_quant.c) dequantizes the gain for the
1772  k'th subframe and converts it into a linear Q16 scale factor via
1773 <figure align="center">
1774 <artwork align="center"><![CDATA[
1775 gain_Q16[k] = silk_log2lin((0x1D1C71*log_gain>>16) + 2090)
1776 ]]></artwork>
1777 </figure>
1778 </t>
1779 <t>
1780 The function silk_log2lin() (silk_log2lin.c) computes an approximation of
1781  of 2**(inLog_Q7/128.0), where inLog_Q7 is its Q7 input.
1782 Let i = inLog_Q7&gt;&gt;7 be the integer part of inLogQ7 and
1783  f = inLog_Q7&amp;127 be the fractional part.
1784 Then, if i &lt; 16, then
1785 <figure align="center">
1786 <artwork align="center"><![CDATA[
1787 (1<<i) + (((-174*f*(128-f)>>16)+f)>>7)*(1<<i)
1788 ]]></artwork>
1789 </figure>
1790  yields the approximate exponential.
1791 Otherwise, silk_log2lin uses
1792 <figure align="center">
1793 <artwork align="center"><![CDATA[
1794 (1<<i) + ((-174*f*(128-f)>>16)+f)*((1<<i)>>7) .
1795 ]]></artwork>
1796 </figure>
1797 </t>
1798 </section>
1799
1800 <section anchor="silk_nlsfs" title="Normalized Line Spectral Frequency (LSF)
1801  and Linear Predictive Coding (LPC) Coefficients">
1802 <t>
1803 Normalized Line Spectral Frequency (LSF) coefficients follow the quantization
1804  gains in the bitstream, and represent the Linear Predictive Coding (LPC)
1805  coefficients for the current SILK frame.
1806 Once decoded, the normalized LSFs form an increasing list of Q15 values between
1807  0 and 1.
1808 These represent the interleaved zeros on the unit circle between 0 and pi
1809  (hence "normalized") in the standard decomposition of the LPC filter into a
1810  symmetric part and an anti-symmetric part (P and Q in
1811  <xref target="silk_nlsf2lpc"/>).
1812 Because of non-linear effects in the decoding process, an implementation SHOULD
1813  match the fixed-point arithmetic described in this section exactly.
1814 An encoder SHOULD also use the same process.
1815 </t>
1816 <t>
1817 The normalized LSFs are coded using a two-stage vector quantizer (VQ)
1818  (<xref target="silk_nlsf_stage1"/> and <xref target="silk_nlsf_stage2"/>).
1819 NB and MB frames use an order-10 predictor, while WB frames use an order-16
1820  predictor, and thus have different sets of tables.
1821 After reconstructing the normalized LSFs
1822  (<xref target="silk_nlsf_reconstruction"/>), the decoder runs them through a
1823  stabilization process (<xref target="silk_nlsf_stabilization"/>), interpolates
1824  them between frames (<xref target="silk_nlsf_interpolation"/>), converts them
1825  back into LPC coefficients (<xref target="silk_nlsf2lpc"/>), and then runs
1826  them through further processes to limit the range of the coefficients
1827  (<xref target="silk_lpc_range_limit"/>) and the gain of the filter
1828  (<xref target="silk_lpc_gain_limit"/>).
1829 All of this is necessary to ensure the reconstruction process is stable.
1830 </t>
1831
1832 <section anchor="silk_nlsf_stage1" title="Stage 1 Normalized LSF Decoding">
1833 <t>
1834 The first VQ stage uses a 32-element codebook, coded with one of the PDFs in
1835  <xref target="silk_nlsf_stage1_pdfs"/>, depending on the audio bandwidth and
1836  the signal type of the current SILK frame.
1837 This yields a single index, I1, for the entire frame.
1838 This indexes an element in a coarse codebook, selects the PDFs for the
1839  second stage of the VQ, and selects the prediction weights used to remove
1840  intra-frame redundancy from the second stage.
1841 The actual codebook elements are listed in
1842  <xref target="silk_nlsf_nbmb_codebook"/> and
1843  <xref target="silk_nlsf_wb_codebook"/>, but they are not needed until the last
1844  stages of reconstructing the LSF coefficients.
1845 </t>
1846
1847 <texttable anchor="silk_nlsf_stage1_pdfs"
1848  title="PDFs for Normalized LSF Index Stage-1 Decoding">
1849 <ttcol align="left">Audio Bandwidth</ttcol>
1850 <ttcol align="left">Signal Type</ttcol>
1851 <ttcol align="left">PDF</ttcol>
1852 <c>NB or MB</c> <c>Inactive or unvoiced</c>
1853 <c>
1854 {44, 34, 30, 19, 21, 12, 11,  3,
1855   3,  2, 16,  2,  2,  1,  5,  2,
1856   1,  3,  3,  1,  1,  2,  2,  2,
1857   3,  1,  9,  9,  2,  7,  2,  1}/256
1858 </c>
1859 <c>NB or MB</c> <c>Voiced</c>
1860 <c>
1861 {1, 10,  1,  8,  3,  8,  8, 14,
1862 13, 14,  1, 14, 12, 13, 11, 11,
1863 12, 11, 10, 10, 11,  8,  9,  8,
1864  7,  8,  1,  1,  6,  1,  6,  5}/256
1865 </c>
1866 <c>WB</c> <c>Inactive or unvoiced</c>
1867 <c>
1868 {31, 21,  3, 17,  1,  8, 17,  4,
1869   1, 18, 16,  4,  2,  3,  1, 10,
1870   1,  3, 16, 11, 16,  2,  2,  3,
1871   2, 11,  1,  4,  9,  8,  7,  3}/256
1872 </c>
1873 <c>WB</c> <c>Voiced</c>
1874 <c>
1875 {1,  4, 16,  5, 18, 11,  5, 14,
1876 15,  1,  3, 12, 13, 14, 14,  6,
1877 14, 12,  2,  6,  1, 12, 12, 11,
1878 10,  3, 10,  5,  1,  1,  1,  3}/256
1879 </c>
1880 </texttable>
1881
1882 </section>
1883
1884 <section anchor="silk_nlsf_stage2" title="Stage 2 Normalized LSF Decoding">
1885 <t>
1886 A total of 16 PDFs are available for the LSF residual in the second stage: the
1887  8 (a...h) for NB and MB frames given in
1888  <xref target="silk_nlsf_stage2_nbmb_pdfs"/>, and the 8 (i...p) for WB frames
1889  given in <xref target="silk_nlsf_stage2_wb_pdfs"/>.
1890 Which PDF is used for which coefficient is driven by the index, I1,
1891  decoded in the first stage.
1892 <xref target="silk_nlsf_nbmb_stage2_cb_sel"/> lists the letter of the
1893  corresponding PDF for each normalized LSF coefficient for NB and MB, and
1894  <xref target="silk_nlsf_wb_stage2_cb_sel"/> lists the same information for WB.
1895 </t>
1896
1897 <texttable anchor="silk_nlsf_stage2_nbmb_pdfs"
1898  title="PDFs for NB/MB Normalized LSF Index Stage-2 Decoding">
1899 <ttcol align="left">Codebook</ttcol>
1900 <ttcol align="left">PDF</ttcol>
1901 <c>a</c> <c>{1,   1,   1,  15, 224,  11,   1,   1,   1}/256</c>
1902 <c>b</c> <c>{1,   1,   2,  34, 183,  32,   1,   1,   1}/256</c>
1903 <c>c</c> <c>{1,   1,   4,  42, 149,  55,   2,   1,   1}/256</c>
1904 <c>d</c> <c>{1,   1,   8,  52, 123,  61,   8,   1,   1}/256</c>
1905 <c>e</c> <c>{1,   3,  16,  53, 101,  74,   6,   1,   1}/256</c>
1906 <c>f</c> <c>{1,   3,  17,  55,  90,  73,  15,   1,   1}/256</c>
1907 <c>g</c> <c>{1,   7,  24,  53,  74,  67,  26,   3,   1}/256</c>
1908 <c>h</c> <c>{1,   1,  18,  63,  78,  58,  30,   6,   1}/256</c>
1909 </texttable>
1910
1911 <texttable anchor="silk_nlsf_stage2_wb_pdfs"
1912  title="PDFs for WB Normalized LSF Index Stage-2 Decoding">
1913 <ttcol align="left">Codebook</ttcol>
1914 <ttcol align="left">PDF</ttcol>
1915 <c>i</c> <c>{1,   1,   1,   9, 232,   9,   1,   1,   1}/256</c>
1916 <c>j</c> <c>{1,   1,   2,  28, 186,  35,   1,   1,   1}/256</c>
1917 <c>k</c> <c>{1,   1,   3,  42, 152,  53,   2,   1,   1}/256</c>
1918 <c>l</c> <c>{1,   1,  10,  49, 126,  65,   2,   1,   1}/256</c>
1919 <c>m</c> <c>{1,   4,  19,  48, 100,  77,   5,   1,   1}/256</c>
1920 <c>n</c> <c>{1,   1,  14,  54, 100,  72,  12,   1,   1}/256</c>
1921 <c>o</c> <c>{1,   1,  15,  61,  87,  61,  25,   4,   1}/256</c>
1922 <c>p</c> <c>{1,   7,  21,  50,  77,  81,  17,   1,   1}/256</c>
1923 </texttable>
1924
1925 <texttable anchor="silk_nlsf_nbmb_stage2_cb_sel"
1926  title="Codebook Selection for NB/MB Normalized LSF Index Stage 2 Decoding">
1927 <ttcol>I1</ttcol>
1928 <ttcol>Coefficient</ttcol>
1929 <c/>
1930 <c><spanx style="vbare">0&nbsp;1&nbsp;2&nbsp;3&nbsp;4&nbsp;5&nbsp;6&nbsp;7&nbsp;8&nbsp;9</spanx></c>
1931 <c> 0</c>
1932 <c><spanx style="vbare">a&nbsp;a&nbsp;a&nbsp;a&nbsp;a&nbsp;a&nbsp;a&nbsp;a&nbsp;a&nbsp;a</spanx></c>
1933 <c> 1</c>
1934 <c><spanx style="vbare">b&nbsp;d&nbsp;b&nbsp;c&nbsp;c&nbsp;b&nbsp;c&nbsp;b&nbsp;b&nbsp;b</spanx></c>
1935 <c> 2</c>
1936 <c><spanx style="vbare">c&nbsp;b&nbsp;b&nbsp;b&nbsp;b&nbsp;b&nbsp;b&nbsp;b&nbsp;b&nbsp;b</spanx></c>
1937 <c> 3</c>
1938 <c><spanx style="vbare">b&nbsp;c&nbsp;c&nbsp;c&nbsp;c&nbsp;b&nbsp;c&nbsp;b&nbsp;b&nbsp;b</spanx></c>
1939 <c> 4</c>
1940 <c><spanx style="vbare">c&nbsp;d&nbsp;d&nbsp;d&nbsp;d&nbsp;c&nbsp;c&nbsp;c&nbsp;c&nbsp;c</spanx></c>
1941 <c> 5</c>
1942 <c><spanx style="vbare">a&nbsp;f&nbsp;d&nbsp;d&nbsp;c&nbsp;c&nbsp;c&nbsp;c&nbsp;b&nbsp;b</spanx></c>
1943 <c> g</c>
1944 <c><spanx style="vbare">a&nbsp;c&nbsp;c&nbsp;c&nbsp;c&nbsp;c&nbsp;c&nbsp;c&nbsp;c&nbsp;b</spanx></c>
1945 <c> 7</c>
1946 <c><spanx style="vbare">c&nbsp;d&nbsp;g&nbsp;e&nbsp;e&nbsp;e&nbsp;f&nbsp;e&nbsp;f&nbsp;f</spanx></c>
1947 <c> 8</c>
1948 <c><spanx style="vbare">c&nbsp;e&nbsp;f&nbsp;f&nbsp;e&nbsp;f&nbsp;e&nbsp;g&nbsp;e&nbsp;e</spanx></c>
1949 <c> 9</c>
1950 <c><spanx style="vbare">c&nbsp;e&nbsp;e&nbsp;h&nbsp;e&nbsp;f&nbsp;e&nbsp;f&nbsp;f&nbsp;e</spanx></c>
1951 <c>10</c>
1952 <c><spanx style="vbare">e&nbsp;d&nbsp;d&nbsp;d&nbsp;c&nbsp;d&nbsp;c&nbsp;c&nbsp;c&nbsp;c</spanx></c>
1953 <c>11</c>
1954 <c><spanx style="vbare">b&nbsp;f&nbsp;f&nbsp;g&nbsp;e&nbsp;f&nbsp;e&nbsp;f&nbsp;f&nbsp;f</spanx></c>
1955 <c>12</c>
1956 <c><spanx style="vbare">c&nbsp;h&nbsp;e&nbsp;g&nbsp;f&nbsp;f&nbsp;f&nbsp;f&nbsp;f&nbsp;f</spanx></c>
1957 <c>13</c>
1958 <c><spanx style="vbare">c&nbsp;h&nbsp;f&nbsp;f&nbsp;f&nbsp;f&nbsp;f&nbsp;g&nbsp;f&nbsp;e</spanx></c>
1959 <c>14</c>
1960 <c><spanx style="vbare">d&nbsp;d&nbsp;f&nbsp;e&nbsp;e&nbsp;f&nbsp;e&nbsp;f&nbsp;e&nbsp;e</spanx></c>
1961 <c>15</c>
1962 <c><spanx style="vbare">c&nbsp;d&nbsp;d&nbsp;f&nbsp;f&nbsp;e&nbsp;e&nbsp;e&nbsp;e&nbsp;e</spanx></c>
1963 <c>16</c>
1964 <c><spanx style="vbare">c&nbsp;e&nbsp;e&nbsp;g&nbsp;e&nbsp;f&nbsp;e&nbsp;f&nbsp;f&nbsp;f</spanx></c>
1965 <c>17</c>
1966 <c><spanx style="vbare">c&nbsp;f&nbsp;e&nbsp;g&nbsp;f&nbsp;f&nbsp;f&nbsp;e&nbsp;f&nbsp;e</spanx></c>
1967 <c>18</c>
1968 <c><spanx style="vbare">c&nbsp;h&nbsp;e&nbsp;f&nbsp;e&nbsp;f&nbsp;e&nbsp;f&nbsp;f&nbsp;f</spanx></c>
1969 <c>19</c>
1970 <c><spanx style="vbare">c&nbsp;f&nbsp;e&nbsp;g&nbsp;h&nbsp;g&nbsp;f&nbsp;g&nbsp;f&nbsp;e</spanx></c>
1971 <c>20</c>
1972 <c><spanx style="vbare">d&nbsp;g&nbsp;h&nbsp;e&nbsp;g&nbsp;f&nbsp;f&nbsp;g&nbsp;e&nbsp;f</spanx></c>
1973 <c>21</c>
1974 <c><spanx style="vbare">c&nbsp;h&nbsp;g&nbsp;e&nbsp;e&nbsp;e&nbsp;f&nbsp;e&nbsp;f&nbsp;f</spanx></c>
1975 <c>22</c>
1976 <c><spanx style="vbare">e&nbsp;f&nbsp;f&nbsp;e&nbsp;g&nbsp;g&nbsp;f&nbsp;g&nbsp;f&nbsp;e</spanx></c>
1977 <c>23</c>
1978 <c><spanx style="vbare">c&nbsp;f&nbsp;f&nbsp;g&nbsp;f&nbsp;g&nbsp;e&nbsp;g&nbsp;e&nbsp;e</spanx></c>
1979 <c>24</c>
1980 <c><spanx style="vbare">e&nbsp;f&nbsp;f&nbsp;f&nbsp;d&nbsp;h&nbsp;e&nbsp;f&nbsp;f&nbsp;e</spanx></c>
1981 <c>25</c>
1982 <c><spanx style="vbare">c&nbsp;d&nbsp;e&nbsp;f&nbsp;f&nbsp;g&nbsp;e&nbsp;f&nbsp;f&nbsp;e</spanx></c>
1983 <c>26</c>
1984 <c><spanx style="vbare">c&nbsp;d&nbsp;c&nbsp;d&nbsp;d&nbsp;e&nbsp;c&nbsp;d&nbsp;d&nbsp;d</spanx></c>
1985 <c>27</c>
1986 <c><spanx style="vbare">b&nbsp;b&nbsp;c&nbsp;c&nbsp;c&nbsp;c&nbsp;c&nbsp;d&nbsp;c&nbsp;c</spanx></c>
1987 <c>28</c>
1988 <c><spanx style="vbare">e&nbsp;f&nbsp;f&nbsp;g&nbsp;g&nbsp;g&nbsp;f&nbsp;g&nbsp;e&nbsp;f</spanx></c>
1989 <c>29</c>
1990 <c><spanx style="vbare">d&nbsp;f&nbsp;f&nbsp;e&nbsp;e&nbsp;e&nbsp;e&nbsp;d&nbsp;d&nbsp;c</spanx></c>
1991 <c>30</c>
1992 <c><spanx style="vbare">c&nbsp;f&nbsp;d&nbsp;h&nbsp;f&nbsp;f&nbsp;e&nbsp;e&nbsp;f&nbsp;e</spanx></c>
1993 <c>31</c>
1994 <c><spanx style="vbare">e&nbsp;e&nbsp;f&nbsp;e&nbsp;f&nbsp;g&nbsp;f&nbsp;g&nbsp;f&nbsp;e</spanx></c>
1995 </texttable>
1996
1997 <texttable anchor="silk_nlsf_wb_stage2_cb_sel"
1998  title="Codebook Selection for WB Normalized LSF Index Stage 2 Decoding">
1999 <ttcol>I1</ttcol>
2000 <ttcol>Coefficient</ttcol>
2001 <c/>
2002 <c><spanx style="vbare">0&nbsp;&nbsp;1&nbsp;&nbsp;2&nbsp;&nbsp;3&nbsp;&nbsp;4&nbsp;&nbsp;5&nbsp;&nbsp;6&nbsp;&nbsp;7&nbsp;&nbsp;8&nbsp;&nbsp;9&nbsp;10&nbsp;11&nbsp;12&nbsp;13&nbsp;14&nbsp;15</spanx></c>
2003 <c> 0</c>
2004 <c><spanx style="vbare">i&nbsp;&nbsp;i&nbsp;&nbsp;i&nbsp;&nbsp;i&nbsp;&nbsp;i&nbsp;&nbsp;i&nbsp;&nbsp;i&nbsp;&nbsp;i&nbsp;&nbsp;i&nbsp;&nbsp;i&nbsp;&nbsp;i&nbsp;&nbsp;i&nbsp;&nbsp;i&nbsp;&nbsp;i&nbsp;&nbsp;i&nbsp;&nbsp;i</spanx></c>
2005 <c> 1</c>
2006 <c><spanx style="vbare">k&nbsp;&nbsp;l&nbsp;&nbsp;l&nbsp;&nbsp;l&nbsp;&nbsp;l&nbsp;&nbsp;l&nbsp;&nbsp;k&nbsp;&nbsp;k&nbsp;&nbsp;k&nbsp;&nbsp;k&nbsp;&nbsp;k&nbsp;&nbsp;j&nbsp;&nbsp;j&nbsp;&nbsp;j&nbsp;&nbsp;i&nbsp;&nbsp;l</spanx></c>
2007 <c> 2</c>
2008 <c><spanx style="vbare">k&nbsp;&nbsp;n&nbsp;&nbsp;n&nbsp;&nbsp;l&nbsp;&nbsp;p&nbsp;&nbsp;m&nbsp;&nbsp;m&nbsp;&nbsp;n&nbsp;&nbsp;k&nbsp;&nbsp;n&nbsp;&nbsp;m&nbsp;&nbsp;n&nbsp;&nbsp;n&nbsp;&nbsp;m&nbsp;&nbsp;l&nbsp;&nbsp;l</spanx></c>
2009 <c> 3</c>
2010 <c><spanx style="vbare">i&nbsp;&nbsp;k&nbsp;&nbsp;j&nbsp;&nbsp;k&nbsp;&nbsp;k&nbsp;&nbsp;j&nbsp;&nbsp;j&nbsp;&nbsp;j&nbsp;&nbsp;j&nbsp;&nbsp;j&nbsp;&nbsp;i&nbsp;&nbsp;i&nbsp;&nbsp;i&nbsp;&nbsp;i&nbsp;&nbsp;i&nbsp;&nbsp;j</spanx></c>
2011 <c> 4</c>
2012 <c><spanx style="vbare">i&nbsp;&nbsp;o&nbsp;&nbsp;n&nbsp;&nbsp;m&nbsp;&nbsp;o&nbsp;&nbsp;m&nbsp;&nbsp;p&nbsp;&nbsp;n&nbsp;&nbsp;m&nbsp;&nbsp;m&nbsp;&nbsp;m&nbsp;&nbsp;n&nbsp;&nbsp;n&nbsp;&nbsp;m&nbsp;&nbsp;m&nbsp;&nbsp;l</spanx></c>
2013 <c> 5</c>
2014 <c><spanx style="vbare">i&nbsp;&nbsp;l&nbsp;&nbsp;n&nbsp;&nbsp;n&nbsp;&nbsp;m&nbsp;&nbsp;l&nbsp;&nbsp;l&nbsp;&nbsp;n&nbsp;&nbsp;l&nbsp;&nbsp;l&nbsp;&nbsp;l&nbsp;&nbsp;l&nbsp;&nbsp;l&nbsp;&nbsp;l&nbsp;&nbsp;k&nbsp;&nbsp;m</spanx></c>
2015 <c> 6</c>
2016 <c><spanx style="vbare">i&nbsp;&nbsp;i&nbsp;&nbsp;i&nbsp;&nbsp;i&nbsp;&nbsp;i&nbsp;&nbsp;i&nbsp;&nbsp;i&nbsp;&nbsp;i&nbsp;&nbsp;i&nbsp;&nbsp;i&nbsp;&nbsp;i&nbsp;&nbsp;i&nbsp;&nbsp;i&nbsp;&nbsp;i&nbsp;&nbsp;i&nbsp;&nbsp;i</spanx></c>
2017 <c> 7</c>
2018 <c><spanx style="vbare">i&nbsp;&nbsp;k&nbsp;&nbsp;o&nbsp;&nbsp;l&nbsp;&nbsp;p&nbsp;&nbsp;k&nbsp;&nbsp;n&nbsp;&nbsp;l&nbsp;&nbsp;m&nbsp;&nbsp;n&nbsp;&nbsp;n&nbsp;&nbsp;m&nbsp;&nbsp;l&nbsp;&nbsp;l&nbsp;&nbsp;k&nbsp;&nbsp;l</spanx></c>
2019 <c> 8</c>
2020 <c><spanx style="vbare">i&nbsp;&nbsp;o&nbsp;&nbsp;k&nbsp;&nbsp;o&nbsp;&nbsp;o&nbsp;&nbsp;m&nbsp;&nbsp;n&nbsp;&nbsp;m&nbsp;&nbsp;o&nbsp;&nbsp;n&nbsp;&nbsp;m&nbsp;&nbsp;m&nbsp;&nbsp;n&nbsp;&nbsp;l&nbsp;&nbsp;l&nbsp;&nbsp;l</spanx></c>
2021 <c> 9</c>
2022 <c><spanx style="vbare">k&nbsp;&nbsp;j&nbsp;&nbsp;i&nbsp;&nbsp;i&nbsp;&nbsp;i&nbsp;&nbsp;i&nbsp;&nbsp;i&nbsp;&nbsp;i&nbsp;&nbsp;i&nbsp;&nbsp;i&nbsp;&nbsp;i&nbsp;&nbsp;i&nbsp;&nbsp;i&nbsp;&nbsp;i&nbsp;&nbsp;i&nbsp;&nbsp;i</spanx></c>
2023 <c>j0</c>
2024 <c><spanx style="vbare">i&nbsp;&nbsp;j&nbsp;&nbsp;i&nbsp;&nbsp;i&nbsp;&nbsp;i&nbsp;&nbsp;i&nbsp;&nbsp;i&nbsp;&nbsp;i&nbsp;&nbsp;i&nbsp;&nbsp;i&nbsp;&nbsp;i&nbsp;&nbsp;i&nbsp;&nbsp;i&nbsp;&nbsp;i&nbsp;&nbsp;i&nbsp;&nbsp;j</spanx></c>
2025 <c>11</c>
2026 <c><spanx style="vbare">k&nbsp;&nbsp;k&nbsp;&nbsp;l&nbsp;&nbsp;m&nbsp;&nbsp;n&nbsp;&nbsp;l&nbsp;&nbsp;l&nbsp;&nbsp;l&nbsp;&nbsp;l&nbsp;&nbsp;l&nbsp;&nbsp;l&nbsp;&nbsp;l&nbsp;&nbsp;k&nbsp;&nbsp;k&nbsp;&nbsp;j&nbsp;&nbsp;l</spanx></c>
2027 <c>12</c>
2028 <c><spanx style="vbare">k&nbsp;&nbsp;k&nbsp;&nbsp;l&nbsp;&nbsp;l&nbsp;&nbsp;m&nbsp;&nbsp;l&nbsp;&nbsp;l&nbsp;&nbsp;l&nbsp;&nbsp;l&nbsp;&nbsp;l&nbsp;&nbsp;l&nbsp;&nbsp;l&nbsp;&nbsp;l&nbsp;&nbsp;k&nbsp;&nbsp;j&nbsp;&nbsp;l</spanx></c>
2029 <c>13</c>
2030 <c><spanx style="vbare">l&nbsp;&nbsp;m&nbsp;&nbsp;m&nbsp;&nbsp;m&nbsp;&nbsp;o&nbsp;&nbsp;m&nbsp;&nbsp;m&nbsp;&nbsp;n&nbsp;&nbsp;l&nbsp;&nbsp;n&nbsp;&nbsp;m&nbsp;&nbsp;m&nbsp;&nbsp;n&nbsp;&nbsp;m&nbsp;&nbsp;l&nbsp;&nbsp;m</spanx></c>
2031 <c>14</c>
2032 <c><spanx style="vbare">i&nbsp;&nbsp;o&nbsp;&nbsp;m&nbsp;&nbsp;n&nbsp;&nbsp;m&nbsp;&nbsp;p&nbsp;&nbsp;n&nbsp;&nbsp;k&nbsp;&nbsp;o&nbsp;&nbsp;n&nbsp;&nbsp;p&nbsp;&nbsp;m&nbsp;&nbsp;m&nbsp;&nbsp;l&nbsp;&nbsp;n&nbsp;&nbsp;l</spanx></c>
2033 <c>15</c>
2034 <c><spanx style="vbare">i&nbsp;&nbsp;j&nbsp;&nbsp;i&nbsp;&nbsp;j&nbsp;&nbsp;j&nbsp;&nbsp;j&nbsp;&nbsp;j&nbsp;&nbsp;j&nbsp;&nbsp;j&nbsp;&nbsp;j&nbsp;&nbsp;i&nbsp;&nbsp;i&nbsp;&nbsp;i&nbsp;&nbsp;i&nbsp;&nbsp;j&nbsp;&nbsp;i</spanx></c>
2035 <c>16</c>
2036 <c><spanx style="vbare">j&nbsp;&nbsp;o&nbsp;&nbsp;n&nbsp;&nbsp;p&nbsp;&nbsp;n&nbsp;&nbsp;m&nbsp;&nbsp;n&nbsp;&nbsp;l&nbsp;&nbsp;m&nbsp;&nbsp;n&nbsp;&nbsp;m&nbsp;&nbsp;m&nbsp;&nbsp;m&nbsp;&nbsp;l&nbsp;&nbsp;l&nbsp;&nbsp;m</spanx></c>
2037 <c>17</c>
2038 <c><spanx style="vbare">j&nbsp;&nbsp;l&nbsp;&nbsp;l&nbsp;&nbsp;m&nbsp;&nbsp;m&nbsp;&nbsp;l&nbsp;&nbsp;l&nbsp;&nbsp;n&nbsp;&nbsp;k&nbsp;&nbsp;l&nbsp;&nbsp;l&nbsp;&nbsp;n&nbsp;&nbsp;n&nbsp;&nbsp;n&nbsp;&nbsp;l&nbsp;&nbsp;m</spanx></c>
2039 <c>18</c>
2040 <c><spanx style="vbare">k&nbsp;&nbsp;l&nbsp;&nbsp;l&nbsp;&nbsp;k&nbsp;&nbsp;k&nbsp;&nbsp;k&nbsp;&nbsp;l&nbsp;&nbsp;k&nbsp;&nbsp;j&nbsp;&nbsp;k&nbsp;&nbsp;j&nbsp;&nbsp;k&nbsp;&nbsp;j&nbsp;&nbsp;j&nbsp;&nbsp;j&nbsp;&nbsp;m</spanx></c>
2041 <c>19</c>
2042 <c><spanx style="vbare">i&nbsp;&nbsp;k&nbsp;&nbsp;l&nbsp;&nbsp;n&nbsp;&nbsp;l&nbsp;&nbsp;l&nbsp;&nbsp;k&nbsp;&nbsp;k&nbsp;&nbsp;k&nbsp;&nbsp;j&nbsp;&nbsp;j&nbsp;&nbsp;i&nbsp;&nbsp;i&nbsp;&nbsp;i&nbsp;&nbsp;i&nbsp;&nbsp;i</spanx></c>
2043 <c>20</c>
2044 <c><spanx style="vbare">l&nbsp;&nbsp;m&nbsp;&nbsp;l&nbsp;&nbsp;n&nbsp;&nbsp;l&nbsp;&nbsp;l&nbsp;&nbsp;k&nbsp;&nbsp;k&nbsp;&nbsp;j&nbsp;&nbsp;j&nbsp;&nbsp;j&nbsp;&nbsp;j&nbsp;&nbsp;j&nbsp;&nbsp;k&nbsp;&nbsp;k&nbsp;&nbsp;m</spanx></c>
2045 <c>21</c>
2046 <c><spanx style="vbare">k&nbsp;&nbsp;o&nbsp;&nbsp;l&nbsp;&nbsp;p&nbsp;&nbsp;p&nbsp;&nbsp;m&nbsp;&nbsp;n&nbsp;&nbsp;m&nbsp;&nbsp;n&nbsp;&nbsp;l&nbsp;&nbsp;n&nbsp;&nbsp;l&nbsp;&nbsp;l&nbsp;&nbsp;k&nbsp;&nbsp;l&nbsp;&nbsp;l</spanx></c>
2047 <c>22</c>
2048 <c><spanx style="vbare">k&nbsp;&nbsp;l&nbsp;&nbsp;n&nbsp;&nbsp;o&nbsp;&nbsp;o&nbsp;&nbsp;l&nbsp;&nbsp;n&nbsp;&nbsp;l&nbsp;&nbsp;m&nbsp;&nbsp;m&nbsp;&nbsp;l&nbsp;&nbsp;l&nbsp;&nbsp;l&nbsp;&nbsp;l&nbsp;&nbsp;k&nbsp;&nbsp;m</spanx></c>
2049 <c>23</c>
2050 <c><spanx style="vbare">j&nbsp;&nbsp;l&nbsp;&nbsp;l&nbsp;&nbsp;m&nbsp;&nbsp;m&nbsp;&nbsp;m&nbsp;&nbsp;m&nbsp;&nbsp;l&nbsp;&nbsp;n&nbsp;&nbsp;n&nbsp;&nbsp;n&nbsp;&nbsp;l&nbsp;&nbsp;j&nbsp;&nbsp;j&nbsp;&nbsp;j&nbsp;&nbsp;j</spanx></c>
2051 <c>24</c>
2052 <c><spanx style="vbare">k&nbsp;&nbsp;n&nbsp;&nbsp;l&nbsp;&nbsp;o&nbsp;&nbsp;o&nbsp;&nbsp;m&nbsp;&nbsp;p&nbsp;&nbsp;m&nbsp;&nbsp;m&nbsp;&nbsp;n&nbsp;&nbsp;l&nbsp;&nbsp;m&nbsp;&nbsp;m&nbsp;&nbsp;l&nbsp;&nbsp;l&nbsp;&nbsp;l</spanx></c>
2053 <c>25</c>
2054 <c><spanx style="vbare">i&nbsp;&nbsp;o&nbsp;&nbsp;j&nbsp;&nbsp;j&nbsp;&nbsp;i&nbsp;&nbsp;i&nbsp;&nbsp;i&nbsp;&nbsp;i&nbsp;&nbsp;i&nbsp;&nbsp;i&nbsp;&nbsp;i&nbsp;&nbsp;i&nbsp;&nbsp;i&nbsp;&nbsp;i&nbsp;&nbsp;i&nbsp;&nbsp;i</spanx></c>
2055 <c>26</c>
2056 <c><spanx style="vbare">i&nbsp;&nbsp;o&nbsp;&nbsp;o&nbsp;&nbsp;l&nbsp;&nbsp;n&nbsp;&nbsp;k&nbsp;&nbsp;n&nbsp;&nbsp;n&nbsp;&nbsp;l&nbsp;&nbsp;m&nbsp;&nbsp;m&nbsp;&nbsp;p&nbsp;&nbsp;p&nbsp;&nbsp;m&nbsp;&nbsp;m&nbsp;&nbsp;m</spanx></c>
2057 <c>27</c>
2058 <c><spanx style="vbare">l&nbsp;&nbsp;l&nbsp;&nbsp;p&nbsp;&nbsp;l&nbsp;&nbsp;n&nbsp;&nbsp;m&nbsp;&nbsp;l&nbsp;&nbsp;l&nbsp;&nbsp;l&nbsp;&nbsp;k&nbsp;&nbsp;k&nbsp;&nbsp;l&nbsp;&nbsp;l&nbsp;&nbsp;l&nbsp;&nbsp;k&nbsp;&nbsp;l</spanx></c>
2059 <c>28</c>
2060 <c><spanx style="vbare">i&nbsp;&nbsp;i&nbsp;&nbsp;j&nbsp;&nbsp;i&nbsp;&nbsp;i&nbsp;&nbsp;i&nbsp;&nbsp;k&nbsp;&nbsp;j&nbsp;&nbsp;k&nbsp;&nbsp;j&nbsp;&nbsp;j&nbsp;&nbsp;k&nbsp;&nbsp;k&nbsp;&nbsp;k&nbsp;&nbsp;j&nbsp;&nbsp;j</spanx></c>
2061 <c>29</c>
2062 <c><spanx style="vbare">i&nbsp;&nbsp;l&nbsp;&nbsp;k&nbsp;&nbsp;n&nbsp;&nbsp;l&nbsp;&nbsp;l&nbsp;&nbsp;k&nbsp;&nbsp;l&nbsp;&nbsp;k&nbsp;&nbsp;j&nbsp;&nbsp;i&nbsp;&nbsp;i&nbsp;&nbsp;j&nbsp;&nbsp;i&nbsp;&nbsp;i&nbsp;&nbsp;j</spanx></c>
2063 <c>30</c>
2064 <c><spanx style="vbare">l&nbsp;&nbsp;n&nbsp;&nbsp;n&nbsp;&nbsp;m&nbsp;&nbsp;p&nbsp;&nbsp;n&nbsp;&nbsp;l&nbsp;&nbsp;l&nbsp;&nbsp;k&nbsp;&nbsp;l&nbsp;&nbsp;k&nbsp;&nbsp;k&nbsp;&nbsp;j&nbsp;&nbsp;i&nbsp;&nbsp;j&nbsp;&nbsp;i</spanx></c>
2065 <c>31</c>
2066 <c><spanx style="vbare">k&nbsp;&nbsp;l&nbsp;&nbsp;n&nbsp;&nbsp;l&nbsp;&nbsp;m&nbsp;&nbsp;l&nbsp;&nbsp;l&nbsp;&nbsp;l&nbsp;&nbsp;k&nbsp;&nbsp;j&nbsp;&nbsp;k&nbsp;&nbsp;o&nbsp;&nbsp;m&nbsp;&nbsp;i&nbsp;&nbsp;i&nbsp;&nbsp;i</spanx></c>
2067 </texttable>
2068
2069 <t>
2070 Decoding the second stage residual proceeds as follows.
2071 For each coefficient, the decoder reads a symbol using the PDF corresponding to
2072  I1 from either <xref target="silk_nlsf_nbmb_stage2_cb_sel"/> or
2073  <xref target="silk_nlsf_wb_stage2_cb_sel"/>, and subtracts 4 from the result
2074  to give an index in the range -4 to 4, inclusive.
2075 If the index is either -4 or 4, it reads a second symbol using the PDF in
2076  <xref target="silk_nlsf_ext_pdf"/>, and adds the value of this second symbol
2077  to the index, using the same sign.
2078 This gives the index, I2[k], a total range of -10 to 10, inclusive.
2079 </t>
2080
2081 <texttable anchor="silk_nlsf_ext_pdf"
2082  title="PDF for Normalized LSF Index Extension Decoding">
2083 <ttcol align="left">PDF</ttcol>
2084 <c>{156, 60, 24,  9,  4,  2,  1}/256</c>
2085 </texttable>
2086
2087 <t>
2088 The decoded indices from both stages are translated back into normalized LSF
2089  coefficients in silk_NLSF_decode() (silk_NLSF_decode.c).
2090 The stage-2 indices represent residuals after both the first stage of the VQ
2091  and a separate backwards-prediction step.
2092 The backwards prediction process in the encoder subtracts a prediction from
2093  each residual formed by a multiple of the coefficient that follows it.
2094 The decoder must undo this process.
2095 <xref target="silk_nlsf_pred_weights"/> contains lists of prediction weights
2096  for each coefficient.
2097 There are two lists for NB and MB, and another two lists for WB, giving two
2098  possible prediction weights for each coefficient.
2099 </t>
2100
2101 <texttable anchor="silk_nlsf_pred_weights"
2102  title="Prediction Weights for Normalized LSF Decoding">
2103 <ttcol align="left">Coefficient</ttcol>
2104 <ttcol align="right">A</ttcol>
2105 <ttcol align="right">B</ttcol>
2106 <ttcol align="right">C</ttcol>
2107 <ttcol align="right">D</ttcol>
2108  <c>0</c> <c>179</c> <c>116</c> <c>175</c>  <c>68</c>
2109  <c>1</c> <c>138</c>  <c>67</c> <c>148</c>  <c>62</c>
2110  <c>2</c> <c>140</c>  <c>82</c> <c>160</c>  <c>66</c>
2111  <c>3</c> <c>148</c>  <c>59</c> <c>176</c>  <c>60</c>
2112  <c>4</c> <c>151</c>  <c>92</c> <c>178</c>  <c>72</c>
2113  <c>5</c> <c>149</c>  <c>72</c> <c>173</c> <c>117</c>
2114  <c>6</c> <c>153</c> <c>100</c> <c>174</c>  <c>85</c>
2115  <c>7</c> <c>151</c>  <c>89</c> <c>164</c>  <c>90</c>
2116  <c>8</c> <c>163</c>  <c>92</c> <c>177</c> <c>118</c>
2117  <c>9</c> <c/>        <c/>      <c>174</c> <c>136</c>
2118 <c>10</c> <c/>        <c/>      <c>196</c> <c>151</c>
2119 <c>11</c> <c/>        <c/>      <c>182</c> <c>142</c>
2120 <c>12</c> <c/>        <c/>      <c>198</c> <c>160</c>
2121 <c>13</c> <c/>        <c/>      <c>192</c> <c>142</c>
2122 <c>14</c> <c/>        <c/>      <c>182</c> <c>155</c>
2123 </texttable>
2124
2125 <t>
2126 The prediction is undone using the procedure implemented in
2127  silk_NLSF_residual_dequant() (silk_NLSF_decode.c), which is as follows.
2128 Each coefficient selects its prediction weight from one of the two lists based
2129  on the stage-1 index, I1.
2130 <xref target="silk_nlsf_nbmb_weight_sel"/> gives the selections for each
2131  coefficient for NB and MB, and <xref target="silk_nlsf_wb_weight_sel"/> gives
2132  the selections for WB.
2133 Let d_LPC be the order of the codebook, i.e., 10 for NB and MB, and 16 for WB,
2134  and let pred_Q8[k] be the weight for the k'th coefficient selected by this
2135  process for 0&nbsp;&lt;=&nbsp;k&nbsp;&lt;&nbsp;d_LPC-1.
2136 Then, the stage-2 residual for each coefficient is computed via
2137 <figure align="center">
2138 <artwork align="center"><![CDATA[
2139 res_Q10[k] = (k+1 < d_LPC ? (res_Q10[k+1]*pred_Q8[k])>>8 : 0)
2140              + ((((I2[k]<<10) + sign(I2[k])*102)*qstep)>>16) ,
2141 ]]></artwork>
2142 </figure>
2143  where qstep is the Q16 quantization step size, which is 11796 for NB and MB
2144  and 9830 for WB (representing step sizes of approximately 0.18 and 0.15,
2145  respectively).
2146 </t>
2147
2148 <texttable anchor="silk_nlsf_nbmb_weight_sel"
2149  title="Prediction Weight Selection for NB/MB Normalized LSF Decoding">
2150 <ttcol>I1</ttcol>
2151 <ttcol>Coefficient</ttcol>
2152 <c/>
2153 <c><spanx style="vbare">0&nbsp;1&nbsp;2&nbsp;3&nbsp;4&nbsp;5&nbsp;6&nbsp;7&nbsp;8</spanx></c>
2154 <c> 0</c>
2155 <c><spanx style="vbare">A&nbsp;B&nbsp;A&nbsp;A&nbsp;A&nbsp;A&nbsp;A&nbsp;A&nbsp;A</spanx></c>
2156 <c> 1</c>
2157 <c><spanx style="vbare">B&nbsp;A&nbsp;A&nbsp;A&nbsp;A&nbsp;A&nbsp;A&nbsp;A&nbsp;A</spanx></c>
2158 <c> 2</c>
2159 <c><spanx style="vbare">A&nbsp;A&nbsp;A&nbsp;A&nbsp;A&nbsp;A&nbsp;A&nbsp;A&nbsp;A</spanx></c>
2160 <c> 3</c>
2161 <c><spanx style="vbare">B&nbsp;B&nbsp;B&nbsp;A&nbsp;A&nbsp;A&nbsp;A&nbsp;B&nbsp;A</spanx></c>
2162 <c> 4</c>
2163 <c><spanx style="vbare">A&nbsp;B&nbsp;A&nbsp;A&nbsp;A&nbsp;A&nbsp;A&nbsp;A&nbsp;A</spanx></c>
2164 <c> 5</c>
2165 <c><spanx style="vbare">A&nbsp;B&nbsp;A&nbsp;A&nbsp;A&nbsp;A&nbsp;A&nbsp;A&nbsp;A</spanx></c>
2166 <c> 6</c>
2167 <c><spanx style="vbare">B&nbsp;A&nbsp;B&nbsp;B&nbsp;A&nbsp;A&nbsp;A&nbsp;B&nbsp;A</spanx></c>
2168 <c> 7</c>
2169 <c><spanx style="vbare">A&nbsp;B&nbsp;B&nbsp;A&nbsp;A&nbsp;B&nbsp;B&nbsp;A&nbsp;A</spanx></c>
2170 <c> 8</c>
2171 <c><spanx style="vbare">A&nbsp;A&nbsp;B&nbsp;B&nbsp;A&nbsp;B&nbsp;A&nbsp;B&nbsp;B</spanx></c>
2172 <c> 9</c>
2173 <c><spanx style="vbare">A&nbsp;A&nbsp;B&nbsp;B&nbsp;A&nbsp;A&nbsp;B&nbsp;B&nbsp;B</spanx></c>
2174 <c>10</c>
2175 <c><spanx style="vbare">A&nbsp;A&nbsp;A&nbsp;A&nbsp;A&nbsp;A&nbsp;A&nbsp;A&nbsp;A</spanx></c>
2176 <c>11</c>
2177 <c><spanx style="vbare">A&nbsp;B&nbsp;A&nbsp;B&nbsp;B&nbsp;B&nbsp;B&nbsp;B&nbsp;A</spanx></c>
2178 <c>12</c>
2179 <c><spanx style="vbare">A&nbsp;B&nbsp;A&nbsp;B&nbsp;B&nbsp;B&nbsp;B&nbsp;B&nbsp;A</spanx></c>
2180 <c>13</c>
2181 <c><spanx style="vbare">A&nbsp;B&nbsp;B&nbsp;B&nbsp;B&nbsp;B&nbsp;B&nbsp;B&nbsp;A</spanx></c>
2182 <c>14</c>
2183 <c><spanx style="vbare">B&nbsp;A&nbsp;B&nbsp;B&nbsp;A&nbsp;B&nbsp;B&nbsp;B&nbsp;B</spanx></c>
2184 <c>15</c>
2185 <c><spanx style="vbare">A&nbsp;B&nbsp;B&nbsp;B&nbsp;B&nbsp;B&nbsp;A&nbsp;B&nbsp;A</spanx></c>
2186 <c>16</c>
2187 <c><spanx style="vbare">A&nbsp;A&nbsp;B&nbsp;B&nbsp;A&nbsp;B&nbsp;A&nbsp;B&nbsp;A</spanx></c>
2188 <c>17</c>
2189 <c><spanx style="vbare">A&nbsp;A&nbsp;B&nbsp;B&nbsp;B&nbsp;A&nbsp;B&nbsp;B&nbsp;B</spanx></c>
2190 <c>18</c>
2191 <c><spanx style="vbare">A&nbsp;B&nbsp;B&nbsp;A&nbsp;A&nbsp;B&nbsp;B&nbsp;B&nbsp;A</spanx></c>
2192 <c>19</c>
2193 <c><spanx style="vbare">A&nbsp;A&nbsp;A&nbsp;B&nbsp;B&nbsp;B&nbsp;A&nbsp;B&nbsp;A</spanx></c>
2194 <c>20</c>
2195 <c><spanx style="vbare">A&nbsp;B&nbsp;B&nbsp;A&nbsp;A&nbsp;B&nbsp;A&nbsp;B&nbsp;A</spanx></c>
2196 <c>21</c>
2197 <c><spanx style="vbare">A&nbsp;B&nbsp;B&nbsp;A&nbsp;A&nbsp;A&nbsp;B&nbsp;B&nbsp;A</spanx></c>
2198 <c>22</c>
2199 <c><spanx style="vbare">A&nbsp;A&nbsp;A&nbsp;A&nbsp;A&nbsp;B&nbsp;B&nbsp;B&nbsp;B</spanx></c>
2200 <c>23</c>
2201 <c><spanx style="vbare">A&nbsp;A&nbsp;B&nbsp;B&nbsp;A&nbsp;A&nbsp;A&nbsp;B&nbsp;B</spanx></c>
2202 <c>24</c>
2203 <c><spanx style="vbare">A&nbsp;A&nbsp;A&nbsp;B&nbsp;A&nbsp;B&nbsp;B&nbsp;B&nbsp;B</spanx></c>
2204 <c>25</c>
2205 <c><spanx style="vbare">A&nbsp;B&nbsp;B&nbsp;B&nbsp;B&nbsp;B&nbsp;B&nbsp;B&nbsp;A</spanx></c>
2206 <c>26</c>
2207 <c><spanx style="vbare">A&nbsp;A&nbsp;A&nbsp;A&nbsp;A&nbsp;A&nbsp;A&nbsp;A&nbsp;A</spanx></c>
2208 <c>27</c>
2209 <c><spanx style="vbare">A&nbsp;A&nbsp;A&nbsp;A&nbsp;A&nbsp;A&nbsp;A&nbsp;A&nbsp;A</spanx></c>
2210 <c>28</c>
2211 <c><spanx style="vbare">A&nbsp;A&nbsp;B&nbsp;A&nbsp;B&nbsp;B&nbsp;A&nbsp;B&nbsp;A</spanx></c>
2212 <c>29</c>
2213 <c><spanx style="vbare">A&nbsp;A&nbsp;A&nbsp;B&nbsp;A&nbsp;A&nbsp;A&nbsp;A&nbsp;A</spanx></c>
2214 <c>30</c>
2215 <c><spanx style="vbare">A&nbsp;A&nbsp;A&nbsp;B&nbsp;B&nbsp;A&nbsp;B&nbsp;A&nbsp;B</spanx></c>
2216 <c>31</c>
2217 <c><spanx style="vbare">B&nbsp;A&nbsp;B&nbsp;B&nbsp;A&nbsp;B&nbsp;B&nbsp;B&nbsp;B</spanx></c>
2218 </texttable>
2219
2220 <texttable anchor="silk_nlsf_wb_weight_sel"
2221  title="Prediction Weight Selection for WB Normalized LSF Decoding">
2222 <ttcol>I1</ttcol>
2223 <ttcol>Coefficient</ttcol>
2224 <c/>
2225 <c><spanx style="vbare">0&nbsp;&nbsp;1&nbsp;&nbsp;2&nbsp;&nbsp;3&nbsp;&nbsp;4&nbsp;&nbsp;5&nbsp;&nbsp;6&nbsp;&nbsp;7&nbsp;&nbsp;8&nbsp;&nbsp;9&nbsp;10&nbsp;11&nbsp;12&nbsp;13&nbsp;14</spanx></c>
2226 <c> 0</c>
2227 <c><spanx style="vbare">C&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;D</spanx></c>
2228 <c> 1</c>
2229 <c><spanx style="vbare">C&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;C</spanx></c>
2230 <c> 2</c>
2231 <c><spanx style="vbare">C&nbsp;&nbsp;C&nbsp;&nbsp;D&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;D&nbsp;&nbsp;D&nbsp;&nbsp;D&nbsp;&nbsp;C&nbsp;&nbsp;D&nbsp;&nbsp;D&nbsp;&nbsp;D&nbsp;&nbsp;D&nbsp;&nbsp;C&nbsp;&nbsp;C</spanx></c>
2232 <c> 3</c>
2233 <c><spanx style="vbare">C&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;D&nbsp;&nbsp;C&nbsp;&nbsp;C</spanx></c>
2234 <c> 4</c>
2235 <c><spanx style="vbare">C&nbsp;&nbsp;D&nbsp;&nbsp;D&nbsp;&nbsp;C&nbsp;&nbsp;D&nbsp;&nbsp;C&nbsp;&nbsp;D&nbsp;&nbsp;D&nbsp;&nbsp;C&nbsp;&nbsp;D&nbsp;&nbsp;D&nbsp;&nbsp;D&nbsp;&nbsp;D&nbsp;&nbsp;D&nbsp;&nbsp;C</spanx></c>
2236 <c> 5</c>
2237 <c><spanx style="vbare">C&nbsp;&nbsp;D&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;C</spanx></c>
2238 <c> 6</c>
2239 <c><spanx style="vbare">D&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;D&nbsp;&nbsp;C&nbsp;&nbsp;D&nbsp;&nbsp;C</spanx></c>
2240 <c> 7</c>
2241 <c><spanx style="vbare">C&nbsp;&nbsp;D&nbsp;&nbsp;D&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;D&nbsp;&nbsp;C&nbsp;&nbsp;D&nbsp;&nbsp;D&nbsp;&nbsp;D&nbsp;&nbsp;C&nbsp;&nbsp;D&nbsp;&nbsp;C&nbsp;&nbsp;D</spanx></c>
2242 <c> 8</c>
2243 <c><spanx style="vbare">C&nbsp;&nbsp;D&nbsp;&nbsp;C&nbsp;&nbsp;D&nbsp;&nbsp;D&nbsp;&nbsp;C&nbsp;&nbsp;D&nbsp;&nbsp;C&nbsp;&nbsp;D&nbsp;&nbsp;C&nbsp;&nbsp;D&nbsp;&nbsp;D&nbsp;&nbsp;D&nbsp;&nbsp;D&nbsp;&nbsp;D</spanx></c>
2244 <c> 9</c>
2245 <c><spanx style="vbare">C&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;D</spanx></c>
2246 <c>10</c>
2247 <c><spanx style="vbare">C&nbsp;&nbsp;D&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;C</spanx></c>
2248 <c>11</c>
2249 <c><spanx style="vbare">C&nbsp;&nbsp;C&nbsp;&nbsp;D&nbsp;&nbsp;C&nbsp;&nbsp;D&nbsp;&nbsp;D&nbsp;&nbsp;D&nbsp;&nbsp;D&nbsp;&nbsp;D&nbsp;&nbsp;D&nbsp;&nbsp;D&nbsp;&nbsp;C&nbsp;&nbsp;D&nbsp;&nbsp;C&nbsp;&nbsp;C</spanx></c>
2250 <c>12</c>
2251 <c><spanx style="vbare">C&nbsp;&nbsp;C&nbsp;&nbsp;D&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;D&nbsp;&nbsp;C&nbsp;&nbsp;D&nbsp;&nbsp;C&nbsp;&nbsp;D&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;D&nbsp;&nbsp;C&nbsp;&nbsp;C</spanx></c>
2252 <c>13</c>
2253 <c><spanx style="vbare">C&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;D&nbsp;&nbsp;D&nbsp;&nbsp;C&nbsp;&nbsp;D&nbsp;&nbsp;C&nbsp;&nbsp;D&nbsp;&nbsp;D&nbsp;&nbsp;D&nbsp;&nbsp;D&nbsp;&nbsp;C&nbsp;&nbsp;C</spanx></c>
2254 <c>14</c>
2255 <c><spanx style="vbare">C&nbsp;&nbsp;D&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;D&nbsp;&nbsp;D&nbsp;&nbsp;C&nbsp;&nbsp;D&nbsp;&nbsp;D&nbsp;&nbsp;D&nbsp;&nbsp;C&nbsp;&nbsp;D&nbsp;&nbsp;D&nbsp;&nbsp;D</spanx></c>
2256 <c>15</c>
2257 <c><spanx style="vbare">C&nbsp;&nbsp;C&nbsp;&nbsp;D&nbsp;&nbsp;D&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;D&nbsp;&nbsp;D&nbsp;&nbsp;C</spanx></c>
2258 <c>16</c>
2259 <c><spanx style="vbare">C&nbsp;&nbsp;D&nbsp;&nbsp;D&nbsp;&nbsp;C&nbsp;&nbsp;D&nbsp;&nbsp;C&nbsp;&nbsp;D&nbsp;&nbsp;D&nbsp;&nbsp;D&nbsp;&nbsp;D&nbsp;&nbsp;D&nbsp;&nbsp;C&nbsp;&nbsp;D&nbsp;&nbsp;C&nbsp;&nbsp;C</spanx></c>
2260 <c>17</c>
2261 <c><spanx style="vbare">C&nbsp;&nbsp;C&nbsp;&nbsp;D&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;D&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;D&nbsp;&nbsp;D&nbsp;&nbsp;D&nbsp;&nbsp;C&nbsp;&nbsp;C</spanx></c>
2262 <c>18</c>
2263 <c><spanx style="vbare">C&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;D</spanx></c>
2264 <c>19</c>
2265 <c><spanx style="vbare">C&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;D&nbsp;&nbsp;C&nbsp;&nbsp;C</spanx></c>
2266 <c>20</c>
2267 <c><spanx style="vbare">C&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;C</spanx></c>
2268 <c>21</c>
2269 <c><spanx style="vbare">C&nbsp;&nbsp;D&nbsp;&nbsp;C&nbsp;&nbsp;D&nbsp;&nbsp;C&nbsp;&nbsp;D&nbsp;&nbsp;D&nbsp;&nbsp;C&nbsp;&nbsp;D&nbsp;&nbsp;C&nbsp;&nbsp;D&nbsp;&nbsp;C&nbsp;&nbsp;D&nbsp;&nbsp;D&nbsp;&nbsp;C</spanx></c>
2270 <c>22</c>
2271 <c><spanx style="vbare">C&nbsp;&nbsp;C&nbsp;&nbsp;D&nbsp;&nbsp;D&nbsp;&nbsp;D&nbsp;&nbsp;D&nbsp;&nbsp;C&nbsp;&nbsp;D&nbsp;&nbsp;D&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;D&nbsp;&nbsp;D&nbsp;&nbsp;C&nbsp;&nbsp;C</spanx></c>
2272 <c>23</c>
2273 <c><spanx style="vbare">C&nbsp;&nbsp;D&nbsp;&nbsp;D&nbsp;&nbsp;C&nbsp;&nbsp;D&nbsp;&nbsp;C&nbsp;&nbsp;D&nbsp;&nbsp;C&nbsp;&nbsp;D&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;D&nbsp;&nbsp;C</spanx></c>
2274 <c>24</c>
2275 <c><spanx style="vbare">C&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;D&nbsp;&nbsp;D&nbsp;&nbsp;C&nbsp;&nbsp;D&nbsp;&nbsp;C&nbsp;&nbsp;D&nbsp;&nbsp;D&nbsp;&nbsp;D&nbsp;&nbsp;D&nbsp;&nbsp;D&nbsp;&nbsp;D&nbsp;&nbsp;D</spanx></c>
2276 <c>25</c>
2277 <c><spanx style="vbare">C&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;D</spanx></c>
2278 <c>26</c>
2279 <c><spanx style="vbare">C&nbsp;&nbsp;D&nbsp;&nbsp;D&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;D&nbsp;&nbsp;D&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;D&nbsp;&nbsp;D&nbsp;&nbsp;D&nbsp;&nbsp;D&nbsp;&nbsp;D</spanx></c>
2280 <c>27</c>
2281 <c><spanx style="vbare">C&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;D&nbsp;&nbsp;C&nbsp;&nbsp;D&nbsp;&nbsp;D&nbsp;&nbsp;D&nbsp;&nbsp;D&nbsp;&nbsp;C&nbsp;&nbsp;D&nbsp;&nbsp;D&nbsp;&nbsp;D</spanx></c>
2282 <c>28</c>
2283 <c><spanx style="vbare">C&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;D</spanx></c>
2284 <c>29</c>
2285 <c><spanx style="vbare">C&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;D</spanx></c>
2286 <c>30</c>
2287 <c><spanx style="vbare">D&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;D&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;C</spanx></c>
2288 <c>31</c>
2289 <c><spanx style="vbare">C&nbsp;&nbsp;C&nbsp;&nbsp;D&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;D&nbsp;&nbsp;D&nbsp;&nbsp;D&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;D&nbsp;&nbsp;C&nbsp;&nbsp;C&nbsp;&nbsp;D&nbsp;&nbsp;C</spanx></c>
2290 </texttable>
2291
2292 </section>
2293
2294 <section anchor="silk_nlsf_reconstruction"
2295  title="Reconstructing the Normalized LSF Coefficients">
2296 <t>
2297 Once the stage-1 index I1 and the stage-2 residual res_Q10[] have been decoded,
2298  the final normalized LSF coefficients can be reconstructed.
2299 </t>
2300 <t>
2301 The spectral distortion introduced by the quantization of each LSF coefficient
2302  varies, so the stage-2 residual is weighted accordingly, using the
2303  low-complexity Inverse Harmonic Mean Weighting (IHMW) function proposed in
2304  <xref target="laroia-icassp"/>.
2305 The weights are derived directly from the stage-1 codebook vector.
2306 Let cb1_Q8[k] be the k'th entry of the stage-1 codebook vector from
2307  <xref target="silk_nlsf_nbmb_codebook"/> or
2308  <xref target="silk_nlsf_wb_codebook"/>.
2309 Then for 0&nbsp;&lt;=&nbsp;k&nbsp;&lt;&nbsp;d_LPC the following expression
2310  computes the square of the weight as a Q18 value:
2311 <figure align="center">
2312 <artwork align="center">
2313 <![CDATA[
2314 w2_Q18[k] = (1024/(cb1_Q8[k] - cb1_Q8[k-1])
2315              + 1024/(cb1_Q8[k+1] - cb1_Q8[k])) << 16 ,
2316 ]]>
2317 </artwork>
2318 </figure>
2319  where cb1_Q8[-1]&nbsp;=&nbsp;0 and cb1_Q8[d_LPC]&nbsp;=&nbsp;256, and the
2320  division is exact integer division.
2321 This is reduced to an unsquared, Q9 value using the following square-root
2322  approximation:
2323 <figure align="center">
2324 <artwork align="center"><![CDATA[
2325 i = ilog(w2_Q18[k])
2326 f = (w2_Q18[k]>>(i-8)) & 127
2327 y = ((i&1) ? 32768 : 46214) >> ((32-i)>>1)
2328 w_Q9[k] = y + ((213*f*y)>>16)
2329 ]]></artwork>
2330 </figure>
2331 The cb1_Q8[] vector completely determines these weights, and they may be
2332  tabulated and stored as 13-bit unsigned values (with a range of 1819 to 5227,
2333  inclusive) to avoid computing them when decoding.
2334 The reference implementation already requires code to compute these weights on
2335  unquantized coefficients in the encoder, in silk_NLSF_VQ_weights_laroia()
2336  (silk_NLSF_VQ_weights_laroia.c) and its callers, so it reuses that code in the
2337  decoder instead of using a pre-computed table to reduce the amount of ROM
2338  required.
2339 </t>
2340
2341 <texttable anchor="silk_nlsf_nbmb_codebook"
2342            title="Codebook Vectors for NB/MB Normalized LSF Stage 1 Decoding">
2343 <ttcol>I1</ttcol>
2344 <ttcol>Codebook (Q8)</ttcol>
2345 <c/>
2346 <c><spanx style="vbare">&nbsp;0&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;7&nbsp;&nbsp;&nbsp;8&nbsp;&nbsp;&nbsp;9</spanx></c>
2347 <c>0</c>
2348 <c><spanx style="vbare">12&nbsp;&nbsp;35&nbsp;&nbsp;60&nbsp;&nbsp;83&nbsp;108&nbsp;132&nbsp;157&nbsp;180&nbsp;206&nbsp;228</spanx></c>
2349 <c>1</c>
2350 <c><spanx style="vbare">15&nbsp;&nbsp;32&nbsp;&nbsp;55&nbsp;&nbsp;77&nbsp;101&nbsp;125&nbsp;151&nbsp;175&nbsp;201&nbsp;225</spanx></c>
2351 <c>2</c>
2352 <c><spanx style="vbare">19&nbsp;&nbsp;42&nbsp;&nbsp;66&nbsp;&nbsp;89&nbsp;114&nbsp;137&nbsp;162&nbsp;184&nbsp;209&nbsp;230</spanx></c>
2353 <c>3</c>
2354 <c><spanx style="vbare">12&nbsp;&nbsp;25&nbsp;&nbsp;50&nbsp;&nbsp;72&nbsp;&nbsp;97&nbsp;120&nbsp;147&nbsp;172&nbsp;200&nbsp;223</spanx></c>
2355 <c>4</c>
2356 <c><spanx style="vbare">26&nbsp;&nbsp;44&nbsp;&nbsp;69&nbsp;&nbsp;90&nbsp;114&nbsp;135&nbsp;159&nbsp;180&nbsp;205&nbsp;225</spanx></c>
2357 <c>5</c>
2358 <c><spanx style="vbare">13&nbsp;&nbsp;22&nbsp;&nbsp;53&nbsp;&nbsp;80&nbsp;106&nbsp;130&nbsp;156&nbsp;180&nbsp;205&nbsp;228</spanx></c>
2359 <c>6</c>
2360 <c><spanx style="vbare">15&nbsp;&nbsp;25&nbsp;&nbsp;44&nbsp;&nbsp;64&nbsp;&nbsp;90&nbsp;115&nbsp;142&nbsp;168&nbsp;196&nbsp;222</spanx></c>
2361 <c>7</c>
2362 <c><spanx style="vbare">19&nbsp;&nbsp;24&nbsp;&nbsp;62&nbsp;&nbsp;82&nbsp;100&nbsp;120&nbsp;145&nbsp;168&nbsp;190&nbsp;214</spanx></c>
2363 <c>8</c>
2364 <c><spanx style="vbare">22&nbsp;&nbsp;31&nbsp;&nbsp;50&nbsp;&nbsp;79&nbsp;103&nbsp;120&nbsp;151&nbsp;170&nbsp;203&nbsp;227</spanx></c>
2365 <c>9</c>
2366 <c><spanx style="vbare">21&nbsp;&nbsp;29&nbsp;&nbsp;45&nbsp;&nbsp;65&nbsp;106&nbsp;124&nbsp;150&nbsp;171&nbsp;196&nbsp;224</spanx></c>
2367 <c>10</c>
2368 <c><spanx style="vbare">30&nbsp;&nbsp;49&nbsp;&nbsp;75&nbsp;&nbsp;97&nbsp;121&nbsp;142&nbsp;165&nbsp;186&nbsp;209&nbsp;229</spanx></c>
2369 <c>11</c>
2370 <c><spanx style="vbare">19&nbsp;&nbsp;25&nbsp;&nbsp;52&nbsp;&nbsp;70&nbsp;&nbsp;93&nbsp;116&nbsp;143&nbsp;166&nbsp;192&nbsp;219</spanx></c>
2371 <c>12</c>
2372 <c><spanx style="vbare">26&nbsp;&nbsp;34&nbsp;&nbsp;62&nbsp;&nbsp;75&nbsp;&nbsp;97&nbsp;118&nbsp;145&nbsp;167&nbsp;194&nbsp;217</spanx></c>
2373 <c>13</c>
2374 <c><spanx style="vbare">25&nbsp;&nbsp;33&nbsp;&nbsp;56&nbsp;&nbsp;70&nbsp;&nbsp;91&nbsp;113&nbsp;143&nbsp;165&nbsp;196&nbsp;223</spanx></c>
2375 <c>14</c>
2376 <c><spanx style="vbare">21&nbsp;&nbsp;34&nbsp;&nbsp;51&nbsp;&nbsp;72&nbsp;&nbsp;97&nbsp;117&nbsp;145&nbsp;171&nbsp;196&nbsp;222</spanx></c>
2377 <c>15</c>
2378 <c><spanx style="vbare">20&nbsp;&nbsp;29&nbsp;&nbsp;50&nbsp;&nbsp;67&nbsp;&nbsp;90&nbsp;117&nbsp;144&nbsp;168&nbsp;197&nbsp;221</spanx></c>
2379 <c>16</c>
2380 <c><spanx style="vbare">22&nbsp;&nbsp;31&nbsp;&nbsp;48&nbsp;&nbsp;66&nbsp;&nbsp;95&nbsp;117&nbsp;146&nbsp;168&nbsp;196&nbsp;222</spanx></c>
2381 <c>17</c>
2382 <c><spanx style="vbare">24&nbsp;&nbsp;33&nbsp;&nbsp;51&nbsp;&nbsp;77&nbsp;116&nbsp;134&nbsp;158&nbsp;180&nbsp;200&nbsp;224</spanx></c>
2383 <c>18</c>
2384 <c><spanx style="vbare">21&nbsp;&nbsp;28&nbsp;&nbsp;70&nbsp;&nbsp;87&nbsp;106&nbsp;124&nbsp;149&nbsp;170&nbsp;194&nbsp;217</spanx></c>
2385 <c>19</c>
2386 <c><spanx style="vbare">26&nbsp;&nbsp;33&nbsp;&nbsp;53&nbsp;&nbsp;64&nbsp;&nbsp;83&nbsp;117&nbsp;152&nbsp;173&nbsp;204&nbsp;225</spanx></c>
2387 <c>20</c>
2388 <c><spanx style="vbare">27&nbsp;&nbsp;34&nbsp;&nbsp;65&nbsp;&nbsp;95&nbsp;108&nbsp;129&nbsp;155&nbsp;174&nbsp;210&nbsp;225</spanx></c>
2389 <c>21</c>
2390 <c><spanx style="vbare">20&nbsp;&nbsp;26&nbsp;&nbsp;72&nbsp;&nbsp;99&nbsp;113&nbsp;131&nbsp;154&nbsp;176&nbsp;200&nbsp;219</spanx></c>
2391 <c>22</c>
2392 <c><spanx style="vbare">34&nbsp;&nbsp;43&nbsp;&nbsp;61&nbsp;&nbsp;78&nbsp;&nbsp;93&nbsp;114&nbsp;155&nbsp;177&nbsp;205&nbsp;229</spanx></c>
2393 <c>23</c>
2394 <c><spanx style="vbare">23&nbsp;&nbsp;29&nbsp;&nbsp;54&nbsp;&nbsp;97&nbsp;124&nbsp;138&nbsp;163&nbsp;179&nbsp;209&nbsp;229</spanx></c>
2395 <c>24</c>
2396 <c><spanx style="vbare">30&nbsp;&nbsp;38&nbsp;&nbsp;56&nbsp;&nbsp;89&nbsp;118&nbsp;129&nbsp;158&nbsp;178&nbsp;200&nbsp;231</spanx></c>
2397 <c>25</c>
2398 <c><spanx style="vbare">21&nbsp;&nbsp;29&nbsp;&nbsp;49&nbsp;&nbsp;63&nbsp;&nbsp;85&nbsp;111&nbsp;142&nbsp;163&nbsp;193&nbsp;222</spanx></c>
2399 <c>26</c>
2400 <c><spanx style="vbare">27&nbsp;&nbsp;48&nbsp;&nbsp;77&nbsp;103&nbsp;133&nbsp;158&nbsp;179&nbsp;196&nbsp;215&nbsp;232</spanx></c>
2401 <c>27</c>
2402 <c><spanx style="vbare">29&nbsp;&nbsp;47&nbsp;&nbsp;74&nbsp;&nbsp;99&nbsp;124&nbsp;151&nbsp;176&nbsp;198&nbsp;220&nbsp;237</spanx></c>
2403 <c>28</c>
2404 <c><spanx style="vbare">33&nbsp;&nbsp;42&nbsp;&nbsp;61&nbsp;&nbsp;76&nbsp;&nbsp;93&nbsp;121&nbsp;155&nbsp;174&nbsp;207&nbsp;225</spanx></c>
2405 <c>29</c>
2406 <c><spanx style="vbare">29&nbsp;&nbsp;53&nbsp;&nbsp;87&nbsp;112&nbsp;136&nbsp;154&nbsp;170&nbsp;188&nbsp;208&nbsp;227</spanx></c>
2407 <c>30</c>
2408 <c><spanx style="vbare">24&nbsp;&nbsp;30&nbsp;&nbsp;52&nbsp;&nbsp;84&nbsp;131&nbsp;150&nbsp;166&nbsp;186&nbsp;203&nbsp;229</spanx></c>
2409 <c>31</c>
2410 <c><spanx style="vbare">37&nbsp;&nbsp;48&nbsp;&nbsp;64&nbsp;&nbsp;84&nbsp;104&nbsp;118&nbsp;156&nbsp;177&nbsp;201&nbsp;230</spanx></c>
2411 </texttable>
2412
2413 <texttable anchor="silk_nlsf_wb_codebook"
2414            title="Codebook Vectors for WB Normalized LSF Stage 1 Decoding">
2415 <ttcol>I1</ttcol>
2416 <ttcol>Codebook (Q8)</ttcol>
2417 <c/>
2418 <c><spanx style="vbare">&nbsp;0&nbsp;&nbsp;1&nbsp;&nbsp;2&nbsp;&nbsp;3&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;7&nbsp;&nbsp;&nbsp;8&nbsp;&nbsp;&nbsp;9&nbsp;&nbsp;10&nbsp;&nbsp;11&nbsp;&nbsp;12&nbsp;&nbsp;13&nbsp;&nbsp;14&nbsp;&nbsp;15</spanx></c>
2419 <c>0</c>
2420 <c><spanx style="vbare">&nbsp;7&nbsp;23&nbsp;38&nbsp;54&nbsp;69&nbsp;&nbsp;85&nbsp;100&nbsp;116&nbsp;131&nbsp;147&nbsp;162&nbsp;178&nbsp;193&nbsp;208&nbsp;223&nbsp;239</spanx></c>
2421 <c>1</c>
2422 <c><spanx style="vbare">13&nbsp;25&nbsp;41&nbsp;55&nbsp;69&nbsp;&nbsp;83&nbsp;&nbsp;98&nbsp;112&nbsp;127&nbsp;142&nbsp;157&nbsp;171&nbsp;187&nbsp;203&nbsp;220&nbsp;236</spanx></c>
2423 <c>2</c>
2424 <c><spanx style="vbare">15&nbsp;21&nbsp;34&nbsp;51&nbsp;61&nbsp;&nbsp;78&nbsp;&nbsp;92&nbsp;106&nbsp;126&nbsp;136&nbsp;152&nbsp;167&nbsp;185&nbsp;205&nbsp;225&nbsp;240</spanx></c>
2425 <c>3</c>
2426 <c><spanx style="vbare">10&nbsp;21&nbsp;36&nbsp;50&nbsp;63&nbsp;&nbsp;79&nbsp;&nbsp;95&nbsp;110&nbsp;126&nbsp;141&nbsp;157&nbsp;173&nbsp;189&nbsp;205&nbsp;221&nbsp;237</spanx></c>
2427 <c>4</c>
2428 <c><spanx style="vbare">17&nbsp;20&nbsp;37&nbsp;51&nbsp;59&nbsp;&nbsp;78&nbsp;&nbsp;89&nbsp;107&nbsp;123&nbsp;134&nbsp;150&nbsp;164&nbsp;184&nbsp;205&nbsp;224&nbsp;240</spanx></c>
2429 <c>5</c>
2430 <c><spanx style="vbare">10&nbsp;15&nbsp;32&nbsp;51&nbsp;67&nbsp;&nbsp;81&nbsp;&nbsp;96&nbsp;112&nbsp;129&nbsp;142&nbsp;158&nbsp;173&nbsp;189&nbsp;204&nbsp;220&nbsp;236</spanx></c>
2431 <c>6</c>
2432 <c><spanx style="vbare">&nbsp;8&nbsp;21&nbsp;37&nbsp;51&nbsp;65&nbsp;&nbsp;79&nbsp;&nbsp;98&nbsp;113&nbsp;126&nbsp;138&nbsp;155&nbsp;168&nbsp;179&nbsp;192&nbsp;209&nbsp;218</spanx></c>
2433 <c>7</c>
2434 <c><spanx style="vbare">12&nbsp;15&nbsp;34&nbsp;55&nbsp;63&nbsp;&nbsp;78&nbsp;&nbsp;87&nbsp;108&nbsp;118&nbsp;131&nbsp;148&nbsp;167&nbsp;185&nbsp;203&nbsp;219&nbsp;236</spanx></c>
2435 <c>8</c>
2436 <c><spanx style="vbare">16&nbsp;19&nbsp;32&nbsp;36&nbsp;56&nbsp;&nbsp;79&nbsp;&nbsp;91&nbsp;108&nbsp;118&nbsp;136&nbsp;154&nbsp;171&nbsp;186&nbsp;204&nbsp;220&nbsp;237</spanx></c>
2437 <c>9</c>
2438 <c><spanx style="vbare">11&nbsp;28&nbsp;43&nbsp;58&nbsp;74&nbsp;&nbsp;89&nbsp;105&nbsp;120&nbsp;135&nbsp;150&nbsp;165&nbsp;180&nbsp;196&nbsp;211&nbsp;226&nbsp;241</spanx></c>
2439 <c>10</c>
2440 <c><spanx style="vbare">&nbsp;6&nbsp;16&nbsp;33&nbsp;46&nbsp;60&nbsp;&nbsp;75&nbsp;&nbsp;92&nbsp;107&nbsp;123&nbsp;137&nbsp;156&nbsp;169&nbsp;185&nbsp;199&nbsp;214&nbsp;225</spanx></c>
2441 <c>11</c>
2442 <c><spanx style="vbare">11&nbsp;19&nbsp;30&nbsp;44&nbsp;57&nbsp;&nbsp;74&nbsp;&nbsp;89&nbsp;105&nbsp;121&nbsp;135&nbsp;152&nbsp;169&nbsp;186&nbsp;202&nbsp;218&nbsp;234</spanx></c>
2443 <c>12</c>
2444 <c><spanx style="vbare">12&nbsp;19&nbsp;29&nbsp;46&nbsp;57&nbsp;&nbsp;71&nbsp;&nbsp;88&nbsp;100&nbsp;120&nbsp;132&nbsp;148&nbsp;165&nbsp;182&nbsp;199&nbsp;216&nbsp;233</spanx></c>
2445 <c>13</c>
2446 <c><spanx style="vbare">17&nbsp;23&nbsp;35&nbsp;46&nbsp;56&nbsp;&nbsp;77&nbsp;&nbsp;92&nbsp;106&nbsp;123&nbsp;134&nbsp;152&nbsp;167&nbsp;185&nbsp;204&nbsp;222&nbsp;237</spanx></c>
2447 <c>14</c>
2448 <c><spanx style="vbare">14&nbsp;17&nbsp;45&nbsp;53&nbsp;63&nbsp;&nbsp;75&nbsp;&nbsp;89&nbsp;107&nbsp;115&nbsp;132&nbsp;151&nbsp;171&nbsp;188&nbsp;206&nbsp;221&nbsp;240</spanx></c>
2449 <c>15</c>
2450 <c><spanx style="vbare">&nbsp;9&nbsp;16&nbsp;29&nbsp;40&nbsp;56&nbsp;&nbsp;71&nbsp;&nbsp;88&nbsp;103&nbsp;119&nbsp;137&nbsp;154&nbsp;171&nbsp;189&nbsp;205&nbsp;222&nbsp;237</spanx></c>
2451 <c>16</c>
2452 <c><spanx style="vbare">16&nbsp;19&nbsp;36&nbsp;48&nbsp;57&nbsp;&nbsp;76&nbsp;&nbsp;87&nbsp;105&nbsp;118&nbsp;132&nbsp;150&nbsp;167&nbsp;185&nbsp;202&nbsp;218&nbsp;236</spanx></c>
2453 <c>17</c>
2454 <c><spanx style="vbare">12&nbsp;17&nbsp;29&nbsp;54&nbsp;71&nbsp;&nbsp;81&nbsp;&nbsp;94&nbsp;104&nbsp;126&nbsp;136&nbsp;149&nbsp;164&nbsp;182&nbsp;201&nbsp;221&nbsp;237</spanx></c>
2455 <c>18</c>
2456 <c><spanx style="vbare">15&nbsp;28&nbsp;47&nbsp;62&nbsp;79&nbsp;&nbsp;97&nbsp;115&nbsp;129&nbsp;142&nbsp;155&nbsp;168&nbsp;180&nbsp;194&nbsp;208&nbsp;223&nbsp;238</spanx></c>
2457 <c>19</c>
2458 <c><spanx style="vbare">&nbsp;8&nbsp;14&nbsp;30&nbsp;45&nbsp;62&nbsp;&nbsp;78&nbsp;&nbsp;94&nbsp;111&nbsp;127&nbsp;143&nbsp;159&nbsp;175&nbsp;192&nbsp;207&nbsp;223&nbsp;239</spanx></c>
2459 <c>20</c>
2460 <c><spanx style="vbare">17&nbsp;30&nbsp;49&nbsp;62&nbsp;79&nbsp;&nbsp;92&nbsp;107&nbsp;119&nbsp;132&nbsp;145&nbsp;160&nbsp;174&nbsp;190&nbsp;204&nbsp;220&nbsp;235</spanx></c>
2461 <c>21</c>
2462 <c><spanx style="vbare">14&nbsp;19&nbsp;36&nbsp;45&nbsp;61&nbsp;&nbsp;76&nbsp;&nbsp;91&nbsp;108&nbsp;121&nbsp;138&nbsp;154&nbsp;172&nbsp;189&nbsp;205&nbsp;222&nbsp;238</spanx></c>
2463 <c>22</c>
2464 <c><spanx style="vbare">12&nbsp;18&nbsp;31&nbsp;45&nbsp;60&nbsp;&nbsp;76&nbsp;&nbsp;91&nbsp;107&nbsp;123&nbsp;138&nbsp;154&nbsp;171&nbsp;187&nbsp;204&nbsp;221&nbsp;236</spanx></c>
2465 <c>23</c>
2466 <c><spanx style="vbare">13&nbsp;17&nbsp;31&nbsp;43&nbsp;53&nbsp;&nbsp;70&nbsp;&nbsp;83&nbsp;103&nbsp;114&nbsp;131&nbsp;149&nbsp;167&nbsp;185&nbsp;203&nbsp;220&nbsp;237</spanx></c>
2467 <c>24</c>
2468 <c><spanx style="vbare">17&nbsp;22&nbsp;35&nbsp;42&nbsp;58&nbsp;&nbsp;78&nbsp;&nbsp;93&nbsp;110&nbsp;125&nbsp;139&nbsp;155&nbsp;170&nbsp;188&nbsp;206&nbsp;224&nbsp;240</spanx></c>
2469 <c>25</c>
2470 <c><spanx style="vbare">&nbsp;8&nbsp;15&nbsp;34&nbsp;50&nbsp;67&nbsp;&nbsp;83&nbsp;&nbsp;99&nbsp;115&nbsp;131&nbsp;146&nbsp;162&nbsp;178&nbsp;193&nbsp;209&nbsp;224&nbsp;239</spanx></c>
2471 <c>26</c>
2472 <c><spanx style="vbare">13&nbsp;16&nbsp;41&nbsp;66&nbsp;73&nbsp;&nbsp;86&nbsp;&nbsp;95&nbsp;111&nbsp;128&nbsp;137&nbsp;150&nbsp;163&nbsp;183&nbsp;206&nbsp;225&nbsp;241</spanx></c>
2473 <c>27</c>
2474 <c><spanx style="vbare">17&nbsp;25&nbsp;37&nbsp;52&nbsp;63&nbsp;&nbsp;75&nbsp;&nbsp;92&nbsp;102&nbsp;119&nbsp;132&nbsp;144&nbsp;160&nbsp;175&nbsp;191&nbsp;212&nbsp;231</spanx></c>
2475 <c>28</c>
2476 <c><spanx style="vbare">19&nbsp;31&nbsp;49&nbsp;65&nbsp;83&nbsp;100&nbsp;117&nbsp;133&nbsp;147&nbsp;161&nbsp;174&nbsp;187&nbsp;200&nbsp;213&nbsp;227&nbsp;242</spanx></c>
2477 <c>29</c>
2478 <c><spanx style="vbare">18&nbsp;31&nbsp;52&nbsp;68&nbsp;88&nbsp;103&nbsp;117&nbsp;126&nbsp;138&nbsp;149&nbsp;163&nbsp;177&nbsp;192&nbsp;207&nbsp;223&nbsp;239</spanx></c>
2479 <c>30</c>
2480 <c><spanx style="vbare">16&nbsp;29&nbsp;47&nbsp;61&nbsp;76&nbsp;&nbsp;90&nbsp;106&nbsp;119&nbsp;133&nbsp;147&nbsp;161&nbsp;176&nbsp;193&nbsp;209&nbsp;224&nbsp;240</spanx></c>
2481 <c>31</c>
2482 <c><spanx style="vbare">15&nbsp;21&nbsp;35&nbsp;50&nbsp;61&nbsp;&nbsp;73&nbsp;&nbsp;86&nbsp;&nbsp;97&nbsp;110&nbsp;119&nbsp;129&nbsp;141&nbsp;175&nbsp;198&nbsp;218&nbsp;237</spanx></c>
2483 </texttable>
2484
2485 <t>
2486 Given the stage-1 codebook entry cb1_Q8[], the stage-2 residual res_Q10[], and
2487  their corresponding weights, w_Q9[], the reconstructed normalized LSF
2488  coefficients are
2489 <figure align="center">
2490 <artwork align="center"><![CDATA[
2491 NLSF_Q15[k] = (cb1_Q8[k]<<7) + (res_Q10[k]<<14)/w_Q9[k] ,
2492 ]]></artwork>
2493 </figure>
2494  where the division is exact integer division.
2495 However, nothing in either the reconstruction process or the
2496  quantization process in the encoder thus far guarantees that the coefficients
2497  are monotonically increasing and separated well enough to ensure a stable
2498  filter.
2499 When using the reference encoder, roughly 2% of frames violate this constraint.
2500 The next section describes a stabilization procedure used to make these
2501  guarantees.
2502 </t>
2503
2504 </section>
2505
2506 <section anchor="silk_nlsf_stabilization" title="Normalized LSF Stabilization">
2507 <t>
2508 The normalized LSF stabilization procedure is implemented in
2509  silk_NLSF_stabilize() (silk_NLSF_stabilize.c).
2510 This process ensures that consecutive values of the normalized LSF
2511  coefficients, NLSF_Q15[], are spaced some minimum distance apart
2512  (predetermined to be the 0.01 percentile of a large training set).
2513 <xref target="silk_nlsf_min_spacing"/> gives the minimum spacings for NB and MB
2514  and those for WB, where row k is the minimum allowed value of
2515  NLSF_Q[k]-NLSF_Q[k-1].
2516 For the purposes of computing this spacing for the first and last coefficient,
2517  NLSF_Q15[-1] is taken to be 0, and NLSF_Q15[d_LPC] is taken to be 32768.
2518 </t>
2519
2520 <texttable anchor="silk_nlsf_min_spacing"
2521            title="Minimum Spacing for Normalized LSF Coefficients">
2522 <ttcol>Coefficient</ttcol>
2523 <ttcol align="right">NB and MB</ttcol>
2524 <ttcol align="right">WB</ttcol>
2525  <c>0</c> <c>250</c> <c>100</c>
2526  <c>1</c>   <c>3</c>   <c>3</c>
2527  <c>2</c>   <c>6</c>  <c>40</c>
2528  <c>3</c>   <c>3</c>   <c>3</c>
2529  <c>4</c>   <c>3</c>   <c>3</c>
2530  <c>5</c>   <c>3</c>   <c>3</c>
2531  <c>6</c>   <c>4</c>   <c>5</c>
2532  <c>7</c>   <c>3</c>  <c>14</c>
2533  <c>8</c>   <c>3</c>  <c>14</c>
2534  <c>9</c>   <c>3</c>  <c>10</c>
2535 <c>10</c> <c>461</c>  <c>11</c>
2536 <c>11</c>       <c/>   <c>3</c>
2537 <c>12</c>       <c/>   <c>8</c>
2538 <c>13</c>       <c/>   <c>9</c>
2539 <c>14</c>       <c/>   <c>7</c>
2540 <c>15</c>       <c/>   <c>3</c>
2541 <c>16</c>       <c/> <c>347</c>
2542 </texttable>
2543
2544 <t>
2545 The procedure starts off by trying to make small adjustments which attempt to
2546  minimize the amount of distortion introduced.
2547 After 20 such adjustments, it falls back to a more direct method which
2548  guarantees the constraints are enforced but may require large adjustments.
2549 </t>
2550 <t>
2551 Let NDeltaMin_Q15[k] be the minimum required spacing for the current audio
2552  bandwidth from <xref target="silk_nlsf_min_spacing"/>.
2553 First, the procedure finds the index i where
2554  NLSF_Q15[i]&nbsp;-&nbsp;NLSF_Q15[i-1]&nbsp;-&nbsp;NDeltaMin_Q15[i] is the
2555  smallest, breaking ties by using the lower value of i.
2556 If this value is non-negative, then the stabilization stops; the coefficients
2557  satisfy all the constraints.
2558 Otherwise, if i&nbsp;==&nbsp;0, it sets NLSF_Q15[0] to NDeltaMin_Q15[0], and if
2559  i&nbsp;==&nbsp;d_LPC, it sets NLSF_Q15[d_LPC-1] to
2560  (32768&nbsp;-&nbsp;NDeltaMin_Q15[d_LPC]).
2561 For all other values of i, both NLSF_Q15[i-1] and NLSF_Q15[i] are updated as
2562  follows:
2563 <figure align="center">
2564 <artwork align="center"><![CDATA[
2565                                       i-1
2566                                       __
2567  min_center_Q15 = (NDeltaMin[i]>>1) + \  NDeltaMin[k]
2568                                       /_
2569                                       k=0
2570                                              d_LPC
2571                                               __
2572  max_center_Q15 = 32768 - (NDeltaMin[i]>>1) - \  NDeltaMin[k]
2573                                               /_
2574                                              k=i+1
2575 center_freq_Q15 = clamp(min_center_Q15[i],
2576                         (NLSF_Q15[i-1] + NLSF_Q15[i] + 1)>>1,
2577                         max_center_Q15[i])
2578
2579  NLSF_Q15[i-1] = center_freq_Q15 - (NDeltaMin_Q15[i]>>1)
2580
2581    NLSF_Q15[i] = NLSF_Q15[i-1] + NDeltaMin_Q15[i] .
2582 ]]></artwork>
2583 </figure>
2584 Then the procedure repeats again, until it has either executed 20 times or
2585  has stopped because the coefficients satisfy all the constraints.
2586 </t>
2587 <t>
2588 After the 20th repetition of the above procedure, the following fallback
2589  procedure executes once.
2590 First, the values of NLSF_Q15[k] for 0&nbsp;&lt;=&nbsp;k&nbsp;&lt;&nbsp;d_LPC
2591  are sorted in ascending order.
2592 Then for each value of k from 0 to d_LPC-1, NLSF_Q15[k] is set to
2593 <figure align="center">
2594 <artwork align="center"><![CDATA[
2595 max(NLSF_Q15[k], NLSF_Q15[k-1] + NDeltaMin_Q15[k]) .
2596 ]]></artwork>
2597 </figure>
2598 Next, for each value of k from d_LPC-1 down to 0, NLSF_Q15[k] is set to
2599 <figure align="center">
2600 <artwork align="center"><![CDATA[
2601 min(NLSF_Q15[k], NLSF_Q15[k+1] - NDeltaMin_Q15[k+1]) .
2602 ]]></artwork>
2603 </figure>
2604 </t>
2605
2606 </section>
2607
2608 <section anchor="silk_nlsf_interpolation" title="Normalized LSF Interpolation">
2609 <t>
2610 For 20&nbsp;ms SILK frames, the first half of the frame (i.e., the first two
2611  subframes) may use normalized LSF coefficients that are interpolated between
2612  the decoded LSFs for the most recent coded frame (in the same channel) and the
2613  current frame.
2614 A Q2 interpolation factor follows the LSF coefficient indices in the bitstream,
2615  which is decoded using the PDF in <xref target="silk_nlsf_interp_pdf"/>.
2616 This happens in silk_decode_indices() (silk_decode_indices.c).
2617 For the first frame after a decoder reset, when no prior LSF coefficients are
2618  available, the decoder still decodes this factor, but ignores its value and
2619  always uses 4 instead.
2620 For 10&nbsp;ms SILK frames, this factor is not stored at all.
2621 </t>
2622
2623 <texttable anchor="silk_nlsf_interp_pdf"
2624            title="PDF for Normalized LSF Interpolation Index">
2625 <ttcol>PDF</ttcol>
2626 <c>{13, 22, 29, 11, 181}/256</c>
2627 </texttable>
2628
2629 <t>
2630 Let n2_Q15[k] be the normalized LSF coefficients decoded by the procedure in
2631  <xref target="silk_nlsfs"/>, n0_Q15[k] be the LSF coefficients
2632  decoded for the prior frame, and w_Q2 be the interpolation factor.
2633 Then the normalized LSF coefficients used for the first half of a 20&nbsp;ms
2634  frame, n1_Q15[k], are
2635 <figure align="center">
2636 <artwork align="center"><![CDATA[
2637 n1_Q15[k] = n0_Q15[k] + (w_Q2*(n2_Q15[k] - n0_Q15[k]) >> 2) .
2638 ]]></artwork>
2639 </figure>
2640 This interpolation is performed in silk_decode_parameters()
2641  (silk_decode_parameters.c).
2642 </t>
2643 </section>
2644
2645 <section anchor="silk_nlsf2lpc"
2646  title="Converting Normalized LSFs to LPC Coefficients">
2647 <t>
2648 Any LPC filter A(z) can be split into a symmetric part P(z) and an
2649  anti-symmetric part Q(z) such that
2650 <figure align="center">
2651 <artwork align="center"><![CDATA[
2652           d_LPC
2653            __         -k   1
2654 A(z) = 1 - \  a[k] * z   = - * (P(z) + Q(z))
2655            /_              2
2656            k=1
2657 ]]></artwork>
2658 </figure>
2659 with
2660 <figure align="center">
2661 <artwork align="center"><![CDATA[
2662                -d_LPC-1      -1
2663 P(z) = A(z) + z         * A(z  )
2664
2665                -d_LPC-1      -1
2666 Q(z) = A(z) - z         * A(z  ) .
2667 ]]></artwork>
2668 </figure>
2669 The even normalized LSF coefficients correspond to a pair of conjugate roots of
2670  P(z), while the odd coefficients correspond to a pair of conjugate roots of
2671  Q(z), all of which lie on the unit circle.
2672 In addition, P(z) has a root at pi and Q(z) has a root at 0.
2673 Thus, they may be reconstructed mathematically from a set of normalized LSF
2674  coefficients, n[k], as
2675 <figure align="center">
2676 <artwork align="center"><![CDATA[
2677                  d_LPC/2-1
2678              -1     ___                        -1    -2
2679 P(z) = (1 + z  ) *  | |  (1 - 2*cos(pi*n[2*k])*z  + z  )
2680                     k=0
2681
2682                  d_LPC/2-1
2683              -1     ___                          -1    -2
2684 Q(z) = (1 - z  ) *  | |  (1 - 2*cos(pi*n[2*k+1])*z  + z  )
2685                     k=0
2686 ]]></artwork>
2687 </figure>
2688 </t>
2689 <t>
2690 However, SILK performs this reconstruction using a fixed-point approximation so
2691  that all decoders can reproduce it in a bit-exact manner to avoid prediction
2692  drift.
2693 The function silk_NLSF2A() (silk_NLSF2A.c) implements this procedure.
2694 </t>
2695 <t>
2696 To start, it approximates cos(pi*n[k]) using a table lookup with linear
2697  interpolation.
2698 The encoder SHOULD use the inverse of this piecewise linear approximation,
2699  rather than the true inverse of the cosine function, when deriving the
2700  normalized LSF coefficients.
2701 </t>
2702 <t>
2703 The top 7 bits of each normalized LSF coefficient index a value in the table,
2704  and the next 8 bits interpolate between it and the next value.
2705 Let i&nbsp;=&nbsp;n[k]&gt;&gt;8 be the integer index and
2706  f&nbsp;=&nbsp;n[k]&amp;255 be the fractional part of a given coefficient.
2707 Then the approximated cosine, c_Q17[k], is
2708 <figure align="center">
2709 <artwork align="center"><![CDATA[
2710 c_Q17[k] = (cos_Q13[i]*256 + (cos_Q13[i+1]-cos_Q13[i])*f + 8) >> 4 ,
2711 ]]></artwork>
2712 </figure>
2713  where cos_Q13[i] is the corresponding entry of
2714  <xref target="silk_cos_table"/>.
2715 </t>
2716
2717 <texttable anchor="silk_cos_table"
2718            title="Q13 Cosine Table for LSF Conversion">
2719 <ttcol align="right"></ttcol>
2720 <ttcol align="right">0</ttcol>
2721 <ttcol align="right">1</ttcol>
2722 <ttcol align="right">2</ttcol>
2723 <ttcol align="right">3</ttcol>
2724 <c>0</c>
2725  <c>8192</c> <c>8190</c> <c>8182</c> <c>8170</c>
2726 <c>4</c>
2727  <c>8152</c> <c>8130</c> <c>8104</c> <c>8072</c>
2728 <c>8</c>
2729  <c>8034</c> <c>7994</c> <c>7946</c> <c>7896</c>
2730 <c>12</c>
2731  <c>7840</c> <c>7778</c> <c>7714</c> <c>7644</c>
2732 <c>16</c>
2733  <c>7568</c> <c>7490</c> <c>7406</c> <c>7318</c>
2734 <c>20</c>
2735  <c>7226</c> <c>7128</c> <c>7026</c> <c>6922</c>
2736 <c>24</c>
2737  <c>6812</c> <c>6698</c> <c>6580</c> <c>6458</c>
2738 <c>28</c>
2739  <c>6332</c> <c>6204</c> <c>6070</c> <c>5934</c>
2740 <c>32</c>
2741  <c>5792</c> <c>5648</c> <c>5502</c> <c>5352</c>
2742 <c>36</c>
2743  <c>5198</c> <c>5040</c> <c>4880</c> <c>4718</c>
2744 <c>40</c>
2745  <c>4552</c> <c>4382</c> <c>4212</c> <c>4038</c>
2746 <c>44</c>
2747  <c>3862</c> <c>3684</c> <c>3502</c> <c>3320</c>
2748 <c>48</c>
2749  <c>3136</c> <c>2948</c> <c>2760</c> <c>2570</c>
2750 <c>52</c>
2751  <c>2378</c> <c>2186</c> <c>1990</c> <c>1794</c>
2752 <c>56</c>
2753  <c>1598</c> <c>1400</c> <c>1202</c> <c>1002</c>
2754 <c>60</c>
2755   <c>802</c>  <c>602</c>  <c>402</c>  <c>202</c>
2756 <c>64</c>
2757     <c>0</c> <c>-202</c> <c>-402</c> <c>-602</c>
2758 <c>68</c>
2759  <c>-802</c><c>-1002</c><c>-1202</c><c>-1400</c>
2760 <c>72</c>
2761 <c>-1598</c><c>-1794</c><c>-1990</c><c>-2186</c>
2762 <c>76</c>
2763 <c>-2378</c><c>-2570</c><c>-2760</c><c>-2948</c>
2764 <c>80</c>
2765 <c>-3136</c><c>-3320</c><c>-3502</c><c>-3684</c>
2766 <c>84</c>
2767 <c>-3862</c><c>-4038</c><c>-4212</c><c>-4382</c>
2768 <c>88</c>
2769 <c>-4552</c><c>-4718</c><c>-4880</c><c>-5040</c>
2770 <c>92</c>
2771 <c>-5198</c><c>-5352</c><c>-5502</c><c>-5648</c>
2772 <c>96</c>
2773 <c>-5792</c><c>-5934</c><c>-6070</c><c>-6204</c>
2774 <c>100</c>
2775 <c>-6332</c><c>-6458</c><c>-6580</c><c>-6698</c>
2776 <c>104</c>
2777 <c>-6812</c><c>-6922</c><c>-7026</c><c>-7128</c>
2778 <c>108</c>
2779 <c>-7226</c><c>-7318</c><c>-7406</c><c>-7490</c>
2780 <c>112</c>
2781 <c>-7568</c><c>-7644</c><c>-7714</c><c>-7778</c>
2782 <c>116</c>
2783 <c>-7840</c><c>-7896</c><c>-7946</c><c>-7994</c>
2784 <c>120</c>
2785 <c>-8034</c><c>-8072</c><c>-8104</c><c>-8130</c>
2786 <c>124</c>
2787 <c>-8152</c><c>-8170</c><c>-8182</c><c>-8190</c>
2788 <c>128</c>
2789 <c>-8192</c>        <c/>        <c/>        <c/>
2790 </texttable>
2791
2792 <t>
2793 Given the list of cosine values, silk_NLSF2A_find_poly() (silk_NLSF2A.c)
2794  computes the coefficients of P and Q, described here via a simple recurrence.
2795 Let p_Q16[k][j] and q_Q16[k][j] be the coefficients of the products of the
2796  first (k+1) root pairs for P and Q, with j indexing the coefficient number.
2797 Only the first (k+2) coefficients are needed, as the products are symmetric.
2798 Let p_Q16[0][0]&nbsp;=&nbsp;q_Q16[0][0]&nbsp;=&nbsp;1&lt;&lt;16,
2799  p_Q16[0][1]&nbsp;=&nbsp;-c_Q17[0], q_Q16[0][1]&nbsp;=&nbsp;-c_Q17[1], and
2800  d2&nbsp;=&nbsp;d_LPC/2.
2801 As boundary conditions, assume
2802  p_Q16[k][j]&nbsp;=&nbsp;q_Q16[k][j]&nbsp;=&nbsp;0 for all
2803  j&nbsp;&lt;&nbsp;0.
2804 Also, assume p_Q16[k][k+2]&nbsp;=&nbsp;p_Q16[k][k] and
2805  q_Q16[k][k+2]&nbsp;=&nbsp;q_Q16[k][k] (because of the symmetry).
2806 Then, for 0&nbsp;&lt;k&nbsp;&lt;&nbsp;d2 and 0&nbsp;&lt;=&nbsp;j&nbsp;&lt;=&nbsp;k+1,
2807 <figure align="center">
2808 <artwork align="center"><![CDATA[
2809 p_Q16[k][j] = p_Q16[k-1][j] + p_Q16[k-1][j-2]
2810               - ((c_Q17[2*k]*p_Q16[k-1][j-1] + 32768)>>16) ,
2811
2812 q_Q16[k][j] = q_Q16[k-1][j] + q_Q16[k-1][j-2]
2813               - ((c_Q17[2*k+1]*q_Q16[k-1][j-1] + 32768)>>16) .
2814 ]]></artwork>
2815 </figure>
2816 The use of Q17 values for the cosine terms in an otherwise Q16 expression
2817  implicitly scales them by a factor of 2.
2818 The multiplications in this recurrence may require up to 48 bits of precision
2819  in the result to avoid overflow.
2820 In practice, each row of the recurrence only depends on the previous row, so an
2821  implementation does not need to store all of them.
2822 </t>
2823 <t>
2824 silk_NLSF2A() uses the values from the last row of this recurrence to
2825  reconstruct a 32-bit version of the LPC filter (without the leading 1.0
2826  coefficient), a32_Q17[k], 0&nbsp;&lt;=&nbsp;k&nbsp;&lt;&nbsp;d2:
2827 <figure align="center">
2828 <artwork align="center"><![CDATA[
2829 a32_Q17[k]         = -(q_Q16[d2-1][k+1] - q_Q16[d2-1][k])
2830                      - (p_Q16[d2-1][k+1] + p_Q16[d2-1][k])) ,
2831
2832 a32_Q17[d_LPC-k-1] =  (q_Q16[d2-1][k+1] - q_Q16[d2-1][k])
2833                      - (p_Q16[d2-1][k+1] + p_Q16[d2-1][k])) .
2834 ]]></artwork>
2835 </figure>
2836 The sum and difference of two terms from each of the p_Q16 and q_Q16
2837  coefficient lists reflect the (1&nbsp;+&nbsp;z**-1) and
2838  (1&nbsp;-&nbsp;z**-1) factors of P and Q, respectively.
2839 The promotion of the expression from Q16 to Q17 implicitly scales the result
2840  by 1/2.
2841 </t>
2842 </section>
2843
2844 <section anchor="silk_lpc_range_limit"
2845  title="Limiting the Range of the LPC Coefficients">
2846 <t>
2847 The a32_Q17[] coefficients are too large to fit in a 16-bit value, which
2848  significantly increases the cost of applying this filter in fixed-point
2849  decoders.
2850 Reducing them to Q12 precision doesn't incur any significant quality loss,
2851  but still does not guarantee they will fit.
2852 silk_NLSF2A() applies up to 10 rounds of bandwidth expansion to limit
2853  the dynamic range of these coefficients.
2854 Even floating-point decoders SHOULD perform these steps, to avoid mismatch.
2855 </t>
2856 <t>
2857 For each round, the process first finds the index k such that abs(a32_Q17[k])
2858  is largest, breaking ties by choosing the lowest value of k.
2859 Then, it computes the corresponding Q12 precision value, maxabs_Q12, subject to
2860  an upper bound to avoid overflow in subsequent computations:
2861 <figure align="center">
2862 <artwork align="center"><![CDATA[
2863 maxabs_Q12 = min((maxabs_Q17 + 16) >> 5, 163838) .
2864 ]]></artwork>
2865 </figure>
2866 If this is larger than 32767, the procedure derives the chirp factor,
2867  sc_Q16[0], to use in the bandwidth expansion as
2868 <figure align="center">
2869 <artwork align="center"><![CDATA[
2870                     (maxabs_Q12 - 32767) << 14
2871 sc_Q16[0] = 65470 - -------------------------- ,
2872                     (maxabs_Q12 * (k+1)) >> 2
2873 ]]></artwork>
2874 </figure>
2875  where the division here is exact integer division.
2876 This is an approximation of the chirp factor needed to reduce the target
2877  coefficient to 32767, though it is both less than 0.999 and, for
2878  k&nbsp;&gt;&nbsp;0 when maxabs_Q12 is much greater than 32767, still slightly
2879  too large.
2880 </t>
2881 <t>
2882 silk_bwexpander_32() (silk_bwexpander_32.c) performs the bandwidth expansion
2883  (again, only when maxabs_Q12 is greater than 32767) using the following
2884  recurrence:
2885 <figure align="center">
2886 <artwork align="center"><![CDATA[
2887  a32_Q17[k] = (a32_Q17[k]*sc_Q16[k]) >> 16
2888
2889 sc_Q16[k+1] = (sc_Q16[0]*sc_Q16[k] + 32768) >> 16
2890 ]]></artwork>
2891 </figure>
2892 The first multiply may require up to 48 bits of precision in the result to
2893  avoid overflow.
2894 The second multiply must be unsigned to avoid overflow with only 32 bits of
2895  precision.
2896 The reference implementation uses a slightly more complex formulation that
2897  avoids the 32-bit overflow using signed multiplication, but is otherwise
2898  equivalent.
2899 </t>
2900 <t>
2901 After 10 rounds of bandwidth expansion are performed, they are simply saturated
2902  to 16 bits:
2903 <figure align="center">
2904 <artwork align="center"><![CDATA[
2905 a32_Q17[k] = clamp(-32768, (a32_Q17[k]+16) >> 5, 32767) << 5 .
2906 ]]></artwork>
2907 </figure>
2908 Because this performs the actual saturation in the Q12 domain, but converts the
2909  coefficients back to the Q17 domain for the purposes of prediction gain
2910  limiting, this step must be performed after the 10th round of bandwidth
2911  expansion, regardless of whether or not the Q12 version of any coefficient
2912  still overflows a 16-bit integer.
2913 This saturation is not performed if maxabs_Q12 drops to 32767 or less prior to
2914  the 10th round.
2915 </t>
2916 </section>
2917
2918 <section anchor="silk_lpc_gain_limit"
2919  title="Limiting the Prediction Gain of the LPC Filter">
2920 <t>
2921 Even if the Q12 coefficients would fit, the resulting filter may still have a
2922  significant gain (especially for voiced sounds), making the filter unstable.
2923 silk_NLSF2A() applies up to 18 additional rounds of bandwidth expansion to
2924  limit the prediction gain.
2925 Instead of controlling the amount of bandwidth expansion using the prediction
2926  gain itself (which may diverge to infinity for an unstable filter),
2927  silk_NLSF2A() uses LPC_inverse_pred_gain_QA() (silk_LPC_inv_pred_gain.c)
2928  to compute the reflection coefficients associated with the filter.
2929 The filter is stable if and only if the magnitude of these coefficients is
2930  sufficiently less than one.
2931 The reflection coefficients, rc[k], can be computed using a simple Levinson
2932  recurrence, initialized with the LPC coefficients
2933  a[d_LPC-1][n]&nbsp;=&nbsp;a[n], and then updated via
2934 <figure align="center">
2935 <artwork align="center"><![CDATA[
2936     rc[k] = -a[k][k] ,
2937
2938             a[k][n] - a[k][k-n-1]*rc[k]
2939 a[k-1][n] = --------------------------- .
2940                              2
2941                     1 - rc[k]
2942 ]]></artwork>
2943 </figure>
2944 </t>
2945 <t>
2946 However, LPC_inverse_pred_gain_QA() approximates this using fixed-point
2947  arithmetic to guarantee reproducible results across platforms and
2948  implementations.
2949 It is important to run on the real Q12 coefficients that will be used during
2950  reconstruction, because small changes in the coefficients can make a stable
2951  filter unstable, but increasing the precision back to Q16 allows more accurate
2952  computation of the reflection coefficients.
2953 Thus, let
2954 <figure align="center">
2955 <artwork align="center"><![CDATA[
2956 a32_Q16[d_LPC-1][n] = ((a32_Q17[n] + 16) >> 5) << 4
2957 ]]></artwork>
2958 </figure>
2959  be the Q16 representation of the Q12 version of the LPC coefficients that will
2960  eventually be used.
2961 Then for each k from d_LPC-1 down to 0, if
2962  abs(a32_Q16[k][k])&nbsp;&gt;&nbsp;65520, the filter is unstable and the
2963  recurrence stops.
2964 Otherwise, the row k-1 of a32_Q16 is computed from row k as
2965 <figure align="center">
2966 <artwork align="center"><![CDATA[
2967       rc_Q31[k] = -a32_Q16[k][k] << 15 ,
2968
2969      div_Q30[k] = (1<<30) - 1 - (rc_Q31[k]*rc_Q31[k] >> 32) ,
2970
2971           b1[k] = ilog(div_Q30[k]) - 16 ,
2972
2973                         (1<<29) - 1
2974      inv_Qb1[k] = ----------------------- ,
2975                   div_Q30[k] >> (b1[k]+1)
2976
2977      err_Q29[k] = (1<<29)
2978                   - ((div_Q30[k]<<(15-b1[k]))*inv_Qb1[k] >> 16) ,
2979
2980      mul_Q16[k] = ((inv_Qb1[k] << 16)
2981                    + (err_Q29[k]*inv_Qb1[k] >> 13)) >> b1[k] ,
2982
2983           b2[k] = ilog(mul_Q16[k]) - 15 ,
2984
2985   t_Q16[k-1][n] = a32_Q16[k][n]
2986                   - ((a32_Q16[k][k-n-1]*rc_Q31[k] >> 32) << 1) ,
2987
2988 a32_Q16[k-1][n] = ((t_Q16[k-1][n] *
2989                     (mul_Q16[k] << (16-b2[k]))) >> 32) << b2[k] .
2990 ]]></artwork>
2991 </figure>
2992 Here, rc_Q30[k] are the reflection coefficients.
2993 div_Q30[k] is the denominator for each iteration, and mul_Q16[k] is its
2994  multiplicative inverse.
2995 inv_Qb1[k], which ranges from 16384 to 32767, is a low-precision version of
2996  that inverse (with b1[k] fractional bits, where b1[k] ranges from 3 to 14).
2997 err_Q29[k] is the residual error, ranging from -32392 to 32763, which is used
2998  to improve the accuracy.
2999 t_Q16[k-1][n], 0&nbsp;&lt;=&nbsp;n&nbsp;&lt;&nbsp;k, are the numerators for the
3000  next row of coefficients in the recursion, and a32_Q16[k-1][n] is the final
3001  version of that row.
3002 Every multiply in this procedure except the one used to compute mul_Q16[k]
3003  requires more than 32 bits of precision, but otherwise all intermediate
3004  results fit in 32 bits or less.
3005 In practice, because each row only depends on the next one, an implementation
3006  does not need to store them all.
3007 If abs(a32_Q16[k][k])&nbsp;&lt;=&nbsp;65520 for
3008  0&nbsp;&lt;=&nbsp;k&nbsp;&lt;&nbsp;d_LPC, then the filter is considered stable.
3009 </t>
3010 <t>
3011 On round i, 1&nbsp;&lt;=&nbsp;i&nbsp;&lt;=&nbsp;18, if the filter passes this
3012  stability check, then this procedure stops, and the final LPC coefficients to
3013  use for reconstruction<!--TODO: In section...--> are
3014 <figure align="center">
3015 <artwork align="center"><![CDATA[
3016 a_Q12[k] = (a32_Q17[k] + 16) >> 5 .
3017 ]]></artwork>
3018 </figure>
3019 Otherwise, a round of bandwidth expansion is applied using the same procedure
3020  as in <xref target="silk_lpc_range_limit"/>, with
3021 <figure align="center">
3022 <artwork align="center"><![CDATA[
3023 sc_Q16[0] = 65536 - i*(i+9) .
3024 ]]></artwork>
3025 </figure>
3026 If, after the 18th round, the filter still fails the stability check, then
3027  a_Q12[k] is set to 0 for all k.
3028 </t>
3029 </section>
3030
3031 </section>
3032
3033 <section anchor="silk_ltp_params"
3034  title="Long-Term Prediction (LTP) Parameters">
3035 <t>
3036 After the normalized LSF indices and, for 20&nbsp;ms frames, the LSF
3037  interpolation index, voiced frames (see <xref target="silk_frame_type"/>)
3038  include additional Long-Term Prediction (LTP) parameters.
3039 There is one primary lag index for each SILK frame, but this is refined to
3040  produce a separate lag index per subframe using a vector quantizer.
3041 Each subframe also gets its own prediction gain coefficient.
3042 </t>
3043
3044 <section anchor="silk_ltp_lags" title="Pitch Lags">
3045 <t>
3046 The primary lag index is coded either relative to the primary lag of the prior
3047  frame or as an absolute index.
3048 Like the quantization gains, the first LBRR frame, an LBRR frame where the
3049  previous LBRR frame was not coded, and the first regular SILK frame in each
3050  channel of an Opus frame all code the pitch lag as an absolute index.
3051 When the most recent coded frame in the current channel was not voiced, this
3052  also forces absolute coding.
3053 In particular, unlike an LBRR frame where the previous frame is not coded, in a
3054  60&nbsp;ms stereo Opus frame, if the first and third regular SILK frames
3055  in the side channel are coded, voiced frames, but the second is not coded, the
3056  third still uses relative coding.
3057 </t>
3058 <t>
3059 With absolute coding, the primary pitch lag may range from 2&nbsp;ms
3060  (inclusive) up to 18&nbsp;ms (exclusive), corresponding to pitches from
3061  500&nbsp;Hz down to 55.6&nbsp;Hz, respectively.
3062 It is comprised of a high part and a low part, where the decoder reads the high
3063  part using the 32-entry codebook in <xref target="silk_abs_pitch_high_pdf"/>
3064  and the low part using the codebook corresponding to the current audio
3065  bandwidth from <xref target="silk_abs_pitch_low_pdf"/>.
3066 The final primary pitch lag is then
3067 <figure align="center">
3068 <artwork align="center"><![CDATA[
3069 lag = lag_high*lag_scale + lag_low + lag_min
3070 ]]></artwork>
3071 </figure>
3072  where lag_high is the high part, lag_low is the low part, and lag_scale
3073  and lag_min are the values from the "Scale" and "Minimum Lag" columns of
3074  <xref target="silk_abs_pitch_low_pdf"/>, respectively.
3075 </t>
3076
3077 <texttable anchor="silk_abs_pitch_high_pdf"
3078  title="PDF for High Part of Primary Pitch Lag">
3079 <ttcol align="left">PDF</ttcol>
3080 <c>{3,   3,   6,  11,  21,  30,  32,  19,
3081    11,  10,  12,  13,  13,  12,  11,   9,
3082     8,   7,   6,   4,   2,   2,   2,   1,
3083     1,   1,   1,   1,   1,   1,   1,   1}/256</c>
3084 </texttable>
3085
3086 <texttable anchor="silk_abs_pitch_low_pdf"
3087  title="PDF for Low Part of Primary Pitch Lag">
3088 <ttcol>Audio Bandwidth</ttcol>
3089 <ttcol>PDF</ttcol>
3090 <ttcol>Scale</ttcol>
3091 <ttcol>Minimum Lag</ttcol>
3092 <ttcol>Maximum Lag</ttcol>
3093 <c>NB</c> <c>{64, 64, 64, 64}/256</c>                 <c>4</c> <c>16</c> <c>144</c>
3094 <c>MB</c> <c>{43, 42, 43, 43, 42, 43}/256</c>         <c>6</c> <c>24</c> <c>216</c>
3095 <c>WB</c> <c>{32, 32, 32, 32, 32, 32, 32, 32}/256</c> <c>8</c> <c>32</c> <c>288</c>
3096 </texttable>
3097
3098 <t>
3099 All frames that do not use absolute coding for the primary lag index use
3100  relative coding instead.
3101 The decoder reads a single delta value using the 21-entry PDF in
3102  <xref target="silk_rel_pitch_pdf"/>.
3103 If the resulting value is zero, it falls back to the absolute coding procedure
3104  from the prior paragraph.
3105 Otherwise, the final primary pitch lag is then
3106 <figure align="center">
3107 <artwork align="center"><![CDATA[
3108 lag = lag_prev + (delta_lag_index - 9)
3109 ]]></artwork>
3110 </figure>
3111  where lag_prev is the primary pitch lag from the most recent frame in the same
3112  channel and delta_lag_index is the value just decoded.
3113 This allows a per-frame change in the pitch lag of -8 to +11 samples.
3114 The decoder does no clamping at this point, so this value can fall outside the
3115  range of 2&nbsp;ms to 18&nbsp;ms, and the decoder must use this unclamped
3116  value when using relative coding in the next SILK frame (if any).
3117 However, because an Opus frame can use relative coding for at most two
3118  consecutive SILK frames, integer overflow should not be an issue.
3119 </t>
3120
3121 <texttable anchor="silk_rel_pitch_pdf"
3122  title="PDF for Primary Pitch Lag Change">
3123 <ttcol align="left">PDF</ttcol>
3124 <c>{46,  2,  2,  3,  4,  6, 10, 15,
3125     26, 38, 30, 22, 15, 10,  7,  6,
3126      4,  4,  2,  2,  2}/256</c>
3127 </texttable>
3128
3129 <t>
3130 After the primary pitch lag, a "pitch contour", stored as a single entry from
3131  one of four small VQ codebooks, gives lag offsets for each subframe in the
3132  current SILK frame.
3133 The codebook index is decoded using one of the PDFs in
3134  <xref target="silk_pitch_contour_pdfs"/> depending on the current frame size
3135  and audio bandwidth.
3136 <xref target="silk_pitch_contour_cb_nb10ms"/> through
3137  <xref target="silk_pitch_contour_cb_mbwb20ms"/> give the corresponding offsets
3138  to apply to the primary pitch lag for each subframe given the decoded codebook
3139  index.
3140 </t>
3141
3142 <texttable anchor="silk_pitch_contour_pdfs"
3143  title="PDFs for Subframe Pitch Contour">
3144 <ttcol>Audio Bandwidth</ttcol>
3145 <ttcol>SILK Frame Size</ttcol>
3146 <ttcol align="right">Codebook Size</ttcol>
3147 <ttcol>PDF</ttcol>
3148 <c>NB</c>       <c>10&nbsp;ms</c>  <c>3</c>
3149 <c>{143, 50, 63}/256</c>
3150 <c>NB</c>       <c>20&nbsp;ms</c> <c>11</c>
3151 <c>{68, 12, 21, 17, 19, 22, 30, 24,
3152     17, 16, 10}/256</c>
3153 <c>MB or WB</c> <c>10&nbsp;ms</c> <c>12</c>
3154 <c>{91, 46, 39, 19, 14, 12,  8,  7,
3155      6,  5,  5,  4}/256</c>
3156 <c>MB or WB</c> <c>20&nbsp;ms</c> <c>34</c>
3157 <c>{33, 22, 18, 16, 15, 14, 14, 13,
3158     13, 10,  9,  9,  8,  6,  6,  6,
3159      5,  4,  4,  4,  3,  3,  3,  2,
3160      2,  2,  2,  2,  2,  2,  1,  1,
3161      1,  1}/256</c>
3162 </texttable>
3163
3164 <texttable anchor="silk_pitch_contour_cb_nb10ms"
3165  title="Codebook Vectors for Subframe Pitch Contour: NB, 10&nbsp;ms Frames">
3166 <ttcol>Index</ttcol>
3167 <ttcol align="right">Subframe Offsets</ttcol>
3168 <c>0</c> <c><spanx style="vbare">&nbsp;0&nbsp;&nbsp;0</spanx></c>
3169 <c>1</c> <c><spanx style="vbare">&nbsp;1&nbsp;&nbsp;0</spanx></c>
3170 <c>2</c> <c><spanx style="vbare">&nbsp;0&nbsp;&nbsp;1</spanx></c>
3171 </texttable>
3172
3173 <texttable anchor="silk_pitch_contour_cb_nb20ms"
3174  title="Codebook Vectors for Subframe Pitch Contour: NB, 20&nbsp;ms Frames">
3175 <ttcol>Index</ttcol>
3176 <ttcol align="right">Subframe Offsets</ttcol>
3177  <c>0</c> <c><spanx style="vbare">&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0</spanx></c>
3178  <c>1</c> <c><spanx style="vbare">&nbsp;2&nbsp;&nbsp;1&nbsp;&nbsp;0&nbsp;-1</spanx></c>
3179  <c>2</c> <c><spanx style="vbare">-1&nbsp;&nbsp;0&nbsp;&nbsp;1&nbsp;&nbsp;2</spanx></c>
3180  <c>3</c> <c><spanx style="vbare">-1&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;1</spanx></c>
3181  <c>4</c> <c><spanx style="vbare">-1&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0</spanx></c>
3182  <c>5</c> <c><spanx style="vbare">&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;1</spanx></c>
3183  <c>6</c> <c><spanx style="vbare">&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;1&nbsp;&nbsp;1</spanx></c>
3184  <c>7</c> <c><spanx style="vbare">&nbsp;1&nbsp;&nbsp;1&nbsp;&nbsp;0&nbsp;&nbsp;0</spanx></c>
3185  <c>8</c> <c><spanx style="vbare">&nbsp;1&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0</spanx></c>
3186  <c>9</c> <c><spanx style="vbare">&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;-1</spanx></c>
3187 <c>10</c> <c><spanx style="vbare">&nbsp;1&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;-1</spanx></c>
3188 </texttable>
3189
3190 <texttable anchor="silk_pitch_contour_cb_mbwb10ms"
3191  title="Codebook Vectors for Subframe Pitch Contour: MB or WB, 10&nbsp;ms Frames">
3192 <ttcol>Index</ttcol>
3193 <ttcol align="right">Subframe Offsets</ttcol>
3194  <c>0</c> <c><spanx style="vbare">&nbsp;0&nbsp;&nbsp;0</spanx></c>
3195  <c>1</c> <c><spanx style="vbare">&nbsp;0&nbsp;&nbsp;1</spanx></c>
3196  <c>2</c> <c><spanx style="vbare">&nbsp;1&nbsp;&nbsp;0</spanx></c>
3197  <c>3</c> <c><spanx style="vbare">-1&nbsp;&nbsp;1</spanx></c>
3198  <c>4</c> <c><spanx style="vbare">&nbsp;1&nbsp;-1</spanx></c>
3199  <c>5</c> <c><spanx style="vbare">-1&nbsp;&nbsp;2</spanx></c>
3200  <c>6</c> <c><spanx style="vbare">&nbsp;2&nbsp;-1</spanx></c>
3201  <c>7</c> <c><spanx style="vbare">-2&nbsp;&nbsp;2</spanx></c>
3202  <c>8</c> <c><spanx style="vbare">&nbsp;2&nbsp;-2</spanx></c>
3203  <c>9</c> <c><spanx style="vbare">-2&nbsp;&nbsp;3</spanx></c>
3204 <c>10</c> <c><spanx style="vbare">&nbsp;3&nbsp;-2</spanx></c>
3205 <c>11</c> <c><spanx style="vbare">-3&nbsp;&nbsp;3</spanx></c>
3206 </texttable>
3207
3208 <texttable anchor="silk_pitch_contour_cb_mbwb20ms"
3209  title="Codebook Vectors for Subframe Pitch Contour: MB or WB, 20&nbsp;ms Frames">
3210 <ttcol>Index</ttcol>
3211 <ttcol align="right">Subframe Offsets</ttcol>
3212  <c>0</c> <c><spanx style="vbare">&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0</spanx></c>
3213  <c>1</c> <c><spanx style="vbare">&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;1&nbsp;&nbsp;1</spanx></c>
3214  <c>2</c> <c><spanx style="vbare">&nbsp;1&nbsp;&nbsp;1&nbsp;&nbsp;0&nbsp;&nbsp;0</spanx></c>
3215  <c>3</c> <c><spanx style="vbare">-1&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0</spanx></c>
3216  <c>4</c> <c><spanx style="vbare">&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;1</spanx></c>
3217  <c>5</c> <c><spanx style="vbare">&nbsp;1&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0</spanx></c>
3218  <c>6</c> <c><spanx style="vbare">-1&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;1</spanx></c>
3219  <c>7</c> <c><spanx style="vbare">&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;-1</spanx></c>
3220  <c>8</c> <c><spanx style="vbare">-1&nbsp;&nbsp;0&nbsp;&nbsp;1&nbsp;&nbsp;2</spanx></c>
3221  <c>9</c> <c><spanx style="vbare">&nbsp;1&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;-1</spanx></c>
3222 <c>10</c> <c><spanx style="vbare">-2&nbsp;-1&nbsp;&nbsp;1&nbsp;&nbsp;2</spanx></c>
3223 <c>11</c> <c><spanx style="vbare">&nbsp;2&nbsp;&nbsp;1&nbsp;&nbsp;0&nbsp;-1</spanx></c>
3224 <c>12</c> <c><spanx style="vbare">-2&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;2</spanx></c>
3225 <c>13</c> <c><spanx style="vbare">-2&nbsp;&nbsp;0&nbsp;&nbsp;1&nbsp;&nbsp;3</spanx></c>
3226 <c>14</c> <c><spanx style="vbare">&nbsp;2&nbsp;&nbsp;1&nbsp;-1&nbsp;-2</spanx></c>
3227 <c>15</c> <c><spanx style="vbare">-3&nbsp;-1&nbsp;&nbsp;1&nbsp;&nbsp;3</spanx></c>
3228 <c>16</c> <c><spanx style="vbare">&nbsp;2&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;-2</spanx></c>
3229 <c>17</c> <c><spanx style="vbare">&nbsp;3&nbsp;&nbsp;1&nbsp;&nbsp;0&nbsp;-2</spanx></c>
3230 <c>18</c> <c><spanx style="vbare">-3&nbsp;-1&nbsp;&nbsp;2&nbsp;&nbsp;4</spanx></c>
3231 <c>19</c> <c><spanx style="vbare">-4&nbsp;-1&nbsp;&nbsp;1&nbsp;&nbsp;4</spanx></c>
3232 <c>20</c> <c><spanx style="vbare">&nbsp;3&nbsp;&nbsp;1&nbsp;-1&nbsp;-3</spanx></c>
3233 <c>21</c> <c><spanx style="vbare">-4&nbsp;-1&nbsp;&nbsp;2&nbsp;&nbsp;5</spanx></c>
3234 <c>22</c> <c><spanx style="vbare">&nbsp;4&nbsp;&nbsp;2&nbsp;-1&nbsp;-3</spanx></c>
3235 <c>23</c> <c><spanx style="vbare">&nbsp;4&nbsp;&nbsp;1&nbsp;-1&nbsp;-4</spanx></c>
3236 <c>24</c> <c><spanx style="vbare">-5&nbsp;-1&nbsp;&nbsp;2&nbsp;&nbsp;6</spanx></c>
3237 <c>25</c> <c><spanx style="vbare">&nbsp;5&nbsp;&nbsp;2&nbsp;-1&nbsp;-4</spanx></c>
3238 <c>26</c> <c><spanx style="vbare">-6&nbsp;-2&nbsp;&nbsp;2&nbsp;&nbsp;6</spanx></c>
3239 <c>27</c> <c><spanx style="vbare">-5&nbsp;-2&nbsp;&nbsp;2&nbsp;&nbsp;5</spanx></c>
3240 <c>28</c> <c><spanx style="vbare">&nbsp;6&nbsp;&nbsp;2&nbsp;-1&nbsp;-5</spanx></c>
3241 <c>29</c> <c><spanx style="vbare">-7&nbsp;-2&nbsp;&nbsp;3&nbsp;&nbsp;8</spanx></c>
3242 <c>30</c> <c><spanx style="vbare">&nbsp;6&nbsp;&nbsp;2&nbsp;-2&nbsp;-6</spanx></c>
3243 <c>31</c> <c><spanx style="vbare">&nbsp;5&nbsp;&nbsp;2&nbsp;-2&nbsp;-5</spanx></c>
3244 <c>32</c> <c><spanx style="vbare">&nbsp;8&nbsp;&nbsp;3&nbsp;-2&nbsp;-7</spanx></c>
3245 <c>33</c> <c><spanx style="vbare">-9&nbsp;-3&nbsp;&nbsp;3&nbsp;&nbsp;9</spanx></c>
3246 </texttable>
3247
3248 <t>
3249 The final pitch lag for each subframe is assembled in silk_decode_pitch()
3250  (silk_decode_pitch.c).
3251 Let lag be the primary pitch lag for the current SILK frame, contour_index be
3252  index of the VQ codebook, and lag_cb[contour_index][k] be the corresponding
3253  entry of the codebook from the appropriate table given above for the k'th
3254  subframe.
3255 Then the final pitch lag for that subframe is
3256 <figure align="center">
3257 <artwork align="center"><![CDATA[
3258 pitch_lags[k] = clamp(lag_min, lag + lag_cb[contour_index][k],
3259                       lag_max)
3260 ]]></artwork>
3261 </figure>
3262  where lag_min and lag_max are the values from the "Minimum Lag" and
3263  "Maximum Lag" columns of <xref target="silk_abs_pitch_low_pdf"/>,
3264  respectively.
3265 </t>
3266
3267 </section>
3268
3269 <section anchor="silk_ltp_coeffs" title="LTP Filter Coefficients">
3270 <t>
3271 SILK can use a separate 5-tap pitch filter for each subframe.
3272 It selects the filter to use from one of three codebooks.
3273 The three codebooks each represent different rate-distortion trade-offs, with
3274  average rates of 1.61&nbsp;bits/subframe, 3.68&nbsp;bits/subframe, and
3275  4.85&nbsp;bits/subframe, respectively.
3276 </t>
3277
3278 <t>
3279 The importance of the filter coefficients generally depends on two factors: the
3280  periodicity of the signal and relative energy between the current subframe and
3281  the signal from one period earlier.
3282 Greater periodicity and decaying energy both lead to more important filter
3283  coefficients, and thus should be coded with lower distortion and higher rate.
3284 These properties are relatively stable over the duration of a single SILK
3285  frame, hence all of the subframes in a SILK frame must choose their filter
3286  from the same codebook.
3287 This is signaled with an explicitly-coded "periodicity index".
3288 This immediately follows the subframe pitch lags, and is coded using the
3289  3-entry PDF from <xref target="silk_perindex_pdf"/>.
3290 </t>
3291
3292 <texttable anchor="silk_perindex_pdf" title="Periodicity Index PDF">
3293 <ttcol>PDF</ttcol>
3294 <c>{77, 80, 99}/256</c>
3295 </texttable>
3296
3297 <t>
3298 The index of the filter to use for each subframe follows.
3299 They are all coded using the PDF from <xref target="silk_ltp_filter_pdfs"/>
3300  corresponding to the periodicity index.
3301 <xref target="silk_ltp_filter_coeffs0"/> through
3302  <xref target="silk_ltp_filter_coeffs2"/> contain the corresponding filter taps
3303  as signed Q7 integers.
3304 </t>
3305
3306 <texttable anchor="silk_ltp_filter_pdfs" title="LTP Filter PDFs">
3307 <ttcol>Periodicity Index</ttcol>
3308 <ttcol align="right">Codebook Size</ttcol>
3309 <ttcol>PDF</ttcol>
3310 <c>0</c>  <c>8</c> <c>{185, 15, 13, 13, 9, 9, 6, 6}/256</c>
3311 <c>1</c> <c>16</c> <c>{57, 34, 21, 20, 15, 13, 12, 13,
3312                        10, 10,  9, 10,  9,  8,  7,  8}/256</c>
3313 <c>2</c> <c>32</c> <c>{15, 16, 14, 12, 12, 12, 11, 11,
3314                        11, 10,  9,  9,  9,  9,  8,  8,
3315                         8,  8,  7,  7,  6,  6,  5,  4,
3316                         5,  4,  4,  4,  3,  4,  3,  2}/256</c>
3317 </texttable>
3318
3319 <texttable anchor="silk_ltp_filter_coeffs0"
3320  title="Codebook Vectors for LTP Filter, Periodicity Index 0">
3321 <ttcol>Index</ttcol>
3322 <ttcol align="right">Filter Taps (Q7)</ttcol>
3323  <c>0</c>
3324 <c><spanx style="vbare">&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;24&nbsp;&nbsp;&nbsp;7&nbsp;&nbsp;&nbsp;5</spanx></c>
3325  <c>1</c>
3326 <c><spanx style="vbare">&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;0</spanx></c>
3327  <c>2</c>
3328 <c><spanx style="vbare">&nbsp;12&nbsp;&nbsp;28&nbsp;&nbsp;41&nbsp;&nbsp;13&nbsp;&nbsp;-4</spanx></c>
3329  <c>3</c>
3330 <c><spanx style="vbare">&nbsp;-9&nbsp;&nbsp;15&nbsp;&nbsp;42&nbsp;&nbsp;25&nbsp;&nbsp;14</spanx></c>
3331  <c>4</c>
3332 <c><spanx style="vbare">&nbsp;&nbsp;1&nbsp;&nbsp;-2&nbsp;&nbsp;62&nbsp;&nbsp;41&nbsp;&nbsp;-9</spanx></c>
3333  <c>5</c>
3334 <c><spanx style="vbare">-10&nbsp;&nbsp;37&nbsp;&nbsp;65&nbsp;&nbsp;-4&nbsp;&nbsp;&nbsp;3</spanx></c>
3335  <c>6</c>
3336 <c><spanx style="vbare">&nbsp;-6&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;66&nbsp;&nbsp;&nbsp;7&nbsp;&nbsp;-8</spanx></c>
3337  <c>7</c>
3338 <c><spanx style="vbare">&nbsp;16&nbsp;&nbsp;14&nbsp;&nbsp;38&nbsp;&nbsp;-3&nbsp;&nbsp;33</spanx></c>
3339 </texttable>
3340
3341 <texttable anchor="silk_ltp_filter_coeffs1"
3342  title="Codebook Vectors for LTP Filter, Periodicity Index 1">
3343 <ttcol>Index</ttcol>
3344 <ttcol align="right">Filter Taps (Q7)</ttcol>
3345
3346  <c>0</c>
3347 <c><spanx style="vbare">&nbsp;13&nbsp;&nbsp;22&nbsp;&nbsp;39&nbsp;&nbsp;23&nbsp;&nbsp;12</spanx></c>
3348  <c>1</c>
3349 <c><spanx style="vbare">&nbsp;-1&nbsp;&nbsp;36&nbsp;&nbsp;64&nbsp;&nbsp;27&nbsp;&nbsp;-6</spanx></c>
3350  <c>2</c>
3351 <c><spanx style="vbare">&nbsp;-7&nbsp;&nbsp;10&nbsp;&nbsp;55&nbsp;&nbsp;43&nbsp;&nbsp;17</spanx></c>
3352  <c>3</c>
3353 <c><spanx style="vbare">&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;8&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;1</spanx></c>
3354  <c>4</c>
3355 <c><spanx style="vbare">&nbsp;&nbsp;6&nbsp;-11&nbsp;&nbsp;74&nbsp;&nbsp;53&nbsp;&nbsp;-9</spanx></c>
3356  <c>5</c>
3357 <c><spanx style="vbare">-12&nbsp;&nbsp;55&nbsp;&nbsp;76&nbsp;-12&nbsp;&nbsp;&nbsp;8</spanx></c>
3358  <c>6</c>
3359 <c><spanx style="vbare">&nbsp;-3&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;93&nbsp;&nbsp;27&nbsp;&nbsp;-4</spanx></c>
3360  <c>7</c>
3361 <c><spanx style="vbare">&nbsp;26&nbsp;&nbsp;39&nbsp;&nbsp;59&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;-8</spanx></c>
3362  <c>8</c>
3363 <c><spanx style="vbare">&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;77&nbsp;&nbsp;11&nbsp;&nbsp;&nbsp;9</spanx></c>
3364  <c>9</c>
3365 <c><spanx style="vbare">&nbsp;-8&nbsp;&nbsp;22&nbsp;&nbsp;44&nbsp;&nbsp;-6&nbsp;&nbsp;&nbsp;7</spanx></c>
3366 <c>10</c>
3367 <c><spanx style="vbare">&nbsp;40&nbsp;&nbsp;&nbsp;9&nbsp;&nbsp;26&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;9</spanx></c>
3368 <c>11</c>
3369 <c><spanx style="vbare">&nbsp;-7&nbsp;&nbsp;20&nbsp;101&nbsp;&nbsp;-7&nbsp;&nbsp;&nbsp;4</spanx></c>
3370 <c>12</c>
3371 <c><spanx style="vbare">&nbsp;&nbsp;3&nbsp;&nbsp;-8&nbsp;&nbsp;42&nbsp;&nbsp;26&nbsp;&nbsp;&nbsp;0</spanx></c>
3372 <c>13</c>
3373 <c><spanx style="vbare">-15&nbsp;&nbsp;33&nbsp;&nbsp;68&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;23</spanx></c>
3374 <c>14</c>
3375 <c><spanx style="vbare">&nbsp;-2&nbsp;&nbsp;55&nbsp;&nbsp;46&nbsp;&nbsp;-2&nbsp;&nbsp;15</spanx></c>
3376 <c>15</c>
3377 <c><spanx style="vbare">&nbsp;&nbsp;3&nbsp;&nbsp;-1&nbsp;&nbsp;21&nbsp;&nbsp;16&nbsp;&nbsp;41</spanx></c>
3378 </texttable>
3379
3380 <texttable anchor="silk_ltp_filter_coeffs2"
3381  title="Codebook Vectors for LTP Filter, Periodicity Index 2">
3382 <ttcol>Index</ttcol>
3383 <ttcol align="right">Filter Taps (Q7)</ttcol>
3384  <c>0</c>
3385 <c><spanx style="vbare">&nbsp;-6&nbsp;&nbsp;27&nbsp;&nbsp;61&nbsp;&nbsp;39&nbsp;&nbsp;&nbsp;5</spanx></c>
3386  <c>1</c>
3387 <c><spanx style="vbare">-11&nbsp;&nbsp;42&nbsp;&nbsp;88&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;1</spanx></c>
3388  <c>2</c>
3389 <c><spanx style="vbare">&nbsp;-2&nbsp;&nbsp;60&nbsp;&nbsp;65&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;-4</spanx></c>
3390  <c>3</c>
3391 <c><spanx style="vbare">&nbsp;-1&nbsp;&nbsp;-5&nbsp;&nbsp;73&nbsp;&nbsp;56&nbsp;&nbsp;&nbsp;1</spanx></c>
3392  <c>4</c>
3393 <c><spanx style="vbare">&nbsp;-9&nbsp;&nbsp;19&nbsp;&nbsp;94&nbsp;&nbsp;29&nbsp;&nbsp;-9</spanx></c>
3394  <c>5</c>
3395 <c><spanx style="vbare">&nbsp;&nbsp;0&nbsp;&nbsp;12&nbsp;&nbsp;99&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;4</spanx></c>
3396  <c>6</c>
3397 <c><spanx style="vbare">&nbsp;&nbsp;8&nbsp;-19&nbsp;102&nbsp;&nbsp;46&nbsp;-13</spanx></c>
3398  <c>7</c>
3399 <c><spanx style="vbare">&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;13&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;2</spanx></c>
3400  <c>8</c>
3401 <c><spanx style="vbare">&nbsp;&nbsp;9&nbsp;-21&nbsp;&nbsp;84&nbsp;&nbsp;72&nbsp;-18</spanx></c>
3402  <c>9</c>
3403 <c><spanx style="vbare">-11&nbsp;&nbsp;46&nbsp;104&nbsp;-22&nbsp;&nbsp;&nbsp;8</spanx></c>
3404 <c>10</c>
3405 <c><spanx style="vbare">&nbsp;18&nbsp;&nbsp;38&nbsp;&nbsp;48&nbsp;&nbsp;23&nbsp;&nbsp;&nbsp;0</spanx></c>
3406 <c>11</c>
3407 <c><spanx style="vbare">-16&nbsp;&nbsp;70&nbsp;&nbsp;83&nbsp;-21&nbsp;&nbsp;11</spanx></c>
3408 <c>12</c>
3409 <c><spanx style="vbare">&nbsp;&nbsp;5&nbsp;-11&nbsp;117&nbsp;&nbsp;22&nbsp;&nbsp;-8</spanx></c>
3410 <c>13</c>
3411 <c><spanx style="vbare">&nbsp;-6&nbsp;&nbsp;23&nbsp;117&nbsp;-12&nbsp;&nbsp;&nbsp;3</spanx></c>
3412 <c>14</c>
3413 <c><spanx style="vbare">&nbsp;&nbsp;3&nbsp;&nbsp;-8&nbsp;&nbsp;95&nbsp;&nbsp;28&nbsp;&nbsp;&nbsp;4</spanx></c>
3414 <c>15</c>
3415 <c><spanx style="vbare">-10&nbsp;&nbsp;15&nbsp;&nbsp;77&nbsp;&nbsp;60&nbsp;-15</spanx></c>
3416 <c>16</c>
3417 <c><spanx style="vbare">&nbsp;-1&nbsp;&nbsp;&nbsp;4&nbsp;124&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;-4</spanx></c>
3418 <c>17</c>
3419 <c><spanx style="vbare">&nbsp;&nbsp;3&nbsp;&nbsp;38&nbsp;&nbsp;84&nbsp;&nbsp;24&nbsp;-25</spanx></c>
3420 <c>18</c>
3421 <c><spanx style="vbare">&nbsp;&nbsp;2&nbsp;&nbsp;13&nbsp;&nbsp;42&nbsp;&nbsp;13&nbsp;&nbsp;31</spanx></c>
3422 <c>19</c>
3423 <c><spanx style="vbare">&nbsp;21&nbsp;&nbsp;-4&nbsp;&nbsp;56&nbsp;&nbsp;46&nbsp;&nbsp;-1</spanx></c>
3424 <c>20</c>
3425 <c><spanx style="vbare">&nbsp;-1&nbsp;&nbsp;35&nbsp;&nbsp;79&nbsp;-13&nbsp;&nbsp;19</spanx></c>
3426 <c>21</c>
3427 <c><spanx style="vbare">&nbsp;-7&nbsp;&nbsp;65&nbsp;&nbsp;88&nbsp;&nbsp;-9&nbsp;-14</spanx></c>
3428 <c>22</c>
3429 <c><spanx style="vbare">&nbsp;20&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;81&nbsp;&nbsp;49&nbsp;-29</spanx></c>
3430 <c>23</c>
3431 <c><spanx style="vbare">&nbsp;20&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;75&nbsp;&nbsp;&nbsp;3&nbsp;-17</spanx></c>
3432 <c>24</c>
3433 <c><spanx style="vbare">&nbsp;&nbsp;5&nbsp;&nbsp;-9&nbsp;&nbsp;44&nbsp;&nbsp;92&nbsp;&nbsp;-8</spanx></c>
3434 <c>25</c>
3435 <c><spanx style="vbare">&nbsp;&nbsp;1&nbsp;&nbsp;-3&nbsp;&nbsp;22&nbsp;&nbsp;69&nbsp;&nbsp;31</spanx></c>
3436 <c>26</c>
3437 <c><spanx style="vbare">&nbsp;-6&nbsp;&nbsp;95&nbsp;&nbsp;41&nbsp;-12&nbsp;&nbsp;&nbsp;5</spanx></c>
3438 <c>27</c>
3439 <c><spanx style="vbare">&nbsp;39&nbsp;&nbsp;67&nbsp;&nbsp;16&nbsp;&nbsp;-4&nbsp;&nbsp;&nbsp;1</spanx></c>
3440 <c>28</c>
3441 <c><spanx style="vbare">&nbsp;&nbsp;0&nbsp;&nbsp;-6&nbsp;120&nbsp;&nbsp;55&nbsp;-36</spanx></c>
3442 <c>29</c>
3443 <c><spanx style="vbare">-13&nbsp;&nbsp;44&nbsp;122&nbsp;&nbsp;&nbsp;4&nbsp;-24</spanx></c>
3444 <c>30</c>
3445 <c><spanx style="vbare">&nbsp;81&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;11&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;7</spanx></c>
3446 <c>31</c>
3447 <c><spanx style="vbare">&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;9&nbsp;&nbsp;10&nbsp;&nbsp;88</spanx></c>
3448 </texttable>
3449
3450 </section>
3451
3452 <section anchor="silk_ltp_scaling" title="LTP Scaling Parameter">
3453 <t>
3454 In some circumstances an LTP scaling parameter appears after the LTP filter
3455  coefficients.
3456 This allows the encoder to trade off the prediction gain between
3457  packets against the recovery time after packet loss.
3458 Like the quantization gains, only the first LBRR frame in an Opus frame,
3459  an LBRR frame where the prior LBRR frame was not coded, and the first regular
3460  SILK frame in each channel of an Opus frame include this field, and, like all
3461  of the other LTP parameters, only for frames that are also voiced.
3462 Unlike absolute-coding for pitch lags, a regular SILK frame other than the
3463  first one in a channel will not include this field even if the prior frame was
3464  not voiced.
3465 </t>
3466 <t>
3467 If present, the value is coded using the 3-entry PDF in
3468  <xref target="silk_ltp_scaling_pdf"/>.
3469 The three possible values represent Q14 scale factors of 15565, 12288, and
3470  8192, respectively (corresponding to approximately 0.95, 0.75, and 0.5).
3471 Frames that do not code the scaling parameter use the default factor of 15565
3472  (approximately 0.95).
3473 </t>
3474
3475 <texttable anchor="silk_ltp_scaling_pdf"
3476  title="PDF for LTP Scaling Parameter">
3477 <ttcol align="left">PDF</ttcol>
3478 <c>{128, 64, 64}/256</c>
3479 </texttable>
3480
3481 </section>
3482
3483 </section>
3484
3485 <section anchor="silk_seed" title="Linear Congruential Generator (LCG) Seed">
3486 <t>
3487 SILK uses a linear congruential generator (LCG) to inject pseudorandom noise
3488  into the quantized excitation.
3489 To ensure synchronization of this process between the encoder and decoder, each
3490  SILK frame stores a 2-bit seed after the LTP parameters (if any).
3491 The encoder may consider the choice of this seed during quantization, meaning
3492  the flexibility to choose the LCG seed can reduce distortion.
3493 The seed is decoded with the uniform 4-entry PDF in
3494  <xref target="silk_seed_pdf"/>, yielding a value between 0 and 3, inclusive.
3495 </t>
3496
3497 <texttable anchor="silk_seed_pdf"
3498  title="PDF for LCG Seed">
3499 <ttcol align="left">PDF</ttcol>
3500 <c>{64, 64, 64, 64}/256</c>
3501 </texttable>
3502
3503 </section>
3504
3505 <section anchor="silk_excitation" title="Excitation">
3506 <t>
3507 SILK codes the excitation using a modified version of the Pyramid Vector
3508  Quantization (PVQ) codebook <xref target="PVQ"/>.
3509 The PVQ codebook is designed for Laplace-distributed values and consists of all
3510  sums of K signed, unit pulses in a vector of dimension N, where two pulses at
3511  the same position are required to have the same sign.
3512 Thus the codebook includes all integer codevectors y of dimension N that
3513  satisfy
3514 <figure align="center">
3515 <artwork align="center"><![CDATA[
3516 N-1
3517 __
3518 \  abs(y[j]) = K .
3519 /_
3520 j=0
3521 ]]></artwork>
3522 </figure>
3523 Unlike regular PVQ, SILK uses a variable-length, rather than fixed-length,
3524  encoding.
3525 This encoding is better suited to the more Gaussian-like distribution of the
3526  coefficient magnitudes and the non-uniform distribution of their signs (caused
3527  by the quantization offset described below).
3528 SILK also handles large codebooks by coding the least significant bits (LSb's)
3529  of each coefficient directly.
3530 This adds a small coding efficiency loss, but greatly reduces the computation
3531  time and ROM size required for decoding, as implemented in
3532  silk_decode_pulses() (silk_decode_pulses.c).
3533 </t>
3534
3535 <t>
3536 SILK fixes the dimension of the codebook to N&nbsp;=&nbsp;16.
3537 The excitation is made up of a number of "shell blocks", each 16 samples in
3538  size.
3539 <xref target="silk_shell_block_table"/> lists the number of shell blocks
3540  required for a SILK frame for each possible audio bandwidth and frame size.
3541 10&nbsp;ms MB frames nominally contain 120&nbsp;samples (10&nbsp;ms at
3542  12&nbsp;kHz), which is not a multiple of 16.
3543 This is handled by coding 8 shell blocks (128 samples) and discarding the final
3544  8 samples of the last block.
3545 The decoder contains no special case that prevents an encoder from placing
3546  pulses in these samples, and they must be correctly parsed from the bitstream
3547  if present, but they are otherwise ignored.
3548 </t>
3549
3550 <texttable anchor="silk_shell_block_table"
3551  title="Number of Shell Blocks Per SILK Frame">
3552 <ttcol>Audio Bandwidth</ttcol>
3553 <ttcol>Frame Size</ttcol>
3554 <ttcol align="right">Number of Shell Blocks</ttcol>
3555 <c>NB</c> <c>10&nbsp;ms</c>  <c>5</c>
3556 <c>MB</c> <c>10&nbsp;ms</c>  <c>8</c>
3557 <c>WB</c> <c>10&nbsp;ms</c> <c>10</c>
3558 <c>NB</c> <c>20&nbsp;ms</c> <c>10</c>
3559 <c>MB</c> <c>20&nbsp;ms</c> <c>15</c>
3560 <c>WB</c> <c>20&nbsp;ms</c> <c>20</c>
3561 </texttable>
3562
3563 <section anchor="silk_rate_level" title="Rate Level">
3564 <t>
3565 The first symbol in the excitation is a "rate level", which is an index from 0
3566  to 8, inclusive, coded using the PDF in <xref target="silk_rate_level_pdfs"/>
3567  corresponding to the signal type of the current frame (from
3568  <xref target="silk_frame_type"/>).
3569 The rate level selects the PDF used to decode the number of pulses in
3570  the individual shell blocks.
3571 It does not directly convey any information about the bitrate or the number of
3572  pulses itself, but merely changes the probability of the symbols in
3573  <xref target="silk_pulse_counts"/>.
3574 Level&nbsp;0 provides a more efficient encoding at low rates generally, and
3575  level&nbsp;8 provides a more efficient encoding at high rates generally,
3576  though the most efficient level for a particular SILK frame may depend on the
3577  exact distribution of the coded symbols.
3578 An encoder should, but is not required to, use the most efficient rate level.
3579 </t>
3580
3581 <texttable anchor="silk_rate_level_pdfs"
3582  title="PDFs for the Rate Level">
3583 <ttcol>Signal Type</ttcol>
3584 <ttcol>PDF</ttcol>
3585 <c>Inactive or Unvoiced</c>
3586 <c>{15, 51, 12, 46, 45, 13, 33, 27, 14}/256</c>
3587 <c>Voiced</c>
3588 <c>{33, 30, 36, 17, 34, 49, 18, 21, 18}/256</c>
3589 </texttable>
3590
3591 </section>
3592
3593 <section anchor="silk_pulse_counts" title="Pulses Per Shell Block">
3594 <t>
3595 The total number of pulses in each of the shell blocks follows the rate level.
3596 The pulse counts for all of the shell blocks are coded consecutively, before
3597  the content of any of the blocks.
3598 Each block may have anywhere from 0 to 16 pulses, inclusive, coded using the
3599  18-entry PDF in <xref target="silk_pulse_count_pdfs"/> corresponding to the
3600  rate level from <xref target="silk_rate_level"/>.
3601 The special value 17 indicates that this block has one or more additional
3602  LSb's to decode for each coefficient.
3603 If the decoder encounters this value, it decodes another value for the actual
3604  pulse count of the block, but uses the PDF corresponding to the special rate
3605  level&nbsp;9 instead of the normal rate level.
3606 This process repeats until the decoder reads a value less than 17, and it then
3607  sets the number of extra LSb's used to the number of 17's decoded for that
3608  block.
3609 If it reads the value 17 ten times, then the next iteration uses the special
3610  rate level&nbsp;10 instead of 9.
3611 The probability of decoding a 17 when using the PDF for rate level&nbsp;10 is
3612  zero, ensuring that the number of LSb's for a block will not exceed 10.
3613 The cumulative distribution for rate level&nbsp;10 is just a shifted version of
3614  that for 9 and thus does not require any additional storage.
3615 </t>
3616
3617 <texttable anchor="silk_pulse_count_pdfs"
3618  title="PDFs for the Pulse Count">
3619 <ttcol>Rate Level</ttcol>
3620 <ttcol>PDF</ttcol>
3621 <c>0</c>
3622 <c>{131, 74, 25, 8, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}/256</c>
3623 <c>1</c>
3624 <c>{58, 93, 60, 23, 7, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}/256</c>
3625 <c>2</c>
3626 <c>{43, 51, 46, 33, 24, 16, 11, 8, 6, 3, 3, 3, 2, 1, 1, 2, 1, 2}/256</c>
3627 <c>3</c>
3628 <c>{17, 52, 71, 57, 31, 12, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}/256</c>
3629 <c>4</c>
3630 <c>{6, 21, 41, 53, 49, 35, 21, 11, 6, 3, 2, 2, 1, 1, 1, 1, 1, 1}/256</c>
3631 <c>5</c>
3632 <c>{7, 14, 22, 28, 29, 28, 25, 20, 17, 13, 11, 9, 7, 5, 4, 4, 3, 10}/256</c>
3633 <c>6</c>
3634 <c>{2, 5, 14, 29, 42, 46, 41, 31, 19, 11, 6, 3, 2, 1, 1, 1, 1, 1}/256</c>
3635 <c>7</c>
3636 <c>{1, 2, 4, 10, 19, 29, 35, 37, 34, 28, 20, 14, 8, 5, 4, 2, 2, 2}/256</c>
3637 <c>8</c>
3638 <c>{1, 2, 2, 5, 9, 14, 20, 24, 27, 28, 26, 23, 20, 15, 11, 8, 6, 15}/256</c>
3639 <c>9</c>
3640 <c>{1, 1, 1, 6, 27, 58, 56, 39, 25, 14, 10, 6, 3, 3, 2, 1, 1, 2}/256</c>
3641 <c>10</c>
3642 <c>{2, 1, 6, 27, 58, 56, 39, 25, 14, 10, 6, 3, 3, 2, 1, 1, 2, 0}/256</c>
3643 </texttable>
3644
3645 </section>
3646
3647 <section anchor="silk_pulse_locations" title="Pulse Location Decoding">
3648 <t>
3649 The locations of the pulses in each shell block follows the pulse counts,
3650  as decoded by silk_shell_decoder() (silk_shell_coder.c).
3651 As with the pulse counts, these locations are coded for all the shell blocks
3652  before any of the remaining information for each block.
3653 Unlike many other codecs, SILK places no restriction on the distribution of
3654  pulses within a shell block.
3655 All of the pulses may be placed in a single location, or each one in a unique
3656  location, or anything in between.
3657 </t>
3658
3659 <t>
3660 The location of pulses is coded by recursively partitioning each block into
3661  halves, and coding how many pulses fall on the left side of the split.
3662 All remaining pulses must fall on the right side of the split.
3663 The process then recurses into the left half, and after that returns, the
3664  right half (preorder traversal).
3665 The PDF to use is chosen by the size of the current partition (16, 8, 4, or 2)
3666  and the number of pulses in the partition (1 to 16, inclusive).
3667 <xref target="silk_shell_code3_pdfs"/> through
3668  <xref target="silk_shell_code0_pdfs"/> list the PDFs used for each partition
3669  size and pulse count.
3670 This process skips partitions without any pulses, i.e., where the initial pulse
3671  count from <xref target="silk_pulse_counts"/> was zero, or where the split in
3672  the prior level indicated that all of the pulses fell on the other side.
3673 These partitions have nothing to code, so they require no PDF.
3674 </t>
3675
3676 <texttable anchor="silk_shell_code3_pdfs"
3677  title="PDFs for Pulse Count Split, 16 Sample Partitions">
3678 <ttcol>Pulse Count</ttcol>
3679 <ttcol>PDF</ttcol>
3680  <c>1</c> <c>{126, 130}/256</c>
3681  <c>2</c> <c>{56, 142, 58}/256</c>
3682  <c>3</c> <c>{25, 101, 104, 26}/256</c>
3683  <c>4</c> <c>{12, 60, 108, 64, 12}/256</c>
3684  <c>5</c> <c>{7, 35, 84, 87, 37, 6}/256</c>
3685  <c>6</c> <c>{4, 20, 59, 86, 63, 21, 3}/256</c>
3686  <c>7</c> <c>{3, 12, 38, 72, 75, 42, 12, 2}/256</c>
3687  <c>8</c> <c>{2, 8, 25, 54, 73, 59, 27, 7, 1}/256</c>
3688  <c>9</c> <c>{2, 5, 17, 39, 63, 65, 42, 18, 4, 1}/256</c>
3689 <c>10</c> <c>{1, 4, 12, 28, 49, 63, 54, 30, 11, 3, 1}/256</c>
3690 <c>11</c> <c>{1, 4, 8, 20, 37, 55, 57, 41, 22, 8, 2, 1}/256</c>
3691 <c>12</c> <c>{1, 3, 7, 15, 28, 44, 53, 48, 33, 16, 6, 1, 1}/256</c>
3692 <c>13</c> <c>{1, 2, 6, 12, 21, 35, 47, 48, 40, 25, 12, 5, 1, 1}/256</c>
3693 <c>14</c> <c>{1, 1, 4, 10, 17, 27, 37, 47, 43, 33, 21, 9, 4, 1, 1}/256</c>
3694 <c>15</c> <c>{1, 1, 1, 8, 14, 22, 33, 40, 43, 38, 28, 16, 8, 1, 1, 1}/256</c>
3695 <c>16</c> <c>{1, 1, 1, 1, 13, 18, 27, 36, 41, 41, 34, 24, 14, 1, 1, 1, 1}/256</c>
3696 </texttable>
3697
3698 <texttable anchor="silk_shell_code2_pdfs"
3699  title="PDFs for Pulse Count Split, 8 Sample Partitions">
3700 <ttcol>Pulse Count</ttcol>
3701 <ttcol>PDF</ttcol>
3702  <c>1</c> <c>{127, 129}/256</c>
3703  <c>2</c> <c>{53, 149, 54}/256</c>
3704  <c>3</c> <c>{22, 105, 106, 23}/256</c>
3705  <c>4</c> <c>{11, 61, 111, 63, 10}/256</c>
3706  <c>5</c> <c>{6, 35, 86, 88, 36, 5}/256</c>
3707  <c>6</c> <c>{4, 20, 59, 87, 62, 21, 3}/256</c>
3708  <c>7</c> <c>{3, 13, 40, 71, 73, 41, 13, 2}/256</c>
3709  <c>8</c> <c>{3, 9, 27, 53, 70, 56, 28, 9, 1}/256</c>
3710  <c>9</c> <c>{3, 8, 19, 37, 57, 61, 44, 20, 6, 1}/256</c>
3711 <c>10</c> <c>{3, 7, 15, 28, 44, 54, 49, 33, 17, 5, 1}/256</c>
3712 <c>11</c> <c>{1, 7, 13, 22, 34, 46, 48, 38, 28, 14, 4, 1}/256</c>
3713 <c>12</c> <c>{1, 1, 11, 22, 27, 35, 42, 47, 33, 25, 10, 1, 1}/256</c>
3714 <c>13</c> <c>{1, 1, 6, 14, 26, 37, 43, 43, 37, 26, 14, 6, 1, 1}/256</c>
3715 <c>14</c> <c>{1, 1, 4, 10, 20, 31, 40, 42, 40, 31, 20, 10, 4, 1, 1}/256</c>
3716 <c>15</c> <c>{1, 1, 3, 8, 16, 26, 35, 38, 38, 35, 26, 16, 8, 3, 1, 1}/256</c>
3717 <c>16</c> <c>{1, 1, 2, 6, 12, 21, 30, 36, 38, 36, 30, 21, 12, 6, 2, 1, 1}/256</c>
3718 </texttable>
3719
3720 <texttable anchor="silk_shell_code1_pdfs"
3721  title="PDFs for Pulse Count Split, 4 Sample Partitions">
3722 <ttcol>Pulse Count</ttcol>
3723 <ttcol>PDF</ttcol>
3724  <c>1</c> <c>{127, 129}/256</c>
3725  <c>2</c> <c>{49, 157, 50}/256</c>
3726  <c>3</c> <c>{20, 107, 109, 20}/256</c>
3727  <c>4</c> <c>{11, 60, 113, 62, 10}/256</c>
3728  <c>5</c> <c>{7, 36, 84, 87, 36, 6}/256</c>
3729  <c>6</c> <c>{6, 24, 57, 82, 60, 23, 4}/256</c>
3730  <c>7</c> <c>{5, 18, 39, 64, 68, 42, 16, 4}/256</c>
3731  <c>8</c> <c>{6, 14, 29, 47, 61, 52, 30, 14, 3}/256</c>
3732  <c>9</c> <c>{1, 15, 23, 35, 51, 50, 40, 30, 10, 1}/256</c>
3733 <c>10</c> <c>{1, 1, 21, 32, 42, 52, 46, 41, 18, 1, 1}/256</c>
3734 <c>11</c> <c>{1, 6, 16, 27, 36, 42, 42, 36, 27, 16, 6, 1}/256</c>
3735 <c>12</c> <c>{1, 5, 12, 21, 31, 38, 40, 38, 31, 21, 12, 5, 1}/256</c>
3736 <c>13</c> <c>{1, 3, 9, 17, 26, 34, 38, 38, 34, 26, 17, 9, 3, 1}/256</c>
3737 <c>14</c> <c>{1, 3, 7, 14, 22, 29, 34, 36, 34, 29, 22, 14, 7, 3, 1}/256</c>
3738 <c>15</c> <c>{1, 2, 5, 11, 18, 25, 31, 35, 35, 31, 25, 18, 11, 5, 2, 1}/256</c>
3739 <c>16</c> <c>{1, 1, 4, 9, 15, 21, 28, 32, 34, 32, 28, 21, 15, 9, 4, 1, 1}/256</c>
3740 </texttable>
3741
3742 <texttable anchor="silk_shell_code0_pdfs"
3743  title="PDFs for Pulse Count Split, 2 Sample Partitions">
3744 <ttcol>Pulse Count</ttcol>
3745 <ttcol>PDF</ttcol>
3746  <c>1</c> <c>{128, 128}/256</c>
3747  <c>2</c> <c>{42, 172, 42}/256</c>
3748  <c>3</c> <c>{21, 107, 107, 21}/256</c>
3749  <c>4</c> <c>{12, 60, 112, 61, 11}/256</c>
3750  <c>5</c> <c>{8, 34, 86, 86, 35, 7}/256</c>
3751  <c>6</c> <c>{8, 23, 55, 90, 55, 20, 5}/256</c>
3752  <c>7</c> <c>{5, 15, 38, 72, 72, 36, 15, 3}/256</c>
3753  <c>8</c> <c>{6, 12, 27, 52, 77, 47, 20, 10, 5}/256</c>
3754  <c>9</c> <c>{6, 19, 28, 35, 40, 40, 35, 28, 19, 6}/256</c>
3755 <c>10</c> <c>{4, 14, 22, 31, 37, 40, 37, 31, 22, 14, 4}/256</c>
3756 <c>11</c> <c>{3, 10, 18, 26, 33, 38, 38, 33, 26, 18, 10, 3}/256</c>
3757 <c>12</c> <c>{2, 8, 13, 21, 29, 36, 38, 36, 29, 21, 13, 8, 2}/256</c>
3758 <c>13</c> <c>{1, 5, 10, 17, 25, 32, 38, 38, 32, 25, 17, 10, 5, 1}/256</c>
3759 <c>14</c> <c>{1, 4, 7, 13, 21, 29, 35, 36, 35, 29, 21, 13, 7, 4, 1}/256</c>
3760 <c>15</c> <c>{1, 2, 5, 10, 17, 25, 32, 36, 36, 32, 25, 17, 10, 5, 2, 1}/256</c>
3761 <c>16</c> <c>{1, 2, 4, 7, 13, 21, 28, 34, 36, 34, 28, 21, 13, 7, 4, 2, 1}/256</c>
3762 </texttable>
3763
3764 </section>
3765
3766 <section anchor="silk_shell_lsb" title="LSb Decoding">
3767 <t>
3768 After the decoder reads the pulse locations for all blocks, it reads the LSb's
3769  (if any) for each block in turn.
3770 Inside each block, it reads all the LSb's for each coefficient in turn, even
3771  those where no pulses were allocated, before proceeding to the next one.
3772 They are coded from most significant to least significant, and they all use the
3773  PDF in <xref target="silk_shell_lsb_pdf"/>.
3774 </t>
3775
3776 <texttable anchor="silk_shell_lsb_pdf" title="PDF for Excitation LSb's">
3777 <ttcol>PDF</ttcol>
3778 <c>{136, 120}/256</c>
3779 </texttable>
3780
3781 <t>
3782 The number of LSb's read for each coefficient in a block is determined in
3783  <xref target="silk_pulse_counts"/>.
3784 The magnitude of the coefficient is initially equal to the number of pulses
3785  placed at that location in <xref target="silk_pulse_locations"/>.
3786 As each LSb is decoded, the magnitude is doubled, and then the value of the LSb
3787  added to it, to obtain an updated magnitude.
3788 </t>
3789 </section>
3790
3791 <section anchor="silk_signs" title="Sign Decoding">
3792 <t>
3793 After decoding the pulse locations and the LSb's, the decoder knows the
3794  magnitude of each coefficient in the excitation.
3795 It then decodes a sign for all coefficients with a non-zero magnitude, using
3796  one of the PDFs from <xref target="silk_sign_pdfs"/>.
3797 If the value decoded is 0, then the coefficient magnitude is negated.
3798 Otherwise, it remains positive.
3799 </t>
3800
3801 <t>
3802 The decoder chooses the PDF for the sign based on the signal type and
3803  quantization offset type (from <xref target="silk_frame_type"/>) and the
3804  number of pulses in the block (from <xref target="silk_pulse_counts"/>).
3805 The number of pulses in the block does not take into account any LSb's.
3806 If a block has no pulses, even if it has some LSb's (and thus may have some
3807  non-zero coefficients), then no signs are decoded.
3808 In that case, any non-zero coefficients use a positive sign.
3809 </t>
3810
3811 <texttable anchor="silk_sign_pdfs"
3812  title="PDFs for Excitation Signs">
3813 <ttcol>Signal Type</ttcol>
3814 <ttcol>Quantization Offset Type</ttcol>
3815 <ttcol>Pulse Count</ttcol>
3816 <ttcol>PDF</ttcol>
3817 <c>Inactive</c> <c>Low</c>  <c>1</c>         <c>{207, 49}/256</c>
3818 <c>Inactive</c> <c>Low</c>  <c>2</c>         <c>{189, 67}/256</c>
3819 <c>Inactive</c> <c>Low</c>  <c>3</c>         <c>{179, 77}/256</c>
3820 <c>Inactive</c> <c>Low</c>  <c>4</c>         <c>{174, 82}/256</c>
3821 <c>Inactive</c> <c>Low</c>  <c>5</c>         <c>{163, 93}/256</c>
3822 <c>Inactive</c> <c>Low</c>  <c>6 or more</c> <c>{157, 99}/256</c>
3823 <c>Inactive</c> <c>High</c> <c>1</c>         <c>{245, 11}/256</c>
3824 <c>Inactive</c> <c>High</c> <c>2</c>         <c>{238, 18}/256</c>
3825 <c>Inactive</c> <c>High</c> <c>3</c>         <c>{232, 24}/256</c>
3826 <c>Inactive</c> <c>High</c> <c>4</c>         <c>{225, 31}/256</c>
3827 <c>Inactive</c> <c>High</c> <c>5</c>         <c>{220, 36}/256</c>
3828 <c>Inactive</c> <c>High</c> <c>6 or more</c> <c>{211, 45}/256</c>
3829 <c>Unvoiced</c> <c>Low</c>  <c>1</c>         <c>{210, 46}/256</c>
3830 <c>Unvoiced</c> <c>Low</c>  <c>2</c>         <c>{190, 66}/256</c>
3831 <c>Unvoiced</c> <c>Low</c>  <c>3</c>         <c>{178, 78}/256</c>
3832 <c>Unvoiced</c> <c>Low</c>  <c>4</c>         <c>{169, 87}/256</c>
3833 <c>Unvoiced</c> <c>Low</c>  <c>5</c>         <c>{162, 94}/256</c>
3834 <c>Unvoiced</c> <c>Low</c>  <c>6 or more</c> <c>{152, 104}/256</c>
3835 <c>Unvoiced</c> <c>High</c> <c>1</c>         <c>{242, 14}/256</c>
3836 <c>Unvoiced</c> <c>High</c> <c>2</c>         <c>{235, 21}/256</c>
3837 <c>Unvoiced</c> <c>High</c> <c>3</c>         <c>{224, 32}/256</c>
3838 <c>Unvoiced</c> <c>High</c> <c>4</c>         <c>{214, 42}/256</c>
3839 <c>Unvoiced</c> <c>High</c> <c>5</c>         <c>{205, 51}/256</c>
3840 <c>Unvoiced</c> <c>High</c> <c>6 or more</c> <c>{190, 66}/256</c>
3841 <c>Voiced</c>   <c>Low</c>  <c>1</c>         <c>{162, 94}/256</c>
3842 <c>Voiced</c>   <c>Low</c>  <c>2</c>         <c>{152, 104}/256</c>
3843 <c>Voiced</c>   <c>Low</c>  <c>3</c>         <c>{147, 109}/256</c>
3844 <c>Voiced</c>   <c>Low</c>  <c>4</c>         <c>{144, 112}/256</c>
3845 <c>Voiced</c>   <c>Low</c>  <c>5</c>         <c>{141, 115}/256</c>
3846 <c>Voiced</c>   <c>Low</c>  <c>6 or more</c> <c>{138, 118}/256</c>
3847 <c>Voiced</c>   <c>High</c> <c>1</c>         <c>{203, 53}/256</c>
3848 <c>Voiced</c>   <c>High</c> <c>2</c>         <c>{187, 69}/256</c>
3849 <c>Voiced</c>   <c>High</c> <c>3</c>         <c>{176, 80}/256</c>
3850 <c>Voiced</c>   <c>High</c> <c>4</c>         <c>{168, 88}/256</c>
3851 <c>Voiced</c>   <c>High</c> <c>5</c>         <c>{161, 95}/256</c>
3852 <c>Voiced</c>   <c>High</c> <c>6 or more</c> <c>{154, 102}/256</c>
3853 </texttable>
3854
3855 </section>
3856
3857 </section>
3858
3859 </section>
3860
3861 </section>
3862
3863
3864 <section title="CELT Decoder">
3865
3866 <t>
3867 The CELT layer is decoded based on the following symbols and sets of symbols:
3868 </t>
3869
3870 <texttable anchor='table_example'>
3871 <ttcol align='center'>Symbol(s)</ttcol>
3872 <ttcol align='center'>PDF</ttcol>
3873 <ttcol align='center'>Condition</ttcol>
3874 <c>silence</c>      <c>{32767, 1}/32768</c> <c></c>
3875 <c>post-filter</c>  <c>{1, 1}/2</c> <c></c>
3876 <c>octave</c>       <c>uniform (6)</c><c>post-filter</c>
3877 <c>period</c>       <c>raw bits (4+octave)</c><c>post-filter</c>
3878 <c>gain</c>         <c>raw bits (3)</c><c>post-filter</c>
3879 <c>tapset</c>       <c>{2, 1, 1}/4</c><c>post-filter</c>
3880 <c>transient</c>    <c>{7, 1}/8</c><c></c>
3881 <c>intra</c>        <c>{7, 1}/8</c><c></c>
3882 <c>coarse energy</c><c><xref target="energy-decoding"/></c><c></c>
3883 <c>tf_change</c>    <c><xref target="transient-decoding"/></c><c></c>
3884 <c>tf_select</c>    <c>{1, 1}/2</c><c><xref target="transient-decoding"/></c>
3885 <c>spread</c>       <c>{7, 2, 21, 2}/32</c><c></c>
3886 <c>dyn. alloc.</c>  <c><xref target="allocation"/></c><c></c>
3887 <c>alloc. trim</c>  <c>{2, 2, 5, 10, 22, 46, 22, 10, 5, 2, 2}/128</c><c></c>
3888 <c>skip</c>         <c>{1, 1}/2</c><c><xref target="allocation"/></c>
3889 <c>intensity</c>    <c>uniform</c><c><xref target="allocation"/></c>
3890 <c>dual</c>         <c>{1, 1}/2</c><c></c>
3891 <c>fine energy</c>  <c><xref target="energy-decoding"/></c><c></c>
3892 <c>residual</c>     <c><xref target="PVQ-decoder"/></c><c></c>
3893 <c>anti-collapse</c><c>{1, 1}/2</c><c><xref target="anti-collapse"/></c>
3894 <c>finalize</c>     <c><xref target="energy-decoding"/></c><c></c>
3895 <postamble>Order of the symbols in the CELT section of the bitstream.</postamble>
3896 </texttable>
3897
3898 <t>
3899 The decoder extracts information from the range-coded bitstream in the order
3900 described in the figure above. In some circumstances, it is
3901 possible for a decoded value to be out of range due to a very small amount of redundancy
3902 in the encoding of large integers by the range coder.
3903 In that case, the decoder should assume there has been an error in the coding,
3904 decoding, or transmission and SHOULD take measures to conceal the error and/or report
3905 to the application that a problem has occurred.
3906 </t>
3907
3908 <section anchor="transient-decoding" title="Transient Decoding">
3909 <t>
3910 The "transient" flag encoded in the bitstream has a probability of 1/8.
3911 When it is set, then the MDCT coefficients represent multiple
3912 short MDCTs in the frame. When not set, the coefficients represent a single
3913 long MDCT for the frame. In addition to the global transient flag is a per-band
3914 binary flag to change the time-frequency (tf) resolution independently in each band. The
3915 change in tf resolution is defined in tf_select_table[][] in celt.c and depends
3916 on the frame size, whether the transient flag is set, and the value of tf_select.
3917 The tf_select flag uses a 1/2 probability, but is only decoded
3918 if it can have an impact on the result knowing the value of all per-band
3919 tf_change flags.
3920 </t>
3921 </section>
3922
3923 <section anchor="energy-decoding" title="Energy Envelope Decoding">
3924
3925 <t>
3926 It is important to quantize the energy with sufficient resolution because
3927 any energy quantization error cannot be compensated for at a later
3928 stage. Regardless of the resolution used for encoding the shape of a band,
3929 it is perceptually important to preserve the energy in each band. CELT uses a
3930 three-step coarse-fine-fine strategy for encoding the energy in the base-2 log
3931 domain, as implemented in quant_bands.c</t>
3932
3933 <section anchor="coarse-energy-decoding" title="Coarse energy decoding">
3934 <t>
3935 Coarse quantization of the energy uses a fixed resolution of 6 dB
3936 (integer part of base-2 log). To minimize the bitrate, prediction is applied
3937 both in time (using the previous frame) and in frequency (using the previous
3938 bands). The part of the prediction that is based on the
3939 previous frame can be disabled, creating an "intra" frame where the energy
3940 is coded without reference to prior frames. The decoder first reads the intra flag
3941 to determine what prediction is used.
3942 The 2-D z-transform of
3943 the prediction filter is:
3944 <figure align="center">
3945 <artwork align="center"><![CDATA[
3946                             -1          -1
3947               (1 - alpha*z_l  )*(1 - z_b  )
3948 A(z_l, z_b) = -----------------------------
3949                                  -1
3950                      1 - beta*z_b
3951 ]]></artwork>
3952 </figure>
3953 where b is the band index and l is the frame index. The prediction coefficients
3954 applied depend on the frame size in use when not using intra energy and are alpha=0, beta=4915/32768
3955 when using intra energy.
3956 The time-domain prediction is based on the final fine quantization of the previous
3957 frame, while the frequency domain (within the current frame) prediction is based
3958 on coarse quantization only (because the fine quantization has not been computed
3959 yet). The prediction is clamped internally so that fixed point implementations with
3960 limited dynamic range do not suffer desynchronization.
3961 We approximate the ideal
3962 probability distribution of the prediction error using a Laplace distribution
3963 with separate parameters for each frame size in intra- and inter-frame modes. The
3964 coarse energy quantization is performed by unquant_coarse_energy() and
3965 unquant_coarse_energy_impl() (quant_bands.c). The encoding of the Laplace-distributed values is
3966 implemented in ec_laplace_decode() (laplace.c).
3967 </t>
3968
3969 </section>
3970
3971 <section anchor="fine-energy-decoding" title="Fine energy quantization">
3972 <t>
3973 The number of bits assigned to fine energy quantization in each band is determined
3974 by the bit allocation computation described in <xref target="allocation"></xref>.
3975 Let B_i be the number of fine energy bits
3976 for band i; the refinement is an integer f in the range [0,2**B_i-1]. The mapping between f
3977 and the correction applied to the coarse energy is equal to (f+1/2)/2**B_i - 1/2. Fine
3978 energy quantization is implemented in quant_fine_energy() (quant_bands.c).
3979 </t>
3980 <t>
3981 When some bits are left "unused" after all other flags have been decoded, these bits
3982 are assigned to a "final" step of fine allocation. In effect, these bits are used
3983 to add one extra fine energy bit per band per channel. The allocation process
3984 determines two "priorities" for the final fine bits.