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