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