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