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