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