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