12fdbf1955143f78fcbe9cfed4f8677bc7098505
[speexdsp.git] / doc / manual.lyx
1 #LyX 1.2 created this file. For more info see http://www.lyx.org/
2 \lyxformat 220
3 \textclass article
4 \language english
5 \inputencoding auto
6 \fontscheme default
7 \graphics default
8 \float_placement h
9 \paperfontsize default
10 \spacing single 
11 \papersize Default
12 \paperpackage a4
13 \use_geometry 0
14 \use_amsmath 0
15 \use_natbib 0
16 \use_numerical_citations 0
17 \paperorientation portrait
18 \secnumdepth 3
19 \tocdepth 3
20 \paragraph_separation indent
21 \defskip medskip
22 \quotes_language english
23 \quotes_times 2
24 \papercolumns 1
25 \papersides 1
26 \paperpagestyle headings
27
28 \layout Title
29
30 The Speex Codec Manual
31 \newline 
32 (draft for Speex 1.0beta4)
33 \layout Author
34
35 Jean-Marc Valin
36 \layout Standard
37 \pagebreak_top 
38 Copyright (c) 2002 Jean-Marc Valin.
39 \layout Standard
40
41 Permission is granted to copy, distribute and/or modify this document under
42  the terms of the GNU Free Documentation License, Version 1.1 or any later
43  version published by the Free Software Foundation; with no Invariant Section,
44  with no Front-Cover Texts, and with no Back-Cover.
45  A copy of the license is included in the section entitled "GNU Free Documentati
46 on License".
47  
48 \layout Section*
49
50 Disclaimer
51 \layout Standard
52
53 This document is meant to provide useful information on the Speex codec
54  but there is absolutely no warranty regarding usefulness or correctness
55  of the information provided.
56  Also, some techniques used in Speex are said to be 
57 \begin_inset Quotes eld
58 \end_inset 
59
60 similar
61 \begin_inset Quotes erd
62 \end_inset 
63
64  to techniques used in known codecs.
65  This should not be understood as an acknowledgment that Speex is using
66  any patented algorithm used in these codecs, but merely that comprehension
67  of Speex can be facilitated by thinking that the principles of operation
68  are the same or similar.
69  Of course, there's also the obligatory 
70 \begin_inset Quotes eld
71 \end_inset 
72
73 all trademarks are property of their respective owner
74 \begin_inset Quotes erd
75 \end_inset 
76
77 .
78 \layout Standard
79 \pagebreak_top \pagebreak_bottom 
80
81 \begin_inset LatexCommand \tableofcontents{}
82
83 \end_inset 
84
85
86 \layout Standard
87 \pagebreak_bottom 
88
89 \begin_inset FloatList table
90
91 \end_inset 
92
93
94 \layout Section
95
96 Introduction to Speex
97 \layout Standard
98
99 The Speex project (
100 \family typewriter 
101 http://www.speex.org/
102 \family default 
103 ) has been started because there was a need for a speech codec that was
104  open-source and free from software patents.
105  These are essential conditions for being used by any open-source software.
106  There is already Vorbis that does general audio, but it is not really suitable
107  for speech.
108  Also, unlike many other speech codecs, Speex is not targeted at cell phones
109  (not many open-source cell phones anyway :-) ) but rather voice over IP
110  (VoIP) and file-based compression.
111  
112 \layout Standard
113
114 As design goals, we wanted to have a codec that would allowed both very
115  good quality speech and low bit-rate (unfortunately not at the same time!),
116  which led us to developing a codec with multiple bit-rates.
117  Of course very good quality also meant we had to do wideband (16 kHz sampling
118  rate) in addition to narrowband (telephone quality, 8 kHz sampling rate).
119 \layout Standard
120
121 Designing for VoIP instead of cell phone use means that Speex must be robust
122  to lost packets, but not to corrupted ones since packets either arrive
123  unaltered or don't arrive at all.
124  Also, the idea was to have a reasonnable complexity and memory requirement
125  without compromising too much on the efficiency of the codec.
126 \layout Standard
127
128 All this led us to the choice of CELP
129 \begin_inset LatexCommand \index{CELP}
130
131 \end_inset 
132
133  as the encoding technique to use for Speex.
134  One of the main reasons is that CELP has long proved that it could do the
135  job and scale well to both low bit-rates (think DoD CELP @ 4.8 kbps) and
136  high bit-rates (think G.728 @ 16 kbps).
137  
138 \layout Standard
139
140 The main characteristics can be summerized as follows:
141 \layout Itemize
142
143 Free software/open-source
144 \begin_inset LatexCommand \index{open-source}
145
146 \end_inset 
147
148 , patent
149 \begin_inset LatexCommand \index{patent}
150
151 \end_inset 
152
153  and royalty-free
154 \layout Itemize
155
156 Integration of wideband
157 \begin_inset LatexCommand \index{wideband}
158
159 \end_inset 
160
161  and narrowband
162 \begin_inset LatexCommand \index{narrowband}
163
164 \end_inset 
165
166  in the same bit-stream
167 \layout Itemize
168
169 Wide range of bit-rates available
170 \layout Itemize
171
172 Dynamic bit-rate switching and Variable Bit-Rate
173 \begin_inset LatexCommand \index{variable bit-rate}
174
175 \end_inset 
176
177  (VBR)
178 \layout Itemize
179
180 Voice Activity Detection
181 \begin_inset LatexCommand \index{voice activity detection}
182
183 \end_inset 
184
185  (VAD, integrated with VBR)
186 \layout Itemize
187
188 Variable complexity
189 \begin_inset LatexCommand \index{complexity}
190
191 \end_inset 
192
193
194 \layout Itemize
195
196 Ultra-wideband mode at 32 kHz (up to 48 kHz)
197 \layout Itemize
198
199 Intensity stereo encoding option
200 \layout Section
201 \pagebreak_top 
202 Introduction to CELP Coding
203 \begin_inset LatexCommand \index{CELP}
204
205 \end_inset 
206
207
208 \layout Standard
209
210 Speex is based on CELP, which stands for Code Excited Linear Prediction.
211  This section attempts to introduce the principles behind CELP, so if you
212  are already familiar with CELP, you can safely skip to section 
213 \begin_inset LatexCommand \ref{sec:Speex-narrowband-mode}
214
215 \end_inset 
216
217 .
218  The CELP technique is based on three ideas:
219 \layout Enumerate
220
221 The use of a linear prediction (LP) model to model the vocal tract
222 \layout Enumerate
223
224 The use of (adaptive and fixed) codebook entries as input (excitation) of
225  the LP model
226 \layout Enumerate
227
228 The search performed in closed-loop in a 
229 \begin_inset Quotes eld
230 \end_inset 
231
232 perceptually weighted domain
233 \begin_inset Quotes erd
234 \end_inset 
235
236
237 \layout Subsection
238
239 Linear Prediction (LPC)
240 \begin_inset LatexCommand \index{linear prediction}
241
242 \end_inset 
243
244
245 \layout Standard
246
247 Linear prediction is at the base of may speech coding techniques, including
248  CELP.
249  The idea behind it is to predict the signal 
250 \begin_inset Formula $x(n)$
251 \end_inset 
252
253  using a linear combination of its past samples:
254 \layout Standard
255
256
257 \begin_inset Formula \[
258 y[n]=\sum _{i=1}^{N}a_{i}x[n-i]\]
259
260 \end_inset 
261
262 where 
263 \begin_inset Formula $y[n]$
264 \end_inset 
265
266  is the linear prediction of 
267 \begin_inset Formula $x[n]$
268 \end_inset 
269
270 .
271  The prediction error is thus given by:
272 \begin_inset Formula \[
273 e[n]=x[n]-y[n]=x[n]-\sum _{i=1}^{N}a_{i}x[n-i]\]
274
275 \end_inset 
276
277
278 \layout Standard
279
280 The goal of the LPC analysis is to find the best prediction coefficients
281  
282 \begin_inset Formula $a_{i}$
283 \end_inset 
284
285  which minimize the quadratic error function:
286 \begin_inset Formula \[
287 E=\sum _{n=0}^{L-1}\left[e[n]\right]^{2}=\sum _{n=0}^{L-1}\left[x[n]-\sum _{i=1}^{N}a_{i}x[n-i]\right]^{2}\]
288
289 \end_inset 
290
291 That can be done by making all derivatives 
292 \begin_inset Formula $\frac{\partial E}{\partial a_{i}}$
293 \end_inset 
294
295  equal to zero:
296 \begin_inset Formula \[
297 \frac{\partial E}{\partial a_{i}}=\frac{\partial }{\partial a_{i}}\sum _{n=0}^{L-1}\left[x[n]-\sum _{i=1}^{N}a_{i}x[n-i]\right]^{2}=0\]
298
299 \end_inset 
300
301
302 \layout Standard
303
304 The 
305 \begin_inset Formula $a_{i}$
306 \end_inset 
307
308  filter coefficients are computed using the Levinson-Durbin
309 \begin_inset LatexCommand \index{Levinson-Durbin}
310
311 \end_inset 
312
313  algorithm, which starts from the auto-correlation
314 \begin_inset LatexCommand \index{auto-correlation}
315
316 \end_inset 
317
318  
319 \begin_inset Formula $R(m)$
320 \end_inset 
321
322  of the signal 
323 \begin_inset Formula $x[n]$
324 \end_inset 
325
326 .
327 \layout Standard
328
329
330 \begin_inset Formula \[
331 R(m)=\sum _{i=0}^{N-1}x[i]x[i-m]\]
332
333 \end_inset 
334
335
336 \layout Standard
337
338 For an order 
339 \begin_inset Formula $N$
340 \end_inset 
341
342  filter, we have:
343 \begin_inset Formula \[
344 \mathbf{R}=\left[\begin{array}{cccc}
345  R(0) & R(1) & \cdots  & R(N-1)\\
346  R(1) & R(0) & \cdots  & R(N-2)\\
347  \vdots  & \vdots  & \ddots  & \vdots \\
348  R(N-1) & R(N-2) & \cdots  & R(0)\end{array}
349 \right]\]
350
351 \end_inset 
352
353
354 \begin_inset Formula \[
355 \mathbf{r}=\left[\begin{array}{c}
356  R(1)\\
357  R(2)\\
358  \vdots \\
359  R(N)\end{array}
360 \right]\]
361
362 \end_inset 
363
364
365 \layout Standard
366
367 The filter coefficients 
368 \begin_inset Formula $a_{i}$
369 \end_inset 
370
371  are found by solving the system 
372 \begin_inset Formula $\mathbf{Ra}=\mathbf{r}$
373 \end_inset 
374
375 .
376  What the Levinson-Durbin algorithm does here is making the solution to
377  the problem 
378 \begin_inset Formula $\mathcal{O}\left(N^{2}\right)$
379 \end_inset 
380
381  instead of 
382 \begin_inset Formula $\mathcal{O}\left(N^{3}\right)$
383 \end_inset 
384
385  by exploiting the fact that matrix 
386 \begin_inset Formula $\mathbf{R}$
387 \end_inset 
388
389  is toeplitz hermitian.
390  Also, it can be proved that all the roots of 
391 \begin_inset Formula $A(z)$
392 \end_inset 
393
394  are withing the unit circle, which means that 
395 \begin_inset Formula $1/A(z)$
396 \end_inset 
397
398  is always stable.
399  This is in theory; in practice because of finite precision, there are two
400  commonly used techniques to make sure we have a stable filter.
401  First, we multiply 
402 \begin_inset Formula $R(0)$
403 \end_inset 
404
405  by a number slightly above one (such as 1.0001), which is equivalent to
406  adding noise to the signal.
407  Also, we can apply a window the the auto-correlation, which is equivalent
408  to filtering in the frequency domain, reducing sharp resonances.
409 \layout Standard
410
411 The linear prediction model represents each speech sample as linear combination
412  of past samples, plus an error signal called the excitation (or residual).
413 \begin_inset Formula \[
414 x[n]=\sum _{i=1}^{N}a_{i}x[n-i]+e[n]\]
415
416 \end_inset 
417
418
419 \layout Standard
420
421 In the 
422 \emph on 
423 z
424 \emph default 
425 -domain, this can be expressed as
426 \layout Standard
427
428
429 \begin_inset Formula \[
430 x(z)=\frac{1}{A(z)}\: e(z)\]
431
432 \end_inset 
433
434
435 \layout Standard
436
437 where 
438 \begin_inset Formula $A(z)$
439 \end_inset 
440
441  is defined as
442 \layout Standard
443
444
445 \begin_inset Formula \[
446 A(z)=1-\sum _{i=1}^{N}a_{i}z^{-i}\]
447
448 \end_inset 
449
450
451 \layout Standard
452
453 We usually refer to 
454 \begin_inset Formula $A(z)$
455 \end_inset 
456
457  as the analysis filter and 
458 \begin_inset Formula $1/A(z)$
459 \end_inset 
460
461  as the synthesis filter.
462  The whole process is called short-term prediction as it predicts the signal
463  
464 \begin_inset Formula $x[n]$
465 \end_inset 
466
467  using a prediction using only the 
468 \begin_inset Formula $N$
469 \end_inset 
470
471  past samples, where 
472 \begin_inset Formula $N$
473 \end_inset 
474
475  is usually around 10.
476 \layout Standard
477
478 Because LPC coefficients have very little robustness to quantization, they
479  are converted to Line Spectral Pair
480 \begin_inset LatexCommand \index{line spectral pair}
481
482 \end_inset 
483
484  (LSP) coefficients which have a much better behaviour with quantization,
485  one of them being that it's easy to keep the filter stable.
486  
487 \layout Subsection
488
489 Pitch Prediction
490 \begin_inset LatexCommand \index{pitch}
491
492 \end_inset 
493
494
495 \layout Standard
496
497 During voiced segments, the speech signal is periodic, so it is possible
498  to take advantage of that property by approximating the excitation signal
499  
500 \begin_inset Formula $e[n]$
501 \end_inset 
502
503  by a gain times the past of the excitation:
504 \layout Standard
505
506
507 \begin_inset Formula \[
508 e[n]\simeq p[n]=\beta e[n-T]\]
509
510 \end_inset 
511
512
513 \layout Standard
514
515 where 
516 \begin_inset Formula $T$
517 \end_inset 
518
519  is the pitch period, 
520 \begin_inset Formula $\beta $
521 \end_inset 
522
523  is the pitch gain and 
524 \begin_inset Formula $c(n)$
525 \end_inset 
526
527  is taken from the 
528 \emph on 
529 innovation codebook
530 \emph default 
531 .
532  We call that long-term prediction since the excitation is predicted from
533  
534 \begin_inset Formula $e[n-T]$
535 \end_inset 
536
537  with 
538 \begin_inset Formula $T\gg N$
539 \end_inset 
540
541 .
542 \layout Subsection
543
544 Innovation Codebook
545 \layout Standard
546
547 The final excitation 
548 \begin_inset Formula $e[n]$
549 \end_inset 
550
551  will be the sum of the pitch prediction and an 
552 \emph on 
553 innovation
554 \emph default 
555  signal 
556 \begin_inset Formula $c[n]$
557 \end_inset 
558
559  taken from a fixed codebook.
560 \layout Standard
561
562
563 \begin_inset Formula \[
564 e[n]=p[n]+c[n]=\beta e[n-T]+c[n]\]
565
566 \end_inset 
567
568 This is where most of the bits in a CELP codec are allocated.
569  It represents the information that couldn't be obtained either from linear
570  prediction or pitch prediction.
571  In the 
572 \emph on 
573 z
574 \emph default 
575 -domain we can represent the final signal 
576 \begin_inset Formula $X(z)$
577 \end_inset 
578
579  as 
580 \begin_inset Formula \[
581 X(z)=\frac{C(z)}{A(z)\left(1-\beta z^{-T}\right)}\]
582
583 \end_inset 
584
585
586 \layout Subsection
587
588 Analysis-by-Synthesis and Error Weighting
589 \begin_inset LatexCommand \index{error weighting}
590
591 \end_inset 
592
593
594 \begin_inset LatexCommand \index{analysis-by-synthesis}
595
596 \end_inset 
597
598
599 \layout Standard
600
601 Most (if not all) modern audio codecs attempt to 
602 \begin_inset Quotes eld
603 \end_inset 
604
605 shape
606 \begin_inset Quotes erd
607 \end_inset 
608
609  the noise so that it appears mostly in the frequency regions where the
610  ear cannot detect it.
611  For example, the ear is more tolerant to noise in parts of the spectrum
612  that are louder and 
613 \emph on 
614 vice versa
615 \emph default 
616 .
617  That's why instead of minimizing the simple quadratic error
618 \begin_inset Formula \[
619 E=\sum _{n}\left(x[n]-\overline{x}[n]\right)^{2}\]
620
621 \end_inset 
622
623 where 
624 \begin_inset Formula $\overline{x}[n]$
625 \end_inset 
626
627  is the encoder signal, we minimize the error for the perceptually weighted
628  signal
629 \begin_inset Formula \[
630 X_{w}(z)=W(z)X(z)\]
631
632 \end_inset 
633
634 where 
635 \begin_inset Formula $W(z)$
636 \end_inset 
637
638  is the weighting filter, usually of the form
639 \layout Standard
640
641
642 \begin_inset Formula \begin{equation}
643 W(z)=\frac{A\left(\frac{z}{\gamma _{1}}\right)}{A\left(\frac{z}{\gamma _{2}}\right)}\label{eq:weighting_filter}\end{equation}
644
645 \end_inset 
646
647
648 \layout Standard
649
650 with control parameters 
651 \begin_inset Formula $\gamma _{1}>\gamma _{2}$
652 \end_inset 
653
654 .
655  If the noise is white in the perceptually weighted domain, then in the
656  signal domain its spectral shape will be of the form
657 \begin_inset Formula \[
658 A_{noise}(z)=\frac{1}{W(z)}=\frac{A\left(\frac{z}{\gamma _{2}}\right)}{A\left(\frac{z}{\gamma _{1}}\right)}\]
659
660 \end_inset 
661
662
663 \layout Standard
664
665 If a filter 
666 \begin_inset Formula $A(z)$
667 \end_inset 
668
669  has (complex) poles at 
670 \begin_inset Formula $p_{i}$
671 \end_inset 
672
673  in the 
674 \begin_inset Formula $z$
675 \end_inset 
676
677 -plane, the filter 
678 \begin_inset Formula $A(z/\gamma )$
679 \end_inset 
680
681  filter will have its poles at 
682 \begin_inset Formula $p_{i}^{'}=\gamma p_{i}$
683 \end_inset 
684
685 , making it a flatter version of 
686 \begin_inset Formula $A(z)$
687 \end_inset 
688
689 .
690 \layout Section
691 \pagebreak_top 
692 Speex narrowband mode
693 \begin_inset LatexCommand \label{sec:Speex-narrowband-mode}
694
695 \end_inset 
696
697
698 \begin_inset LatexCommand \index{narrowband}
699
700 \end_inset 
701
702
703 \layout Standard
704
705 This section looks at how Speex works for narrowband (
706 \begin_inset Formula $8\: \mathrm{kHz}$
707 \end_inset 
708
709  sampling rate) operation.
710  The frame size for this mode is 
711 \begin_inset Formula $20\: \mathrm{ms}$
712 \end_inset 
713
714 , corresponding to 160 samples.
715  Each frame is also subdivided into 4 sub-frames of 40 samples each.
716 \layout Standard
717
718 Also many design decisions were based on the original goals and assumptions:
719 \layout Itemize
720
721 Minimizing the amount of information extracted from past frames (for robustness
722  to packet loss)
723 \layout Itemize
724
725 Dynamically-selectable codebooks (LSP, pitch and innovation)
726 \layout Itemize
727
728 G.728-like fixed codebooks (without backward-adaptive gains because of patent
729  issues)
730 \layout Subsection
731
732 LPC Analysis
733 \begin_inset LatexCommand \index{linear prediction}
734
735 \end_inset 
736
737
738 \layout Standard
739
740 An LPC analysis is first performed on a (asymetric Hamming) window that
741  spans all the current frame and half a frame in advance.
742  The LPC coefficients are then converted to Line Spectral Pair
743 \begin_inset LatexCommand \index{line spectral pair}
744
745 \end_inset 
746
747  (LSP), a representation that is more robust to quantization.
748  The LSP's are considered to be associated to the 
749 \begin_inset Formula $4^{th}$
750 \end_inset 
751
752  sub-frames and the LSP's associated to the first 3 sub-frames are linearly
753  interpolated using the current and previous LSP's.
754 \layout Standard
755
756 The LSP's are encoded using 30 bits for higher quality modes and 18 bits
757  for lower quality, through the use of a multi-stage split-vector quantizer.
758  For the lower quality modes, the 10 coefficients are first quantized with
759  6 bits and the error is then divided in two 5-coefficient sub-vectors.
760  Each of them is quantized with 6 bits, for a total of 18 bits.
761  For the higher quality modes, the remaining error on both sub-vectors is
762  further quantized with 6 bits each, for a total of 30 bits.
763 \layout Standard
764
765 The perceptual weighting filter 
766 \begin_inset Formula $W(z)$
767 \end_inset 
768
769  used by Speex is derived from the LPC filter 
770 \begin_inset Formula $A(z)$
771 \end_inset 
772
773  and corresponds to the one described by eq.
774  
775 \begin_inset LatexCommand \ref{eq:weighting_filter}
776
777 \end_inset 
778
779  with 
780 \begin_inset Formula $\gamma _{1}=0.9$
781 \end_inset 
782
783  and 
784 \begin_inset Formula $\gamma _{2}=0.6$
785 \end_inset 
786
787 .
788  We can use the unquantized 
789 \begin_inset Formula $A(z)$
790 \end_inset 
791
792  filter since the weighting filter is only used in the encoder.
793 \layout Subsection
794
795 Pitch Prediction (adaptive codebook)
796 \begin_inset LatexCommand \index{pitch}
797
798 \end_inset 
799
800
801 \layout Standard
802
803 Speex uses a 3-tap prediction for pitch.
804  That is, the pitch prediction signal 
805 \begin_inset Formula $p[n]$
806 \end_inset 
807
808  is obtained by the past of the excitation by:
809 \begin_inset Formula \[
810 p[n]=\beta _{0}e[n-T-1]+\beta _{1}e[n-T]+\beta _{2}e[n-T+1]\]
811
812 \end_inset 
813
814
815 \layout Standard
816
817 where 
818 \begin_inset Formula $T$
819 \end_inset 
820
821  is the pitch period and the 
822 \begin_inset Formula $\beta _{i}$
823 \end_inset 
824
825  are the prediction (filter) taps.
826  It is worth noting that when the pitch is smaller than the sub-frame size,
827  we repeat the excitation at a period 
828 \begin_inset Formula $T$
829 \end_inset 
830
831 .
832  For example, when 
833 \begin_inset Formula $n-T+1$
834 \end_inset 
835
836 , we use 
837 \begin_inset Formula $n-2T+1$
838 \end_inset 
839
840  instead.
841  The period and quantized gains are determined in closed loop.
842  In most modes, the pitch period is encoded with 7 bits in the 
843 \begin_inset Formula $\left[17,144\right]$
844 \end_inset 
845
846  range and the 
847 \begin_inset Formula $\beta _{i}$
848 \end_inset 
849
850  coefficients are vector-quantized using 7 bits (15 kbps narrowband and
851  above) at higher bit-rates and 5 bits at lower bit-rates (11 kbps narrowband
852  and below).
853 \layout Subsection
854
855 Innovation Codebook
856 \layout Standard
857
858 In Speex, the innovation signal is quantized using shape-only vector quantizatio
859 n (VQ).
860  That means that the codebooks that are used represent both the shape and
861  the gain at the same time.
862  This save many bits that would otherwise be allocated for a separate gain
863  at the price of a slight increase in complexity.
864  Except for the absence of (backward-adaptive) gain, the technique used
865  in Speex is similar to G.728 (LD-CELP).
866  However since we do not have a low-delay constraint, the search can be
867  made more 
868 \begin_inset Quotes eld
869 \end_inset 
870
871 global
872 \begin_inset Quotes erd
873 \end_inset 
874
875  and make use of the whole information available for a sub-frame.
876 \layout Subsection
877
878 Bit allocation
879 \layout Standard
880
881 There are 7 different narrowband bit-rates defined for Speex, ranging from
882  200 bps to 18.15 kbps, although the modes below 5.9 kbps should not be used
883  for speech.
884  The bit-allocation for each mode is detailed in table 
885 \begin_inset LatexCommand \ref{cap:bits-narrowband}
886
887 \end_inset 
888
889 .
890  Each frame starts with the mode ID encoded with 4 bits which allows a range
891  from 0 to 15, though only the first 7 values are used (the others are reserved).
892  The parameters are listed in the table in the order they are packed in
893  the bit-stream.
894  All frame-based parameters are packed before sub-frame parameters.
895  The parameters for a certain sub-frame are all packed before the following
896  sub-frame is packed.
897  Note that the 
898 \begin_inset Quotes eld
899 \end_inset 
900
901 OL
902 \begin_inset Quotes erd
903 \end_inset 
904
905  in the parameter description means the the parameter is an open loop estimation
906  based on the whole frame.
907 \layout Standard
908
909
910 \begin_inset Float table
911 placement h
912 wide true
913 collapsed false
914
915 \layout Standard
916
917
918 \begin_inset  Tabular
919 <lyxtabular version="3" rows="12" columns="10">
920 <features>
921 <column alignment="center" valignment="top" leftline="true" width="0pt">
922 <column alignment="center" valignment="top" leftline="true" width="0pt">
923 <column alignment="center" valignment="top" leftline="true" width="0pt">
924 <column alignment="center" valignment="top" leftline="true" width="0pt">
925 <column alignment="center" valignment="top" leftline="true" width="0pt">
926 <column alignment="center" valignment="top" leftline="true" width="0pt">
927 <column alignment="center" valignment="top" leftline="true" width="0pt">
928 <column alignment="center" valignment="top" leftline="true" width="0pt">
929 <column alignment="center" valignment="top" leftline="true" width="0pt">
930 <column alignment="center" valignment="top" leftline="true" rightline="true" width="0pt">
931 <row topline="true" bottomline="true">
932 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
933 \begin_inset Text
934
935 \layout Standard
936
937 Parameter
938 \end_inset 
939 </cell>
940 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
941 \begin_inset Text
942
943 \layout Standard
944
945 Update rate
946 \end_inset 
947 </cell>
948 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
949 \begin_inset Text
950
951 \layout Standard
952
953 0
954 \end_inset 
955 </cell>
956 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
957 \begin_inset Text
958
959 \layout Standard
960
961 1
962 \end_inset 
963 </cell>
964 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
965 \begin_inset Text
966
967 \layout Standard
968
969 2
970 \end_inset 
971 </cell>
972 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
973 \begin_inset Text
974
975 \layout Standard
976
977 3
978 \end_inset 
979 </cell>
980 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
981 \begin_inset Text
982
983 \layout Standard
984
985 4
986 \end_inset 
987 </cell>
988 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
989 \begin_inset Text
990
991 \layout Standard
992
993 5
994 \end_inset 
995 </cell>
996 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
997 \begin_inset Text
998
999 \layout Standard
1000
1001 6
1002 \end_inset 
1003 </cell>
1004 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
1005 \begin_inset Text
1006
1007 \layout Standard
1008
1009 7
1010 \end_inset 
1011 </cell>
1012 </row>
1013 <row topline="true">
1014 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1015 \begin_inset Text
1016
1017 \layout Standard
1018
1019 Wideband bit
1020 \end_inset 
1021 </cell>
1022 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1023 \begin_inset Text
1024
1025 \layout Standard
1026
1027 frame
1028 \end_inset 
1029 </cell>
1030 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1031 \begin_inset Text
1032
1033 \layout Standard
1034
1035 1
1036 \end_inset 
1037 </cell>
1038 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1039 \begin_inset Text
1040
1041 \layout Standard
1042
1043 1
1044 \end_inset 
1045 </cell>
1046 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1047 \begin_inset Text
1048
1049 \layout Standard
1050
1051 1
1052 \end_inset 
1053 </cell>
1054 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1055 \begin_inset Text
1056
1057 \layout Standard
1058
1059 1
1060 \end_inset 
1061 </cell>
1062 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1063 \begin_inset Text
1064
1065 \layout Standard
1066
1067 1
1068 \end_inset 
1069 </cell>
1070 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1071 \begin_inset Text
1072
1073 \layout Standard
1074
1075 1
1076 \end_inset 
1077 </cell>
1078 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
1079 \begin_inset Text
1080
1081 \layout Standard
1082
1083 1
1084 \end_inset 
1085 </cell>
1086 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
1087 \begin_inset Text
1088
1089 \layout Standard
1090
1091 1
1092 \end_inset 
1093 </cell>
1094 </row>
1095 <row topline="true">
1096 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1097 \begin_inset Text
1098
1099 \layout Standard
1100
1101 Mode ID
1102 \end_inset 
1103 </cell>
1104 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1105 \begin_inset Text
1106
1107 \layout Standard
1108
1109 frame
1110 \end_inset 
1111 </cell>
1112 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1113 \begin_inset Text
1114
1115 \layout Standard
1116
1117 4
1118 \end_inset 
1119 </cell>
1120 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1121 \begin_inset Text
1122
1123 \layout Standard
1124
1125 4
1126 \end_inset 
1127 </cell>
1128 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1129 \begin_inset Text
1130
1131 \layout Standard
1132
1133 4
1134 \end_inset 
1135 </cell>
1136 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1137 \begin_inset Text
1138
1139 \layout Standard
1140
1141 4
1142 \end_inset 
1143 </cell>
1144 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1145 \begin_inset Text
1146
1147 \layout Standard
1148
1149 4
1150 \end_inset 
1151 </cell>
1152 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1153 \begin_inset Text
1154
1155 \layout Standard
1156
1157 4
1158 \end_inset 
1159 </cell>
1160 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
1161 \begin_inset Text
1162
1163 \layout Standard
1164
1165 4
1166 \end_inset 
1167 </cell>
1168 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
1169 \begin_inset Text
1170
1171 \layout Standard
1172
1173 4
1174 \end_inset 
1175 </cell>
1176 </row>
1177 <row topline="true">
1178 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1179 \begin_inset Text
1180
1181 \layout Standard
1182
1183 LSP
1184 \end_inset 
1185 </cell>
1186 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1187 \begin_inset Text
1188
1189 \layout Standard
1190
1191 frame
1192 \end_inset 
1193 </cell>
1194 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1195 \begin_inset Text
1196
1197 \layout Standard
1198
1199 0
1200 \end_inset 
1201 </cell>
1202 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1203 \begin_inset Text
1204
1205 \layout Standard
1206
1207 18
1208 \end_inset 
1209 </cell>
1210 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1211 \begin_inset Text
1212
1213 \layout Standard
1214
1215 18
1216 \end_inset 
1217 </cell>
1218 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1219 \begin_inset Text
1220
1221 \layout Standard
1222
1223 18
1224 \end_inset 
1225 </cell>
1226 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1227 \begin_inset Text
1228
1229 \layout Standard
1230
1231 18
1232 \end_inset 
1233 </cell>
1234 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1235 \begin_inset Text
1236
1237 \layout Standard
1238
1239 30
1240 \end_inset 
1241 </cell>
1242 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
1243 \begin_inset Text
1244
1245 \layout Standard
1246
1247 30
1248 \end_inset 
1249 </cell>
1250 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
1251 \begin_inset Text
1252
1253 \layout Standard
1254
1255 30
1256 \end_inset 
1257 </cell>
1258 </row>
1259 <row topline="true">
1260 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1261 \begin_inset Text
1262
1263 \layout Standard
1264
1265 OL pitch
1266 \end_inset 
1267 </cell>
1268 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1269 \begin_inset Text
1270
1271 \layout Standard
1272
1273 frame
1274 \end_inset 
1275 </cell>
1276 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1277 \begin_inset Text
1278
1279 \layout Standard
1280
1281 0
1282 \end_inset 
1283 </cell>
1284 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1285 \begin_inset Text
1286
1287 \layout Standard
1288
1289 7
1290 \end_inset 
1291 </cell>
1292 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1293 \begin_inset Text
1294
1295 \layout Standard
1296
1297 7
1298 \end_inset 
1299 </cell>
1300 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1301 \begin_inset Text
1302
1303 \layout Standard
1304
1305 0
1306 \end_inset 
1307 </cell>
1308 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1309 \begin_inset Text
1310
1311 \layout Standard
1312
1313 0
1314 \end_inset 
1315 </cell>
1316 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1317 \begin_inset Text
1318
1319 \layout Standard
1320
1321 0
1322 \end_inset 
1323 </cell>
1324 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
1325 \begin_inset Text
1326
1327 \layout Standard
1328
1329 0
1330 \end_inset 
1331 </cell>
1332 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
1333 \begin_inset Text
1334
1335 \layout Standard
1336
1337 0
1338 \end_inset 
1339 </cell>
1340 </row>
1341 <row topline="true">
1342 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1343 \begin_inset Text
1344
1345 \layout Standard
1346
1347 OL pitch gain
1348 \end_inset 
1349 </cell>
1350 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1351 \begin_inset Text
1352
1353 \layout Standard
1354
1355 frame
1356 \end_inset 
1357 </cell>
1358 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1359 \begin_inset Text
1360
1361 \layout Standard
1362
1363 0
1364 \end_inset 
1365 </cell>
1366 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1367 \begin_inset Text
1368
1369 \layout Standard
1370
1371 4
1372 \end_inset 
1373 </cell>
1374 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1375 \begin_inset Text
1376
1377 \layout Standard
1378
1379 0
1380 \end_inset 
1381 </cell>
1382 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1383 \begin_inset Text
1384
1385 \layout Standard
1386
1387 0
1388 \end_inset 
1389 </cell>
1390 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1391 \begin_inset Text
1392
1393 \layout Standard
1394
1395 0
1396 \end_inset 
1397 </cell>
1398 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1399 \begin_inset Text
1400
1401 \layout Standard
1402
1403 0
1404 \end_inset 
1405 </cell>
1406 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
1407 \begin_inset Text
1408
1409 \layout Standard
1410
1411 0
1412 \end_inset 
1413 </cell>
1414 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
1415 \begin_inset Text
1416
1417 \layout Standard
1418
1419 0
1420 \end_inset 
1421 </cell>
1422 </row>
1423 <row topline="true">
1424 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1425 \begin_inset Text
1426
1427 \layout Standard
1428
1429 OL Exc gain
1430 \end_inset 
1431 </cell>
1432 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1433 \begin_inset Text
1434
1435 \layout Standard
1436
1437 frame
1438 \end_inset 
1439 </cell>
1440 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1441 \begin_inset Text
1442
1443 \layout Standard
1444
1445 0
1446 \end_inset 
1447 </cell>
1448 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1449 \begin_inset Text
1450
1451 \layout Standard
1452
1453 5
1454 \end_inset 
1455 </cell>
1456 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1457 \begin_inset Text
1458
1459 \layout Standard
1460
1461 5
1462 \end_inset 
1463 </cell>
1464 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1465 \begin_inset Text
1466
1467 \layout Standard
1468
1469 5
1470 \end_inset 
1471 </cell>
1472 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1473 \begin_inset Text
1474
1475 \layout Standard
1476
1477 5
1478 \end_inset 
1479 </cell>
1480 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1481 \begin_inset Text
1482
1483 \layout Standard
1484
1485 5
1486 \end_inset 
1487 </cell>
1488 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
1489 \begin_inset Text
1490
1491 \layout Standard
1492
1493 5
1494 \end_inset 
1495 </cell>
1496 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
1497 \begin_inset Text
1498
1499 \layout Standard
1500
1501 5
1502 \end_inset 
1503 </cell>
1504 </row>
1505 <row topline="true">
1506 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1507 \begin_inset Text
1508
1509 \layout Standard
1510
1511 Fine pitch
1512 \end_inset 
1513 </cell>
1514 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1515 \begin_inset Text
1516
1517 \layout Standard
1518
1519 sub-frame
1520 \end_inset 
1521 </cell>
1522 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1523 \begin_inset Text
1524
1525 \layout Standard
1526
1527 0
1528 \end_inset 
1529 </cell>
1530 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1531 \begin_inset Text
1532
1533 \layout Standard
1534
1535 0
1536 \end_inset 
1537 </cell>
1538 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1539 \begin_inset Text
1540
1541 \layout Standard
1542
1543 0
1544 \end_inset 
1545 </cell>
1546 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1547 \begin_inset Text
1548
1549 \layout Standard
1550
1551 7
1552 \end_inset 
1553 </cell>
1554 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1555 \begin_inset Text
1556
1557 \layout Standard
1558
1559 7
1560 \end_inset 
1561 </cell>
1562 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1563 \begin_inset Text
1564
1565 \layout Standard
1566
1567 7
1568 \end_inset 
1569 </cell>
1570 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
1571 \begin_inset Text
1572
1573 \layout Standard
1574
1575 7
1576 \end_inset 
1577 </cell>
1578 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
1579 \begin_inset Text
1580
1581 \layout Standard
1582
1583 7
1584 \end_inset 
1585 </cell>
1586 </row>
1587 <row topline="true">
1588 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1589 \begin_inset Text
1590
1591 \layout Standard
1592
1593 Pitch gain
1594 \end_inset 
1595 </cell>
1596 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1597 \begin_inset Text
1598
1599 \layout Standard
1600
1601 sub-frame
1602 \end_inset 
1603 </cell>
1604 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1605 \begin_inset Text
1606
1607 \layout Standard
1608
1609 0
1610 \end_inset 
1611 </cell>
1612 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1613 \begin_inset Text
1614
1615 \layout Standard
1616
1617 0
1618 \end_inset 
1619 </cell>
1620 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1621 \begin_inset Text
1622
1623 \layout Standard
1624
1625 5
1626 \end_inset 
1627 </cell>
1628 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1629 \begin_inset Text
1630
1631 \layout Standard
1632
1633 5
1634 \end_inset 
1635 </cell>
1636 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1637 \begin_inset Text
1638
1639 \layout Standard
1640
1641 5
1642 \end_inset 
1643 </cell>
1644 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1645 \begin_inset Text
1646
1647 \layout Standard
1648
1649 7
1650 \end_inset 
1651 </cell>
1652 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
1653 \begin_inset Text
1654
1655 \layout Standard
1656
1657 7
1658 \end_inset 
1659 </cell>
1660 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
1661 \begin_inset Text
1662
1663 \layout Standard
1664
1665 7
1666 \end_inset 
1667 </cell>
1668 </row>
1669 <row topline="true">
1670 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1671 \begin_inset Text
1672
1673 \layout Standard
1674
1675 Innovation gain
1676 \end_inset 
1677 </cell>
1678 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1679 \begin_inset Text
1680
1681 \layout Standard
1682
1683 sub-frame
1684 \end_inset 
1685 </cell>
1686 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1687 \begin_inset Text
1688
1689 \layout Standard
1690
1691 0
1692 \end_inset 
1693 </cell>
1694 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1695 \begin_inset Text
1696
1697 \layout Standard
1698
1699 1
1700 \end_inset 
1701 </cell>
1702 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1703 \begin_inset Text
1704
1705 \layout Standard
1706
1707 0
1708 \end_inset 
1709 </cell>
1710 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1711 \begin_inset Text
1712
1713 \layout Standard
1714
1715 1
1716 \end_inset 
1717 </cell>
1718 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1719 \begin_inset Text
1720
1721 \layout Standard
1722
1723 1
1724 \end_inset 
1725 </cell>
1726 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1727 \begin_inset Text
1728
1729 \layout Standard
1730
1731 3
1732 \end_inset 
1733 </cell>
1734 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
1735 \begin_inset Text
1736
1737 \layout Standard
1738
1739 3
1740 \end_inset 
1741 </cell>
1742 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
1743 \begin_inset Text
1744
1745 \layout Standard
1746
1747 3
1748 \end_inset 
1749 </cell>
1750 </row>
1751 <row topline="true" bottomline="true">
1752 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1753 \begin_inset Text
1754
1755 \layout Standard
1756
1757 Innovation VQ
1758 \end_inset 
1759 </cell>
1760 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1761 \begin_inset Text
1762
1763 \layout Standard
1764
1765 sub-frame
1766 \end_inset 
1767 </cell>
1768 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1769 \begin_inset Text
1770
1771 \layout Standard
1772
1773 0
1774 \end_inset 
1775 </cell>
1776 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1777 \begin_inset Text
1778
1779 \layout Standard
1780
1781 0
1782 \end_inset 
1783 </cell>
1784 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1785 \begin_inset Text
1786
1787 \layout Standard
1788
1789 16
1790 \end_inset 
1791 </cell>
1792 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1793 \begin_inset Text
1794
1795 \layout Standard
1796
1797 20
1798 \end_inset 
1799 </cell>
1800 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1801 \begin_inset Text
1802
1803 \layout Standard
1804
1805 35
1806 \end_inset 
1807 </cell>
1808 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1809 \begin_inset Text
1810
1811 \layout Standard
1812
1813 48
1814 \end_inset 
1815 </cell>
1816 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
1817 \begin_inset Text
1818
1819 \layout Standard
1820
1821 64
1822 \end_inset 
1823 </cell>
1824 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
1825 \begin_inset Text
1826
1827 \layout Standard
1828
1829 96
1830 \end_inset 
1831 </cell>
1832 </row>
1833 <row topline="true" bottomline="true">
1834 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1835 \begin_inset Text
1836
1837 \layout Standard
1838
1839 Total
1840 \end_inset 
1841 </cell>
1842 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1843 \begin_inset Text
1844
1845 \layout Standard
1846
1847 frame
1848 \end_inset 
1849 </cell>
1850 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1851 \begin_inset Text
1852
1853 \layout Standard
1854
1855 5
1856 \end_inset 
1857 </cell>
1858 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1859 \begin_inset Text
1860
1861 \layout Standard
1862
1863 43
1864 \end_inset 
1865 </cell>
1866 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1867 \begin_inset Text
1868
1869 \layout Standard
1870
1871 119
1872 \end_inset 
1873 </cell>
1874 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1875 \begin_inset Text
1876
1877 \layout Standard
1878
1879 160
1880 \end_inset 
1881 </cell>
1882 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1883 \begin_inset Text
1884
1885 \layout Standard
1886
1887 220
1888 \end_inset 
1889 </cell>
1890 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1891 \begin_inset Text
1892
1893 \layout Standard
1894
1895 300
1896 \end_inset 
1897 </cell>
1898 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
1899 \begin_inset Text
1900
1901 \layout Standard
1902
1903 364
1904 \end_inset 
1905 </cell>
1906 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
1907 \begin_inset Text
1908
1909 \layout Standard
1910
1911 492
1912 \end_inset 
1913 </cell>
1914 </row>
1915 </lyxtabular>
1916
1917 \end_inset 
1918
1919
1920 \layout Caption
1921
1922 Bit allocation for narrowband modes
1923 \begin_inset LatexCommand \label{cap:bits-narrowband}
1924
1925 \end_inset 
1926
1927
1928 \end_inset 
1929
1930
1931 \layout Standard
1932
1933 So far, no MOS (Mean Opinion Score
1934 \begin_inset LatexCommand \index{mean opinion score}
1935
1936 \end_inset 
1937
1938 ) subjective evaluation has been performed for Speex.
1939  In order to give an idea of the quality achivable with it, table 
1940 \begin_inset LatexCommand \ref{cap:quality_vs_bps}
1941
1942 \end_inset 
1943
1944  presents my own subjective opinion on it.
1945  It sould be noted that different people will perceive the quality differently
1946  and that the person that designed the codec often has a bias (one way or
1947  another) when it comes to subjective evaluation.
1948  Last thing, it should be noted that for most codecs (including Speex) encoding
1949  quality sometimes varies depending on the input.
1950  Note that the complexity is only approximate (withing 0.5 mflops and using
1951  the lowers complexity setting).
1952  Decoding requires approximately 0.5 mflops
1953 \begin_inset LatexCommand \index{complexity}
1954
1955 \end_inset 
1956
1957  in most modes (1 mflops with perceptual enhancement).
1958 \layout Standard
1959
1960
1961 \begin_inset Float table
1962 placement h
1963 wide true
1964 collapsed false
1965
1966 \layout Standard
1967
1968
1969 \begin_inset  Tabular
1970 <lyxtabular version="3" rows="17" columns="4">
1971 <features>
1972 <column alignment="center" valignment="top" leftline="true" width="0pt">
1973 <column alignment="center" valignment="top" leftline="true" width="0pt">
1974 <column alignment="center" valignment="top" leftline="true" width="0pt">
1975 <column alignment="center" valignment="top" leftline="true" rightline="true" width="0pt">
1976 <row topline="true" bottomline="true">
1977 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1978 \begin_inset Text
1979
1980 \layout Standard
1981
1982 Mode
1983 \end_inset 
1984 </cell>
1985 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1986 \begin_inset Text
1987
1988 \layout Standard
1989
1990 Bit-rate
1991 \begin_inset LatexCommand \index{bit-rate}
1992
1993 \end_inset 
1994
1995  (bps)
1996 \end_inset 
1997 </cell>
1998 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1999 \begin_inset Text
2000
2001 \layout Standard
2002
2003 mflops
2004 \begin_inset LatexCommand \index{complexity}
2005
2006 \end_inset 
2007
2008
2009 \end_inset 
2010 </cell>
2011 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
2012 \begin_inset Text
2013
2014 \layout Standard
2015
2016 Quality/description
2017 \end_inset 
2018 </cell>
2019 </row>
2020 <row topline="true">
2021 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2022 \begin_inset Text
2023
2024 \layout Standard
2025
2026 0
2027 \end_inset 
2028 </cell>
2029 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2030 \begin_inset Text
2031
2032 \layout Standard
2033
2034 250
2035 \end_inset 
2036 </cell>
2037 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2038 \begin_inset Text
2039
2040 \layout Standard
2041
2042 N/A
2043 \end_inset 
2044 </cell>
2045 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
2046 \begin_inset Text
2047
2048 \layout Standard
2049
2050 No sound (VBR only)
2051 \end_inset 
2052 </cell>
2053 </row>
2054 <row topline="true">
2055 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2056 \begin_inset Text
2057
2058 \layout Standard
2059
2060 1
2061 \end_inset 
2062 </cell>
2063 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2064 \begin_inset Text
2065
2066 \layout Standard
2067
2068 2,150
2069 \end_inset 
2070 </cell>
2071 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2072 \begin_inset Text
2073
2074 \layout Standard
2075
2076 6
2077 \end_inset 
2078 </cell>
2079 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
2080 \begin_inset Text
2081
2082 \layout Standard
2083
2084 Vocoder (mostly for comfort noise)
2085 \end_inset 
2086 </cell>
2087 </row>
2088 <row topline="true">
2089 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2090 \begin_inset Text
2091
2092 \layout Standard
2093
2094 2
2095 \end_inset 
2096 </cell>
2097 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2098 \begin_inset Text
2099
2100 \layout Standard
2101
2102 5,950
2103 \end_inset 
2104 </cell>
2105 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2106 \begin_inset Text
2107
2108 \layout Standard
2109
2110 9
2111 \end_inset 
2112 </cell>
2113 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
2114 \begin_inset Text
2115
2116 \layout Standard
2117
2118 Very noticeable artifacts/noise, good intelligibility
2119 \end_inset 
2120 </cell>
2121 </row>
2122 <row topline="true">
2123 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2124 \begin_inset Text
2125
2126 \layout Standard
2127
2128 3
2129 \end_inset 
2130 </cell>
2131 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2132 \begin_inset Text
2133
2134 \layout Standard
2135
2136 8,000
2137 \end_inset 
2138 </cell>
2139 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2140 \begin_inset Text
2141
2142 \layout Standard
2143
2144 10
2145 \end_inset 
2146 </cell>
2147 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
2148 \begin_inset Text
2149
2150 \layout Standard
2151
2152 Artifacts/noise sometimes noticeable
2153 \end_inset 
2154 </cell>
2155 </row>
2156 <row topline="true">
2157 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2158 \begin_inset Text
2159
2160 \layout Standard
2161
2162 4
2163 \end_inset 
2164 </cell>
2165 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2166 \begin_inset Text
2167
2168 \layout Standard
2169
2170 11,000
2171 \end_inset 
2172 </cell>
2173 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2174 \begin_inset Text
2175
2176 \layout Standard
2177
2178 14
2179 \end_inset 
2180 </cell>
2181 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
2182 \begin_inset Text
2183
2184 \layout Standard
2185
2186 Artifacts usually noticeable only with headphones
2187 \end_inset 
2188 </cell>
2189 </row>
2190 <row topline="true">
2191 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2192 \begin_inset Text
2193
2194 \layout Standard
2195
2196 5
2197 \end_inset 
2198 </cell>
2199 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2200 \begin_inset Text
2201
2202 \layout Standard
2203
2204 15,000
2205 \end_inset 
2206 </cell>
2207 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2208 \begin_inset Text
2209
2210 \layout Standard
2211
2212 11
2213 \end_inset 
2214 </cell>
2215 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
2216 \begin_inset Text
2217
2218 \layout Standard
2219
2220 Need good headphones to tell the difference
2221 \end_inset 
2222 </cell>
2223 </row>
2224 <row topline="true">
2225 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2226 \begin_inset Text
2227
2228 \layout Standard
2229
2230 6
2231 \end_inset 
2232 </cell>
2233 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2234 \begin_inset Text
2235
2236 \layout Standard
2237
2238 18,200
2239 \end_inset 
2240 </cell>
2241 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2242 \begin_inset Text
2243
2244 \layout Standard
2245
2246 17.5
2247 \end_inset 
2248 </cell>
2249 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
2250 \begin_inset Text
2251
2252 \layout Standard
2253
2254 Hard to tell the difference even with good headphones
2255 \end_inset 
2256 </cell>
2257 </row>
2258 <row topline="true">
2259 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2260 \begin_inset Text
2261
2262 \layout Standard
2263
2264 7
2265 \end_inset 
2266 </cell>
2267 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2268 \begin_inset Text
2269
2270 \layout Standard
2271
2272 24,600
2273 \end_inset 
2274 </cell>
2275 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2276 \begin_inset Text
2277
2278 \layout Standard
2279
2280 14.5
2281 \end_inset 
2282 </cell>
2283 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
2284 \begin_inset Text
2285
2286 \layout Standard
2287
2288 Completely transparent for voice, good quality music
2289 \end_inset 
2290 </cell>
2291 </row>
2292 <row topline="true">
2293 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2294 \begin_inset Text
2295
2296 \layout Standard
2297
2298 8
2299 \end_inset 
2300 </cell>
2301 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2302 \begin_inset Text
2303
2304 \layout Standard
2305
2306 N/A
2307 \end_inset 
2308 </cell>
2309 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2310 \begin_inset Text
2311
2312 \layout Standard
2313
2314 N/A
2315 \end_inset 
2316 </cell>
2317 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
2318 \begin_inset Text
2319
2320 \layout Standard
2321
2322 reserved
2323 \end_inset 
2324 </cell>
2325 </row>
2326 <row topline="true">
2327 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2328 \begin_inset Text
2329
2330 \layout Standard
2331
2332 9
2333 \end_inset 
2334 </cell>
2335 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2336 \begin_inset Text
2337
2338 \layout Standard
2339
2340 N/A
2341 \end_inset 
2342 </cell>
2343 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2344 \begin_inset Text
2345
2346 \layout Standard
2347
2348 N/A
2349 \end_inset 
2350 </cell>
2351 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
2352 \begin_inset Text
2353
2354 \layout Standard
2355
2356 reserved
2357 \end_inset 
2358 </cell>
2359 </row>
2360 <row topline="true">
2361 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2362 \begin_inset Text
2363
2364 \layout Standard
2365
2366 10
2367 \end_inset 
2368 </cell>
2369 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2370 \begin_inset Text
2371
2372 \layout Standard
2373
2374 N/A
2375 \end_inset 
2376 </cell>
2377 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2378 \begin_inset Text
2379
2380 \layout Standard
2381
2382 N/A
2383 \end_inset 
2384 </cell>
2385 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
2386 \begin_inset Text
2387
2388 \layout Standard
2389
2390 reserved
2391 \end_inset 
2392 </cell>
2393 </row>
2394 <row topline="true">
2395 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2396 \begin_inset Text
2397
2398 \layout Standard
2399
2400 11
2401 \end_inset 
2402 </cell>
2403 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2404 \begin_inset Text
2405
2406 \layout Standard
2407
2408 N/A
2409 \end_inset 
2410 </cell>
2411 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2412 \begin_inset Text
2413
2414 \layout Standard
2415
2416 N/A
2417 \end_inset 
2418 </cell>
2419 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
2420 \begin_inset Text
2421
2422 \layout Standard
2423
2424 reserved
2425 \end_inset 
2426 </cell>
2427 </row>
2428 <row topline="true">
2429 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2430 \begin_inset Text
2431
2432 \layout Standard
2433
2434 12
2435 \end_inset 
2436 </cell>
2437 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2438 \begin_inset Text
2439
2440 \layout Standard
2441
2442 N/A
2443 \end_inset 
2444 </cell>
2445 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2446 \begin_inset Text
2447
2448 \layout Standard
2449
2450 N/A
2451 \end_inset 
2452 </cell>
2453 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
2454 \begin_inset Text
2455
2456 \layout Standard
2457
2458 reserved
2459 \end_inset 
2460 </cell>
2461 </row>
2462 <row topline="true">
2463 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2464 \begin_inset Text
2465
2466 \layout Standard
2467
2468 13
2469 \end_inset 
2470 </cell>
2471 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2472 \begin_inset Text
2473
2474 \layout Standard
2475
2476 N/A
2477 \end_inset 
2478 </cell>
2479 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2480 \begin_inset Text
2481
2482 \layout Standard
2483
2484 N/A
2485 \end_inset 
2486 </cell>
2487 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
2488 \begin_inset Text
2489
2490 \layout Standard
2491
2492 Application-defined, interpreted by callback or skipped
2493 \end_inset 
2494 </cell>
2495 </row>
2496 <row topline="true">
2497 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2498 \begin_inset Text
2499
2500 \layout Standard
2501
2502 14
2503 \end_inset 
2504 </cell>
2505 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2506 \begin_inset Text
2507
2508 \layout Standard
2509
2510 N/A
2511 \end_inset 
2512 </cell>
2513 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2514 \begin_inset Text
2515
2516 \layout Standard
2517
2518 N/A
2519 \end_inset 
2520 </cell>
2521 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
2522 \begin_inset Text
2523
2524 \layout Standard
2525
2526 Speex in-band signaling
2527 \end_inset 
2528 </cell>
2529 </row>
2530 <row topline="true" bottomline="true">
2531 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2532 \begin_inset Text
2533
2534 \layout Standard
2535
2536 15
2537 \end_inset 
2538 </cell>
2539 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2540 \begin_inset Text
2541
2542 \layout Standard
2543
2544 N/A
2545 \end_inset 
2546 </cell>
2547 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2548 \begin_inset Text
2549
2550 \layout Standard
2551
2552 N/A
2553 \end_inset 
2554 </cell>
2555 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
2556 \begin_inset Text
2557
2558 \layout Standard
2559
2560 Terminator code
2561 \end_inset 
2562 </cell>
2563 </row>
2564 </lyxtabular>
2565
2566 \end_inset 
2567
2568
2569 \layout Caption
2570
2571 Quality versus bit-rate
2572 \begin_inset LatexCommand \label{cap:quality_vs_bps}
2573
2574 \end_inset 
2575
2576
2577 \end_inset 
2578
2579
2580 \layout Subsection
2581
2582 Perceptual enhancement
2583 \begin_inset LatexCommand \index{perceptual enhancement}
2584
2585 \end_inset 
2586
2587
2588 \layout Standard
2589
2590 This part of the codec only applies to the decoder and can even be changed
2591  without affecting inter-operability.
2592  For that reason, the implementation provided and described here should
2593  only be considered as a reference implementation.
2594  The enhancement system is devided in two parts.
2595  First, the synthesis filter 
2596 \begin_inset Formula $S(z)=1/A(z)$
2597 \end_inset 
2598
2599  is replaced by an enhanced filter
2600 \begin_inset Formula \[
2601 S'(z)=\frac{A\left(z/a_{2}\right)A\left(z/a_{3}\right)}{A\left(z\right)A\left(z/a_{1}\right)}\]
2602
2603 \end_inset 
2604
2605 where 
2606 \begin_inset Formula $a_{1}$
2607 \end_inset 
2608
2609  and 
2610 \begin_inset Formula $a_{2}$
2611 \end_inset 
2612
2613  depend on the mode in use and 
2614 \begin_inset Formula $a_{3}=\frac{1}{r}\left(1-\frac{1-ra_{1}}{1-ra_{2}}\right)$
2615 \end_inset 
2616
2617  with 
2618 \begin_inset Formula $r=.9$
2619 \end_inset 
2620
2621 .
2622  The second part of the enhancement consists of using a comb filter to enhance
2623  the pitch in the excitation domain.
2624  
2625 \layout Section
2626 \pagebreak_top 
2627 Speex wideband mode (sub-band CELP)
2628 \begin_inset LatexCommand \index{wideband}
2629
2630 \end_inset 
2631
2632
2633 \layout Standard
2634
2635 For wideband, the Speex approach uses a 
2636 \emph on 
2637 q
2638 \emph default 
2639 uadrature 
2640 \emph on 
2641 m
2642 \emph default 
2643 irror 
2644 \emph on 
2645 f
2646 \emph default 
2647 ilter
2648 \begin_inset LatexCommand \index{quadrature mirror filter}
2649
2650 \end_inset 
2651
2652  (QMF) to split the band in two.
2653  The 16 kHz signal is thus divided into two 8 kHz signals, one representing
2654  the low band (0-4 kHz), the other the high band (4-8 kHz).
2655  The low band is encoded with the narrowband mode described in section 
2656 \begin_inset LatexCommand \ref{sec:Speex-narrowband-mode}
2657
2658 \end_inset 
2659
2660  in such a way that the resulting 
2661 \begin_inset Quotes eld
2662 \end_inset 
2663
2664 embedded narrowband bit-stream
2665 \begin_inset Quotes erd
2666 \end_inset 
2667
2668  can also be decoded with the narrowband decoder.
2669  Since the low band encoding has already been described only the high band
2670  encoding is described in this section.
2671 \layout Subsection
2672
2673 Linear Prediction
2674 \layout Standard
2675
2676 The linear prediction part used for the high-band is very similar to what
2677  is done for narrowband.
2678  The only difference is that we use only 12 bits to encode the high-band
2679  LSP's using a multi-stage vector quantizer (MSVQ).
2680  The first level quantizes the 10 coefficients with 6 bits and the error
2681  is then quantized using 6 bits too.
2682 \layout Subsection
2683
2684 Pitch Prediction
2685 \layout Standard
2686
2687 That part is easy: there's no pitch prediction for the high-band.
2688  There are two reasons for that.
2689  First, there is usually little harmonic structure in this band (above 4
2690  kHz).
2691  Second, it would be very hard to implement since the QMF folds the 4-8
2692  kHz band into 4-0 kHz (reversing the frequency axis), which means that
2693  the location of the harmonics are no longer at multiples of the fundamental
2694  (pitch).
2695 \layout Subsection
2696
2697 Excitation Quantization
2698 \layout Standard
2699
2700 The high-band excitation is coded in the same way as for narrowband.
2701  
2702 \layout Subsection
2703
2704 Bit allocation
2705 \layout Standard
2706
2707 For the wideband mode, all the narrowband frame is packed before the high-band
2708  is encoded.
2709  The narrowband part of the bit-stream is as defined in table 
2710 \begin_inset LatexCommand \ref{cap:bits-narrowband}
2711
2712 \end_inset 
2713
2714 .
2715  The high-band follows, as described in table 
2716 \begin_inset LatexCommand \ref{cap:bits-wideband}
2717
2718 \end_inset 
2719
2720 .
2721  This also means that a wideband frame may be correctly decoded by a narrowband
2722  decoder with the only caveat that if more than one frame is packed in the
2723  same packet, the decoder will need to skip the high-band parts in order
2724  to sync with the bit-stream.
2725 \layout Standard
2726
2727
2728 \begin_inset Float table
2729 placement h
2730 wide true
2731 collapsed false
2732
2733 \layout Standard
2734
2735
2736 \begin_inset  Tabular
2737 <lyxtabular version="3" rows="7" columns="7">
2738 <features>
2739 <column alignment="center" valignment="top" leftline="true" width="0pt">
2740 <column alignment="center" valignment="top" leftline="true" width="0pt">
2741 <column alignment="center" valignment="top" leftline="true" width="0pt">
2742 <column alignment="center" valignment="top" leftline="true" width="0pt">
2743 <column alignment="center" valignment="top" leftline="true" width="0pt">
2744 <column alignment="center" valignment="top" leftline="true" width="0pt">
2745 <column alignment="center" valignment="top" leftline="true" rightline="true" width="0pt">
2746 <row topline="true" bottomline="true">
2747 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2748 \begin_inset Text
2749
2750 \layout Standard
2751
2752 Parameter
2753 \end_inset 
2754 </cell>
2755 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2756 \begin_inset Text
2757
2758 \layout Standard
2759
2760 Update rate
2761 \end_inset 
2762 </cell>
2763 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2764 \begin_inset Text
2765
2766 \layout Standard
2767
2768 0
2769 \end_inset 
2770 </cell>
2771 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2772 \begin_inset Text
2773
2774 \layout Standard
2775
2776 1
2777 \end_inset 
2778 </cell>
2779 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2780 \begin_inset Text
2781
2782 \layout Standard
2783
2784 2
2785 \end_inset 
2786 </cell>
2787 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2788 \begin_inset Text
2789
2790 \layout Standard
2791
2792 3
2793 \end_inset 
2794 </cell>
2795 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2796 \begin_inset Text
2797
2798 \layout Standard
2799
2800 4
2801 \end_inset 
2802 </cell>
2803 </row>
2804 <row topline="true">
2805 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2806 \begin_inset Text
2807
2808 \layout Standard
2809
2810 Wideband bit
2811 \end_inset 
2812 </cell>
2813 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2814 \begin_inset Text
2815
2816 \layout Standard
2817
2818 frame
2819 \end_inset 
2820 </cell>
2821 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2822 \begin_inset Text
2823
2824 \layout Standard
2825
2826 1
2827 \end_inset 
2828 </cell>
2829 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2830 \begin_inset Text
2831
2832 \layout Standard
2833
2834 1
2835 \end_inset 
2836 </cell>
2837 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2838 \begin_inset Text
2839
2840 \layout Standard
2841
2842 1
2843 \end_inset 
2844 </cell>
2845 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2846 \begin_inset Text
2847
2848 \layout Standard
2849
2850 1
2851 \end_inset 
2852 </cell>
2853 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2854 \begin_inset Text
2855
2856 \layout Standard
2857
2858 1
2859 \end_inset 
2860 </cell>
2861 </row>
2862 <row topline="true">
2863 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2864 \begin_inset Text
2865
2866 \layout Standard
2867
2868 Mode ID
2869 \end_inset 
2870 </cell>
2871 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2872 \begin_inset Text
2873
2874 \layout Standard
2875
2876 frame
2877 \end_inset 
2878 </cell>
2879 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2880 \begin_inset Text
2881
2882 \layout Standard
2883
2884 3
2885 \end_inset 
2886 </cell>
2887 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2888 \begin_inset Text
2889
2890 \layout Standard
2891
2892 3
2893 \end_inset 
2894 </cell>
2895 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2896 \begin_inset Text
2897
2898 \layout Standard
2899
2900 3
2901 \end_inset 
2902 </cell>
2903 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2904 \begin_inset Text
2905
2906 \layout Standard
2907
2908 3
2909 \end_inset 
2910 </cell>
2911 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2912 \begin_inset Text
2913
2914 \layout Standard
2915
2916 3
2917 \end_inset 
2918 </cell>
2919 </row>
2920 <row topline="true">
2921 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2922 \begin_inset Text
2923
2924 \layout Standard
2925
2926 LSP
2927 \end_inset 
2928 </cell>
2929 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2930 \begin_inset Text
2931
2932 \layout Standard
2933
2934 frame
2935 \end_inset 
2936 </cell>
2937 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2938 \begin_inset Text
2939
2940 \layout Standard
2941
2942 0
2943 \end_inset 
2944 </cell>
2945 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2946 \begin_inset Text
2947
2948 \layout Standard
2949
2950 12
2951 \end_inset 
2952 </cell>
2953 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2954 \begin_inset Text
2955
2956 \layout Standard
2957
2958 12
2959 \end_inset 
2960 </cell>
2961 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2962 \begin_inset Text
2963
2964 \layout Standard
2965
2966 12
2967 \end_inset 
2968 </cell>
2969 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2970 \begin_inset Text
2971
2972 \layout Standard
2973
2974 12
2975 \end_inset 
2976 </cell>
2977 </row>
2978 <row topline="true">
2979 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2980 \begin_inset Text
2981
2982 \layout Standard
2983
2984 Excitation gain
2985 \end_inset 
2986 </cell>
2987 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2988 \begin_inset Text
2989
2990 \layout Standard
2991
2992 sub-frame
2993 \end_inset 
2994 </cell>
2995 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2996 \begin_inset Text
2997
2998 \layout Standard
2999
3000 0
3001 \end_inset 
3002 </cell>
3003 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3004 \begin_inset Text
3005
3006 \layout Standard
3007
3008 5
3009 \end_inset 
3010 </cell>
3011 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3012 \begin_inset Text
3013
3014 \layout Standard
3015
3016 4
3017 \end_inset 
3018 </cell>
3019 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3020 \begin_inset Text
3021
3022 \layout Standard
3023
3024 4
3025 \end_inset 
3026 </cell>
3027 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3028 \begin_inset Text
3029
3030 \layout Standard
3031
3032 4
3033 \end_inset 
3034 </cell>
3035 </row>
3036 <row topline="true" bottomline="true">
3037 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3038 \begin_inset Text
3039
3040 \layout Standard
3041
3042 Excitation VQ
3043 \end_inset 
3044 </cell>
3045 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3046 \begin_inset Text
3047
3048 \layout Standard
3049
3050 sub-frame
3051 \end_inset 
3052 </cell>
3053 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3054 \begin_inset Text
3055
3056 \layout Standard
3057
3058 0
3059 \end_inset 
3060 </cell>
3061 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3062 \begin_inset Text
3063
3064 \layout Standard
3065
3066 0
3067 \end_inset 
3068 </cell>
3069 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3070 \begin_inset Text
3071
3072 \layout Standard
3073
3074 20
3075 \end_inset 
3076 </cell>
3077 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3078 \begin_inset Text
3079
3080 \layout Standard
3081
3082 40
3083 \end_inset 
3084 </cell>
3085 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3086 \begin_inset Text
3087
3088 \layout Standard
3089
3090 80
3091 \end_inset 
3092 </cell>
3093 </row>
3094 <row topline="true" bottomline="true">
3095 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3096 \begin_inset Text
3097
3098 \layout Standard
3099
3100 Total
3101 \end_inset 
3102 </cell>
3103 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3104 \begin_inset Text
3105
3106 \layout Standard
3107
3108 frame
3109 \end_inset 
3110 </cell>
3111 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3112 \begin_inset Text
3113
3114 \layout Standard
3115
3116 4
3117 \end_inset 
3118 </cell>
3119 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3120 \begin_inset Text
3121
3122 \layout Standard
3123
3124 36
3125 \end_inset 
3126 </cell>
3127 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3128 \begin_inset Text
3129
3130 \layout Standard
3131
3132 112
3133 \end_inset 
3134 </cell>
3135 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3136 \begin_inset Text
3137
3138 \layout Standard
3139
3140 192
3141 \end_inset 
3142 </cell>
3143 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3144 \begin_inset Text
3145
3146 \layout Standard
3147
3148 352
3149 \end_inset 
3150 </cell>
3151 </row>
3152 </lyxtabular>
3153
3154 \end_inset 
3155
3156
3157 \layout Caption
3158
3159 Bit allocation for high-band in wideband mode
3160 \begin_inset LatexCommand \label{cap:bits-wideband}
3161
3162 \end_inset 
3163
3164
3165 \end_inset 
3166
3167
3168 \layout Standard
3169
3170
3171 \begin_inset ERT
3172 status Open
3173
3174 \layout Standard
3175
3176 \backslash 
3177 clearpage
3178 \end_inset 
3179
3180
3181 \layout Section
3182 \pagebreak_top 
3183 Command-line encoder/decoder
3184 \layout Standard
3185
3186 The base Speex distribution includes a command-line encoder (
3187 \emph on 
3188 speexenc
3189 \emph default 
3190 ) and decoder (
3191 \emph on 
3192 speexdec
3193 \emph default 
3194 ).
3195 \layout Subsection
3196
3197
3198 \emph on 
3199 speexenc
3200 \begin_inset LatexCommand \index{speexenc}
3201
3202 \end_inset 
3203
3204
3205 \layout Standard
3206
3207 The encoder takes the following options:
3208 \layout Description
3209
3210 --narrowband\SpecialChar ~
3211 (-n) Tell Speex to treat the input as narrowband (8 kHz).
3212  This is the default
3213 \layout Description
3214
3215 --wideband\SpecialChar ~
3216 (-w) Tell Speex to treat the input as wideband (16 kHz)
3217 \layout Description
3218
3219 --ultra-wideband\SpecialChar ~
3220 (-u) Tell Speex to treat the input as 
3221 \begin_inset Quotes eld
3222 \end_inset 
3223
3224 ultra-wideband
3225 \begin_inset Quotes erd
3226 \end_inset 
3227
3228  (32 kHz)
3229 \layout Description
3230
3231 --quality\SpecialChar ~
3232 n Set the encoding quality (0-10), default is 3
3233 \layout Description
3234
3235 --bitrate\SpecialChar ~
3236 n Encoding bit-rate (use bit-rate n or lower) 
3237 \layout Description
3238
3239 --vbr Enable VBR (Variable Bit-Rate), disabled by default
3240 \layout Description
3241
3242 --abr\SpecialChar ~
3243 n Enable ABR (Average Bit-Rate) at n kbps, disabled by default
3244 \layout Description
3245
3246 --vad Enable VAD (Voice Activity Detection), disabled by default
3247 \layout Description
3248
3249 --dtx Enable DTX (Discontinuous Transmission), disabled by default
3250 \layout Description
3251
3252 --nframes\SpecialChar ~
3253 n Pack n frames in each Ogg packet (this saves space at low bit-rates)
3254 \layout Description
3255
3256 --comp\SpecialChar ~
3257 n Set encoding speed/quality tradeoff.
3258  The higher the value of n, the slower the encoding (default is 3)
3259 \layout Description
3260
3261 -V Verbose operation, print bit-rate currently in use
3262 \layout Description
3263
3264 --help\SpecialChar ~
3265 (-h) Print the help
3266 \layout Description
3267
3268 --version\SpecialChar ~
3269 (-v) Print version information
3270 \layout Subsubsection*
3271
3272 Speex comments
3273 \layout Description
3274
3275 --comment Add the given string as an extra comment.
3276  This may be used multiple times.
3277  
3278 \layout Description
3279
3280 --author Author of this track.
3281  
3282 \layout Description
3283
3284 --title Title for this track.
3285  
3286 \layout Subsubsection*
3287
3288 Raw input options
3289 \layout Description
3290
3291 --rate\SpecialChar ~
3292 n Sampling rate for raw input
3293 \layout Description
3294
3295 --stereo Consider raw input as stereo 
3296 \layout Description
3297
3298 --le Raw input is little-endian 
3299 \layout Description
3300
3301 --be Raw input is big-endian 
3302 \layout Description
3303
3304 --8bit Raw input is 8-bit unsigned 
3305 \layout Description
3306
3307 --16bit Raw input is 16-bit signed 
3308 \layout Subsection
3309
3310
3311 \emph on 
3312 speexdec
3313 \begin_inset LatexCommand \index{speexdec}
3314
3315 \end_inset 
3316
3317
3318 \layout Standard
3319
3320 The decoder takes the following options:
3321 \layout Description
3322
3323 --enh enable post-filter (default)
3324 \layout Description
3325
3326 --no-enh disable post-filter
3327 \layout Description
3328
3329 --force-nb Force decoding in narrowband 
3330 \layout Description
3331
3332 --force-wb Force decoding in wideband 
3333 \layout Description
3334
3335 --force-uwb Force decoding in ultra-wideband 
3336 \layout Description
3337
3338 --mono Force decoding in mono 
3339 \layout Description
3340
3341 --stereo Force decoding in stereo 
3342 \layout Description
3343
3344 --rate\SpecialChar ~
3345 n For decoding at n Hz sampling rate
3346 \layout Description
3347
3348 --packet-loss\SpecialChar ~
3349 n Simulate n % rando m packet loss
3350 \layout Description
3351
3352 -V Verbose operation, print bit-rate currently in use
3353 \layout Description
3354
3355 --help\SpecialChar ~
3356 (-h) Print the help
3357 \layout Description
3358
3359 --version\SpecialChar ~
3360 (-v) Print version information
3361 \layout Section
3362 \pagebreak_top 
3363 Programming with Speex (the libspeex
3364 \begin_inset LatexCommand \index{libspeex}
3365
3366 \end_inset 
3367
3368  API
3369 \begin_inset LatexCommand \index{API}
3370
3371 \end_inset 
3372
3373 )
3374 \layout Subsection
3375
3376 Encoding
3377 \layout Standard
3378
3379 In order to encode speech using Speex, you first need to:
3380 \layout LyX-Code
3381
3382 #include <speex.h>
3383 \layout Standard
3384
3385 You then need to declare a Speex bit-packing struct
3386 \layout LyX-Code
3387
3388 SpeexBits bits;
3389 \layout Standard
3390
3391 and a Speex encoder state
3392 \layout LyX-Code
3393
3394 void *enc_state;
3395 \layout Standard
3396
3397 The two are initialized by:
3398 \layout LyX-Code
3399
3400 speex_bits_init(&bits);
3401 \layout LyX-Code
3402
3403 enc_state = speex_encoder_init(&speex_nb_mode);
3404 \layout Standard
3405
3406 For wideband coding, 
3407 \emph on 
3408 speex_nb_mode
3409 \emph default 
3410  will be replaced by 
3411 \emph on 
3412 speex_wb_mode
3413 \emph default 
3414 .
3415  In most cases, you will need to know the frame size used by the mode you
3416  are using.
3417  You can get that value in the 
3418 \emph on 
3419 frame_size
3420 \emph default 
3421  variable with:
3422 \layout LyX-Code
3423
3424 speex_encoder_ctl(enc_state,SPEEX_GET_FRAME_SIZE,&frame_size);
3425 \layout Standard
3426
3427 Once the initialization is done, for every input frame:
3428 \layout LyX-Code
3429
3430 speex_bits_reset(&bits);
3431 \layout LyX-Code
3432
3433 speex_encode(enc_state, input_frame, &bits);
3434 \layout LyX-Code
3435
3436 nbBytes = speex_bits_write(&bits, byte_ptr, MAX_NB_BYTES);
3437 \layout Standard
3438
3439 where 
3440 \emph on 
3441 input_frame
3442 \emph default 
3443  is a 
3444 \emph on 
3445 (float *)
3446 \emph default 
3447  pointing to the beginning of a speech frame, 
3448 \emph on 
3449 byte_ptr
3450 \emph default 
3451  is a 
3452 \emph on 
3453 (char *)
3454 \emph default 
3455  where the encoded frame will be written, 
3456 \emph on 
3457 MAX_NB_BYTES
3458 \emph default 
3459  is the maximum number of bytes that can be written to 
3460 \emph on 
3461 byte_ptr
3462 \emph default 
3463  without causing an overflow and 
3464 \emph on 
3465 nbBytes
3466 \emph default 
3467  is the number of bytes actually written to 
3468 \emph on 
3469 byte_ptr
3470 \emph default 
3471  (the encoded size in bytes).
3472  Before calling speex_bits_write, it is possible to find the number of bytes
3473  that need to be written by calling 
3474 \family typewriter 
3475 speex_bits_nbytes(&bits)
3476 \family default 
3477 , which returns a number of bytes.
3478  
3479 \layout Standard
3480
3481 After you're done with the encoding, free all resources with:
3482 \layout LyX-Code
3483
3484 speex_bits_destroy(&bits);
3485 \layout LyX-Code
3486
3487 speex_encoder_destroy(enc_state);
3488 \layout Standard
3489
3490 That's about it for the encoder.
3491  
3492 \layout Subsection
3493
3494 Decoding
3495 \layout Standard
3496
3497 In order to encode speech using Speex, you first need to:
3498 \layout LyX-Code
3499
3500 #include <speex.h>
3501 \layout Standard
3502
3503 You then need to declare a Speex bit-packing struct
3504 \layout LyX-Code
3505
3506 SpeexBits bits;
3507 \layout Standard
3508
3509 and a Speex encoder state
3510 \layout LyX-Code
3511
3512 void *dec_state;
3513 \layout Standard
3514
3515 The two are initialized by:
3516 \layout LyX-Code
3517
3518 speex_bits_init(&bits);
3519 \layout LyX-Code
3520
3521 dec_state = speex_decoder_init(&speex_nb_mode);
3522 \layout Standard
3523
3524 For wideband decoding, 
3525 \emph on 
3526 speex_nb_mode
3527 \emph default 
3528  will be replaced by 
3529 \emph on 
3530 speex_wb_mode
3531 \emph default 
3532 .
3533  You can get that value in the 
3534 \emph on 
3535 frame_size
3536 \emph default 
3537  variable with:
3538 \layout LyX-Code
3539
3540 speex_decoder_ctl(dec_state, SPEEX_GET_FRAME_SIZE, &frame_size); 
3541 \layout Standard
3542
3543 There is also a parameter that can be set for the decoder: whether or not
3544  to use a perceptual post-filter.
3545  This can be set by: 
3546 \layout LyX-Code
3547
3548 speex_decoder_ctl(dec_state, SPEEX_SET_PF, &pf); 
3549 \layout Standard
3550
3551 where pf is an int that with value 0 to have the post-filter disabled and
3552  1 to have it enabled.
3553 \layout Standard
3554
3555 Again, once the decoder initialization is done, for every input frame:
3556 \layout LyX-Code
3557
3558 speex_bits_read_from(&bits, input_bytes, nbBytes);
3559 \layout LyX-Code
3560
3561 speex_decode(st, &bits, output_frame);
3562 \layout Standard
3563
3564 where input_bytes is a 
3565 \emph on 
3566 (char *)
3567 \emph default 
3568  containing the bit-stream data received for a frame, 
3569 \emph on 
3570 nbBytes
3571 \emph default 
3572  is the size (in bytes) of that bit-stream, and 
3573 \emph on 
3574 output_frame
3575 \emph default 
3576  is a 
3577 \emph on 
3578 (float *)
3579 \emph default 
3580  and points to the area where the decoded speech frame will be written.
3581  A NULL value as the first argument indicates that we don't have the bits
3582  for the current frame.
3583  When a frame is lost, the Speex decoder will do its best to "guess" the
3584  correct signal.
3585 \layout Standard
3586
3587 After you're done with the decoding, free all resources with:
3588 \layout LyX-Code
3589
3590 speex_bits_destroy(&bits);
3591 \layout LyX-Code
3592
3593 speex_decoder_destroy(dec_state);
3594 \layout Subsection
3595
3596 Codec Options (speex_*_ctl)
3597 \layout Standard
3598
3599 The Speex encoder and decoder support many options and requests that can
3600  be accessed through the 
3601 \emph on 
3602 speex_encoder_ctl
3603 \emph default 
3604  and 
3605 \emph on 
3606 speex_decoder_ctl
3607 \emph default 
3608  functions.
3609  These functions are similar the the 
3610 \emph on 
3611 ioctl
3612 \emph default 
3613  system call and their prototypes are:
3614 \layout LyX-Code
3615
3616 void speex_encoder_ctl(void *encoder, int request, void *ptr);
3617 \layout LyX-Code
3618
3619 void speex_decoder_ctl(void *encoder, int request, void *ptr);
3620 \layout Standard
3621
3622 The different values of request allowed are (note that some only apply to
3623  the encoder or the decoder):
3624 \layout Description
3625
3626 SPEEX_SET_ENH** Set perceptual enhancer to on (1) or off (0) (integer)
3627 \layout Description
3628
3629 SPEEX_GET_ENH** Get perceptual enhancer status (integer)
3630 \layout Description
3631
3632 SPEEX_GET_FRAME_SIZE Get the frame size used for the current mode (integer)
3633 \layout Description
3634
3635 SPEEX_SET_QUALITY* Set the encoder speech quality (integer 0 to 10)
3636 \layout Description
3637
3638 SPEEX_GET_QUALITY* Get the current encoder speech quality (integer 0 to
3639  10)
3640 \layout Description
3641
3642 SPEEX_SET_MODE*
3643 \begin_inset Formula $\dagger $
3644 \end_inset 
3645
3646
3647 \layout Description
3648
3649 SPEEX_GET_MODE*
3650 \begin_inset Formula $\dagger $
3651 \end_inset 
3652
3653
3654 \layout Description
3655
3656 SPEEX_SET_LOW_MODE*
3657 \begin_inset Formula $\dagger $
3658 \end_inset 
3659
3660
3661 \layout Description
3662
3663 SPEEX_GET_LOW_MODE*
3664 \begin_inset Formula $\dagger $
3665 \end_inset 
3666
3667
3668 \layout Description
3669
3670 SPEEX_SET_HIGH_MODE*
3671 \begin_inset Formula $\dagger $
3672 \end_inset 
3673
3674
3675 \layout Description
3676
3677 SPEEX_GET_HIGH_MODE*
3678 \begin_inset Formula $\dagger $
3679 \end_inset 
3680
3681
3682 \layout Description
3683
3684 SPEEX_SET_VBR* Set variable bit-rate (VBR) to on (1) or off (0) (integer)
3685 \layout Description
3686
3687 SPEEX_GET_VBR* Get variable bit-rate (VBR) status (integer)
3688 \layout Description
3689
3690 SPEEX_SET_VBR_QUALITY* Set the encoder VBR speech quality (integer 0 to
3691  10)
3692 \layout Description
3693
3694 SPEEX_GET_VBR_QUALITY* Get the current encoder VBR speech quality (integer
3695  0 to 10)
3696 \layout Description
3697
3698 SPEEX_SET_COMPLEXITY* Set the CPU resources allowed for the encoder
3699 \layout Description
3700
3701 SPEEX_GET_COMPLEXITY* Get the CPU resources allowed for the encoder
3702 \layout Description
3703
3704 SPEEX_SET_BITRATE* Set the bit-rate to use to the closest value not exceeding
3705  the parameter (integer in bps)
3706 \layout Description
3707
3708 SPEEX_GET_BITRATE Get the current bit-rate in use (integer in bps)
3709 \layout Description
3710
3711 SPEEX_SET_SAMPLING_RATE Set real sampling rate (is used to determine real
3712  bit-rate)
3713 \layout Description
3714
3715 SPEEX_GET_SAMPLING_RATE Get real sampling rate (is used to determine real
3716  bit-rate)
3717 \layout Description
3718
3719 * applies only to the encoder
3720 \layout Description
3721
3722 ** applies only to the decoder
3723 \layout Description
3724
3725
3726 \begin_inset Formula $\dagger $
3727 \end_inset 
3728
3729  normally only used internally
3730 \layout Subsection
3731
3732 Mode queries
3733 \layout Standard
3734
3735 Speex modes have a querry system similar to the speex_encoder_ctl and speex_deco
3736 der_ctl calls.
3737  Since modes are read-only, it is only possible to get information about
3738  a particular mode.
3739  The function used to do that is:
3740 \layout LyX-Code
3741
3742 void speex_mode_query(SpeexMode *mode, int request, void *ptr);
3743 \layout Standard
3744
3745 The admissible values for request are (unless otherwise note, the values
3746  are returned through 
3747 \emph on 
3748 ptr
3749 \emph default 
3750 ):
3751 \layout Description
3752
3753 SPEEX_MODE_FRAME_SIZE Get the frame size (in samples) for the mode
3754 \layout Description
3755
3756 SPEEX_SUBMODE_BITRATE Get the bit-rate for a submode number specified throught
3757  
3758 \emph on 
3759 ptr
3760 \emph default 
3761 .
3762 \layout Subsection
3763
3764 Packing and in-band signalling
3765 \begin_inset LatexCommand \index{in-band signalling}
3766
3767 \end_inset 
3768
3769
3770 \layout Standard
3771
3772 Sometimes it is desirable to pack more than one frame per packet (or other
3773  basic unit of storage).
3774  The proper way to do it is to call speex_encode 
3775 \begin_inset Formula $N$
3776 \end_inset 
3777
3778  times before writing the stream with speex_bits_write.
3779  In cases where the number of frames is not determined by an out-of-band
3780  mechanism, it is possible to include a terminator code.
3781  That terminator consists of the code 15 (decimal) encoded with 5 bits,
3782  as shown in figure 
3783 \begin_inset LatexCommand \ref{cap:quality_vs_bps}
3784
3785 \end_inset 
3786
3787 .
3788  
3789 \layout Standard
3790
3791 It is also possible to send in-band 
3792 \begin_inset Quotes eld
3793 \end_inset 
3794
3795 messages
3796 \begin_inset Quotes erd
3797 \end_inset 
3798
3799  to the other side.
3800  All these messages are encoded as a 
3801 \begin_inset Quotes eld
3802 \end_inset 
3803
3804 pseudo-frame
3805 \begin_inset Quotes erd
3806 \end_inset 
3807
3808  of mode 14 which contain a 4-bit message type code, followed by the message.
3809  Table 
3810 \begin_inset LatexCommand \ref{cap:In-band-signalling-codes}
3811
3812 \end_inset 
3813
3814  lists the available codes, their meaning and the size of the message that
3815  follow.
3816  Most of these messages are requests that are sent to the encoder or decoder
3817  on the other end, which is free to comply or ignore them.
3818  By default, all in-band messages are ignored.
3819 \layout Standard
3820
3821
3822 \begin_inset Float table
3823 placement htbp
3824 wide false
3825 collapsed false
3826
3827 \layout Standard
3828
3829
3830 \begin_inset  Tabular
3831 <lyxtabular version="3" rows="17" columns="3">
3832 <features>
3833 <column alignment="center" valignment="top" leftline="true" width="0pt">
3834 <column alignment="center" valignment="top" leftline="true" width="0pt">
3835 <column alignment="center" valignment="top" leftline="true" rightline="true" width="0pt">
3836 <row topline="true" bottomline="true">
3837 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3838 \begin_inset Text
3839
3840 \layout Standard
3841
3842 code
3843 \end_inset 
3844 </cell>
3845 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3846 \begin_inset Text
3847
3848 \layout Standard
3849
3850 Size (bits)
3851 \end_inset 
3852 </cell>
3853 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
3854 \begin_inset Text
3855
3856 \layout Standard
3857
3858 Content
3859 \end_inset 
3860 </cell>
3861 </row>
3862 <row topline="true">
3863 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3864 \begin_inset Text
3865
3866 \layout Standard
3867
3868 0
3869 \end_inset 
3870 </cell>
3871 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3872 \begin_inset Text
3873
3874 \layout Standard
3875
3876 1
3877 \end_inset 
3878 </cell>
3879 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
3880 \begin_inset Text
3881
3882 \layout Standard
3883
3884 Asks decoder to set perceptual enhancement off (0) or on(1)
3885 \end_inset 
3886 </cell>
3887 </row>
3888 <row topline="true">
3889 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3890 \begin_inset Text
3891
3892 \layout Standard
3893
3894 1
3895 \end_inset 
3896 </cell>
3897 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3898 \begin_inset Text
3899
3900 \layout Standard
3901
3902 1
3903 \end_inset 
3904 </cell>
3905 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
3906 \begin_inset Text
3907
3908 \layout Standard
3909
3910 reserved
3911 \end_inset 
3912 </cell>
3913 </row>
3914 <row topline="true">
3915 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3916 \begin_inset Text
3917
3918 \layout Standard
3919
3920 2
3921 \end_inset 
3922 </cell>
3923 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3924 \begin_inset Text
3925
3926 \layout Standard
3927
3928 4
3929 \end_inset 
3930 </cell>
3931 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
3932 \begin_inset Text
3933
3934 \layout Standard
3935
3936 Asks encoder to switch to mode N
3937 \end_inset 
3938 </cell>
3939 </row>
3940 <row topline="true">
3941 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3942 \begin_inset Text
3943
3944 \layout Standard
3945
3946 3
3947 \end_inset 
3948 </cell>
3949 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3950 \begin_inset Text
3951
3952 \layout Standard
3953
3954 4
3955 \end_inset 
3956 </cell>
3957 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
3958 \begin_inset Text
3959
3960 \layout Standard
3961
3962 Asks encoder to switch to mode N for low-band
3963 \end_inset 
3964 </cell>
3965 </row>
3966 <row topline="true">
3967 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3968 \begin_inset Text
3969
3970 \layout Standard
3971
3972 4
3973 \end_inset 
3974 </cell>
3975 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3976 \begin_inset Text
3977
3978 \layout Standard
3979
3980 4
3981 \end_inset 
3982 </cell>
3983 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
3984 \begin_inset Text
3985
3986 \layout Standard
3987
3988 Asks encoder to switch to mode N for high-band
3989 \end_inset 
3990 </cell>
3991 </row>
3992 <row topline="true">
3993 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3994 \begin_inset Text
3995
3996 \layout Standard
3997
3998 5
3999 \end_inset 
4000 </cell>
4001 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4002 \begin_inset Text
4003
4004 \layout Standard
4005
4006 4
4007 \end_inset 
4008 </cell>
4009 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
4010 \begin_inset Text
4011
4012 \layout Standard
4013
4014 Asks encoder to switch to quality N for VBR
4015 \end_inset 
4016 </cell>
4017 </row>
4018 <row topline="true">
4019 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4020 \begin_inset Text
4021
4022 \layout Standard
4023
4024 6
4025 \end_inset 
4026 </cell>
4027 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4028 \begin_inset Text
4029
4030 \layout Standard
4031
4032 4
4033 \end_inset 
4034 </cell>
4035 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
4036 \begin_inset Text
4037
4038 \layout Standard
4039
4040 Request acknowloedge (0=no, 1=all, 2=only for in-band data)
4041 \end_inset 
4042 </cell>
4043 </row>
4044 <row topline="true">
4045 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4046 \begin_inset Text
4047
4048 \layout Standard
4049
4050 7
4051 \end_inset 
4052 </cell>
4053 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4054 \begin_inset Text
4055
4056 \layout Standard
4057
4058 4
4059 \end_inset 
4060 </cell>
4061 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
4062 \begin_inset Text
4063
4064 \layout Standard
4065
4066 Asks encoder to set VBR off (0), on(1), VAD(2), DTX(3)
4067 \end_inset 
4068 </cell>
4069 </row>
4070 <row topline="true">
4071 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4072 \begin_inset Text
4073
4074 \layout Standard
4075
4076 8
4077 \end_inset 
4078 </cell>
4079 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4080 \begin_inset Text
4081
4082 \layout Standard
4083
4084 8
4085 \end_inset 
4086 </cell>
4087 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
4088 \begin_inset Text
4089
4090 \layout Standard
4091
4092 Transmit (8-bit) character to the other end
4093 \end_inset 
4094 </cell>
4095 </row>
4096 <row topline="true">
4097 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4098 \begin_inset Text
4099
4100 \layout Standard
4101
4102 9
4103 \end_inset 
4104 </cell>
4105 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4106 \begin_inset Text
4107
4108 \layout Standard
4109
4110 8
4111 \end_inset 
4112 </cell>
4113 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
4114 \begin_inset Text
4115
4116 \layout Standard
4117
4118 Intensity stereo information
4119 \end_inset 
4120 </cell>
4121 </row>
4122 <row topline="true">
4123 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4124 \begin_inset Text
4125
4126 \layout Standard
4127
4128 10
4129 \end_inset 
4130 </cell>
4131 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4132 \begin_inset Text
4133
4134 \layout Standard
4135
4136 16
4137 \end_inset 
4138 </cell>
4139 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
4140 \begin_inset Text
4141
4142 \layout Standard
4143
4144 Announce maximum bit-rate acceptable (N in bytes/second)
4145 \end_inset 
4146 </cell>
4147 </row>
4148 <row topline="true">
4149 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4150 \begin_inset Text
4151
4152 \layout Standard
4153
4154 11
4155 \end_inset 
4156 </cell>
4157 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4158 \begin_inset Text
4159
4160 \layout Standard
4161
4162 16
4163 \end_inset 
4164 </cell>
4165 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
4166 \begin_inset Text
4167
4168 \layout Standard
4169
4170 reserved
4171 \end_inset 
4172 </cell>
4173 </row>
4174 <row topline="true">
4175 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4176 \begin_inset Text
4177
4178 \layout Standard
4179
4180 12
4181 \end_inset 
4182 </cell>
4183 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4184 \begin_inset Text
4185
4186 \layout Standard
4187
4188 32
4189 \end_inset 
4190 </cell>
4191 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
4192 \begin_inset Text
4193
4194 \layout Standard
4195
4196 Acknowledge receiving packet N
4197 \end_inset 
4198 </cell>
4199 </row>
4200 <row topline="true">
4201 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4202 \begin_inset Text
4203
4204 \layout Standard
4205
4206 13
4207 \end_inset 
4208 </cell>
4209 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4210 \begin_inset Text
4211
4212 \layout Standard
4213
4214 32
4215 \end_inset 
4216 </cell>
4217 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
4218 \begin_inset Text
4219
4220 \layout Standard
4221
4222 reserved
4223 \end_inset 
4224 </cell>
4225 </row>
4226 <row topline="true">
4227 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4228 \begin_inset Text
4229
4230 \layout Standard
4231
4232 14
4233 \end_inset 
4234 </cell>
4235 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4236 \begin_inset Text
4237
4238 \layout Standard
4239
4240 64
4241 \end_inset 
4242 </cell>
4243 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
4244 \begin_inset Text
4245
4246 \layout Standard
4247
4248 reserved
4249 \end_inset 
4250 </cell>
4251 </row>
4252 <row topline="true" bottomline="true">
4253 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4254 \begin_inset Text
4255
4256 \layout Standard
4257
4258 15
4259 \end_inset 
4260 </cell>
4261 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4262 \begin_inset Text
4263
4264 \layout Standard
4265
4266 64
4267 \end_inset 
4268 </cell>
4269 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
4270 \begin_inset Text
4271
4272 \layout Standard
4273
4274 reserved
4275 \end_inset 
4276 </cell>
4277 </row>
4278 </lyxtabular>
4279
4280 \end_inset 
4281
4282
4283 \layout Caption
4284
4285 In-band signalling codes
4286 \begin_inset LatexCommand \label{cap:In-band-signalling-codes}
4287
4288 \end_inset 
4289
4290
4291 \end_inset 
4292
4293
4294 \layout Standard
4295
4296 Finally, applications may define custom in-band messages using mode 13.
4297  The size of the message in bytes is encoded with 5 bits, so that the decoder
4298  can skip it if it doesn't know how to interpret it.
4299 \layout Section
4300 \pagebreak_top 
4301 Formats and standards
4302 \begin_inset LatexCommand \index{standards}
4303
4304 \end_inset 
4305
4306
4307 \layout Standard
4308
4309 Speex can encode speech in both narrowband and wideband and provides different
4310  bit-rates.
4311  However not all features must be supported by a certain implementation
4312  or device.
4313  In order to be said 
4314 \begin_inset Quotes eld
4315 \end_inset 
4316
4317 Speex compatible
4318 \begin_inset Quotes erd
4319 \end_inset 
4320
4321  (whatever that means), an implementation must implement at least a basic
4322  set of features.
4323 \layout Standard
4324
4325 At the minimum, all narrowband modes of operation MUST be supported at the
4326  decoder.
4327  This includes the decoding of a wideband bit-stream by the narrowband decoder
4328 \begin_inset Foot
4329 collapsed true
4330
4331 \layout Standard
4332
4333 The wideband bit-stream contains an embedded narrowband bit-stream which
4334  can be decoded alone
4335 \end_inset 
4336
4337 .
4338  If present, a wideband decoder MUST be able to decode a narrowband stream,
4339  and MAY either be able to decode all wideband modes or be able to decode
4340  the embedded narrowband part of all modes (which includes ignoring the
4341  high-band bits).
4342 \layout Standard
4343
4344 For encoders, at least one narrowband or wideband mode MUST be supported.
4345  The main reason why all encoding modes do not have to be supported is that
4346  some platforms may not be able to handle the complexity of encoding in
4347  some modes.
4348 \layout Subsection
4349
4350 RTP
4351 \begin_inset LatexCommand \index{RTP}
4352
4353 \end_inset 
4354
4355  Payload Format 
4356 \layout Standard
4357
4358 The latest RTP payload draft can be found at 
4359 \begin_inset LatexCommand \url{http://www.speex.org/drafts/latest}
4360
4361 \end_inset 
4362
4363 .
4364  We are (2002/11/11) about to send the latest draft to the IETF for comments.
4365  
4366 \layout Comment
4367
4368 Since Speex encoded frames already contain mode information, they can be
4369  sent without any other information in an RTP packet.
4370  If more than one frame is transmitted, no byte padding is performed at
4371  the end of frames, except the last one.
4372  The number of frames contained in each packet MUST be transmitted out-of-band.
4373  
4374 \layout Subsection
4375
4376 MIME Type
4377 \layout Standard
4378
4379 Speex will use the MIME type 
4380 \family typewriter 
4381 audio/speex
4382 \family default 
4383 .
4384  We will apply for that type in the near future.
4385 \layout Subsection
4386
4387 Ogg
4388 \begin_inset LatexCommand \index{Ogg}
4389
4390 \end_inset 
4391
4392  file format
4393 \layout Standard
4394
4395 Speex bit-streams can be stored in Ogg files.
4396  In this case, the first packet of the Ogg file contains the Speex header
4397  described in table 
4398 \begin_inset LatexCommand \ref{cap:ogg_speex_header}
4399
4400 \end_inset 
4401
4402 .
4403  All integer fields in the headers are stored as little-endian.
4404  The 
4405 \family typewriter 
4406 speex_string
4407 \family default 
4408  field must contain the 
4409 \begin_inset Quotes eld
4410 \end_inset 
4411
4412
4413 \family typewriter 
4414 Speex
4415 \family default 
4416 \SpecialChar ~
4417 \SpecialChar ~
4418 \SpecialChar ~
4419
4420 \begin_inset Quotes eld
4421 \end_inset 
4422
4423  (with 3 training spaces), which identifies the bit-stream.
4424  The next field, 
4425 \family typewriter 
4426 speex_version
4427 \family default 
4428  contains the version of Speex that encoded the file.
4429  For now, refer to speex_header.[ch] for more info.
4430  The 
4431 \emph on 
4432 beginning of stream
4433 \emph default 
4434  (
4435 \family typewriter 
4436 b_o_s
4437 \family default 
4438 ) flag is set to 1 for the header.
4439  The header packet has 
4440 \family typewriter 
4441 packetno=0
4442 \family default 
4443  and 
4444 \family typewriter 
4445 granulepos=0
4446 \family default