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