Update for 1.1.11
[speexdsp.git] / doc / manual.lyx
1 #LyX 1.3 created this file. For more info see http://www.lyx.org/
2 \lyxformat 221
3 \textclass article
4 \language english
5 \inputencoding auto
6 \fontscheme pslatex
7 \graphics default
8 \paperfontsize default
9 \spacing onehalf 
10 \papersize letterpaper
11 \paperpackage a4
12 \use_geometry 0
13 \use_amsmath 0
14 \use_natbib 0
15 \use_numerical_citations 0
16 \paperorientation portrait
17 \secnumdepth 3
18 \tocdepth 3
19 \paragraph_separation indent
20 \defskip medskip
21 \quotes_language english
22 \quotes_times 2
23 \papercolumns 1
24 \papersides 1
25 \paperpagestyle headings
26
27 \layout Title
28
29 The Speex Codec Manual
30 \newline 
31 (version 1.1.11)
32 \layout Author
33
34 Jean-Marc Valin
35 \layout Standard
36 \pagebreak_top 
37 Copyright (c) 2002-2005 Jean-Marc Valin/Xiph.org Foundation
38 \layout Standard
39
40 Permission is granted to copy, distribute and/or modify this document under
41  the terms of the GNU Free Documentation License, Version 1.1 or any later
42  version published by the Free Software Foundation; with no Invariant Section,
43  with no Front-Cover Texts, and with no Back-Cover.
44  A copy of the license is included in the section entitled "GNU Free Documentati
45 on License".
46  
47 \layout Standard
48 \pagebreak_top \pagebreak_bottom 
49
50 \begin_inset LatexCommand \tableofcontents{}
51
52 \end_inset 
53
54
55 \layout Standard
56 \pagebreak_bottom 
57
58 \begin_inset FloatList table
59
60 \end_inset 
61
62
63 \layout Section
64
65 Introduction to Speex
66 \layout Standard
67
68 The Speex project (
69 \family typewriter 
70 http://www.speex.org/
71 \family default 
72 ) has been started because there was a need for a speech codec that was
73  open-source and free from software patents.
74  These are essential conditions for being used by any open-source software.
75  There is already Vorbis that does general audio, but it is not really suitable
76  for speech.
77  Also, unlike many other speech codecs, Speex is not targeted at cell phones
78  (not many open-source cell phones anyway :-) ) but rather at voice over
79  IP (VoIP) and file-based compression.
80  
81 \layout Standard
82
83 As design goals, we wanted to have a codec that would allow both very good
84  quality speech and low bit-rate (unfortunately not at the same time!),
85  which led us to developing a codec with multiple bit-rates.
86  Of course very good quality also meant we had to do wideband (16 kHz sampling
87  rate) in addition to narrowband (telephone quality, 8 kHz sampling rate).
88 \layout Standard
89
90 Designing for VoIP instead of cell phone use means that Speex must be robust
91  to lost packets, but not to corrupted ones since packets either arrive
92  unaltered or don't arrive at all.
93  Also, the idea was to have a reasonable complexity and memory requirement
94  without compromising too much on the efficiency of the codec.
95 \layout Standard
96
97 All this led us to the choice of CELP
98 \begin_inset LatexCommand \index{CELP}
99
100 \end_inset 
101
102  as the encoding technique to use for Speex.
103  One of the main reasons is that CELP has long proved that it could do the
104  job and scale well to both low bit-rates (think DoD CELP @ 4.8 kbps) and
105  high bit-rates (think G.728 @ 16 kbps).
106  
107 \layout Standard
108
109 The main characteristics can be summarized as follows:
110 \layout Itemize
111
112 Free software/open-source
113 \begin_inset LatexCommand \index{open-source}
114
115 \end_inset 
116
117 , patent
118 \begin_inset LatexCommand \index{patent}
119
120 \end_inset 
121
122  and royalty-free
123 \layout Itemize
124
125 Integration of narrowband
126 \begin_inset LatexCommand \index{narrowband}
127
128 \end_inset 
129
130  and wideband
131 \begin_inset LatexCommand \index{wideband}
132
133 \end_inset 
134
135  using an embedded bit-stream
136 \layout Itemize
137
138 Wide range of bit-rates available (from 2 kbps to 44 kbps)
139 \layout Itemize
140
141 Dynamic bit-rate switching and Variable Bit-Rate
142 \begin_inset LatexCommand \index{variable bit-rate}
143
144 \end_inset 
145
146  (VBR)
147 \layout Itemize
148
149 Voice Activity Detection
150 \begin_inset LatexCommand \index{voice activity detection}
151
152 \end_inset 
153
154  (VAD, integrated with VBR)
155 \layout Itemize
156
157 Variable complexity
158 \begin_inset LatexCommand \index{complexity}
159
160 \end_inset 
161
162
163 \layout Itemize
164
165 Ultra-wideband mode at 32 kHz (up to 48 kHz)
166 \layout Itemize
167
168 Intensity stereo encoding option
169 \layout Itemize
170
171 Fixed-point implementation (work in progress)
172 \layout Standard
173
174 This document is divided in the following way.
175  Section 
176 \begin_inset LatexCommand \ref{sec:Feature-description}
177
178 \end_inset 
179
180  describes the different Speex features and defines some terms that will
181  be used in later sections.
182  Section 
183 \begin_inset LatexCommand \ref{sec:Command-line-encoder/decoder}
184
185 \end_inset 
186
187  provides information about the standard command-line tools, while 
188 \begin_inset LatexCommand \ref{sec:Programming-with-Speex}
189
190 \end_inset 
191
192  contains information about programming using the Speex API.
193  Section 
194 \begin_inset LatexCommand \ref{sec:Formats-and-standards}
195
196 \end_inset 
197
198  has some information related to Speex and standards.
199  The three last sections describe the internals of the codec and require
200  some signal processing knowledge.
201  Section 
202 \begin_inset LatexCommand \ref{sec:Introduction-to-CELP}
203
204 \end_inset 
205
206  explains the general idea behind CELP, while sections 
207 \begin_inset LatexCommand \ref{sec:Speex-narrowband-mode}
208
209 \end_inset 
210
211  and 
212 \begin_inset LatexCommand \ref{sec:Speex-wideband-mode}
213
214 \end_inset 
215
216  are specific to Speex.
217  Note that if you are only interested in using Speex, those three last sections
218  are not required.
219 \layout Section
220 \pagebreak_top 
221 Codec description
222 \begin_inset LatexCommand \label{sec:Feature-description}
223
224 \end_inset 
225
226
227 \layout Standard
228
229 This section describes the main features provided by Speex.
230 \layout Subsection
231
232 Concepts
233 \layout Standard
234
235 Here are some concepts in speech coding that help better understand the
236  rest of the manual.
237  Emphasis is placed on the Speex features.
238 \layout Subsection*
239
240 Sampling rate
241 \begin_inset LatexCommand \index{sampling rate}
242
243 \end_inset 
244
245
246 \layout Standard
247
248 Speex is mainly designed for 3 different sampling rates: 8 kHz, 16 kHz,
249  and 32 kHz.
250  These are respectively refered to as narrowband
251 \begin_inset LatexCommand \index{narrowband}
252
253 \end_inset 
254
255 , wideband
256 \begin_inset LatexCommand \index{wideband}
257
258 \end_inset 
259
260  and ultra-wideband
261 \begin_inset LatexCommand \index{ultra-wideband}
262
263 \end_inset 
264
265 .
266  
267 \layout Subsection*
268
269 Quality
270 \begin_inset LatexCommand \index{quality}
271
272 \end_inset 
273
274
275 \layout Standard
276
277 Speex encoding is controlled most of the time by a quality parameter that
278  ranges from 0 to 10.
279  In constant bit-rate
280 \begin_inset LatexCommand \index{constant bit-rate}
281
282 \end_inset 
283
284  (CBR) operation, the quality parameter is an integer, while for variable
285  bit-rate (VBR), the parameter is a float.
286  
287 \layout Subsection*
288
289 Complexity
290 \begin_inset LatexCommand \index{complexity}
291
292 \end_inset 
293
294  (variable)
295 \layout Standard
296
297 With Speex, it is possible to vary the complexity allowed for the encoder.
298  This is done by controlling how the search is performed with an integer
299  ranging from 1 to 10 in a way that's similar to the -1 to -9 options to
300  
301 \emph on 
302 gzip
303 \emph default 
304  and 
305 \emph on 
306 bzip2
307 \emph default 
308  compression utilities.
309  For normal use, the noise level at complexity 1 is between 1 and 2 dB higher
310  than at complexity 10, but the CPU requirements for complexity 10 is about
311  5 times higher than for complexity 1.
312  In practice, the best trade-off is between complexity 2 and 4, though higher
313  settings are often useful when encoding non-speech sounds like DTMF
314 \begin_inset LatexCommand \index{DTMF}
315
316 \end_inset 
317
318  tones.
319 \layout Subsection*
320
321 Variable Bit-Rate
322 \begin_inset LatexCommand \index{variable bit-rate}
323
324 \end_inset 
325
326  (VBR)
327 \layout Standard
328
329 Variable bit-rate (VBR) allows a codec to change its bit-rate dynamically
330  to adapt to the 
331 \begin_inset Quotes eld
332 \end_inset 
333
334 difficulty
335 \begin_inset Quotes erd
336 \end_inset 
337
338  of the audio being encoded.
339  In the example of Speex, sounds like vowels and high-energy transients
340  require a higher bit-rate to achieve good quality, while fricatives (e.g.
341  s,f sounds) can be coded adequately with less bits.
342  For this reason, VBR can achive lower bit-rate for the same quality, or
343  a better quality for a certain bit-rate.
344  Despite its advantages, VBR has two main drawbacks: first, by only specifying
345  quality, there's no guaranty about the final average bit-rate.
346  Second, for some real-time applications like voice over IP (VoIP), what
347  counts is the maximum bit-rate, which must be low enough for the communication
348  channel.
349 \layout Subsection*
350
351 Average Bit-Rate
352 \begin_inset LatexCommand \index{average bit-rate}
353
354 \end_inset 
355
356  (ABR)
357 \layout Standard
358
359 Average bit-rate solves one of the problems of VBR, as it dynamically adjusts
360  VBR quality in order to meet a specific target bit-rate.
361  Because the quality/bit-rate is adjusted in real-time (open-loop), the
362  global quality will be slightly lower than that obtained by encoding in
363  VBR with exactly the right quality setting to meet the target average bit-rate.
364 \layout Subsection*
365
366 Voice Activity Detection
367 \begin_inset LatexCommand \index{voice activity detection}
368
369 \end_inset 
370
371  (VAD)
372 \layout Standard
373
374 When enabled, voice activity detection detects whether the audio being encoded
375  is speech or silence/background noise.
376  VAD is always implicitly activated when encoding in VBR, so the option
377  is only useful in non-VBR operation.
378  In this case, Speex detects non-speech periods and encode them with just
379  enough bits to reproduce the background noise.
380  This is called 
381 \begin_inset Quotes eld
382 \end_inset 
383
384 comfort noise generation
385 \begin_inset Quotes erd
386 \end_inset 
387
388  (CNG).
389 \layout Subsection*
390
391 Discontinuous Transmission
392 \begin_inset LatexCommand \index{discontinuous transmission}
393
394 \end_inset 
395
396  (DTX)
397 \layout Standard
398
399 Discontinuous transmission is an addition to VAD/VBR operation, that allows
400  to stop transmitting completely when the background noise is stationary.
401  In file-based operation, since we cannot just stop writing to the file,
402  only 5 bits are used for such frames (corresponding to 250 bps).
403 \layout Subsection*
404
405 Perceptual enhancement
406 \begin_inset LatexCommand \index{perceptual enhancement}
407
408 \end_inset 
409
410
411 \layout Standard
412
413 Perceptual enhancement is a part of the decoder which, when turned on, tries
414  to reduce (the perception of) the noise produced by the coding/decoding
415  process.
416  In most cases, perceptual enhancement make the sound further from the original
417  
418 \emph on 
419 objectively
420 \emph default 
421  (if you use SNR), but in the end it still 
422 \emph on 
423 sounds
424 \emph default 
425  better (subjective improvement).
426 \layout Subsection*
427
428 Algorithmic delay
429 \begin_inset LatexCommand \index{algorithmic delay}
430
431 \end_inset 
432
433
434 \layout Standard
435
436 Every speech codec introduces a delay in the transmission.
437  For Speex, this delay is equal to the frame size, plus some amount of 
438 \begin_inset Quotes eld
439 \end_inset 
440
441 look-ahead
442 \begin_inset Quotes erd
443 \end_inset 
444
445  required to process each frame.
446  In narrowband operation (8 kHz), the delay is 30 ms, while for wideband
447  (16 kHz), the delay is 34 ms.
448  These values don't account for the CPU time it takes to encode or decode
449  the frames.
450 \layout Subsection
451
452 Codec
453 \layout Subsection
454
455 Preprocessor
456 \layout Standard
457
458 This part refers to the preprocessor module introduced in the 1.1.x branch.
459  The preprocessor is designed to be used on the audio 
460 \emph on 
461 before
462 \emph default 
463  running the encoder.
464  The preprocessor provides three main functionalities:
465 \layout Itemize
466
467 denoising
468 \layout Itemize
469
470 automatic gain control (AGC)
471 \layout Itemize
472
473 voice activity detection (VAD)
474 \layout Standard
475
476 The denoiser can be used to reduce the amount of background noise present
477  in the input signal.
478  This provides higher quality speech whether or not the denoised signal
479  is encoded with Speex (or at all).
480  However, when using the denoised signal with the codec, there is an additional
481  benefit.
482  Speech codecs in general (Speex included) tend to perform poorly on noisy
483  input, which tends to amplify the noise.
484  The denoiser greatly reduces this effect.
485 \layout Standard
486
487 Automatic gain control (AGC) is a feature that deals with the fact that
488  the recording volume may vary by a large amount between different setups.
489  The AGC provides a way to adjust a signal to a reference volume.
490  This is useful for voice over IP because it removes the need for manual
491  adjustment of the microphone gain.
492  A secondary advantage is that by setting the microphone gain to a conservative
493  (low) level, it is easier to avoid clipping.
494 \layout Standard
495
496 The voice activity detector (VAD) provided by the preprocessor is more advanced
497  than the one directly provided in the codec.
498  
499 \layout Subsection
500
501 Adaptive Jitter Buffer
502 \layout Subsection
503
504 Acoustic Echo Canceller
505 \layout Section
506 \pagebreak_top 
507 Compiling
508 \layout Standard
509
510 Compiling Speex under UNIX or any platform supported by autoconf (e.g.
511  Win32/cygwin) is as easy as typing:
512 \layout LyX-Code
513
514 % ./configure [options]
515 \layout LyX-Code
516
517 % make
518 \layout LyX-Code
519
520 % make install
521 \layout Standard
522
523 The options supported by the Speex configure script are:
524 \layout Description
525
526 --prefix=<path> Specifies where to install Speex
527 \layout Description
528
529 --enable-shared/--disable-shared Whether to compile shared libraries
530 \layout Description
531
532 --enable-static/--disable-static Whether to compile static libraries
533 \layout Description
534
535 --disable-wideband Disable the wideband part of Speex (typically to same
536  space)
537 \layout Description
538
539 --enable-valgrind Enable extra information when (and only when) running
540  with valgrind
541 \layout Description
542
543 --enable-sse Enable use of SSE instructions (x86/float only)
544 \layout Description
545
546 --enable-fixed-point
547 \begin_inset LatexCommand \index{fixed-point}
548
549 \end_inset 
550
551  Compile Speex for a processor that does not have a floating point unit
552  (FPU)
553 \layout Description
554
555 --enable-arm4-asm Enable assembly specific to the ARMv4 architecture (gcc
556  only)
557 \layout Description
558
559 --enable-arm5e-asm Enable assembly specific to the ARMv5E architecture (gcc
560  only)
561 \layout Description
562
563 --enable-fixed-point-debug Use only for debugging the fixed-point
564 \begin_inset LatexCommand \index{fixed-point}
565
566 \end_inset 
567
568  code (very slow)
569 \layout Description
570
571 --enable-epic-48k Enable a special (and non-compatible) 4.8 kbps narrowband
572  mode
573 \layout Description
574
575 --enable-ti-c55x Enable support for the TI C5x family
576 \layout Description
577
578 --enable-blackfin-asm Enable assembly specific to the Blackfin DSP architecture
579  (gcc only)
580 \layout Description
581
582 --enable-16bit-precision Reduces precision to 16 bits in time-critical areas
583  (fixed-point only)
584 \layout Section
585 \pagebreak_top 
586 Command-line encoder/decoder
587 \begin_inset LatexCommand \label{sec:Command-line-encoder/decoder}
588
589 \end_inset 
590
591
592 \layout Standard
593
594 The base Speex distribution includes a command-line encoder (
595 \emph on 
596 speexenc
597 \emph default 
598 ) and decoder (
599 \emph on 
600 speexdec
601 \emph default 
602 ).
603  This section describes how to use these tools.
604 \layout Subsection
605
606
607 \emph on 
608 speexenc
609 \begin_inset LatexCommand \index{speexenc}
610
611 \end_inset 
612
613
614 \layout Standard
615
616 The 
617 \emph on 
618 speexenc
619 \emph default 
620  utility is used to create Speex files from raw PCM or wave files.
621  It can be used by calling: 
622 \layout LyX-Code
623
624 speexenc [options] input_file output_file
625 \layout Standard
626
627 The value '-' for input_file or output_file corresponds respectively to
628  stdin and stdout.
629  The valid options are:
630 \layout Description
631
632 --narrowband\SpecialChar ~
633 (-n) Tell Speex to treat the input as narrowband (8 kHz).
634  This is the default
635 \layout Description
636
637 --wideband\SpecialChar ~
638 (-w) Tell Speex to treat the input as wideband (16 kHz)
639 \layout Description
640
641 --ultra-wideband\SpecialChar ~
642 (-u) Tell Speex to treat the input as 
643 \begin_inset Quotes eld
644 \end_inset 
645
646 ultra-wideband
647 \begin_inset Quotes erd
648 \end_inset 
649
650  (32 kHz)
651 \layout Description
652
653 --quality\SpecialChar ~
654 n Set the encoding quality (0-10), default is 8
655 \layout Description
656
657 --bitrate\SpecialChar ~
658 n Encoding bit-rate (use bit-rate n or lower) 
659 \layout Description
660
661 --vbr Enable VBR (Variable Bit-Rate), disabled by default
662 \layout Description
663
664 --abr\SpecialChar ~
665 n Enable ABR (Average Bit-Rate) at n kbps, disabled by default
666 \layout Description
667
668 --vad Enable VAD (Voice Activity Detection), disabled by default
669 \layout Description
670
671 --dtx Enable DTX (Discontinuous Transmission), disabled by default
672 \layout Description
673
674 --nframes\SpecialChar ~
675 n Pack n frames in each Ogg packet (this saves space at low bit-rates)
676 \layout Description
677
678 --comp\SpecialChar ~
679 n Set encoding speed/quality tradeoff.
680  The higher the value of n, the slower the encoding (default is 3)
681 \layout Description
682
683 -V Verbose operation, print bit-rate currently in use
684 \layout Description
685
686 --help\SpecialChar ~
687 (-h) Print the help
688 \layout Description
689
690 --version\SpecialChar ~
691 (-v) Print version information
692 \layout Subsubsection*
693
694 Speex comments
695 \layout Description
696
697 --comment Add the given string as an extra comment.
698  This may be used multiple times.
699  
700 \layout Description
701
702 --author Author of this track.
703  
704 \layout Description
705
706 --title Title for this track.
707  
708 \layout Subsubsection*
709
710 Raw input options
711 \layout Description
712
713 --rate\SpecialChar ~
714 n Sampling rate for raw input
715 \layout Description
716
717 --stereo Consider raw input as stereo 
718 \layout Description
719
720 --le Raw input is little-endian 
721 \layout Description
722
723 --be Raw input is big-endian 
724 \layout Description
725
726 --8bit Raw input is 8-bit unsigned 
727 \layout Description
728
729 --16bit Raw input is 16-bit signed 
730 \layout Subsection
731
732
733 \emph on 
734 speexdec
735 \begin_inset LatexCommand \index{speexdec}
736
737 \end_inset 
738
739
740 \layout Standard
741
742 The 
743 \emph on 
744 speexdec
745 \emph default 
746  utility is used to decode Speex files and can be used by calling: 
747 \layout LyX-Code
748
749 speexdec [options] speex_file [output_file]
750 \layout Standard
751
752 The value '-' for input_file or output_file corresponds respectively to
753  stdin and stdout.
754  Also, when no output_file is specified, the file is played to the soundcard.
755  The valid options are:
756 \layout Description
757
758 --enh enable post-filter (default)
759 \layout Description
760
761 --no-enh disable post-filter
762 \layout Description
763
764 --force-nb Force decoding in narrowband 
765 \layout Description
766
767 --force-wb Force decoding in wideband 
768 \layout Description
769
770 --force-uwb Force decoding in ultra-wideband 
771 \layout Description
772
773 --mono Force decoding in mono 
774 \layout Description
775
776 --stereo Force decoding in stereo 
777 \layout Description
778
779 --rate\SpecialChar ~
780 n Force decoding at n Hz sampling rate
781 \layout Description
782
783 --packet-loss\SpecialChar ~
784 n Simulate n % random packet loss
785 \layout Description
786
787 -V Verbose operation, print bit-rate currently in use
788 \layout Description
789
790 --help\SpecialChar ~
791 (-h) Print the help
792 \layout Description
793
794 --version\SpecialChar ~
795 (-v) Print version information
796 \layout Section
797 \pagebreak_top 
798 Programming with Speex (the libspeex
799 \begin_inset LatexCommand \index{libspeex}
800
801 \end_inset 
802
803  API
804 \begin_inset LatexCommand \index{API}
805
806 \end_inset 
807
808 )
809 \begin_inset LatexCommand \label{sec:Programming-with-Speex}
810
811 \end_inset 
812
813
814 \layout Standard
815
816 This section explains how to use the Speex API.
817  Examples of code can also be found in appendix 
818 \begin_inset LatexCommand \ref{sec:Sample-code}
819
820 \end_inset 
821
822 .
823 \layout Subsection
824
825 Encoding
826 \begin_inset LatexCommand \label{sub:Encoding}
827
828 \end_inset 
829
830
831 \layout Standard
832
833 In order to encode speech using Speex, you first need to:
834 \layout LyX-Code
835
836 #include <speex/speex.h>
837 \layout Standard
838
839 You then need to declare a Speex bit-packing struct
840 \layout LyX-Code
841
842 SpeexBits bits;
843 \layout Standard
844
845 and a Speex encoder state
846 \layout LyX-Code
847
848 void *enc_state;
849 \layout Standard
850
851 The two are initialized by:
852 \layout LyX-Code
853
854 speex_bits_init(&bits);
855 \layout LyX-Code
856
857 enc_state = speex_encoder_init(&speex_nb_mode);
858 \layout Standard
859
860 For wideband coding, 
861 \emph on 
862 speex_nb_mode
863 \emph default 
864  will be replaced by 
865 \emph on 
866 speex_wb_mode
867 \emph default 
868 .
869  In most cases, you will need to know the frame size used by the mode you
870  are using.
871  You can get that value in the 
872 \emph on 
873 frame_size
874 \emph default 
875  variable with:
876 \layout LyX-Code
877
878 speex_encoder_ctl(enc_state,SPEEX_GET_FRAME_SIZE,&frame_size);
879 \layout Standard
880
881 In practice, 
882 \emph on 
883 frame_size
884 \emph default 
885  will correspond to 20 ms when using 8, 16, or 32 kHz sampling rate.
886 \layout Standard
887
888 Once the initialization is done, for every input frame:
889 \layout LyX-Code
890
891 speex_bits_reset(&bits);
892 \layout LyX-Code
893
894 speex_encode(enc_state, input_frame, &bits);
895 \layout LyX-Code
896
897 nbBytes = speex_bits_write(&bits, byte_ptr, MAX_NB_BYTES);
898 \layout Standard
899
900 where 
901 \emph on 
902 input_frame
903 \emph default 
904  is a 
905 \emph on 
906 (float *)
907 \emph default 
908  pointing to the beginning of a speech frame, 
909 \emph on 
910 byte_ptr
911 \emph default 
912  is a 
913 \emph on 
914 (char *)
915 \emph default 
916  where the encoded frame will be written, 
917 \emph on 
918 MAX_NB_BYTES
919 \emph default 
920  is the maximum number of bytes that can be written to 
921 \emph on 
922 byte_ptr
923 \emph default 
924  without causing an overflow and 
925 \emph on 
926 nbBytes
927 \emph default 
928  is the number of bytes actually written to 
929 \emph on 
930 byte_ptr
931 \emph default 
932  (the encoded size in bytes).
933  Before calling speex_bits_write, it is possible to find the number of bytes
934  that need to be written by calling 
935 \family typewriter 
936 speex_bits_nbytes(&bits)
937 \family default 
938 , which returns a number of bytes.
939 \layout Standard
940
941 When using an unstable release (1.1.x), it is possible to use the 
942 \emph on 
943 speex_encode_int()
944 \emph default 
945  function, which takes a 
946 \emph on 
947 (short *)
948 \emph default 
949  for the audio.
950  This is usually simpler and it makes an eventual port to an FPU-less platform
951  (like ARM) easier.
952 \layout Standard
953
954 After you're done with the encoding, free all resources with:
955 \layout LyX-Code
956
957 speex_bits_destroy(&bits);
958 \layout LyX-Code
959
960 speex_encoder_destroy(enc_state);
961 \layout Standard
962
963 That's about it for the encoder.
964  
965 \layout Subsection
966
967 Decoding
968 \begin_inset LatexCommand \label{sub:Decoding}
969
970 \end_inset 
971
972
973 \layout Standard
974
975 In order to decode speech using Speex, you first need to:
976 \layout LyX-Code
977
978 #include <speex/speex.h>
979 \layout Standard
980
981 You also need to declare a Speex bit-packing struct
982 \layout LyX-Code
983
984 SpeexBits bits;
985 \layout Standard
986
987 and a Speex decoder state
988 \layout LyX-Code
989
990 void *dec_state;
991 \layout Standard
992
993 The two are initialized by:
994 \layout LyX-Code
995
996 speex_bits_init(&bits);
997 \layout LyX-Code
998
999 dec_state = speex_decoder_init(&speex_nb_mode);
1000 \layout Standard
1001
1002 For wideband decoding, 
1003 \emph on 
1004 speex_nb_mode
1005 \emph default 
1006  will be replaced by 
1007 \emph on 
1008 speex_wb_mode
1009 \emph default 
1010 .
1011  If you need to obtain the size of the frames that will be used by the decoder,
1012  you can get that value in the 
1013 \emph on 
1014 frame_size
1015 \emph default 
1016  variable with:
1017 \layout LyX-Code
1018
1019 speex_decoder_ctl(dec_state, SPEEX_GET_FRAME_SIZE, &frame_size); 
1020 \layout Standard
1021
1022 There is also a parameter that can be set for the decoder: whether or not
1023  to use a perceptual post-filter.
1024  This can be set by: 
1025 \layout LyX-Code
1026
1027 speex_decoder_ctl(dec_state, SPEEX_SET_ENH, &enh); 
1028 \layout Standard
1029
1030 where 
1031 \emph on 
1032 enh
1033 \emph default 
1034  is an int that with value 0 to have the post-filter disabled and 1 to have
1035  it enabled.
1036 \layout Standard
1037
1038 Again, once the decoder initialization is done, for every input frame:
1039 \layout LyX-Code
1040
1041 speex_bits_read_from(&bits, input_bytes, nbBytes);
1042 \layout LyX-Code
1043
1044 speex_decode(dec_state, &bits, output_frame);
1045 \layout Standard
1046
1047 where input_bytes is a 
1048 \emph on 
1049 (char *)
1050 \emph default 
1051  containing the bit-stream data received for a frame, 
1052 \emph on 
1053 nbBytes
1054 \emph default 
1055  is the size (in bytes) of that bit-stream, and 
1056 \emph on 
1057 output_frame
1058 \emph default 
1059  is a 
1060 \emph on 
1061 (float *)
1062 \emph default 
1063  and points to the area where the decoded speech frame will be written.
1064  A NULL value as the first argument indicates that we don't have the bits
1065  for the current frame.
1066  When a frame is lost, the Speex decoder will do its best to "guess" the
1067  correct signal.
1068 \layout Standard
1069
1070 As for the encoder, the 1.1.x branch introduces the 
1071 \emph on 
1072 speex_decode_int()
1073 \emph default 
1074  function which also uses a 
1075 \emph on 
1076 (short *)
1077 \emph default 
1078  as the output for the audio.
1079 \layout Standard
1080
1081 After you're done with the decoding, free all resources with:
1082 \layout LyX-Code
1083
1084 speex_bits_destroy(&bits);
1085 \layout LyX-Code
1086
1087 speex_decoder_destroy(dec_state);
1088 \layout Subsection
1089
1090 Preprocessor
1091 \begin_inset LatexCommand \label{sub:Preprocessor}
1092
1093 \end_inset 
1094
1095
1096 \layout Standard
1097
1098 In order to use the Speex preprocessor
1099 \begin_inset LatexCommand \index{preprocessor}
1100
1101 \end_inset 
1102
1103 , you first need to:
1104 \layout LyX-Code
1105
1106 #include <speex/speex_preprocess.h>
1107 \layout Standard
1108
1109 Then, a preprocessor state can be created as:
1110 \layout LyX-Code
1111
1112 SpeexPreprocessState *preprocess_state = speex_preprocess_state_init(frame_size,
1113  sampling_rate);
1114 \layout Standard
1115
1116 It is recommended to use the same value for 
1117 \family typewriter 
1118 frame_size
1119 \family default 
1120  as is used by the encoder (20 
1121 \emph on 
1122 ms
1123 \emph default 
1124 ).
1125 \layout Standard
1126
1127 For each input frame, you need to call:
1128 \layout LyX-Code
1129
1130 speex_preprocess(preprocess_state, audio_frame, echo_residue);
1131 \layout Standard
1132
1133 where 
1134 \family typewriter 
1135 audio_frame
1136 \family default 
1137  is used both as input and output and 
1138 \family typewriter 
1139 echo_residue
1140 \family default 
1141  is either an array filled by the echo canceller, or NULL if the preprocessor
1142  is used without the echo canceller.
1143 \layout Standard
1144
1145 In cases where the output audio is not useful for a certain frame, it is
1146  possible to use instead:
1147 \layout LyX-Code
1148
1149 speex_preprocess_estimate_update(preprocess_state, audio_frame, echo_residue);
1150 \layout Standard
1151
1152 This call will update all the preprocessor internal state variables without
1153  computing the output audio, thus saving some CPU cycles.
1154 \layout Standard
1155
1156 The behaviour of the preprocessor can be changed using:
1157 \layout LyX-Code
1158
1159 speex_preprocess_ctl(preprocess_state, request, ptr);
1160 \layout Standard
1161
1162 which is used in the same way as the encoder and decoder equivalent.
1163  Options are listed in Section .
1164 \layout Standard
1165
1166 The preprocessor state can be destroyed using:
1167 \layout LyX-Code
1168
1169 speex_preprocess_state_destroy(preprocess_state);
1170 \layout Subsection
1171
1172 Echo Cancellation
1173 \begin_inset LatexCommand \label{sub:Echo-Cancellation}
1174
1175 \end_inset 
1176
1177
1178 \layout Standard
1179
1180 The Speex library now includes an echo cancellation
1181 \begin_inset LatexCommand \index{echo cancellation}
1182
1183 \end_inset 
1184
1185  algorithm suitable for Acoustic Echo Cancellation
1186 \begin_inset LatexCommand \index{acoustic echo cancellation}
1187
1188 \end_inset 
1189
1190  (AEC).
1191  In order to use the echo canceller, you first need to
1192 \layout LyX-Code
1193
1194 #include <speex/speex_echo.h>
1195 \layout Standard
1196
1197 Then, an echo canceller state can be created by:
1198 \layout LyX-Code
1199
1200 SpeexEchoState *echo_state = speex_echo_state_init(frame_size, filter_length);
1201 \layout Standard
1202
1203 where 
1204 \family typewriter 
1205 frame_size
1206 \family default 
1207  is the amount of data (in samples) you want to process at once and 
1208 \family typewriter 
1209 filter_length
1210 \family default 
1211  is the length (in samples) of the echo cancelling filter you want to use
1212  (also known as 
1213 \shape italic 
1214 tail length
1215 \shape default 
1216
1217 \begin_inset LatexCommand \index{tail length}
1218
1219 \end_inset 
1220
1221 ).
1222  It is recommended to use a frame size in the order of 20 ms (or equal to
1223  the codec frame size) and make sure it is easy to perform an FFT of that
1224  size (powers of two are better than prime sizes).
1225  The recommended tail length is approximately the third of the room reverberatio
1226 n time.
1227  For example, in a small room, reverberation time is in the order of 300
1228  ms, so a tail length of 100 ms is a good choice (800 samples at 8000 Hz
1229  sampling rate).
1230 \layout Standard
1231
1232 Once the echo canceller state is created, audio can be processed by:
1233 \layout LyX-Code
1234
1235 speex_echo_cancel(echo_state, input_frame, echo_frame, output_frame, residue);
1236 \layout Standard
1237
1238 where 
1239 \family typewriter 
1240 input_frame
1241 \family default 
1242  is the audio as captured by the microphone, 
1243 \family typewriter 
1244 echo_frame
1245 \family default 
1246  is the signal that was played in the speaker (and needs to be removed)
1247  and 
1248 \family typewriter 
1249 output_frame
1250 \family default 
1251  is the signal with echo removed.
1252  The 
1253 \family typewriter 
1254 residue
1255 \family default 
1256  parameter is optional (you can set it to NULL) and is used to return the
1257  estimated power spectrum of the echo residue so it can be removed by the
1258  preprocessor (if you with to use it).
1259  
1260 \layout Standard
1261
1262 One important thing to keep in mind is the relationship between 
1263 \family typewriter 
1264 input_frame
1265 \family default 
1266  and 
1267 \family typewriter 
1268 echo_frame
1269 \family default 
1270 .
1271  It is important that, at any time, any echo that is present in the input
1272  has already been sent to the echo canceller as 
1273 \family typewriter 
1274 echo_frame
1275 \family default 
1276 .
1277  In other words, the echo canceller cannot remove a signal that it hasn't
1278  yet received.
1279  On the other hand, the delay between the input signal and the echo signal
1280  must be small enough because otherwise part of the echo cancellation filter
1281  is inefficient.
1282  In the ideal case, you code would look like:
1283 \layout LyX-Code
1284
1285 write_to_soundcard(echo_frame, frame_size);
1286 \layout LyX-Code
1287
1288 read_from_soundcard(input_frame, frame_size);
1289 \layout LyX-Code
1290
1291 speex_echo_cancel(echo_state, input_frame, echo_frame, output_frame, residue);
1292 \layout Standard
1293
1294 As stated above, if you wish to further reduce the echo present in the signal,
1295  you can do so by passing 
1296 \family typewriter 
1297 residue
1298 \family default 
1299  as the last parameter of 
1300 \family typewriter 
1301 speex_preprocess()
1302 \family default 
1303  function (see Section 
1304 \begin_inset LatexCommand \ref{sub:Preprocessor}
1305
1306 \end_inset 
1307
1308 ).
1309 \layout Standard
1310
1311 The echo cancellation state can be destroyed as:
1312 \layout LyX-Code
1313
1314 speex_echo_state_destroy(echo_state);
1315 \layout Standard
1316
1317 It is also possible to reset the state of the echo canceller so it can be
1318  reused without the need to create another state as:
1319 \layout LyX-Code
1320
1321 speex_echo_state_reset(echo_state);
1322 \layout Subsubsection
1323
1324 Troubleshooting
1325 \layout Standard
1326
1327 There are several things that may prevent the echo canceller from working
1328  properly.
1329  One of them is a bug (or something suboptimal) in the code, but there are
1330  many others you should consider first
1331 \layout Itemize
1332
1333 Using a different soundcard to do the capture and plaback will *not* work,
1334  regardless of what you may think.
1335  The only exception to that is if the two cards can be made to have their
1336  sampling clock 
1337 \begin_inset Quotes eld
1338 \end_inset 
1339
1340 locked
1341 \begin_inset Quotes erd
1342 \end_inset 
1343
1344  on the same clock source.
1345 \layout Itemize
1346
1347 The delay between the record and playback signals must be minimal.
1348  Any signal played has to 
1349 \begin_inset Quotes eld
1350 \end_inset 
1351
1352 appear
1353 \begin_inset Quotes erd
1354 \end_inset 
1355
1356  on the playback (far end) signal slightly before the echo canceller 
1357 \begin_inset Quotes eld
1358 \end_inset 
1359
1360 sees
1361 \begin_inset Quotes erd
1362 \end_inset 
1363
1364  it in the near end signal, but excessive delay means that part of the filter
1365  length is wasted.
1366  In the worst situations, the delay is such that it is longer than the filter
1367  length, in which case, no echo can be cancelled.
1368 \layout Itemize
1369
1370 When it comes to echo tail length (filter length), longer is *not* better.
1371  Actually, the longer the tail length, the longer it takes for the filter
1372  to adapt.
1373  Of course, a tail length that is too short will not cancel enough echo,
1374  but the most common problem seen is that people set a very long tail length
1375  and then wonder why no echo is being cancelled.
1376 \layout Itemize
1377
1378 Non-linear distortion cannot (by definition) be modeled by the linear adaptive
1379  filter used in the echo canceller and thus cannot be cancelled.
1380  Use good audio gear and avoid saturation/clipping.
1381 \layout Subsection
1382
1383 Codec Options (speex_*_ctl)
1384 \begin_inset LatexCommand \label{sub:Codec-Options}
1385
1386 \end_inset 
1387
1388
1389 \layout Standard
1390
1391 The Speex encoder and decoder support many options and requests that can
1392  be accessed through the 
1393 \emph on 
1394 speex_encoder_ctl
1395 \emph default 
1396  and 
1397 \emph on 
1398 speex_decoder_ctl
1399 \emph default 
1400  functions.
1401  These functions are similar to the 
1402 \emph on 
1403 ioctl
1404 \emph default 
1405  system call and their prototypes are:
1406 \layout LyX-Code
1407
1408 void speex_encoder_ctl(void *encoder, int request, void *ptr);
1409 \layout LyX-Code
1410
1411 void speex_decoder_ctl(void *encoder, int request, void *ptr);
1412 \layout Standard
1413
1414 The different values of request allowed are (note that some only apply to
1415  the encoder or the decoder):
1416 \layout Description
1417
1418 SPEEX_SET_ENH** Set perceptual enhancer
1419 \begin_inset LatexCommand \index{perceptual enhancement}
1420
1421 \end_inset 
1422
1423  to on (1) or off (0) (integer)
1424 \layout Description
1425
1426 SPEEX_GET_ENH** Get perceptual enhancer status (integer)
1427 \layout Description
1428
1429 SPEEX_GET_FRAME_SIZE Get the frame size used for the current mode (integer)
1430 \layout Description
1431
1432 SPEEX_SET_QUALITY* Set the encoder speech quality (integer 0 to 10)
1433 \layout Description
1434
1435 SPEEX_GET_QUALITY* Get the current encoder speech quality (integer 0 to
1436  10)
1437 \layout Description
1438
1439 SPEEX_SET_MODE*
1440 \begin_inset Formula $\dagger$
1441 \end_inset 
1442
1443
1444 \layout Description
1445
1446 SPEEX_GET_MODE*
1447 \begin_inset Formula $\dagger$
1448 \end_inset 
1449
1450
1451 \layout Description
1452
1453 SPEEX_SET_LOW_MODE*
1454 \begin_inset Formula $\dagger$
1455 \end_inset 
1456
1457
1458 \layout Description
1459
1460 SPEEX_GET_LOW_MODE*
1461 \begin_inset Formula $\dagger$
1462 \end_inset 
1463
1464
1465 \layout Description
1466
1467 SPEEX_SET_HIGH_MODE*
1468 \begin_inset Formula $\dagger$
1469 \end_inset 
1470
1471
1472 \layout Description
1473
1474 SPEEX_GET_HIGH_MODE*
1475 \begin_inset Formula $\dagger$
1476 \end_inset 
1477
1478
1479 \layout Description
1480
1481 SPEEX_SET_VBR* Set variable bit-rate (VBR) to on (1) or off (0) (integer)
1482 \layout Description
1483
1484 SPEEX_GET_VBR* Get variable bit-rate
1485 \begin_inset LatexCommand \index{variable bit-rate}
1486
1487 \end_inset 
1488
1489  (VBR) status (integer)
1490 \layout Description
1491
1492 SPEEX_SET_VBR_QUALITY* Set the encoder VBR speech quality (float 0 to 10)
1493 \layout Description
1494
1495 SPEEX_GET_VBR_QUALITY* Get the current encoder VBR speech quality (float
1496  0 to 10)
1497 \layout Description
1498
1499 SPEEX_SET_COMPLEXITY* Set the CPU resources allowed for the encoder (integer
1500  1 to 10)
1501 \layout Description
1502
1503 SPEEX_GET_COMPLEXITY* Get the CPU resources allowed for the encoder (integer
1504  1 to 10)
1505 \layout Description
1506
1507 SPEEX_SET_BITRATE* Set the bit-rate to use to the closest value not exceeding
1508  the parameter (integer in bps)
1509 \layout Description
1510
1511 SPEEX_GET_BITRATE Get the current bit-rate in use (integer in bps)
1512 \layout Description
1513
1514 SPEEX_SET_SAMPLING_RATE Set real sampling rate (integer in Hz)
1515 \layout Description
1516
1517 SPEEX_GET_SAMPLING_RATE Get real sampling rate (integer in Hz)
1518 \layout Description
1519
1520 SPEEX_RESET_STATE Reset the encoder/decoder state to its original state
1521  (zeros all memories)
1522 \layout Description
1523
1524 SPEEX_SET_VAD* Set voice activity detection
1525 \begin_inset LatexCommand \index{voice activity detection}
1526
1527 \end_inset 
1528
1529  (VAD) to on (1) or off (0) (integer)
1530 \layout Description
1531
1532 SPEEX_GET_VAD* Get voice activity detection (VAD) status (integer)
1533 \layout Description
1534
1535 SPEEX_SET_DTX* Set discontinuous transmission
1536 \begin_inset LatexCommand \index{discontinuous transmission}
1537
1538 \end_inset 
1539
1540  (DTX) to on (1) or off (0) (integer)
1541 \layout Description
1542
1543 SPEEX_GET_DTX* Get discontinuous transmission (DTX) status (integer)
1544 \layout Description
1545
1546 SPEEX_SET_ABR* Set average bit-rate
1547 \begin_inset LatexCommand \index{average bit-rate}
1548
1549 \end_inset 
1550
1551  (ABR) to a value n in bits per second (integer in bps)
1552 \layout Description
1553
1554 SPEEX_GET_ABR* Get average bit-rate (ABR) setting (integer in bps)
1555 \layout Description
1556
1557 SPEEX_SET_PLC_TUNING* Tell the encoder to optimize encoding for a certain
1558  percentage of packet loss (integer in percent)
1559 \layout Description
1560
1561 SPEEX_GET_PLC_TUNING* Get the current tuning of the encoder for PLC (integer
1562  in percent)
1563 \layout Description
1564
1565 * applies only to the encoder
1566 \layout Description
1567
1568 ** applies only to the decoder
1569 \layout Description
1570
1571
1572 \begin_inset Formula $\dagger$
1573 \end_inset 
1574
1575  normally only used internally
1576 \layout Subsection
1577
1578 Mode queries
1579 \begin_inset LatexCommand \label{sub:Mode-queries}
1580
1581 \end_inset 
1582
1583
1584 \layout Standard
1585
1586 Speex modes have a query system similar to the speex_encoder_ctl and speex_decod
1587 er_ctl calls.
1588  Since modes are read-only, it is only possible to get information about
1589  a particular mode.
1590  The function used to do that is:
1591 \layout LyX-Code
1592
1593 void speex_mode_query(SpeexMode *mode, int request, void *ptr);
1594 \layout Standard
1595
1596 The admissible values for request are (unless otherwise note, the values
1597  are returned through 
1598 \emph on 
1599 ptr
1600 \emph default 
1601 ):
1602 \layout Description
1603
1604 SPEEX_MODE_FRAME_SIZE Get the frame size (in samples) for the mode
1605 \layout Description
1606
1607 SPEEX_SUBMODE_BITRATE Get the bit-rate for a submode number specified through
1608  
1609 \emph on 
1610 ptr
1611 \emph default 
1612  (integer in bps).
1613  
1614 \layout Subsection
1615
1616 Preprocessor options
1617 \begin_inset LatexCommand \label{sub:Preprocessor-options}
1618
1619 \end_inset 
1620
1621
1622 \layout Description
1623
1624 SPEEX_PREPROCESS_SET_DENOISE Turns denoising on(1) or off(2) (integer)
1625 \layout Description
1626
1627 SPEEX_PREPROCESS_GET_DENOISE Get denoising status (integer)
1628 \layout Description
1629
1630 SPEEX_PREPROCESS_SET_AGC Turns automatic gain control (AGC) on(1) or off(2)
1631  (integer)
1632 \layout Description
1633
1634 SPEEX_PREPROCESS_GET_AGC Get AGC status (integer)
1635 \layout Description
1636
1637 SPEEX_PREPROCESS_SET_VAD Turns voice activity detector (VAD) on(1) or off(2)
1638  (integer)
1639 \layout Description
1640
1641 SPEEX_PREPROCESS_GET_VAD Get VAD status (integer)
1642 \layout Description
1643
1644 SPEEX_PREPROCESS_SET_AGC_LEVEL
1645 \layout Description
1646
1647 SPEEX_PREPROCESS_GET_AGC_LEVEL
1648 \layout Description
1649
1650 SPEEX_PREPROCESS_SET_DEREVERB Turns reverberation removal on(1) or off(2)
1651  (integer)
1652 \layout Description
1653
1654 SPEEX_PREPROCESS_GET_DEREVERB Get reverberation removal status (integer)
1655 \layout Description
1656
1657 SPEEX_PREPROCESS_SET_DEREVERB_LEVEL
1658 \layout Description
1659
1660 SPEEX_PREPROCESS_GET_DEREVERB_LEVEL
1661 \layout Description
1662
1663 SPEEX_PREPROCESS_SET_DEREVERB_DECAY
1664 \layout Description
1665
1666 SPEEX_PREPROCESS_GET_DEREVERB_DECAY
1667 \layout Subsection
1668
1669 Packing and in-band signalling
1670 \begin_inset LatexCommand \index{in-band signalling}
1671
1672 \end_inset 
1673
1674
1675 \layout Standard
1676
1677 Sometimes it is desirable to pack more than one frame per packet (or other
1678  basic unit of storage).
1679  The proper way to do it is to call speex_encode 
1680 \begin_inset Formula $N$
1681 \end_inset 
1682
1683  times before writing the stream with speex_bits_write.
1684  In cases where the number of frames is not determined by an out-of-band
1685  mechanism, it is possible to include a terminator code.
1686  That terminator consists of the code 15 (decimal) encoded with 5 bits,
1687  as shown in Table 
1688 \begin_inset LatexCommand \ref{cap:quality_vs_bps}
1689
1690 \end_inset 
1691
1692 .
1693  Note that as of version 1.0.2, calling speex_bits_write automatically inserts
1694  the terminator so as to fill the last byte.
1695  This doesn't involves any overhead and makes sure Speex can always detect
1696  when there is no more frame in a packet.
1697 \layout Standard
1698
1699 It is also possible to send in-band 
1700 \begin_inset Quotes eld
1701 \end_inset 
1702
1703 messages
1704 \begin_inset Quotes erd
1705 \end_inset 
1706
1707  to the other side.
1708  All these messages are encoded as 
1709 \begin_inset Quotes eld
1710 \end_inset 
1711
1712 pseudo-frames
1713 \begin_inset Quotes erd
1714 \end_inset 
1715
1716  of mode 14 which contain a 4-bit message type code, followed by the message.
1717  Table 
1718 \begin_inset LatexCommand \ref{cap:In-band-signalling-codes}
1719
1720 \end_inset 
1721
1722  lists the available codes, their meaning and the size of the message that
1723  follows.
1724  Most of these messages are requests that are sent to the encoder or decoder
1725  on the other end, which is free to comply or ignore them.
1726  By default, all in-band messages are ignored.
1727 \layout Standard
1728
1729
1730 \begin_inset Float table
1731 placement htbp
1732 wide false
1733 collapsed false
1734
1735 \layout Standard
1736
1737
1738 \begin_inset  Tabular
1739 <lyxtabular version="3" rows="17" columns="3">
1740 <features>
1741 <column alignment="center" valignment="top" leftline="true" width="0pt">
1742 <column alignment="center" valignment="top" leftline="true" width="0pt">
1743 <column alignment="center" valignment="top" leftline="true" rightline="true" width="0pt">
1744 <row topline="true" bottomline="true">
1745 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1746 \begin_inset Text
1747
1748 \layout Standard
1749
1750 Code
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 Size (bits)
1759 \end_inset 
1760 </cell>
1761 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
1762 \begin_inset Text
1763
1764 \layout Standard
1765
1766 Content
1767 \end_inset 
1768 </cell>
1769 </row>
1770 <row topline="true">
1771 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1772 \begin_inset Text
1773
1774 \layout Standard
1775
1776 0
1777 \end_inset 
1778 </cell>
1779 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1780 \begin_inset Text
1781
1782 \layout Standard
1783
1784 1
1785 \end_inset 
1786 </cell>
1787 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
1788 \begin_inset Text
1789
1790 \layout Standard
1791
1792 Asks decoder to set perceptual enhancement off (0) or on(1)
1793 \end_inset 
1794 </cell>
1795 </row>
1796 <row topline="true">
1797 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1798 \begin_inset Text
1799
1800 \layout Standard
1801
1802 1
1803 \end_inset 
1804 </cell>
1805 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1806 \begin_inset Text
1807
1808 \layout Standard
1809
1810 1
1811 \end_inset 
1812 </cell>
1813 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
1814 \begin_inset Text
1815
1816 \layout Standard
1817
1818 Asks (if 1) the encoder to be less 
1819 \begin_inset Quotes eld
1820 \end_inset 
1821
1822 agressive
1823 \begin_inset Quotes erd
1824 \end_inset 
1825
1826  due to high packet loss
1827 \end_inset 
1828 </cell>
1829 </row>
1830 <row topline="true">
1831 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1832 \begin_inset Text
1833
1834 \layout Standard
1835
1836 2
1837 \end_inset 
1838 </cell>
1839 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1840 \begin_inset Text
1841
1842 \layout Standard
1843
1844 4
1845 \end_inset 
1846 </cell>
1847 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
1848 \begin_inset Text
1849
1850 \layout Standard
1851
1852 Asks encoder to switch to mode N
1853 \end_inset 
1854 </cell>
1855 </row>
1856 <row topline="true">
1857 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1858 \begin_inset Text
1859
1860 \layout Standard
1861
1862 3
1863 \end_inset 
1864 </cell>
1865 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1866 \begin_inset Text
1867
1868 \layout Standard
1869
1870 4
1871 \end_inset 
1872 </cell>
1873 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
1874 \begin_inset Text
1875
1876 \layout Standard
1877
1878 Asks encoder to switch to mode N for low-band
1879 \end_inset 
1880 </cell>
1881 </row>
1882 <row topline="true">
1883 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1884 \begin_inset Text
1885
1886 \layout Standard
1887
1888 4
1889 \end_inset 
1890 </cell>
1891 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1892 \begin_inset Text
1893
1894 \layout Standard
1895
1896 4
1897 \end_inset 
1898 </cell>
1899 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
1900 \begin_inset Text
1901
1902 \layout Standard
1903
1904 Asks encoder to switch to mode N for high-band
1905 \end_inset 
1906 </cell>
1907 </row>
1908 <row topline="true">
1909 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1910 \begin_inset Text
1911
1912 \layout Standard
1913
1914 5
1915 \end_inset 
1916 </cell>
1917 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1918 \begin_inset Text
1919
1920 \layout Standard
1921
1922 4
1923 \end_inset 
1924 </cell>
1925 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
1926 \begin_inset Text
1927
1928 \layout Standard
1929
1930 Asks encoder to switch to quality N for VBR
1931 \end_inset 
1932 </cell>
1933 </row>
1934 <row topline="true">
1935 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1936 \begin_inset Text
1937
1938 \layout Standard
1939
1940 6
1941 \end_inset 
1942 </cell>
1943 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1944 \begin_inset Text
1945
1946 \layout Standard
1947
1948 4
1949 \end_inset 
1950 </cell>
1951 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
1952 \begin_inset Text
1953
1954 \layout Standard
1955
1956 Request acknowloedge (0=no, 1=all, 2=only for in-band data)
1957 \end_inset 
1958 </cell>
1959 </row>
1960 <row topline="true">
1961 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1962 \begin_inset Text
1963
1964 \layout Standard
1965
1966 7
1967 \end_inset 
1968 </cell>
1969 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1970 \begin_inset Text
1971
1972 \layout Standard
1973
1974 4
1975 \end_inset 
1976 </cell>
1977 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
1978 \begin_inset Text
1979
1980 \layout Standard
1981
1982 Asks encoder to set CBR (0), VAD(1), DTX(3), VBR(5), VBR+DTX(7)
1983 \end_inset 
1984 </cell>
1985 </row>
1986 <row topline="true">
1987 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1988 \begin_inset Text
1989
1990 \layout Standard
1991
1992 8
1993 \end_inset 
1994 </cell>
1995 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1996 \begin_inset Text
1997
1998 \layout Standard
1999
2000 8
2001 \end_inset 
2002 </cell>
2003 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
2004 \begin_inset Text
2005
2006 \layout Standard
2007
2008 Transmit (8-bit) character to the other end
2009 \end_inset 
2010 </cell>
2011 </row>
2012 <row topline="true">
2013 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2014 \begin_inset Text
2015
2016 \layout Standard
2017
2018 9
2019 \end_inset 
2020 </cell>
2021 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2022 \begin_inset Text
2023
2024 \layout Standard
2025
2026 8
2027 \end_inset 
2028 </cell>
2029 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
2030 \begin_inset Text
2031
2032 \layout Standard
2033
2034 Intensity stereo information
2035 \end_inset 
2036 </cell>
2037 </row>
2038 <row topline="true">
2039 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2040 \begin_inset Text
2041
2042 \layout Standard
2043
2044 10
2045 \end_inset 
2046 </cell>
2047 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2048 \begin_inset Text
2049
2050 \layout Standard
2051
2052 16
2053 \end_inset 
2054 </cell>
2055 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
2056 \begin_inset Text
2057
2058 \layout Standard
2059
2060 Announce maximum bit-rate acceptable (N in bytes/second)
2061 \end_inset 
2062 </cell>
2063 </row>
2064 <row topline="true">
2065 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2066 \begin_inset Text
2067
2068 \layout Standard
2069
2070 11
2071 \end_inset 
2072 </cell>
2073 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2074 \begin_inset Text
2075
2076 \layout Standard
2077
2078 16
2079 \end_inset 
2080 </cell>
2081 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
2082 \begin_inset Text
2083
2084 \layout Standard
2085
2086 reserved
2087 \end_inset 
2088 </cell>
2089 </row>
2090 <row topline="true">
2091 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2092 \begin_inset Text
2093
2094 \layout Standard
2095
2096 12
2097 \end_inset 
2098 </cell>
2099 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2100 \begin_inset Text
2101
2102 \layout Standard
2103
2104 32
2105 \end_inset 
2106 </cell>
2107 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
2108 \begin_inset Text
2109
2110 \layout Standard
2111
2112 Acknowledge receiving packet N
2113 \end_inset 
2114 </cell>
2115 </row>
2116 <row topline="true">
2117 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2118 \begin_inset Text
2119
2120 \layout Standard
2121
2122 13
2123 \end_inset 
2124 </cell>
2125 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2126 \begin_inset Text
2127
2128 \layout Standard
2129
2130 32
2131 \end_inset 
2132 </cell>
2133 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
2134 \begin_inset Text
2135
2136 \layout Standard
2137
2138 reserved
2139 \end_inset 
2140 </cell>
2141 </row>
2142 <row topline="true">
2143 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2144 \begin_inset Text
2145
2146 \layout Standard
2147
2148 14
2149 \end_inset 
2150 </cell>
2151 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2152 \begin_inset Text
2153
2154 \layout Standard
2155
2156 64
2157 \end_inset 
2158 </cell>
2159 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
2160 \begin_inset Text
2161
2162 \layout Standard
2163
2164 reserved
2165 \end_inset 
2166 </cell>
2167 </row>
2168 <row topline="true" bottomline="true">
2169 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2170 \begin_inset Text
2171
2172 \layout Standard
2173
2174 15
2175 \end_inset 
2176 </cell>
2177 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2178 \begin_inset Text
2179
2180 \layout Standard
2181
2182 64
2183 \end_inset 
2184 </cell>
2185 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
2186 \begin_inset Text
2187
2188 \layout Standard
2189
2190 reserved
2191 \end_inset 
2192 </cell>
2193 </row>
2194 </lyxtabular>
2195
2196 \end_inset 
2197
2198
2199 \layout Caption
2200
2201 In-band signalling codes
2202 \begin_inset LatexCommand \label{cap:In-band-signalling-codes}
2203
2204 \end_inset 
2205
2206
2207 \end_inset 
2208
2209
2210 \layout Standard
2211
2212 Finally, applications may define custom in-band messages using mode 13.
2213  The size of the message in bytes is encoded with 5 bits, so that the decoder
2214  can skip it if it doesn't know how to interpret it.
2215 \layout Section
2216 \pagebreak_top 
2217 Formats and standards
2218 \begin_inset LatexCommand \index{standards}
2219
2220 \end_inset 
2221
2222
2223 \begin_inset LatexCommand \label{sec:Formats-and-standards}
2224
2225 \end_inset 
2226
2227
2228 \layout Standard
2229
2230 Speex can encode speech in both narrowband and wideband and provides different
2231  bit-rates.
2232  However, not all features need to be supported by a certain implementation
2233  or device.
2234  In order to be called 
2235 \begin_inset Quotes eld
2236 \end_inset 
2237
2238 Speex compatible
2239 \begin_inset Quotes erd
2240 \end_inset 
2241
2242  (whatever that means), an implementation must implement at least a basic
2243  set of features.
2244 \layout Standard
2245
2246 At the minimum, all narrowband modes of operation MUST be supported at the
2247  decoder.
2248  This includes the decoding of a wideband bit-stream by the narrowband decoder
2249 \begin_inset Foot
2250 collapsed true
2251
2252 \layout Standard
2253
2254 The wideband bit-stream contains an embedded narrowband bit-stream which
2255  can be decoded alone
2256 \end_inset 
2257
2258 .
2259  If present, a wideband decoder MUST be able to decode a narrowband stream,
2260  and MAY either be able to decode all wideband modes or be able to decode
2261  the embedded narrowband part of all modes (which includes ignoring the
2262  high-band bits).
2263 \layout Standard
2264
2265 For encoders, at least one narrowband or wideband mode MUST be supported.
2266  The main reason why all encoding modes do not have to be supported is that
2267  some platforms may not be able to handle the complexity of encoding in
2268  some modes.
2269 \layout Subsection
2270
2271 RTP
2272 \begin_inset LatexCommand \index{RTP}
2273
2274 \end_inset 
2275
2276  Payload Format 
2277 \layout Standard
2278
2279 The RTP payload draft is included in appendix 
2280 \begin_inset LatexCommand \ref{sec:IETF-draft}
2281
2282 \end_inset 
2283
2284  and the latest version is available at 
2285 \begin_inset LatexCommand \url{http://www.speex.org/drafts/latest}
2286
2287 \end_inset 
2288
2289 .
2290  This draft has been sent (2003/02/26) to the Internet Engineering Task
2291  Force (IETF) and will be discussed at the March 18th meeting in San Francisco.
2292  
2293 \layout Subsection
2294
2295 MIME Type
2296 \layout Standard
2297
2298 For now, you should use the MIME type audio/x-speex for Speex-in-Ogg.
2299  We will apply for type 
2300 \family typewriter 
2301 audio/speex
2302 \family default 
2303  in the near future.
2304 \layout Subsection
2305
2306 Ogg
2307 \begin_inset LatexCommand \index{Ogg}
2308
2309 \end_inset 
2310
2311  file format
2312 \layout Standard
2313
2314 Speex bit-streams can be stored in Ogg files.
2315  In this case, the first packet of the Ogg file contains the Speex header
2316  described in table 
2317 \begin_inset LatexCommand \ref{cap:ogg_speex_header}
2318
2319 \end_inset 
2320
2321 .
2322  All integer fields in the headers are stored as little-endian.
2323  The 
2324 \family typewriter 
2325 speex_string
2326 \family default 
2327  field must contain the 
2328 \begin_inset Quotes eld
2329 \end_inset 
2330
2331
2332 \family typewriter 
2333 Speex
2334 \family default 
2335 \SpecialChar ~
2336 \SpecialChar ~
2337 \SpecialChar ~
2338
2339 \begin_inset Quotes erd
2340 \end_inset 
2341
2342  (with 3 trailing spaces), which identifies the bit-stream.
2343  The next field, 
2344 \family typewriter 
2345 speex_version
2346 \family default 
2347  contains the version of Speex that encoded the file.
2348  For now, refer to speex_header.[ch] for more info.
2349  The 
2350 \emph on 
2351 beginning of stream
2352 \emph default 
2353  (
2354 \family typewriter 
2355 b_o_s
2356 \family default 
2357 ) flag is set to 1 for the header.
2358  The header packet has 
2359 \family typewriter 
2360 packetno=0
2361 \family default 
2362  and 
2363 \family typewriter 
2364 granulepos=0
2365 \family default 
2366 .
2367 \layout Standard
2368
2369 The second packet contains the Speex comment header.
2370  The format used is the Vorbis comment format described here: http://www.xiph.org/
2371 ogg/vorbis/doc/v-comment.html .
2372  This packet has 
2373 \family typewriter 
2374 packetno=1
2375 \family default 
2376  and 
2377 \family typewriter 
2378 granulepos=0
2379 \family default 
2380 .
2381 \layout Standard
2382
2383 The third and subsequent packets each contain one or more (number found
2384  in header) Speex frames.
2385  These are identified with 
2386 \family typewriter 
2387 packetno
2388 \family default 
2389  starting from 2 and the 
2390 \family typewriter 
2391 granulepos
2392 \family default 
2393  is the number of the last sample encoded in that packet.
2394  The last of these packets has the 
2395 \emph on 
2396 end of stream
2397 \emph default 
2398  (
2399 \family typewriter 
2400 e_o_s
2401 \family default 
2402 ) flag is set to 1.
2403 \layout Standard
2404
2405
2406 \begin_inset Float table
2407 placement htbp
2408 wide true
2409 collapsed false
2410
2411 \layout Standard
2412
2413
2414 \begin_inset  Tabular
2415 <lyxtabular version="3" rows="16" columns="3">
2416 <features>
2417 <column alignment="center" valignment="top" leftline="true" width="0pt">
2418 <column alignment="center" valignment="top" leftline="true" width="0pt">
2419 <column alignment="center" valignment="top" leftline="true" rightline="true" width="0pt">
2420 <row topline="true" bottomline="true">
2421 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2422 \begin_inset Text
2423
2424 \layout Standard
2425
2426 Field
2427 \end_inset 
2428 </cell>
2429 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2430 \begin_inset Text
2431
2432 \layout Standard
2433
2434 Type
2435 \end_inset 
2436 </cell>
2437 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
2438 \begin_inset Text
2439
2440 \layout Standard
2441
2442 Size
2443 \end_inset 
2444 </cell>
2445 </row>
2446 <row topline="true">
2447 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2448 \begin_inset Text
2449
2450 \layout Standard
2451
2452 speex_string
2453 \end_inset 
2454 </cell>
2455 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2456 \begin_inset Text
2457
2458 \layout Standard
2459
2460 char[]
2461 \end_inset 
2462 </cell>
2463 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
2464 \begin_inset Text
2465
2466 \layout Standard
2467
2468 8
2469 \end_inset 
2470 </cell>
2471 </row>
2472 <row topline="true">
2473 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2474 \begin_inset Text
2475
2476 \layout Standard
2477
2478 speex_version
2479 \end_inset 
2480 </cell>
2481 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2482 \begin_inset Text
2483
2484 \layout Standard
2485
2486 char[]
2487 \end_inset 
2488 </cell>
2489 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
2490 \begin_inset Text
2491
2492 \layout Standard
2493
2494 20
2495 \end_inset 
2496 </cell>
2497 </row>
2498 <row topline="true">
2499 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2500 \begin_inset Text
2501
2502 \layout Standard
2503
2504 speex_version_id
2505 \end_inset 
2506 </cell>
2507 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2508 \begin_inset Text
2509
2510 \layout Standard
2511
2512 int
2513 \end_inset 
2514 </cell>
2515 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
2516 \begin_inset Text
2517
2518 \layout Standard
2519
2520 4
2521 \end_inset 
2522 </cell>
2523 </row>
2524 <row topline="true">
2525 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2526 \begin_inset Text
2527
2528 \layout Standard
2529
2530 header_size
2531 \end_inset 
2532 </cell>
2533 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2534 \begin_inset Text
2535
2536 \layout Standard
2537
2538 int
2539 \end_inset 
2540 </cell>
2541 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
2542 \begin_inset Text
2543
2544 \layout Standard
2545
2546 4
2547 \end_inset 
2548 </cell>
2549 </row>
2550 <row topline="true">
2551 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2552 \begin_inset Text
2553
2554 \layout Standard
2555
2556 rate
2557 \end_inset 
2558 </cell>
2559 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2560 \begin_inset Text
2561
2562 \layout Standard
2563
2564 int
2565 \end_inset 
2566 </cell>
2567 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
2568 \begin_inset Text
2569
2570 \layout Standard
2571
2572 4
2573 \end_inset 
2574 </cell>
2575 </row>
2576 <row topline="true">
2577 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2578 \begin_inset Text
2579
2580 \layout Standard
2581
2582 mode
2583 \end_inset 
2584 </cell>
2585 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2586 \begin_inset Text
2587
2588 \layout Standard
2589
2590 int
2591 \end_inset 
2592 </cell>
2593 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
2594 \begin_inset Text
2595
2596 \layout Standard
2597
2598 4
2599 \end_inset 
2600 </cell>
2601 </row>
2602 <row topline="true">
2603 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2604 \begin_inset Text
2605
2606 \layout Standard
2607
2608 mode_bitstream_version
2609 \end_inset 
2610 </cell>
2611 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2612 \begin_inset Text
2613
2614 \layout Standard
2615
2616 int
2617 \end_inset 
2618 </cell>
2619 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
2620 \begin_inset Text
2621
2622 \layout Standard
2623
2624 4
2625 \end_inset 
2626 </cell>
2627 </row>
2628 <row topline="true">
2629 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2630 \begin_inset Text
2631
2632 \layout Standard
2633
2634 nb_channels
2635 \end_inset 
2636 </cell>
2637 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2638 \begin_inset Text
2639
2640 \layout Standard
2641
2642 int
2643 \end_inset 
2644 </cell>
2645 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
2646 \begin_inset Text
2647
2648 \layout Standard
2649
2650 4
2651 \end_inset 
2652 </cell>
2653 </row>
2654 <row topline="true">
2655 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2656 \begin_inset Text
2657
2658 \layout Standard
2659
2660 bitrate
2661 \end_inset 
2662 </cell>
2663 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2664 \begin_inset Text
2665
2666 \layout Standard
2667
2668 int
2669 \end_inset 
2670 </cell>
2671 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
2672 \begin_inset Text
2673
2674 \layout Standard
2675
2676 4
2677 \end_inset 
2678 </cell>
2679 </row>
2680 <row topline="true">
2681 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2682 \begin_inset Text
2683
2684 \layout Standard
2685
2686 frame_size
2687 \end_inset 
2688 </cell>
2689 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2690 \begin_inset Text
2691
2692 \layout Standard
2693
2694 int
2695 \end_inset 
2696 </cell>
2697 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
2698 \begin_inset Text
2699
2700 \layout Standard
2701
2702 4
2703 \end_inset 
2704 </cell>
2705 </row>
2706 <row topline="true">
2707 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2708 \begin_inset Text
2709
2710 \layout Standard
2711
2712 vbr
2713 \end_inset 
2714 </cell>
2715 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2716 \begin_inset Text
2717
2718 \layout Standard
2719
2720 int
2721 \end_inset 
2722 </cell>
2723 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
2724 \begin_inset Text
2725
2726 \layout Standard
2727
2728 4
2729 \end_inset 
2730 </cell>
2731 </row>
2732 <row topline="true">
2733 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2734 \begin_inset Text
2735
2736 \layout Standard
2737
2738 frames_per_packet
2739 \end_inset 
2740 </cell>
2741 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2742 \begin_inset Text
2743
2744 \layout Standard
2745
2746 int
2747 \end_inset 
2748 </cell>
2749 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
2750 \begin_inset Text
2751
2752 \layout Standard
2753
2754 4
2755 \end_inset 
2756 </cell>
2757 </row>
2758 <row topline="true">
2759 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2760 \begin_inset Text
2761
2762 \layout Standard
2763
2764 extra_headers
2765 \end_inset 
2766 </cell>
2767 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2768 \begin_inset Text
2769
2770 \layout Standard
2771
2772 int
2773 \end_inset 
2774 </cell>
2775 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
2776 \begin_inset Text
2777
2778 \layout Standard
2779
2780 4
2781 \end_inset 
2782 </cell>
2783 </row>
2784 <row topline="true">
2785 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2786 \begin_inset Text
2787
2788 \layout Standard
2789
2790 reserved1
2791 \end_inset 
2792 </cell>
2793 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2794 \begin_inset Text
2795
2796 \layout Standard
2797
2798 int
2799 \end_inset 
2800 </cell>
2801 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
2802 \begin_inset Text
2803
2804 \layout Standard
2805
2806 4
2807 \end_inset 
2808 </cell>
2809 </row>
2810 <row topline="true" bottomline="true">
2811 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2812 \begin_inset Text
2813
2814 \layout Standard
2815
2816 reserved2
2817 \end_inset 
2818 </cell>
2819 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2820 \begin_inset Text
2821
2822 \layout Standard
2823
2824 int
2825 \end_inset 
2826 </cell>
2827 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
2828 \begin_inset Text
2829
2830 \layout Standard
2831
2832 4
2833 \end_inset 
2834 </cell>
2835 </row>
2836 </lyxtabular>
2837
2838 \end_inset 
2839
2840
2841 \layout Caption
2842
2843 Ogg/Speex header packet
2844 \begin_inset LatexCommand \label{cap:ogg_speex_header}
2845
2846 \end_inset 
2847
2848
2849 \end_inset 
2850
2851
2852 \layout Section
2853 \pagebreak_top 
2854 Introduction to CELP Coding
2855 \begin_inset LatexCommand \index{CELP}
2856
2857 \end_inset 
2858
2859
2860 \begin_inset LatexCommand \label{sec:Introduction-to-CELP}
2861
2862 \end_inset 
2863
2864
2865 \layout Standard
2866
2867 Speex is based on CELP, which stands for Code Excited Linear Prediction.
2868  This section attempts to introduce the principles behind CELP, so if you
2869  are already familiar with CELP, you can safely skip to section 
2870 \begin_inset LatexCommand \ref{sec:Speex-narrowband-mode}
2871
2872 \end_inset 
2873
2874 .
2875  The CELP technique is based on three ideas:
2876 \layout Enumerate
2877
2878 The use of a linear prediction (LP) model to model the vocal tract
2879 \layout Enumerate
2880
2881 The use of (adaptive and fixed) codebook entries as input (excitation) of
2882  the LP model
2883 \layout Enumerate
2884
2885 The search performed in closed-loop in a 
2886 \begin_inset Quotes eld
2887 \end_inset 
2888
2889 perceptually weighted domain
2890 \begin_inset Quotes erd
2891 \end_inset 
2892
2893
2894 \layout Standard
2895
2896 This section describes the basic ideas behind CELP.
2897  Note that it's still incomplete.
2898 \layout Subsection
2899
2900 Linear Prediction (LPC)
2901 \begin_inset LatexCommand \index{linear prediction}
2902
2903 \end_inset 
2904
2905
2906 \layout Standard
2907
2908 Linear prediction is at the base of many speech coding techniques, including
2909  CELP.
2910  The idea behind it is to predict the signal 
2911 \begin_inset Formula $x[n]$
2912 \end_inset 
2913
2914  using a linear combination of its past samples:
2915 \layout Standard
2916
2917
2918 \begin_inset Formula \[
2919 y[n]=\sum_{i=1}^{N}a_{i}x[n-i]\]
2920
2921 \end_inset 
2922
2923 where 
2924 \begin_inset Formula $y[n]$
2925 \end_inset 
2926
2927  is the linear prediction of 
2928 \begin_inset Formula $x[n]$
2929 \end_inset 
2930
2931 .
2932  The prediction error is thus given by:
2933 \begin_inset Formula \[
2934 e[n]=x[n]-y[n]=x[n]-\sum_{i=1}^{N}a_{i}x[n-i]\]
2935
2936 \end_inset 
2937
2938
2939 \layout Standard
2940
2941 The goal of the LPC analysis is to find the best prediction coefficients
2942  
2943 \begin_inset Formula $a_{i}$
2944 \end_inset 
2945
2946  which minimize the quadratic error function:
2947 \begin_inset Formula \[
2948 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}\]
2949
2950 \end_inset 
2951
2952 That can be done by making all derivatives 
2953 \begin_inset Formula $\frac{\partial E}{\partial a_{i}}$
2954 \end_inset 
2955
2956  equal to zero:
2957 \begin_inset Formula \[
2958 \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\]
2959
2960 \end_inset 
2961
2962
2963 \layout Standard
2964
2965 The 
2966 \begin_inset Formula $a_{i}$
2967 \end_inset 
2968
2969  filter coefficients are computed using the Levinson-Durbin
2970 \begin_inset LatexCommand \index{Levinson-Durbin}
2971
2972 \end_inset 
2973
2974  algorithm, which starts from the auto-correlation
2975 \begin_inset LatexCommand \index{auto-correlation}
2976
2977 \end_inset 
2978
2979  
2980 \begin_inset Formula $R(m)$
2981 \end_inset 
2982
2983  of the signal 
2984 \begin_inset Formula $x[n]$
2985 \end_inset 
2986
2987 .
2988 \layout Standard
2989
2990
2991 \begin_inset Formula \[
2992 R(m)=\sum_{i=0}^{N-1}x[i]x[i-m]\]
2993
2994 \end_inset 
2995
2996
2997 \layout Standard
2998
2999 For an order 
3000 \begin_inset Formula $N$
3001 \end_inset 
3002
3003  filter, we have:
3004 \begin_inset Formula \[
3005 \mathbf{R}=\left[\begin{array}{cccc}
3006 R(0) & R(1) & \cdots & R(N-1)\\
3007 R(1) & R(0) & \cdots & R(N-2)\\
3008 \vdots & \vdots & \ddots & \vdots\\
3009 R(N-1) & R(N-2) & \cdots & R(0)\end{array}\right]\]
3010
3011 \end_inset 
3012
3013
3014 \begin_inset Formula \[
3015 \mathbf{r}=\left[\begin{array}{c}
3016 R(1)\\
3017 R(2)\\
3018 \vdots\\
3019 R(N)\end{array}\right]\]
3020
3021 \end_inset 
3022
3023
3024 \layout Standard
3025
3026 The filter coefficients 
3027 \begin_inset Formula $a_{i}$
3028 \end_inset 
3029
3030  are found by solving the system 
3031 \begin_inset Formula $\mathbf{Ra}=\mathbf{r}$
3032 \end_inset 
3033
3034 .
3035  What the Levinson-Durbin algorithm does here is making the solution to
3036  the problem 
3037 \begin_inset Formula $\mathcal{O}\left(N^{2}\right)$
3038 \end_inset 
3039
3040  instead of 
3041 \begin_inset Formula $\mathcal{O}\left(N^{3}\right)$
3042 \end_inset 
3043
3044  by exploiting the fact that matrix 
3045 \begin_inset Formula $\mathbf{R}$
3046 \end_inset 
3047
3048  is toeplitz hermitian.
3049  Also, it can be proven that all the roots of 
3050 \begin_inset Formula $A(z)$
3051 \end_inset 
3052
3053  are within the unit circle, which means that 
3054 \begin_inset Formula $1/A(z)$
3055 \end_inset 
3056
3057  is always stable.
3058  This is in theory; in practice because of finite precision, there are two
3059  commonly used techniques to make sure we have a stable filter.
3060  First, we multiply 
3061 \begin_inset Formula $R(0)$
3062 \end_inset 
3063
3064  by a number slightly above one (such as 1.0001), which is equivalent to
3065  adding noise to the signal.
3066  Also, we can apply a window to the auto-correlation, which is equivalent
3067  to filtering in the frequency domain, reducing sharp resonances.
3068 \layout Standard
3069
3070 The linear prediction model represents each speech sample as a linear combinatio
3071 n of past samples, plus an error signal called the excitation (or residual).
3072 \begin_inset Formula \[
3073 x[n]=\sum_{i=1}^{N}a_{i}x[n-i]+e[n]\]
3074
3075 \end_inset 
3076
3077
3078 \layout Standard
3079
3080 In the 
3081 \emph on 
3082 z
3083 \emph default 
3084 -domain, this can be expressed as
3085 \layout Standard
3086
3087
3088 \begin_inset Formula \[
3089 x(z)=\frac{1}{A(z)}\: e(z)\]
3090
3091 \end_inset 
3092
3093
3094 \layout Standard
3095
3096 where 
3097 \begin_inset Formula $A(z)$
3098 \end_inset 
3099
3100  is defined as
3101 \layout Standard
3102
3103
3104 \begin_inset Formula \[
3105 A(z)=1-\sum_{i=1}^{N}a_{i}z^{-i}\]
3106
3107 \end_inset 
3108
3109
3110 \layout Standard
3111
3112 We usually refer to 
3113 \begin_inset Formula $A(z)$
3114 \end_inset 
3115
3116  as the analysis filter and 
3117 \begin_inset Formula $1/A(z)$
3118 \end_inset 
3119
3120  as the synthesis filter.
3121  The whole process is called short-term prediction as it predicts the signal
3122  
3123 \begin_inset Formula $x[n]$
3124 \end_inset 
3125
3126  using a prediction using only the 
3127 \begin_inset Formula $N$
3128 \end_inset 
3129
3130  past samples, where 
3131 \begin_inset Formula $N$
3132 \end_inset 
3133
3134  is usually around 10.
3135 \layout Standard
3136
3137 Because LPC coefficients have very little robustness to quantization, they
3138  are converted to Line Spectral Pair
3139 \begin_inset LatexCommand \index{line spectral pair}
3140
3141 \end_inset 
3142
3143  (LSP) coefficients which have a much better behaviour with quantization,
3144  one of them being that it's easy to keep the filter stable.
3145  
3146 \layout Comment
3147
3148 Describe LSP's
3149 \layout Subsection
3150
3151 Pitch Prediction
3152 \begin_inset LatexCommand \index{pitch}
3153
3154 \end_inset 
3155
3156
3157 \layout Standard
3158
3159 During voiced segments, the speech signal is periodic, so it is possible
3160  to take advantage of that property by approximating the excitation signal
3161  
3162 \begin_inset Formula $e[n]$
3163 \end_inset 
3164
3165  by a gain times the past of the excitation:
3166 \layout Standard
3167
3168
3169 \begin_inset Formula \[
3170 e[n]\simeq p[n]=\beta e[n-T]\]
3171
3172 \end_inset 
3173
3174
3175 \layout Standard
3176
3177 where 
3178 \begin_inset Formula $T$
3179 \end_inset 
3180
3181  is the pitch period, 
3182 \begin_inset Formula $\beta$
3183 \end_inset 
3184
3185  is the pitch gain.
3186  We call that long-term prediction since the excitation is predicted from
3187  
3188 \begin_inset Formula $e[n-T]$
3189 \end_inset 
3190
3191  with 
3192 \begin_inset Formula $T\gg N$
3193 \end_inset 
3194
3195 .
3196 \layout Subsection
3197
3198 Innovation Codebook
3199 \layout Standard
3200
3201 The final excitation 
3202 \begin_inset Formula $e[n]$
3203 \end_inset 
3204
3205  will be the sum of the pitch prediction and an 
3206 \emph on 
3207 innovation
3208 \emph default 
3209  signal 
3210 \begin_inset Formula $c[n]$
3211 \end_inset 
3212
3213  taken from a fixed codebook, hence the name 
3214 \emph on 
3215 Code
3216 \emph default 
3217  Excited Linear Prediction.
3218  The final excitation is given by:
3219 \layout Standard
3220
3221
3222 \begin_inset Formula \[
3223 e[n]=p[n]+c[n]=\beta e[n-T]+c[n]\]
3224
3225 \end_inset 
3226
3227 The quantization of 
3228 \begin_inset Formula $c[n]$
3229 \end_inset 
3230
3231  is where most of the bits in a CELP codec are allocated.
3232  It represents the information that couldn't be obtained either from linear
3233  prediction or pitch prediction.
3234  In the 
3235 \emph on 
3236 z
3237 \emph default 
3238 -domain we can represent the final signal 
3239 \begin_inset Formula $X(z)$
3240 \end_inset 
3241
3242  as 
3243 \begin_inset Formula \[
3244 X(z)=\frac{C(z)}{A(z)\left(1-\beta z^{-T}\right)}\]
3245
3246 \end_inset 
3247
3248
3249 \layout Subsection
3250
3251 Analysis-by-Synthesis and Error Weighting
3252 \begin_inset LatexCommand \index{error weighting}
3253
3254 \end_inset 
3255
3256
3257 \begin_inset LatexCommand \index{analysis-by-synthesis}
3258
3259 \end_inset 
3260
3261
3262 \layout Standard
3263
3264 Most (if not all) modern audio codecs attempt to 
3265 \begin_inset Quotes eld
3266 \end_inset 
3267
3268 shape
3269 \begin_inset Quotes erd
3270 \end_inset 
3271
3272  the noise so that it appears mostly in the frequency regions where the
3273  ear cannot detect it.
3274  For example, the ear is more tolerant to noise in parts of the spectrum
3275  that are louder and 
3276 \emph on 
3277 vice versa
3278 \emph default 
3279 .
3280  That's why instead of minimizing the simple quadratic error
3281 \begin_inset Formula \[
3282 E=\sum_{n}\left(x[n]-\overline{x}[n]\right)^{2}\]
3283
3284 \end_inset 
3285
3286 where 
3287 \begin_inset Formula $\overline{x}[n]$
3288 \end_inset 
3289
3290  is the encoder signal, we minimize the error for the perceptually weighted
3291  signal
3292 \begin_inset Formula \[
3293 X_{w}(z)=W(z)X(z)\]
3294
3295 \end_inset 
3296
3297 where 
3298 \begin_inset Formula $W(z)$
3299 \end_inset 
3300
3301  is the weighting filter, usually of the form
3302 \layout Standard
3303
3304
3305 \begin_inset Formula \begin{equation}
3306 W(z)=\frac{A\left(\frac{z}{\gamma_{1}}\right)}{A\left(\frac{z}{\gamma_{2}}\right)}\label{eq:weighting_filter}\end{equation}
3307
3308 \end_inset 
3309
3310
3311 \layout Standard
3312
3313 with control parameters 
3314 \begin_inset Formula $\gamma_{1}>\gamma_{2}$
3315 \end_inset 
3316
3317 .
3318  If the noise is white in the perceptually weighted domain, then in the
3319  signal domain its spectral shape will be of the form
3320 \begin_inset Formula \[
3321 A_{noise}(z)=\frac{1}{W(z)}=\frac{A\left(\frac{z}{\gamma_{2}}\right)}{A\left(\frac{z}{\gamma_{1}}\right)}\]
3322
3323 \end_inset 
3324
3325
3326 \layout Standard
3327
3328 If a filter 
3329 \begin_inset Formula $A(z)$
3330 \end_inset 
3331
3332  has (complex) poles at 
3333 \begin_inset Formula $p_{i}$
3334 \end_inset 
3335
3336  in the 
3337 \begin_inset Formula $z$
3338 \end_inset 
3339
3340 -plane, the filter 
3341 \begin_inset Formula $A(z/\gamma)$
3342 \end_inset 
3343
3344  will have its poles at 
3345 \begin_inset Formula $p'_{i}=\gamma p_{i}$
3346 \end_inset 
3347
3348 , making it a flatter version of 
3349 \begin_inset Formula $A(z)$
3350 \end_inset 
3351
3352 .
3353 \layout Standard
3354
3355 Analysis-by-synthesis refers to the fact that when trying to find the best
3356  pitch parameters (
3357 \begin_inset Formula $T$
3358 \end_inset 
3359
3360
3361 \begin_inset Formula $\beta$
3362 \end_inset 
3363
3364 ) and innovation signal 
3365 \begin_inset Formula $c[n]$
3366 \end_inset 
3367
3368 , we do not work by making the excitation 
3369 \begin_inset Formula $e[n]$
3370 \end_inset 
3371
3372  as close as the original one (which would be simpler), but apply the synthesis
3373  (and weighting) filter and try making 
3374 \begin_inset Formula $X_{w}(z)$
3375 \end_inset 
3376
3377  as close to the original as possible.
3378 \layout Section
3379 \pagebreak_top 
3380 Speex narrowband mode
3381 \begin_inset LatexCommand \label{sec:Speex-narrowband-mode}
3382
3383 \end_inset 
3384
3385
3386 \begin_inset LatexCommand \index{narrowband}
3387
3388 \end_inset 
3389
3390
3391 \layout Standard
3392
3393 This section looks at how Speex works for narrowband (
3394 \begin_inset Formula $8\:\mathrm{kHz}$
3395 \end_inset 
3396
3397  sampling rate) operation.
3398  The frame size for this mode is 
3399 \begin_inset Formula $20\:\mathrm{ms}$
3400 \end_inset 
3401
3402 , corresponding to 160 samples.
3403  Each frame is also subdivided into 4 sub-frames of 40 samples each.
3404 \layout Standard
3405
3406 Also many design decisions were based on the original goals and assumptions:
3407 \layout Itemize
3408
3409 Minimizing the amount of information extracted from past frames (for robustness
3410  to packet loss)
3411 \layout Itemize
3412
3413 Dynamically-selectable codebooks (LSP, pitch and innovation)
3414 \layout Itemize
3415
3416 sub-vector fixed (innovation) codebooks
3417 \layout Subsection
3418
3419 LPC Analysis
3420 \begin_inset LatexCommand \index{linear prediction}
3421
3422 \end_inset 
3423
3424
3425 \layout Standard
3426
3427 An LPC analysis is first performed on a (asymetric Hamming) window that
3428  spans all of the current frame and half a frame in advance.
3429  The LPC coefficients are then converted to Line Spectral Pair
3430 \begin_inset LatexCommand \index{line spectral pair}
3431
3432 \end_inset 
3433
3434  (LSP), a representation that is more robust to quantization.
3435  The LSP's are considered to be associated to the 
3436 \begin_inset Formula $4^{th}$
3437 \end_inset 
3438
3439  sub-frames and the LSP's associated to the first 3 sub-frames are linearly
3440  interpolated using the current and previous LSP's.
3441 \layout Standard
3442
3443 The LSP's are encoded using 30 bits for higher quality modes and 18 bits
3444  for lower quality, through the use of a multi-stage split-vector quantizer.
3445  For the lower quality modes, the 10 coefficients are first quantized with
3446  6 bits and the error is then divided in two 5-coefficient sub-vectors.
3447  Each of them is quantized with 6 bits, for a total of 18 bits.
3448  For the higher quality modes, the remaining error on both sub-vectors is
3449  further quantized with 6 bits each, for a total of 30 bits.
3450 \layout Standard
3451
3452 The perceptual weighting filter 
3453 \begin_inset Formula $W(z)$
3454 \end_inset 
3455
3456  used by Speex is derived from the LPC filter 
3457 \begin_inset Formula $A(z)$
3458 \end_inset 
3459
3460  and corresponds to the one described by eq.
3461  
3462 \begin_inset LatexCommand \ref{eq:weighting_filter}
3463
3464 \end_inset 
3465
3466  with 
3467 \begin_inset Formula $\gamma_{1}=0.9$
3468 \end_inset 
3469
3470  and 
3471 \begin_inset Formula $\gamma_{2}=0.6$
3472 \end_inset 
3473
3474 .
3475  We can use the unquantized 
3476 \begin_inset Formula $A(z)$
3477 \end_inset 
3478
3479  filter since the weighting filter is only used in the encoder.
3480 \layout Subsection
3481
3482 Pitch Prediction (adaptive codebook)
3483 \begin_inset LatexCommand \index{pitch}
3484
3485 \end_inset 
3486
3487
3488 \layout Standard
3489
3490 Speex uses a 3-tap prediction for pitch.
3491  That is, the pitch prediction signal 
3492 \begin_inset Formula $p[n]$
3493 \end_inset 
3494
3495  is obtained by the past of the excitation by:
3496 \begin_inset Formula \[
3497 p[n]=\beta_{0}e[n-T-1]+\beta_{1}e[n-T]+\beta_{2}e[n-T+1]\]
3498
3499 \end_inset 
3500
3501
3502 \layout Standard
3503
3504 where 
3505 \begin_inset Formula $T$
3506 \end_inset 
3507
3508  is the pitch period and the 
3509 \begin_inset Formula $\beta_{i}$
3510 \end_inset 
3511
3512  are the prediction (filter) taps.
3513  It is worth noting that when the pitch is smaller than the sub-frame size,
3514  we repeat the excitation at a period 
3515 \begin_inset Formula $T$
3516 \end_inset 
3517
3518 .
3519  For example, when 
3520 \begin_inset Formula $n-T+1$
3521 \end_inset 
3522
3523 , we use 
3524 \begin_inset Formula $n-2T+1$
3525 \end_inset 
3526
3527  instead.
3528  The period and quantized gains are determined in closed loop (analysis-by-synth
3529 esis).
3530  In most modes, the pitch period is encoded with 7 bits in the 
3531 \begin_inset Formula $\left[17,144\right]$
3532 \end_inset 
3533
3534  range and the 
3535 \begin_inset Formula $\beta_{i}$
3536 \end_inset 
3537
3538  coefficients are vector-quantized using 7 bits (15 kbps narrowband and
3539  above) at higher bit-rates and 5 bits at lower bit-rates (11 kbps narrowband
3540  and below).
3541 \layout Subsection
3542
3543 Innovation Codebook
3544 \layout Standard
3545
3546 In Speex, the innovation signal is quantized using sub-vector shape-only
3547  vector quantization (VQ).
3548  That means that the innovation signal is divided in sub-vectors (of size
3549  5 to 20) and quantized using a codebook that represents both the shape
3550  and the gain at the same time.
3551  This saves many bits that would otherwise be allocated for a separate gain
3552  at the price of a slight increase in complexity.
3553  
3554 \layout Subsection
3555
3556 Bit allocation
3557 \layout Standard
3558
3559 There are 7 different narrowband bit-rates defined for Speex, ranging from
3560  250 bps to 24.6 kbps, although the modes below 5.9 kbps should not be used
3561  for speech.
3562  The bit-allocation for each mode is detailed in table 
3563 \begin_inset LatexCommand \ref{cap:bits-narrowband}
3564
3565 \end_inset 
3566
3567 .
3568  Each frame starts with the mode ID encoded with 4 bits which allows a range
3569  from 0 to 15, though only the first 7 values are used (the others are reserved).
3570  The parameters are listed in the table in the order they are packed in
3571  the bit-stream.
3572  All frame-based parameters are packed before sub-frame parameters.
3573  The parameters for a certain sub-frame are all packed before the following
3574  sub-frame is packed.
3575  Note that the 
3576 \begin_inset Quotes eld
3577 \end_inset 
3578
3579 OL
3580 \begin_inset Quotes erd
3581 \end_inset 
3582
3583  in the parameter description means that the parameter is an open loop estimatio
3584 n based on the whole frame.
3585 \layout Standard
3586
3587
3588 \begin_inset Float table
3589 placement h
3590 wide true
3591 collapsed false
3592
3593 \layout Standard
3594
3595
3596 \begin_inset  Tabular
3597 <lyxtabular version="3" rows="12" columns="11">
3598 <features>
3599 <column alignment="center" valignment="top" leftline="true" width="0pt">
3600 <column alignment="center" valignment="top" leftline="true" width="0pt">
3601 <column alignment="center" valignment="top" leftline="true" width="0pt">
3602 <column alignment="center" valignment="top" leftline="true" width="0pt">
3603 <column alignment="center" valignment="top" leftline="true" width="0pt">
3604 <column alignment="center" valignment="top" leftline="true" width="0pt">
3605 <column alignment="center" valignment="top" leftline="true" width="0pt">
3606 <column alignment="center" valignment="top" leftline="true" width="0pt">
3607 <column alignment="center" valignment="top" leftline="true" width="0pt">
3608 <column alignment="center" valignment="top" leftline="true" width="0pt">
3609 <column alignment="center" valignment="top" leftline="true" rightline="true" width="0pt">
3610 <row topline="true" bottomline="true">
3611 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3612 \begin_inset Text
3613
3614 \layout Standard
3615
3616 Parameter
3617 \end_inset 
3618 </cell>
3619 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3620 \begin_inset Text
3621
3622 \layout Standard
3623
3624 Update rate
3625 \end_inset 
3626 </cell>
3627 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3628 \begin_inset Text
3629
3630 \layout Standard
3631
3632 0
3633 \end_inset 
3634 </cell>
3635 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3636 \begin_inset Text
3637
3638 \layout Standard
3639
3640 1
3641 \end_inset 
3642 </cell>
3643 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3644 \begin_inset Text
3645
3646 \layout Standard
3647
3648 2
3649 \end_inset 
3650 </cell>
3651 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3652 \begin_inset Text
3653
3654 \layout Standard
3655
3656 3
3657 \end_inset 
3658 </cell>
3659 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3660 \begin_inset Text
3661
3662 \layout Standard
3663
3664 4
3665 \end_inset 
3666 </cell>
3667 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3668 \begin_inset Text
3669
3670 \layout Standard
3671
3672 5
3673 \end_inset 
3674 </cell>
3675 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
3676 \begin_inset Text
3677
3678 \layout Standard
3679
3680 6
3681 \end_inset 
3682 </cell>
3683 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
3684 \begin_inset Text
3685
3686 \layout Standard
3687
3688 7
3689 \end_inset 
3690 </cell>
3691 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
3692 \begin_inset Text
3693
3694 \layout Standard
3695
3696 8
3697 \end_inset 
3698 </cell>
3699 </row>
3700 <row topline="true">
3701 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3702 \begin_inset Text
3703
3704 \layout Standard
3705
3706 Wideband bit
3707 \end_inset 
3708 </cell>
3709 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3710 \begin_inset Text
3711
3712 \layout Standard
3713
3714 frame
3715 \end_inset 
3716 </cell>
3717 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3718 \begin_inset Text
3719
3720 \layout Standard
3721
3722 1
3723 \end_inset 
3724 </cell>
3725 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3726 \begin_inset Text
3727
3728 \layout Standard
3729
3730 1
3731 \end_inset 
3732 </cell>
3733 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3734 \begin_inset Text
3735
3736 \layout Standard
3737
3738 1
3739 \end_inset 
3740 </cell>
3741 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3742 \begin_inset Text
3743
3744 \layout Standard
3745
3746 1
3747 \end_inset 
3748 </cell>
3749 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3750 \begin_inset Text
3751
3752 \layout Standard
3753
3754 1
3755 \end_inset 
3756 </cell>
3757 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3758 \begin_inset Text
3759
3760 \layout Standard
3761
3762 1
3763 \end_inset 
3764 </cell>
3765 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
3766 \begin_inset Text
3767
3768 \layout Standard
3769
3770 1
3771 \end_inset 
3772 </cell>
3773 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
3774 \begin_inset Text
3775
3776 \layout Standard
3777
3778 1
3779 \end_inset 
3780 </cell>
3781 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
3782 \begin_inset Text
3783
3784 \layout Standard
3785
3786 1
3787 \end_inset 
3788 </cell>
3789 </row>
3790 <row topline="true">
3791 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3792 \begin_inset Text
3793
3794 \layout Standard
3795
3796 Mode ID
3797 \end_inset 
3798 </cell>
3799 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3800 \begin_inset Text
3801
3802 \layout Standard
3803
3804 frame
3805 \end_inset 
3806 </cell>
3807 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3808 \begin_inset Text
3809
3810 \layout Standard
3811
3812 4
3813 \end_inset 
3814 </cell>
3815 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3816 \begin_inset Text
3817
3818 \layout Standard
3819
3820 4
3821 \end_inset 
3822 </cell>
3823 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3824 \begin_inset Text
3825
3826 \layout Standard
3827
3828 4
3829 \end_inset 
3830 </cell>
3831 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3832 \begin_inset Text
3833
3834 \layout Standard
3835
3836 4
3837 \end_inset 
3838 </cell>
3839 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3840 \begin_inset Text
3841
3842 \layout Standard
3843
3844 4
3845 \end_inset 
3846 </cell>
3847 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3848 \begin_inset Text
3849
3850 \layout Standard
3851
3852 4
3853 \end_inset 
3854 </cell>
3855 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
3856 \begin_inset Text
3857
3858 \layout Standard
3859
3860 4
3861 \end_inset 
3862 </cell>
3863 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
3864 \begin_inset Text
3865
3866 \layout Standard
3867
3868 4
3869 \end_inset 
3870 </cell>
3871 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
3872 \begin_inset Text
3873
3874 \layout Standard
3875
3876 4
3877 \end_inset 
3878 </cell>
3879 </row>
3880 <row topline="true">
3881 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3882 \begin_inset Text
3883
3884 \layout Standard
3885
3886 LSP
3887 \end_inset 
3888 </cell>
3889 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3890 \begin_inset Text
3891
3892 \layout Standard
3893
3894 frame
3895 \end_inset 
3896 </cell>
3897 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3898 \begin_inset Text
3899
3900 \layout Standard
3901
3902 0
3903 \end_inset 
3904 </cell>
3905 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3906 \begin_inset Text
3907
3908 \layout Standard
3909
3910 18
3911 \end_inset 
3912 </cell>
3913 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3914 \begin_inset Text
3915
3916 \layout Standard
3917
3918 18
3919 \end_inset 
3920 </cell>
3921 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3922 \begin_inset Text
3923
3924 \layout Standard
3925
3926 18
3927 \end_inset 
3928 </cell>
3929 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3930 \begin_inset Text
3931
3932 \layout Standard
3933
3934 18
3935 \end_inset 
3936 </cell>
3937 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3938 \begin_inset Text
3939
3940 \layout Standard
3941
3942 30
3943 \end_inset 
3944 </cell>
3945 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
3946 \begin_inset Text
3947
3948 \layout Standard
3949
3950 30
3951 \end_inset 
3952 </cell>
3953 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
3954 \begin_inset Text
3955
3956 \layout Standard
3957
3958 30
3959 \end_inset 
3960 </cell>
3961 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
3962 \begin_inset Text
3963
3964 \layout Standard
3965
3966 18
3967 \end_inset 
3968 </cell>
3969 </row>
3970 <row topline="true">
3971 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3972 \begin_inset Text
3973
3974 \layout Standard
3975
3976 OL pitch
3977 \end_inset 
3978 </cell>
3979 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3980 \begin_inset Text
3981
3982 \layout Standard
3983
3984 frame
3985 \end_inset 
3986 </cell>
3987 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3988 \begin_inset Text
3989
3990 \layout Standard
3991
3992 0
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 7
4001 \end_inset 
4002 </cell>
4003 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4004 \begin_inset Text
4005
4006 \layout Standard
4007
4008 7
4009 \end_inset 
4010 </cell>
4011 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4012 \begin_inset Text
4013
4014 \layout Standard
4015
4016 0
4017 \end_inset 
4018 </cell>
4019 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4020 \begin_inset Text
4021
4022 \layout Standard
4023
4024 0
4025 \end_inset 
4026 </cell>
4027 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4028 \begin_inset Text
4029
4030 \layout Standard
4031
4032 0
4033 \end_inset 
4034 </cell>
4035 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
4036 \begin_inset Text
4037
4038 \layout Standard
4039
4040 0
4041 \end_inset 
4042 </cell>
4043 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
4044 \begin_inset Text
4045
4046 \layout Standard
4047
4048 0
4049 \end_inset 
4050 </cell>
4051 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
4052 \begin_inset Text
4053
4054 \layout Standard
4055
4056 7
4057 \end_inset 
4058 </cell>
4059 </row>
4060 <row topline="true">
4061 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4062 \begin_inset Text
4063
4064 \layout Standard
4065
4066 OL pitch gain
4067 \end_inset 
4068 </cell>
4069 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4070 \begin_inset Text
4071
4072 \layout Standard
4073
4074 frame
4075 \end_inset 
4076 </cell>
4077 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4078 \begin_inset Text
4079
4080 \layout Standard
4081
4082 0
4083 \end_inset 
4084 </cell>
4085 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4086 \begin_inset Text
4087
4088 \layout Standard
4089
4090 4
4091 \end_inset 
4092 </cell>
4093 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4094 \begin_inset Text
4095
4096 \layout Standard
4097
4098 0
4099 \end_inset 
4100 </cell>
4101 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4102 \begin_inset Text
4103
4104 \layout Standard
4105
4106 0
4107 \end_inset 
4108 </cell>
4109 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4110 \begin_inset Text
4111
4112 \layout Standard
4113
4114 0
4115 \end_inset 
4116 </cell>
4117 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4118 \begin_inset Text
4119
4120 \layout Standard
4121
4122 0
4123 \end_inset 
4124 </cell>
4125 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
4126 \begin_inset Text
4127
4128 \layout Standard
4129
4130 0
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 0
4139 \end_inset 
4140 </cell>
4141 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
4142 \begin_inset Text
4143
4144 \layout Standard
4145
4146 4
4147 \end_inset 
4148 </cell>
4149 </row>
4150 <row topline="true">
4151 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4152 \begin_inset Text
4153
4154 \layout Standard
4155
4156 OL Exc gain
4157 \end_inset 
4158 </cell>
4159 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4160 \begin_inset Text
4161
4162 \layout Standard
4163
4164 frame
4165 \end_inset 
4166 </cell>
4167 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4168 \begin_inset Text
4169
4170 \layout Standard
4171
4172 0
4173 \end_inset 
4174 </cell>
4175 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4176 \begin_inset Text
4177
4178 \layout Standard
4179
4180 5
4181 \end_inset 
4182 </cell>
4183 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4184 \begin_inset Text
4185
4186 \layout Standard
4187
4188 5
4189 \end_inset 
4190 </cell>
4191 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4192 \begin_inset Text
4193
4194 \layout Standard
4195
4196 5
4197 \end_inset 
4198 </cell>
4199 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4200 \begin_inset Text
4201
4202 \layout Standard
4203
4204 5
4205 \end_inset 
4206 </cell>
4207 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4208 \begin_inset Text
4209
4210 \layout Standard
4211
4212 5
4213 \end_inset 
4214 </cell>
4215 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
4216 \begin_inset Text
4217
4218 \layout Standard
4219
4220 5
4221 \end_inset 
4222 </cell>
4223 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
4224 \begin_inset Text
4225
4226 \layout Standard
4227
4228 5
4229 \end_inset 
4230 </cell>
4231 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
4232 \begin_inset Text
4233
4234 \layout Standard
4235
4236 5
4237 \end_inset 
4238 </cell>
4239 </row>
4240 <row topline="true">
4241 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4242 \begin_inset Text
4243
4244 \layout Standard
4245
4246 Fine pitch
4247 \end_inset 
4248 </cell>
4249 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4250 \begin_inset Text
4251
4252 \layout Standard
4253
4254 sub-frame
4255 \end_inset 
4256 </cell>
4257 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4258 \begin_inset Text
4259
4260 \layout Standard
4261
4262 0
4263 \end_inset 
4264 </cell>
4265 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4266 \begin_inset Text
4267
4268 \layout Standard
4269
4270 0
4271 \end_inset 
4272 </cell>
4273 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4274 \begin_inset Text
4275
4276 \layout Standard
4277
4278 0
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 7
4287 \end_inset 
4288 </cell>
4289 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4290 \begin_inset Text
4291
4292 \layout Standard
4293
4294 7
4295 \end_inset 
4296 </cell>
4297 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4298 \begin_inset Text
4299
4300 \layout Standard
4301
4302 7
4303 \end_inset 
4304 </cell>
4305 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
4306 \begin_inset Text
4307
4308 \layout Standard
4309
4310 7
4311 \end_inset 
4312 </cell>
4313 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
4314 \begin_inset Text
4315
4316 \layout Standard
4317
4318 7
4319 \end_inset 
4320 </cell>
4321 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
4322 \begin_inset Text
4323
4324 \layout Standard
4325
4326 0
4327 \end_inset 
4328 </cell>
4329 </row>
4330 <row topline="true">
4331 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4332 \begin_inset Text
4333
4334 \layout Standard
4335
4336 Pitch gain
4337 \end_inset 
4338 </cell>
4339 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4340 \begin_inset Text
4341
4342 \layout Standard
4343
4344 sub-frame
4345 \end_inset 
4346 </cell>
4347 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4348 \begin_inset Text
4349
4350 \layout Standard
4351
4352 0
4353 \end_inset 
4354 </cell>
4355 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4356 \begin_inset Text
4357
4358 \layout Standard
4359
4360 0
4361 \end_inset 
4362 </cell>
4363 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4364 \begin_inset Text
4365
4366 \layout Standard
4367
4368 5
4369 \end_inset 
4370 </cell>
4371 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4372 \begin_inset Text
4373
4374 \layout Standard
4375
4376 5
4377 \end_inset 
4378 </cell>
4379 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4380 \begin_inset Text
4381
4382 \layout Standard
4383
4384 5
4385 \end_inset 
4386 </cell>
4387 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4388 \begin_inset Text
4389
4390 \layout Standard
4391
4392 7
4393 \end_inset 
4394 </cell>
4395 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
4396 \begin_inset Text
4397
4398 \layout Standard
4399
4400 7
4401 \end_inset 
4402 </cell>
4403 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
4404 \begin_inset Text
4405
4406 \layout Standard
4407
4408 7
4409 \end_inset 
4410 </cell>
4411 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
4412 \begin_inset Text
4413
4414 \layout Standard
4415
4416 0
4417 \end_inset 
4418 </cell>
4419 </row>
4420 <row topline="true">
4421 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4422 \begin_inset Text
4423
4424 \layout Standard
4425
4426 Innovation gain
4427 \end_inset 
4428 </cell>
4429 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4430 \begin_inset Text
4431
4432 \layout Standard
4433
4434 sub-frame
4435 \end_inset 
4436 </cell>
4437 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4438 \begin_inset Text
4439
4440 \layout Standard
4441
4442 0
4443 \end_inset 
4444 </cell>
4445 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4446 \begin_inset Text
4447
4448 \layout Standard
4449
4450 1
4451 \end_inset 
4452 </cell>
4453 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4454 \begin_inset Text
4455
4456 \layout Standard
4457
4458 0
4459 \end_inset 
4460 </cell>
4461 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4462 \begin_inset Text
4463
4464 \layout Standard
4465
4466 1
4467 \end_inset 
4468 </cell>
4469 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4470 \begin_inset Text
4471
4472 \layout Standard
4473
4474 1
4475 \end_inset 
4476 </cell>
4477 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4478 \begin_inset Text
4479
4480 \layout Standard
4481
4482 3
4483 \end_inset 
4484 </cell>
4485 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
4486 \begin_inset Text
4487
4488 \layout Standard
4489
4490 3
4491 \end_inset 
4492 </cell>
4493 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
4494 \begin_inset Text
4495
4496 \layout Standard
4497
4498 3
4499 \end_inset 
4500 </cell>
4501 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
4502 \begin_inset Text
4503
4504 \layout Standard
4505
4506 0
4507 \end_inset 
4508 </cell>
4509 </row>
4510 <row topline="true" bottomline="true">
4511 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4512 \begin_inset Text
4513
4514 \layout Standard
4515
4516 Innovation VQ
4517 \end_inset 
4518 </cell>
4519 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4520 \begin_inset Text
4521
4522 \layout Standard
4523
4524 sub-frame
4525 \end_inset 
4526 </cell>
4527 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4528 \begin_inset Text
4529
4530 \layout Standard
4531
4532 0
4533 \end_inset 
4534 </cell>
4535 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4536 \begin_inset Text
4537
4538 \layout Standard
4539
4540 0
4541 \end_inset 
4542 </cell>
4543 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4544 \begin_inset Text
4545
4546 \layout Standard
4547
4548 16
4549 \end_inset 
4550 </cell>
4551 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4552 \begin_inset Text
4553
4554 \layout Standard
4555
4556 20
4557 \end_inset 
4558 </cell>
4559 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4560 \begin_inset Text
4561
4562 \layout Standard
4563
4564 35
4565 \end_inset 
4566 </cell>
4567 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4568 \begin_inset Text
4569
4570 \layout Standard
4571
4572 48
4573 \end_inset 
4574 </cell>
4575 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
4576 \begin_inset Text
4577
4578 \layout Standard
4579
4580 64
4581 \end_inset 
4582 </cell>
4583 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
4584 \begin_inset Text
4585
4586 \layout Standard
4587
4588 96
4589 \end_inset 
4590 </cell>
4591 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
4592 \begin_inset Text
4593
4594 \layout Standard
4595
4596 10
4597 \end_inset 
4598 </cell>
4599 </row>
4600 <row topline="true" bottomline="true">
4601 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4602 \begin_inset Text
4603
4604 \layout Standard
4605
4606 Total
4607 \end_inset 
4608 </cell>
4609 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4610 \begin_inset Text
4611
4612 \layout Standard
4613
4614 frame
4615 \end_inset 
4616 </cell>
4617 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4618 \begin_inset Text
4619
4620 \layout Standard
4621
4622 5
4623 \end_inset 
4624 </cell>
4625 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4626 \begin_inset Text
4627
4628 \layout Standard
4629
4630 43
4631 \end_inset 
4632 </cell>
4633 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4634 \begin_inset Text
4635
4636 \layout Standard
4637
4638 119
4639 \end_inset 
4640 </cell>
4641 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4642 \begin_inset Text
4643
4644 \layout Standard
4645
4646 160
4647 \end_inset 
4648 </cell>
4649 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4650 \begin_inset Text
4651
4652 \layout Standard
4653
4654 220
4655 \end_inset 
4656 </cell>
4657 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4658 \begin_inset Text
4659
4660 \layout Standard
4661
4662 300
4663 \end_inset 
4664 </cell>
4665 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
4666 \begin_inset Text
4667
4668 \layout Standard
4669
4670 364
4671 \end_inset 
4672 </cell>
4673 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
4674 \begin_inset Text
4675
4676 \layout Standard
4677
4678 492
4679 \end_inset 
4680 </cell>
4681 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
4682 \begin_inset Text
4683
4684 \layout Standard
4685
4686 79
4687 \end_inset 
4688 </cell>
4689 </row>
4690 </lyxtabular>
4691
4692 \end_inset 
4693
4694
4695 \layout Caption
4696
4697 Bit allocation for narrowband modes
4698 \begin_inset LatexCommand \label{cap:bits-narrowband}
4699
4700 \end_inset 
4701
4702
4703 \end_inset 
4704
4705
4706 \layout Standard
4707
4708 So far, no MOS (Mean Opinion Score
4709 \begin_inset LatexCommand \index{mean opinion score}
4710
4711 \end_inset 
4712
4713 ) subjective evaluation has been performed for Speex.
4714  In order to give an idea of the quality achivable with it, table 
4715 \begin_inset LatexCommand \ref{cap:quality_vs_bps}
4716
4717 \end_inset 
4718
4719  presents my own subjective opinion on it.
4720  It sould be noted that different people will perceive the quality differently
4721  and that the person that designed the codec often has a bias (one way or
4722  another) when it comes to subjective evaluation.
4723  Last thing, it should be noted that for most codecs (including Speex) encoding
4724  quality sometimes varies depending on the input.
4725  Note that the complexity is only approximate (within 0.5 mflops and using
4726  the lowest complexity setting).
4727  Decoding requires approximately 0.5 mflops
4728 \begin_inset LatexCommand \index{complexity}
4729
4730 \end_inset 
4731
4732  in most modes (1 mflops with perceptual enhancement).
4733 \layout Standard
4734
4735
4736 \begin_inset Float table
4737 placement h
4738 wide true
4739 collapsed false
4740
4741 \layout Standard
4742
4743
4744 \begin_inset  Tabular
4745 <lyxtabular version="3" rows="17" columns="4">
4746 <features>
4747 <column alignment="center" valignment="top" leftline="true" width="0pt">
4748 <column alignment="center" valignment="top" leftline="true" width="0pt">
4749 <column alignment="center" valignment="top" leftline="true" width="0pt">
4750 <column alignment="center" valignment="top" leftline="true" rightline="true" width="0pt">
4751 <row topline="true" bottomline="true">
4752 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4753 \begin_inset Text
4754
4755 \layout Standard
4756
4757 Mode
4758 \end_inset 
4759 </cell>
4760 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4761 \begin_inset Text
4762
4763 \layout Standard
4764
4765 Bit-rate
4766 \begin_inset LatexCommand \index{bit-rate}
4767
4768 \end_inset 
4769
4770  (bps)
4771 \end_inset 
4772 </cell>
4773 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4774 \begin_inset Text
4775
4776 \layout Standard
4777
4778 mflops
4779 \begin_inset LatexCommand \index{complexity}
4780
4781 \end_inset 
4782
4783
4784 \end_inset 
4785 </cell>
4786 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
4787 \begin_inset Text
4788
4789 \layout Standard
4790
4791 Quality/description
4792 \end_inset 
4793 </cell>
4794 </row>
4795 <row topline="true">
4796 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4797 \begin_inset Text
4798
4799 \layout Standard
4800
4801 0
4802 \end_inset 
4803 </cell>
4804 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4805 \begin_inset Text
4806
4807 \layout Standard
4808
4809 250
4810 \end_inset 
4811 </cell>
4812 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4813 \begin_inset Text
4814
4815 \layout Standard
4816
4817 N/A
4818 \end_inset 
4819 </cell>
4820 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
4821 \begin_inset Text
4822
4823 \layout Standard
4824
4825 No transmission (DTX)
4826 \end_inset 
4827 </cell>
4828 </row>
4829 <row topline="true">
4830 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4831 \begin_inset Text
4832
4833 \layout Standard
4834
4835 1
4836 \end_inset 
4837 </cell>
4838 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4839 \begin_inset Text
4840
4841 \layout Standard
4842
4843 2,150
4844 \end_inset 
4845 </cell>
4846 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4847 \begin_inset Text
4848
4849 \layout Standard
4850
4851 6
4852 \end_inset 
4853 </cell>
4854 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
4855 \begin_inset Text
4856
4857 \layout Standard
4858
4859 Vocoder (mostly for comfort noise)
4860 \end_inset 
4861 </cell>
4862 </row>
4863 <row topline="true">
4864 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4865 \begin_inset Text
4866
4867 \layout Standard
4868
4869 2
4870 \end_inset 
4871 </cell>
4872 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4873 \begin_inset Text
4874
4875 \layout Standard
4876
4877 5,950
4878 \end_inset 
4879 </cell>
4880 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4881 \begin_inset Text
4882
4883 \layout Standard
4884
4885 9
4886 \end_inset 
4887 </cell>
4888 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
4889 \begin_inset Text
4890
4891 \layout Standard
4892
4893 Very noticeable artifacts/noise, good intelligibility
4894 \end_inset 
4895 </cell>
4896 </row>
4897 <row topline="true">
4898 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4899 \begin_inset Text
4900
4901 \layout Standard
4902
4903 3
4904 \end_inset 
4905 </cell>
4906 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4907 \begin_inset Text
4908
4909 \layout Standard
4910
4911 8,000
4912 \end_inset 
4913 </cell>
4914 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4915 \begin_inset Text
4916
4917 \layout Standard
4918
4919 10
4920 \end_inset 
4921 </cell>
4922 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
4923 \begin_inset Text
4924
4925 \layout Standard
4926
4927 Artifacts/noise sometimes noticeable
4928 \end_inset 
4929 </cell>
4930 </row>
4931 <row topline="true">
4932 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4933 \begin_inset Text
4934
4935 \layout Standard
4936
4937 4
4938 \end_inset 
4939 </cell>
4940 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4941 \begin_inset Text
4942
4943 \layout Standard
4944
4945 11,000
4946 \end_inset 
4947 </cell>
4948 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4949 \begin_inset Text
4950
4951 \layout Standard
4952
4953 14
4954 \end_inset 
4955 </cell>
4956 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
4957 \begin_inset Text
4958
4959 \layout Standard
4960
4961 Artifacts usually noticeable only with headphones
4962 \end_inset 
4963 </cell>
4964 </row>
4965 <row topline="true">
4966 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4967 \begin_inset Text
4968
4969 \layout Standard
4970
4971 5
4972 \end_inset 
4973 </cell>
4974 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4975 \begin_inset Text
4976
4977 \layout Standard
4978
4979 15,000
4980 \end_inset 
4981 </cell>
4982 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4983 \begin_inset Text
4984
4985 \layout Standard
4986
4987 11
4988 \end_inset 
4989 </cell>
4990 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
4991 \begin_inset Text
4992
4993 \layout Standard
4994
4995 Need good headphones to tell the difference
4996 \end_inset 
4997 </cell>
4998 </row>
4999 <row topline="true">
5000 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5001 \begin_inset Text
5002
5003 \layout Standard
5004
5005 6
5006 \end_inset 
5007 </cell>
5008 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5009 \begin_inset Text
5010
5011 \layout Standard
5012
5013 18,200
5014 \end_inset 
5015 </cell>
5016 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5017 \begin_inset Text
5018
5019 \layout Standard
5020
5021 17.5
5022 \end_inset 
5023 </cell>
5024 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
5025 \begin_inset Text
5026
5027 \layout Standard
5028
5029 Hard to tell the difference even with good headphones
5030 \end_inset 
5031 </cell>
5032 </row>
5033 <row topline="true">
5034 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5035 \begin_inset Text
5036
5037 \layout Standard
5038
5039 7
5040 \end_inset 
5041 </cell>
5042 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5043 \begin_inset Text
5044
5045 \layout Standard
5046
5047 24,600
5048 \end_inset 
5049 </cell>
5050 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5051 \begin_inset Text
5052
5053 \layout Standard
5054
5055 14.5
5056 \end_inset 
5057 </cell>
5058 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
5059 \begin_inset Text
5060
5061 \layout Standard
5062
5063 Completely transparent for voice, good quality music
5064 \end_inset 
5065 </cell>
5066 </row>
5067 <row topline="true">
5068 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5069 \begin_inset Text
5070
5071 \layout Standard
5072
5073 8
5074 \end_inset 
5075 </cell>
5076 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5077 \begin_inset Text
5078
5079 \layout Standard
5080
5081 3,950
5082 \end_inset 
5083 </cell>
5084 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5085 \begin_inset Text
5086
5087 \layout Standard
5088
5089 10.5
5090 \end_inset 
5091 </cell>
5092 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
5093 \begin_inset Text
5094
5095 \layout Standard
5096
5097 Very noticeable artifacts/noise, good intelligibility
5098 \end_inset 
5099 </cell>
5100 </row>
5101 <row topline="true">
5102 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5103 \begin_inset Text
5104
5105 \layout Standard
5106
5107 9
5108 \end_inset 
5109 </cell>
5110 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5111 \begin_inset Text
5112
5113 \layout Standard
5114
5115 N/A
5116 \end_inset 
5117 </cell>
5118 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5119 \begin_inset Text
5120
5121 \layout Standard
5122
5123 N/A
5124 \end_inset 
5125 </cell>
5126 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
5127 \begin_inset Text
5128
5129 \layout Standard
5130
5131 reserved
5132 \end_inset 
5133 </cell>
5134 </row>
5135 <row topline="true">
5136 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5137 \begin_inset Text
5138
5139 \layout Standard
5140
5141 10
5142 \end_inset 
5143 </cell>
5144 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5145 \begin_inset Text
5146
5147 \layout Standard
5148
5149 N/A
5150 \end_inset 
5151 </cell>
5152 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5153 \begin_inset Text
5154
5155 \layout Standard
5156
5157 N/A
5158 \end_inset 
5159 </cell>
5160 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
5161 \begin_inset Text
5162
5163 \layout Standard
5164
5165 reserved
5166 \end_inset 
5167 </cell>
5168 </row>
5169 <row topline="true">
5170 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5171 \begin_inset Text
5172
5173 \layout Standard
5174
5175 11
5176 \end_inset 
5177 </cell>
5178 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5179 \begin_inset Text
5180
5181 \layout Standard
5182
5183 N/A
5184 \end_inset 
5185 </cell>
5186 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5187 \begin_inset Text
5188
5189 \layout Standard
5190
5191 N/A
5192 \end_inset 
5193 </cell>
5194 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
5195 \begin_inset Text
5196
5197 \layout Standard
5198
5199 reserved
5200 \end_inset 
5201 </cell>
5202 </row>
5203 <row topline="true">
5204 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5205 \begin_inset Text
5206
5207 \layout Standard
5208
5209 12
5210 \end_inset 
5211 </cell>
5212 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5213 \begin_inset Text
5214
5215 \layout Standard
5216
5217 N/A
5218 \end_inset 
5219 </cell>
5220 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5221 \begin_inset Text
5222
5223 \layout Standard
5224
5225 N/A
5226 \end_inset 
5227 </cell>
5228 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
5229 \begin_inset Text
5230
5231 \layout Standard
5232
5233 reserved
5234 \end_inset 
5235 </cell>
5236 </row>
5237 <row topline="true">
5238 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5239 \begin_inset Text
5240
5241 \layout Standard
5242
5243 13
5244 \end_inset 
5245 </cell>
5246 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5247 \begin_inset Text
5248
5249 \layout Standard
5250
5251 N/A
5252 \end_inset 
5253 </cell>
5254 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5255 \begin_inset Text
5256
5257 \layout Standard
5258
5259 N/A
5260 \end_inset 
5261 </cell>
5262 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
5263 \begin_inset Text
5264
5265 \layout Standard
5266
5267 Application-defined, interpreted by callback or skipped
5268 \end_inset 
5269 </cell>
5270 </row>
5271 <row topline="true">
5272 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5273 \begin_inset Text
5274
5275 \layout Standard
5276
5277 14
5278 \end_inset 
5279 </cell>
5280 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5281 \begin_inset Text
5282
5283 \layout Standard
5284
5285 N/A
5286 \end_inset 
5287 </cell>
5288 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5289 \begin_inset Text
5290
5291 \layout Standard
5292
5293 N/A
5294 \end_inset 
5295 </cell>
5296 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
5297 \begin_inset Text
5298
5299 \layout Standard
5300
5301 Speex in-band signaling
5302 \end_inset 
5303 </cell>
5304 </row>
5305 <row topline="true" bottomline="true">
5306 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5307 \begin_inset Text
5308
5309 \layout Standard
5310
5311 15
5312 \end_inset 
5313 </cell>
5314 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5315 \begin_inset Text
5316
5317 \layout Standard
5318
5319 N/A
5320 \end_inset 
5321 </cell>
5322 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5323 \begin_inset Text
5324
5325 \layout Standard
5326
5327 N/A
5328 \end_inset 
5329 </cell>
5330 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
5331 \begin_inset Text
5332
5333 \layout Standard
5334
5335 Terminator code
5336 \end_inset 
5337 </cell>
5338 </row>
5339 </lyxtabular>
5340
5341 \end_inset 
5342
5343
5344 \layout Caption
5345
5346 Quality versus bit-rate
5347 \begin_inset LatexCommand \label{cap:quality_vs_bps}
5348
5349 \end_inset 
5350
5351
5352 \end_inset 
5353
5354
5355 \layout Subsection
5356
5357 Perceptual enhancement
5358 \begin_inset LatexCommand \index{perceptual enhancement}
5359
5360 \end_inset 
5361
5362
5363 \layout Standard
5364
5365 This part of the codec only applies to the decoder and can even be changed
5366  without affecting inter-operability.
5367  For that reason, the implementation provided and described here should
5368  only be considered as a reference implementation.
5369  The enhancement system is divided into two parts.
5370  First, the synthesis filter 
5371 \begin_inset Formula $S(z)=1/A(z)$
5372 \end_inset 
5373
5374  is replaced by an enhanced filter
5375 \begin_inset Formula \[
5376 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)}\]
5377
5378 \end_inset 
5379
5380 where 
5381 \begin_inset Formula $a_{1}$
5382 \end_inset 
5383
5384  and 
5385 \begin_inset Formula $a_{2}$
5386 \end_inset 
5387
5388  depend on the mode in use and 
5389 \begin_inset Formula $a_{3}=\frac{1}{r}\left(1-\frac{1-ra_{1}}{1-ra_{2}}\right)$
5390 \end_inset 
5391
5392  with 
5393 \begin_inset Formula $r=.9$
5394 \end_inset 
5395
5396 .
5397  The second part of the enhancement consists of using a comb filter to enhance
5398  the pitch in the excitation domain.
5399  
5400 \layout Section
5401 \pagebreak_top 
5402 Speex wideband mode (sub-band CELP)
5403 \begin_inset LatexCommand \index{wideband}
5404
5405 \end_inset 
5406
5407
5408 \begin_inset LatexCommand \label{sec:Speex-wideband-mode}
5409
5410 \end_inset 
5411
5412
5413 \layout Standard
5414
5415 For wideband, the Speex approach uses a 
5416 \emph on&nb