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