minor changes
[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 Subsection
1323
1324 Codec Options (speex_*_ctl)
1325 \begin_inset LatexCommand \label{sub:Codec-Options}
1326
1327 \end_inset 
1328
1329
1330 \layout Standard
1331
1332 The Speex encoder and decoder support many options and requests that can
1333  be accessed through the 
1334 \emph on 
1335 speex_encoder_ctl
1336 \emph default 
1337  and 
1338 \emph on 
1339 speex_decoder_ctl
1340 \emph default 
1341  functions.
1342  These functions are similar to the 
1343 \emph on 
1344 ioctl
1345 \emph default 
1346  system call and their prototypes are:
1347 \layout LyX-Code
1348
1349 void speex_encoder_ctl(void *encoder, int request, void *ptr);
1350 \layout LyX-Code
1351
1352 void speex_decoder_ctl(void *encoder, int request, void *ptr);
1353 \layout Standard
1354
1355 The different values of request allowed are (note that some only apply to
1356  the encoder or the decoder):
1357 \layout Description
1358
1359 SPEEX_SET_ENH** Set perceptual enhancer
1360 \begin_inset LatexCommand \index{perceptual enhancement}
1361
1362 \end_inset 
1363
1364  to on (1) or off (0) (integer)
1365 \layout Description
1366
1367 SPEEX_GET_ENH** Get perceptual enhancer status (integer)
1368 \layout Description
1369
1370 SPEEX_GET_FRAME_SIZE Get the frame size used for the current mode (integer)
1371 \layout Description
1372
1373 SPEEX_SET_QUALITY* Set the encoder speech quality (integer 0 to 10)
1374 \layout Description
1375
1376 SPEEX_GET_QUALITY* Get the current encoder speech quality (integer 0 to
1377  10)
1378 \layout Description
1379
1380 SPEEX_SET_MODE*
1381 \begin_inset Formula $\dagger$
1382 \end_inset 
1383
1384
1385 \layout Description
1386
1387 SPEEX_GET_MODE*
1388 \begin_inset Formula $\dagger$
1389 \end_inset 
1390
1391
1392 \layout Description
1393
1394 SPEEX_SET_LOW_MODE*
1395 \begin_inset Formula $\dagger$
1396 \end_inset 
1397
1398
1399 \layout Description
1400
1401 SPEEX_GET_LOW_MODE*
1402 \begin_inset Formula $\dagger$
1403 \end_inset 
1404
1405
1406 \layout Description
1407
1408 SPEEX_SET_HIGH_MODE*
1409 \begin_inset Formula $\dagger$
1410 \end_inset 
1411
1412
1413 \layout Description
1414
1415 SPEEX_GET_HIGH_MODE*
1416 \begin_inset Formula $\dagger$
1417 \end_inset 
1418
1419
1420 \layout Description
1421
1422 SPEEX_SET_VBR* Set variable bit-rate (VBR) to on (1) or off (0) (integer)
1423 \layout Description
1424
1425 SPEEX_GET_VBR* Get variable bit-rate
1426 \begin_inset LatexCommand \index{variable bit-rate}
1427
1428 \end_inset 
1429
1430  (VBR) status (integer)
1431 \layout Description
1432
1433 SPEEX_SET_VBR_QUALITY* Set the encoder VBR speech quality (float 0 to 10)
1434 \layout Description
1435
1436 SPEEX_GET_VBR_QUALITY* Get the current encoder VBR speech quality (float
1437  0 to 10)
1438 \layout Description
1439
1440 SPEEX_SET_COMPLEXITY* Set the CPU resources allowed for the encoder (integer
1441  1 to 10)
1442 \layout Description
1443
1444 SPEEX_GET_COMPLEXITY* Get the CPU resources allowed for the encoder (integer
1445  1 to 10)
1446 \layout Description
1447
1448 SPEEX_SET_BITRATE* Set the bit-rate to use to the closest value not exceeding
1449  the parameter (integer in bps)
1450 \layout Description
1451
1452 SPEEX_GET_BITRATE Get the current bit-rate in use (integer in bps)
1453 \layout Description
1454
1455 SPEEX_SET_SAMPLING_RATE Set real sampling rate (integer in Hz)
1456 \layout Description
1457
1458 SPEEX_GET_SAMPLING_RATE Get real sampling rate (integer in Hz)
1459 \layout Description
1460
1461 SPEEX_RESET_STATE Reset the encoder/decoder state to its original state
1462  (zeros all memories)
1463 \layout Description
1464
1465 SPEEX_SET_VAD* Set voice activity detection
1466 \begin_inset LatexCommand \index{voice activity detection}
1467
1468 \end_inset 
1469
1470  (VAD) to on (1) or off (0) (integer)
1471 \layout Description
1472
1473 SPEEX_GET_VAD* Get voice activity detection (VAD) status (integer)
1474 \layout Description
1475
1476 SPEEX_SET_DTX* Set discontinuous transmission
1477 \begin_inset LatexCommand \index{discontinuous transmission}
1478
1479 \end_inset 
1480
1481  (DTX) to on (1) or off (0) (integer)
1482 \layout Description
1483
1484 SPEEX_GET_DTX* Get discontinuous transmission (DTX) status (integer)
1485 \layout Description
1486
1487 SPEEX_SET_ABR* Set average bit-rate
1488 \begin_inset LatexCommand \index{average bit-rate}
1489
1490 \end_inset 
1491
1492  (ABR) to a value n in bits per second (integer in bps)
1493 \layout Description
1494
1495 SPEEX_GET_ABR* Get average bit-rate (ABR) setting (integer in bps)
1496 \layout Description
1497
1498 SPEEX_SET_PLC_TUNING* Tell the encoder to optimize encoding for a certain
1499  percentage of packet loss (integer in percent)
1500 \layout Description
1501
1502 SPEEX_GET_PLC_TUNING* Get the current tuning of the encoder for PLC (integer
1503  in percent)
1504 \layout Description
1505
1506 * applies only to the encoder
1507 \layout Description
1508
1509 ** applies only to the decoder
1510 \layout Description
1511
1512
1513 \begin_inset Formula $\dagger$
1514 \end_inset 
1515
1516  normally only used internally
1517 \layout Subsection
1518
1519 Mode queries
1520 \begin_inset LatexCommand \label{sub:Mode-queries}
1521
1522 \end_inset 
1523
1524
1525 \layout Standard
1526
1527 Speex modes have a query system similar to the speex_encoder_ctl and speex_decod
1528 er_ctl calls.
1529  Since modes are read-only, it is only possible to get information about
1530  a particular mode.
1531  The function used to do that is:
1532 \layout LyX-Code
1533
1534 void speex_mode_query(SpeexMode *mode, int request, void *ptr);
1535 \layout Standard
1536
1537 The admissible values for request are (unless otherwise note, the values
1538  are returned through 
1539 \emph on 
1540 ptr
1541 \emph default 
1542 ):
1543 \layout Description
1544
1545 SPEEX_MODE_FRAME_SIZE Get the frame size (in samples) for the mode
1546 \layout Description
1547
1548 SPEEX_SUBMODE_BITRATE Get the bit-rate for a submode number specified through
1549  
1550 \emph on 
1551 ptr
1552 \emph default 
1553  (integer in bps).
1554  
1555 \layout Subsection
1556
1557 Preprocessor options
1558 \begin_inset LatexCommand \label{sub:Preprocessor-options}
1559
1560 \end_inset 
1561
1562
1563 \layout Description
1564
1565 SPEEX_PREPROCESS_SET_DENOISE Turns denoising on(1) or off(2) (integer)
1566 \layout Description
1567
1568 SPEEX_PREPROCESS_GET_DENOISE Get denoising status (integer)
1569 \layout Description
1570
1571 SPEEX_PREPROCESS_SET_AGC Turns automatic gain control (AGC) on(1) or off(2)
1572  (integer)
1573 \layout Description
1574
1575 SPEEX_PREPROCESS_GET_AGC Get AGC status (integer)
1576 \layout Description
1577
1578 SPEEX_PREPROCESS_SET_VAD Turns voice activity detector (VAD) on(1) or off(2)
1579  (integer)
1580 \layout Description
1581
1582 SPEEX_PREPROCESS_GET_VAD Get VAD status (integer)
1583 \layout Description
1584
1585 SPEEX_PREPROCESS_SET_AGC_LEVEL
1586 \layout Description
1587
1588 SPEEX_PREPROCESS_GET_AGC_LEVEL
1589 \layout Description
1590
1591 SPEEX_PREPROCESS_SET_DEREVERB Turns reverberation removal on(1) or off(2)
1592  (integer)
1593 \layout Description
1594
1595 SPEEX_PREPROCESS_GET_DEREVERB Get reverberation removal status (integer)
1596 \layout Description
1597
1598 SPEEX_PREPROCESS_SET_DEREVERB_LEVEL
1599 \layout Description
1600
1601 SPEEX_PREPROCESS_GET_DEREVERB_LEVEL
1602 \layout Description
1603
1604 SPEEX_PREPROCESS_SET_DEREVERB_DECAY
1605 \layout Description
1606
1607 SPEEX_PREPROCESS_GET_DEREVERB_DECAY
1608 \layout Subsection
1609
1610 Packing and in-band signalling
1611 \begin_inset LatexCommand \index{in-band signalling}
1612
1613 \end_inset 
1614
1615
1616 \layout Standard
1617
1618 Sometimes it is desirable to pack more than one frame per packet (or other
1619  basic unit of storage).
1620  The proper way to do it is to call speex_encode 
1621 \begin_inset Formula $N$
1622 \end_inset 
1623
1624  times before writing the stream with speex_bits_write.
1625  In cases where the number of frames is not determined by an out-of-band
1626  mechanism, it is possible to include a terminator code.
1627  That terminator consists of the code 15 (decimal) encoded with 5 bits,
1628  as shown in Table 
1629 \begin_inset LatexCommand \ref{cap:quality_vs_bps}
1630
1631 \end_inset 
1632
1633 .
1634  Note that as of version 1.0.2, calling speex_bits_write automatically inserts
1635  the terminator so as to fill the last byte.
1636  This doesn't involves any overhead and makes sure Speex can always detect
1637  when there is no more frame in a packet.
1638 \layout Standard
1639
1640 It is also possible to send in-band 
1641 \begin_inset Quotes eld
1642 \end_inset 
1643
1644 messages
1645 \begin_inset Quotes erd
1646 \end_inset 
1647
1648  to the other side.
1649  All these messages are encoded as 
1650 \begin_inset Quotes eld
1651 \end_inset 
1652
1653 pseudo-frames
1654 \begin_inset Quotes erd
1655 \end_inset 
1656
1657  of mode 14 which contain a 4-bit message type code, followed by the message.
1658  Table 
1659 \begin_inset LatexCommand \ref{cap:In-band-signalling-codes}
1660
1661 \end_inset 
1662
1663  lists the available codes, their meaning and the size of the message that
1664  follows.
1665  Most of these messages are requests that are sent to the encoder or decoder
1666  on the other end, which is free to comply or ignore them.
1667  By default, all in-band messages are ignored.
1668 \layout Standard
1669
1670
1671 \begin_inset Float table
1672 placement htbp
1673 wide false
1674 collapsed false
1675
1676 \layout Standard
1677
1678
1679 \begin_inset  Tabular
1680 <lyxtabular version="3" rows="17" columns="3">
1681 <features>
1682 <column alignment="center" valignment="top" leftline="true" width="0pt">
1683 <column alignment="center" valignment="top" leftline="true" width="0pt">
1684 <column alignment="center" valignment="top" leftline="true" rightline="true" width="0pt">
1685 <row topline="true" bottomline="true">
1686 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1687 \begin_inset Text
1688
1689 \layout Standard
1690
1691 Code
1692 \end_inset 
1693 </cell>
1694 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1695 \begin_inset Text
1696
1697 \layout Standard
1698
1699 Size (bits)
1700 \end_inset 
1701 </cell>
1702 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
1703 \begin_inset Text
1704
1705 \layout Standard
1706
1707 Content
1708 \end_inset 
1709 </cell>
1710 </row>
1711 <row topline="true">
1712 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1713 \begin_inset Text
1714
1715 \layout Standard
1716
1717 0
1718 \end_inset 
1719 </cell>
1720 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1721 \begin_inset Text
1722
1723 \layout Standard
1724
1725 1
1726 \end_inset 
1727 </cell>
1728 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
1729 \begin_inset Text
1730
1731 \layout Standard
1732
1733 Asks decoder to set perceptual enhancement off (0) or on(1)
1734 \end_inset 
1735 </cell>
1736 </row>
1737 <row topline="true">
1738 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1739 \begin_inset Text
1740
1741 \layout Standard
1742
1743 1
1744 \end_inset 
1745 </cell>
1746 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1747 \begin_inset Text
1748
1749 \layout Standard
1750
1751 1
1752 \end_inset 
1753 </cell>
1754 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
1755 \begin_inset Text
1756
1757 \layout Standard
1758
1759 Asks (if 1) the encoder to be less 
1760 \begin_inset Quotes eld
1761 \end_inset 
1762
1763 agressive
1764 \begin_inset Quotes erd
1765 \end_inset 
1766
1767  due to high packet loss
1768 \end_inset 
1769 </cell>
1770 </row>
1771 <row topline="true">
1772 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1773 \begin_inset Text
1774
1775 \layout Standard
1776
1777 2
1778 \end_inset 
1779 </cell>
1780 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1781 \begin_inset Text
1782
1783 \layout Standard
1784
1785 4
1786 \end_inset 
1787 </cell>
1788 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
1789 \begin_inset Text
1790
1791 \layout Standard
1792
1793 Asks encoder to switch to mode N
1794 \end_inset 
1795 </cell>
1796 </row>
1797 <row topline="true">
1798 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1799 \begin_inset Text
1800
1801 \layout Standard
1802
1803 3
1804 \end_inset 
1805 </cell>
1806 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1807 \begin_inset Text
1808
1809 \layout Standard
1810
1811 4
1812 \end_inset 
1813 </cell>
1814 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
1815 \begin_inset Text
1816
1817 \layout Standard
1818
1819 Asks encoder to switch to mode N for low-band
1820 \end_inset 
1821 </cell>
1822 </row>
1823 <row topline="true">
1824 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1825 \begin_inset Text
1826
1827 \layout Standard
1828
1829 4
1830 \end_inset 
1831 </cell>
1832 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1833 \begin_inset Text
1834
1835 \layout Standard
1836
1837 4
1838 \end_inset 
1839 </cell>
1840 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
1841 \begin_inset Text
1842
1843 \layout Standard
1844
1845 Asks encoder to switch to mode N for high-band
1846 \end_inset 
1847 </cell>
1848 </row>
1849 <row topline="true">
1850 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1851 \begin_inset Text
1852
1853 \layout Standard
1854
1855 5
1856 \end_inset 
1857 </cell>
1858 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1859 \begin_inset Text
1860
1861 \layout Standard
1862
1863 4
1864 \end_inset 
1865 </cell>
1866 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
1867 \begin_inset Text
1868
1869 \layout Standard
1870
1871 Asks encoder to switch to quality N for VBR
1872 \end_inset 
1873 </cell>
1874 </row>
1875 <row topline="true">
1876 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1877 \begin_inset Text
1878
1879 \layout Standard
1880
1881 6
1882 \end_inset 
1883 </cell>
1884 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1885 \begin_inset Text
1886
1887 \layout Standard
1888
1889 4
1890 \end_inset 
1891 </cell>
1892 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
1893 \begin_inset Text
1894
1895 \layout Standard
1896
1897 Request acknowloedge (0=no, 1=all, 2=only for in-band data)
1898 \end_inset 
1899 </cell>
1900 </row>
1901 <row topline="true">
1902 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1903 \begin_inset Text
1904
1905 \layout Standard
1906
1907 7
1908 \end_inset 
1909 </cell>
1910 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1911 \begin_inset Text
1912
1913 \layout Standard
1914
1915 4
1916 \end_inset 
1917 </cell>
1918 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
1919 \begin_inset Text
1920
1921 \layout Standard
1922
1923 Asks encoder to set CBR (0), VAD(1), DTX(3), VBR(5), VBR+DTX(7)
1924 \end_inset 
1925 </cell>
1926 </row>
1927 <row topline="true">
1928 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1929 \begin_inset Text
1930
1931 \layout Standard
1932
1933 8
1934 \end_inset 
1935 </cell>
1936 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1937 \begin_inset Text
1938
1939 \layout Standard
1940
1941 8
1942 \end_inset 
1943 </cell>
1944 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
1945 \begin_inset Text
1946
1947 \layout Standard
1948
1949 Transmit (8-bit) character to the other end
1950 \end_inset 
1951 </cell>
1952 </row>
1953 <row topline="true">
1954 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1955 \begin_inset Text
1956
1957 \layout Standard
1958
1959 9
1960 \end_inset 
1961 </cell>
1962 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1963 \begin_inset Text
1964
1965 \layout Standard
1966
1967 8
1968 \end_inset 
1969 </cell>
1970 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
1971 \begin_inset Text
1972
1973 \layout Standard
1974
1975 Intensity stereo information
1976 \end_inset 
1977 </cell>
1978 </row>
1979 <row topline="true">
1980 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1981 \begin_inset Text
1982
1983 \layout Standard
1984
1985 10
1986 \end_inset 
1987 </cell>
1988 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1989 \begin_inset Text
1990
1991 \layout Standard
1992
1993 16
1994 \end_inset 
1995 </cell>
1996 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
1997 \begin_inset Text
1998
1999 \layout Standard
2000
2001 Announce maximum bit-rate acceptable (N in bytes/second)
2002 \end_inset 
2003 </cell>
2004 </row>
2005 <row topline="true">
2006 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2007 \begin_inset Text
2008
2009 \layout Standard
2010
2011 11
2012 \end_inset 
2013 </cell>
2014 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2015 \begin_inset Text
2016
2017 \layout Standard
2018
2019 16
2020 \end_inset 
2021 </cell>
2022 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
2023 \begin_inset Text
2024
2025 \layout Standard
2026
2027 reserved
2028 \end_inset 
2029 </cell>
2030 </row>
2031 <row topline="true">
2032 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2033 \begin_inset Text
2034
2035 \layout Standard
2036
2037 12
2038 \end_inset 
2039 </cell>
2040 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2041 \begin_inset Text
2042
2043 \layout Standard
2044
2045 32
2046 \end_inset 
2047 </cell>
2048 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
2049 \begin_inset Text
2050
2051 \layout Standard
2052
2053 Acknowledge receiving packet N
2054 \end_inset 
2055 </cell>
2056 </row>
2057 <row topline="true">
2058 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2059 \begin_inset Text
2060
2061 \layout Standard
2062
2063 13
2064 \end_inset 
2065 </cell>
2066 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2067 \begin_inset Text
2068
2069 \layout Standard
2070
2071 32
2072 \end_inset 
2073 </cell>
2074 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
2075 \begin_inset Text
2076
2077 \layout Standard
2078
2079 reserved
2080 \end_inset 
2081 </cell>
2082 </row>
2083 <row topline="true">
2084 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2085 \begin_inset Text
2086
2087 \layout Standard
2088
2089 14
2090 \end_inset 
2091 </cell>
2092 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2093 \begin_inset Text
2094
2095 \layout Standard
2096
2097 64
2098 \end_inset 
2099 </cell>
2100 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
2101 \begin_inset Text
2102
2103 \layout Standard
2104
2105 reserved
2106 \end_inset 
2107 </cell>
2108 </row>
2109 <row topline="true" bottomline="true">
2110 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2111 \begin_inset Text
2112
2113 \layout Standard
2114
2115 15
2116 \end_inset 
2117 </cell>
2118 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2119 \begin_inset Text
2120
2121 \layout Standard
2122
2123 64
2124 \end_inset 
2125 </cell>
2126 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
2127 \begin_inset Text
2128
2129 \layout Standard
2130
2131 reserved
2132 \end_inset 
2133 </cell>
2134 </row>
2135 </lyxtabular>
2136
2137 \end_inset 
2138
2139
2140 \layout Caption
2141
2142 In-band signalling codes
2143 \begin_inset LatexCommand \label{cap:In-band-signalling-codes}
2144
2145 \end_inset 
2146
2147
2148 \end_inset 
2149
2150
2151 \layout Standard
2152
2153 Finally, applications may define custom in-band messages using mode 13.
2154  The size of the message in bytes is encoded with 5 bits, so that the decoder
2155  can skip it if it doesn't know how to interpret it.
2156 \layout Section
2157 \pagebreak_top 
2158 Formats and standards
2159 \begin_inset LatexCommand \index{standards}
2160
2161 \end_inset 
2162
2163
2164 \begin_inset LatexCommand \label{sec:Formats-and-standards}
2165
2166 \end_inset 
2167
2168
2169 \layout Standard
2170
2171 Speex can encode speech in both narrowband and wideband and provides different
2172  bit-rates.
2173  However, not all features need to be supported by a certain implementation
2174  or device.
2175  In order to be called 
2176 \begin_inset Quotes eld
2177 \end_inset 
2178
2179 Speex compatible
2180 \begin_inset Quotes erd
2181 \end_inset 
2182
2183  (whatever that means), an implementation must implement at least a basic
2184  set of features.
2185 \layout Standard
2186
2187 At the minimum, all narrowband modes of operation MUST be supported at the
2188  decoder.
2189  This includes the decoding of a wideband bit-stream by the narrowband decoder
2190 \begin_inset Foot
2191 collapsed true
2192
2193 \layout Standard
2194
2195 The wideband bit-stream contains an embedded narrowband bit-stream which
2196  can be decoded alone
2197 \end_inset 
2198
2199 .
2200  If present, a wideband decoder MUST be able to decode a narrowband stream,
2201  and MAY either be able to decode all wideband modes or be able to decode
2202  the embedded narrowband part of all modes (which includes ignoring the
2203  high-band bits).
2204 \layout Standard
2205
2206 For encoders, at least one narrowband or wideband mode MUST be supported.
2207  The main reason why all encoding modes do not have to be supported is that
2208  some platforms may not be able to handle the complexity of encoding in
2209  some modes.
2210 \layout Subsection
2211
2212 RTP
2213 \begin_inset LatexCommand \index{RTP}
2214
2215 \end_inset 
2216
2217  Payload Format 
2218 \layout Standard
2219
2220 The RTP payload draft is included in appendix 
2221 \begin_inset LatexCommand \ref{sec:IETF-draft}
2222
2223 \end_inset 
2224
2225  and the latest version is available at 
2226 \begin_inset LatexCommand \url{http://www.speex.org/drafts/latest}
2227
2228 \end_inset 
2229
2230 .
2231  This draft has been sent (2003/02/26) to the Internet Engineering Task
2232  Force (IETF) and will be discussed at the March 18th meeting in San Francisco.
2233  
2234 \layout Subsection
2235
2236 MIME Type
2237 \layout Standard
2238
2239 For now, you should use the MIME type audio/x-speex for Speex-in-Ogg.
2240  We will apply for type 
2241 \family typewriter 
2242 audio/speex
2243 \family default 
2244  in the near future.
2245 \layout Subsection
2246
2247 Ogg
2248 \begin_inset LatexCommand \index{Ogg}
2249
2250 \end_inset 
2251
2252  file format
2253 \layout Standard
2254
2255 Speex bit-streams can be stored in Ogg files.
2256  In this case, the first packet of the Ogg file contains the Speex header
2257  described in table 
2258 \begin_inset LatexCommand \ref{cap:ogg_speex_header}
2259
2260 \end_inset 
2261
2262 .
2263  All integer fields in the headers are stored as little-endian.
2264  The 
2265 \family typewriter 
2266 speex_string
2267 \family default 
2268  field must contain the 
2269 \begin_inset Quotes eld
2270 \end_inset 
2271
2272
2273 \family typewriter 
2274 Speex
2275 \family default 
2276 \SpecialChar ~
2277 \SpecialChar ~
2278 \SpecialChar ~
2279
2280 \begin_inset Quotes erd
2281 \end_inset 
2282
2283  (with 3 trailing spaces), which identifies the bit-stream.
2284  The next field, 
2285 \family typewriter 
2286 speex_version
2287 \family default 
2288  contains the version of Speex that encoded the file.
2289  For now, refer to speex_header.[ch] for more info.
2290  The 
2291 \emph on 
2292 beginning of stream
2293 \emph default 
2294  (
2295 \family typewriter 
2296 b_o_s
2297 \family default 
2298 ) flag is set to 1 for the header.
2299  The header packet has 
2300 \family typewriter 
2301 packetno=0
2302 \family default 
2303  and 
2304 \family typewriter 
2305 granulepos=0
2306 \family default 
2307 .
2308 \layout Standard
2309
2310 The second packet contains the Speex comment header.
2311  The format used is the Vorbis comment format described here: http://www.xiph.org/
2312 ogg/vorbis/doc/v-comment.html .
2313  This packet has 
2314 \family typewriter 
2315 packetno=1
2316 \family default 
2317  and 
2318 \family typewriter 
2319 granulepos=0
2320 \family default 
2321 .
2322 \layout Standard
2323
2324 The third and subsequent packets each contain one or more (number found
2325  in header) Speex frames.
2326  These are identified with 
2327 \family typewriter 
2328 packetno
2329 \family default 
2330  starting from 2 and the 
2331 \family typewriter 
2332 granulepos
2333 \family default 
2334  is the number of the last sample encoded in that packet.
2335  The last of these packets has the 
2336 \emph on 
2337 end of stream
2338 \emph default 
2339  (
2340 \family typewriter 
2341 e_o_s
2342 \family default 
2343 ) flag is set to 1.
2344 \layout Standard
2345
2346
2347 \begin_inset Float table
2348 placement htbp
2349 wide true
2350 collapsed false
2351
2352 \layout Standard
2353
2354
2355 \begin_inset  Tabular
2356 <lyxtabular version="3" rows="16" columns="3">
2357 <features>
2358 <column alignment="center" valignment="top" leftline="true" width="0pt">
2359 <column alignment="center" valignment="top" leftline="true" width="0pt">
2360 <column alignment="center" valignment="top" leftline="true" rightline="true" width="0pt">
2361 <row topline="true" bottomline="true">
2362 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2363 \begin_inset Text
2364
2365 \layout Standard
2366
2367 Field
2368 \end_inset 
2369 </cell>
2370 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2371 \begin_inset Text
2372
2373 \layout Standard
2374
2375 Type
2376 \end_inset 
2377 </cell>
2378 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
2379 \begin_inset Text
2380
2381 \layout Standard
2382
2383 Size
2384 \end_inset 
2385 </cell>
2386 </row>
2387 <row topline="true">
2388 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2389 \begin_inset Text
2390
2391 \layout Standard
2392
2393 speex_string
2394 \end_inset 
2395 </cell>
2396 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2397 \begin_inset Text
2398
2399 \layout Standard
2400
2401 char[]
2402 \end_inset 
2403 </cell>
2404 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
2405 \begin_inset Text
2406
2407 \layout Standard
2408
2409 8
2410 \end_inset 
2411 </cell>
2412 </row>
2413 <row topline="true">
2414 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2415 \begin_inset Text
2416
2417 \layout Standard
2418
2419 speex_version
2420 \end_inset 
2421 </cell>
2422 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2423 \begin_inset Text
2424
2425 \layout Standard
2426
2427 char[]
2428 \end_inset 
2429 </cell>
2430 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
2431 \begin_inset Text
2432
2433 \layout Standard
2434
2435 20
2436 \end_inset 
2437 </cell>
2438 </row>
2439 <row topline="true">
2440 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2441 \begin_inset Text
2442
2443 \layout Standard
2444
2445 speex_version_id
2446 \end_inset 
2447 </cell>
2448 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2449 \begin_inset Text
2450
2451 \layout Standard
2452
2453 int
2454 \end_inset 
2455 </cell>
2456 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
2457 \begin_inset Text
2458
2459 \layout Standard
2460
2461 4
2462 \end_inset 
2463 </cell>
2464 </row>
2465 <row topline="true">
2466 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2467 \begin_inset Text
2468
2469 \layout Standard
2470
2471 header_size
2472 \end_inset 
2473 </cell>
2474 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2475 \begin_inset Text
2476
2477 \layout Standard
2478
2479 int
2480 \end_inset 
2481 </cell>
2482 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
2483 \begin_inset Text
2484
2485 \layout Standard
2486
2487 4
2488 \end_inset 
2489 </cell>
2490 </row>
2491 <row topline="true">
2492 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2493 \begin_inset Text
2494
2495 \layout Standard
2496
2497 rate
2498 \end_inset 
2499 </cell>
2500 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2501 \begin_inset Text
2502
2503 \layout Standard
2504
2505 int
2506 \end_inset 
2507 </cell>
2508 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
2509 \begin_inset Text
2510
2511 \layout Standard
2512
2513 4
2514 \end_inset 
2515 </cell>
2516 </row>
2517 <row topline="true">
2518 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2519 \begin_inset Text
2520
2521 \layout Standard
2522
2523 mode
2524 \end_inset 
2525 </cell>
2526 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2527 \begin_inset Text
2528
2529 \layout Standard
2530
2531 int
2532 \end_inset 
2533 </cell>
2534 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
2535 \begin_inset Text
2536
2537 \layout Standard
2538
2539 4
2540 \end_inset 
2541 </cell>
2542 </row>
2543 <row topline="true">
2544 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2545 \begin_inset Text
2546
2547 \layout Standard
2548
2549 mode_bitstream_version
2550 \end_inset 
2551 </cell>
2552 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2553 \begin_inset Text
2554
2555 \layout Standard
2556
2557 int
2558 \end_inset 
2559 </cell>
2560 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
2561 \begin_inset Text
2562
2563 \layout Standard
2564
2565 4
2566 \end_inset 
2567 </cell>
2568 </row>
2569 <row topline="true">
2570 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2571 \begin_inset Text
2572
2573 \layout Standard
2574
2575 nb_channels
2576 \end_inset 
2577 </cell>
2578 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2579 \begin_inset Text
2580
2581 \layout Standard
2582
2583 int
2584 \end_inset 
2585 </cell>
2586 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
2587 \begin_inset Text
2588
2589 \layout Standard
2590
2591 4
2592 \end_inset 
2593 </cell>
2594 </row>
2595 <row topline="true">
2596 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2597 \begin_inset Text
2598
2599 \layout Standard
2600
2601 bitrate
2602 \end_inset 
2603 </cell>
2604 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2605 \begin_inset Text
2606
2607 \layout Standard
2608
2609 int
2610 \end_inset 
2611 </cell>
2612 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
2613 \begin_inset Text
2614
2615 \layout Standard
2616
2617 4
2618 \end_inset 
2619 </cell>
2620 </row>
2621 <row topline="true">
2622 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2623 \begin_inset Text
2624
2625 \layout Standard
2626
2627 frame_size
2628 \end_inset 
2629 </cell>
2630 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2631 \begin_inset Text
2632
2633 \layout Standard
2634
2635 int
2636 \end_inset 
2637 </cell>
2638 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
2639 \begin_inset Text
2640
2641 \layout Standard
2642
2643 4
2644 \end_inset 
2645 </cell>
2646 </row>
2647 <row topline="true">
2648 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2649 \begin_inset Text
2650
2651 \layout Standard
2652
2653 vbr
2654 \end_inset 
2655 </cell>
2656 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2657 \begin_inset Text
2658
2659 \layout Standard
2660
2661 int
2662 \end_inset 
2663 </cell>
2664 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
2665 \begin_inset Text
2666
2667 \layout Standard
2668
2669 4
2670 \end_inset 
2671 </cell>
2672 </row>
2673 <row topline="true">
2674 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2675 \begin_inset Text
2676
2677 \layout Standard
2678
2679 frames_per_packet
2680 \end_inset 
2681 </cell>
2682 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2683 \begin_inset Text
2684
2685 \layout Standard
2686
2687 int
2688 \end_inset 
2689 </cell>
2690 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
2691 \begin_inset Text
2692
2693 \layout Standard
2694
2695 4
2696 \end_inset 
2697 </cell>
2698 </row>
2699 <row topline="true">
2700 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2701 \begin_inset Text
2702
2703 \layout Standard
2704
2705 extra_headers
2706 \end_inset 
2707 </cell>
2708 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2709 \begin_inset Text
2710
2711 \layout Standard
2712
2713 int
2714 \end_inset 
2715 </cell>
2716 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
2717 \begin_inset Text
2718
2719 \layout Standard
2720
2721 4
2722 \end_inset 
2723 </cell>
2724 </row>
2725 <row topline="true">
2726 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2727 \begin_inset Text
2728
2729 \layout Standard
2730
2731 reserved1
2732 \end_inset 
2733 </cell>
2734 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2735 \begin_inset Text
2736
2737 \layout Standard
2738
2739 int
2740 \end_inset 
2741 </cell>
2742 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
2743 \begin_inset Text
2744
2745 \layout Standard
2746
2747 4
2748 \end_inset 
2749 </cell>
2750 </row>
2751 <row topline="true" bottomline="true">
2752 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2753 \begin_inset Text
2754
2755 \layout Standard
2756
2757 reserved2
2758 \end_inset 
2759 </cell>
2760 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2761 \begin_inset Text
2762
2763 \layout Standard
2764
2765 int
2766 \end_inset 
2767 </cell>
2768 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
2769 \begin_inset Text
2770
2771 \layout Standard
2772
2773 4
2774 \end_inset 
2775 </cell>
2776 </row>
2777 </lyxtabular>
2778
2779 \end_inset 
2780
2781
2782 \layout Caption
2783
2784 Ogg/Speex header packet
2785 \begin_inset LatexCommand \label{cap:ogg_speex_header}
2786
2787 \end_inset 
2788
2789
2790 \end_inset 
2791
2792
2793 \layout Section
2794 \pagebreak_top 
2795 Introduction to CELP Coding
2796 \begin_inset LatexCommand \index{CELP}
2797
2798 \end_inset 
2799
2800
2801 \begin_inset LatexCommand \label{sec:Introduction-to-CELP}
2802
2803 \end_inset 
2804
2805
2806 \layout Standard
2807
2808 Speex is based on CELP, which stands for Code Excited Linear Prediction.
2809  This section attempts to introduce the principles behind CELP, so if you
2810  are already familiar with CELP, you can safely skip to section 
2811 \begin_inset LatexCommand \ref{sec:Speex-narrowband-mode}
2812
2813 \end_inset 
2814
2815 .
2816  The CELP technique is based on three ideas:
2817 \layout Enumerate
2818
2819 The use of a linear prediction (LP) model to model the vocal tract
2820 \layout Enumerate
2821
2822 The use of (adaptive and fixed) codebook entries as input (excitation) of
2823  the LP model
2824 \layout Enumerate
2825
2826 The search performed in closed-loop in a 
2827 \begin_inset Quotes eld
2828 \end_inset 
2829
2830 perceptually weighted domain
2831 \begin_inset Quotes erd
2832 \end_inset 
2833
2834
2835 \layout Standard
2836
2837 This section describes the basic ideas behind CELP.
2838  Note that it's still incomplete.
2839 \layout Subsection
2840
2841 Linear Prediction (LPC)
2842 \begin_inset LatexCommand \index{linear prediction}
2843
2844 \end_inset 
2845
2846
2847 \layout Standard
2848
2849 Linear prediction is at the base of many speech coding techniques, including
2850  CELP.
2851  The idea behind it is to predict the signal 
2852 \begin_inset Formula $x[n]$
2853 \end_inset 
2854
2855  using a linear combination of its past samples:
2856 \layout Standard
2857
2858
2859 \begin_inset Formula \[
2860 y[n]=\sum_{i=1}^{N}a_{i}x[n-i]\]
2861
2862 \end_inset 
2863
2864 where 
2865 \begin_inset Formula $y[n]$
2866 \end_inset 
2867
2868  is the linear prediction of 
2869 \begin_inset Formula $x[n]$
2870 \end_inset 
2871
2872 .
2873  The prediction error is thus given by:
2874 \begin_inset Formula \[
2875 e[n]=x[n]-y[n]=x[n]-\sum_{i=1}^{N}a_{i}x[n-i]\]
2876
2877 \end_inset 
2878
2879
2880 \layout Standard
2881
2882 The goal of the LPC analysis is to find the best prediction coefficients
2883  
2884 \begin_inset Formula $a_{i}$
2885 \end_inset 
2886
2887  which minimize the quadratic error function:
2888 \begin_inset Formula \[
2889 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}\]
2890
2891 \end_inset 
2892
2893 That can be done by making all derivatives 
2894 \begin_inset Formula $\frac{\partial E}{\partial a_{i}}$
2895 \end_inset 
2896
2897  equal to zero:
2898 \begin_inset Formula \[
2899 \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\]
2900
2901 \end_inset 
2902
2903
2904 \layout Standard
2905
2906 The 
2907 \begin_inset Formula $a_{i}$
2908 \end_inset 
2909
2910  filter coefficients are computed using the Levinson-Durbin
2911 \begin_inset LatexCommand \index{Levinson-Durbin}
2912
2913 \end_inset 
2914
2915  algorithm, which starts from the auto-correlation
2916 \begin_inset LatexCommand \index{auto-correlation}
2917
2918 \end_inset 
2919
2920  
2921 \begin_inset Formula $R(m)$
2922 \end_inset 
2923
2924  of the signal 
2925 \begin_inset Formula $x[n]$
2926 \end_inset 
2927
2928 .
2929 \layout Standard
2930
2931
2932 \begin_inset Formula \[
2933 R(m)=\sum_{i=0}^{N-1}x[i]x[i-m]\]
2934
2935 \end_inset 
2936
2937
2938 \layout Standard
2939
2940 For an order 
2941 \begin_inset Formula $N$
2942 \end_inset 
2943
2944  filter, we have:
2945 \begin_inset Formula \[
2946 \mathbf{R}=\left[\begin{array}{cccc}
2947 R(0) & R(1) & \cdots & R(N-1)\\
2948 R(1) & R(0) & \cdots & R(N-2)\\
2949 \vdots & \vdots & \ddots & \vdots\\
2950 R(N-1) & R(N-2) & \cdots & R(0)\end{array}\right]\]
2951
2952 \end_inset 
2953
2954
2955 \begin_inset Formula \[
2956 \mathbf{r}=\left[\begin{array}{c}
2957 R(1)\\
2958 R(2)\\
2959 \vdots\\
2960 R(N)\end{array}\right]\]
2961
2962 \end_inset 
2963
2964
2965 \layout Standard
2966
2967 The filter coefficients 
2968 \begin_inset Formula $a_{i}$
2969 \end_inset 
2970
2971  are found by solving the system 
2972 \begin_inset Formula $\mathbf{Ra}=\mathbf{r}$
2973 \end_inset 
2974
2975 .
2976  What the Levinson-Durbin algorithm does here is making the solution to
2977  the problem 
2978 \begin_inset Formula $\mathcal{O}\left(N^{2}\right)$
2979 \end_inset 
2980
2981  instead of 
2982 \begin_inset Formula $\mathcal{O}\left(N^{3}\right)$
2983 \end_inset 
2984
2985  by exploiting the fact that matrix 
2986 \begin_inset Formula $\mathbf{R}$
2987 \end_inset 
2988
2989  is toeplitz hermitian.
2990  Also, it can be proven that all the roots of 
2991 \begin_inset Formula $A(z)$
2992 \end_inset 
2993
2994  are within the unit circle, which means that 
2995 \begin_inset Formula $1/A(z)$
2996 \end_inset 
2997
2998  is always stable.
2999  This is in theory; in practice because of finite precision, there are two
3000  commonly used techniques to make sure we have a stable filter.
3001  First, we multiply 
3002 \begin_inset Formula $R(0)$
3003 \end_inset 
3004
3005  by a number slightly above one (such as 1.0001), which is equivalent to
3006  adding noise to the signal.
3007  Also, we can apply a window to the auto-correlation, which is equivalent
3008  to filtering in the frequency domain, reducing sharp resonances.
3009 \layout Standard
3010
3011 The linear prediction model represents each speech sample as a linear combinatio
3012 n of past samples, plus an error signal called the excitation (or residual).
3013 \begin_inset Formula \[
3014 x[n]=\sum_{i=1}^{N}a_{i}x[n-i]+e[n]\]
3015
3016 \end_inset 
3017
3018
3019 \layout Standard
3020
3021 In the 
3022 \emph on 
3023 z
3024 \emph default 
3025 -domain, this can be expressed as
3026 \layout Standard
3027
3028
3029 \begin_inset Formula \[
3030 x(z)=\frac{1}{A(z)}\: e(z)\]
3031
3032 \end_inset 
3033
3034
3035 \layout Standard
3036
3037 where 
3038 \begin_inset Formula $A(z)$
3039 \end_inset 
3040
3041  is defined as
3042 \layout Standard
3043
3044
3045 \begin_inset Formula \[
3046 A(z)=1-\sum_{i=1}^{N}a_{i}z^{-i}\]
3047
3048 \end_inset 
3049
3050
3051 \layout Standard
3052
3053 We usually refer to 
3054 \begin_inset Formula $A(z)$
3055 \end_inset 
3056
3057  as the analysis filter and 
3058 \begin_inset Formula $1/A(z)$
3059 \end_inset 
3060
3061  as the synthesis filter.
3062  The whole process is called short-term prediction as it predicts the signal
3063  
3064 \begin_inset Formula $x[n]$
3065 \end_inset 
3066
3067  using a prediction using only the 
3068 \begin_inset Formula $N$
3069 \end_inset 
3070
3071  past samples, where 
3072 \begin_inset Formula $N$
3073 \end_inset 
3074
3075  is usually around 10.
3076 \layout Standard
3077
3078 Because LPC coefficients have very little robustness to quantization, they
3079  are converted to Line Spectral Pair
3080 \begin_inset LatexCommand \index{line spectral pair}
3081
3082 \end_inset 
3083
3084  (LSP) coefficients which have a much better behaviour with quantization,
3085  one of them being that it's easy to keep the filter stable.
3086  
3087 \layout Comment
3088
3089 Describe LSP's
3090 \layout Subsection
3091
3092 Pitch Prediction
3093 \begin_inset LatexCommand \index{pitch}
3094
3095 \end_inset 
3096
3097
3098 \layout Standard
3099
3100 During voiced segments, the speech signal is periodic, so it is possible
3101  to take advantage of that property by approximating the excitation signal
3102  
3103 \begin_inset Formula $e[n]$
3104 \end_inset 
3105
3106  by a gain times the past of the excitation:
3107 \layout Standard
3108
3109
3110 \begin_inset Formula \[
3111 e[n]\simeq p[n]=\beta e[n-T]\]
3112
3113 \end_inset 
3114
3115
3116 \layout Standard
3117
3118 where 
3119 \begin_inset Formula $T$
3120 \end_inset 
3121
3122  is the pitch period, 
3123 \begin_inset Formula $\beta$
3124 \end_inset 
3125
3126  is the pitch gain.
3127  We call that long-term prediction since the excitation is predicted from
3128  
3129 \begin_inset Formula $e[n-T]$
3130 \end_inset 
3131
3132  with 
3133 \begin_inset Formula $T\gg N$
3134 \end_inset 
3135
3136 .
3137 \layout Subsection
3138
3139 Innovation Codebook
3140 \layout Standard
3141
3142 The final excitation 
3143 \begin_inset Formula $e[n]$
3144 \end_inset 
3145
3146  will be the sum of the pitch prediction and an 
3147 \emph on 
3148 innovation
3149 \emph default 
3150  signal 
3151 \begin_inset Formula $c[n]$
3152 \end_inset 
3153
3154  taken from a fixed codebook, hence the name 
3155 \emph on 
3156 Code
3157 \emph default 
3158  Excited Linear Prediction.
3159  The final excitation is given by:
3160 \layout Standard
3161
3162
3163 \begin_inset Formula \[
3164 e[n]=p[n]+c[n]=\beta e[n-T]+c[n]\]
3165
3166 \end_inset 
3167
3168 The quantization of 
3169 \begin_inset Formula $c[n]$
3170 \end_inset 
3171
3172  is where most of the bits in a CELP codec are allocated.
3173  It represents the information that couldn't be obtained either from linear
3174  prediction or pitch prediction.
3175  In the 
3176 \emph on 
3177 z
3178 \emph default 
3179 -domain we can represent the final signal 
3180 \begin_inset Formula $X(z)$
3181 \end_inset 
3182
3183  as 
3184 \begin_inset Formula \[
3185 X(z)=\frac{C(z)}{A(z)\left(1-\beta z^{-T}\right)}\]
3186
3187 \end_inset 
3188
3189
3190 \layout Subsection
3191
3192 Analysis-by-Synthesis and Error Weighting
3193 \begin_inset LatexCommand \index{error weighting}
3194
3195 \end_inset 
3196
3197
3198 \begin_inset LatexCommand \index{analysis-by-synthesis}
3199
3200 \end_inset 
3201
3202
3203 \layout Standard
3204
3205 Most (if not all) modern audio codecs attempt to 
3206 \begin_inset Quotes eld
3207 \end_inset 
3208
3209 shape
3210 \begin_inset Quotes erd
3211 \end_inset 
3212
3213  the noise so that it appears mostly in the frequency regions where the
3214  ear cannot detect it.
3215  For example, the ear is more tolerant to noise in parts of the spectrum
3216  that are louder and 
3217 \emph on 
3218 vice versa
3219 \emph default 
3220 .
3221  That's why instead of minimizing the simple quadratic error
3222 \begin_inset Formula \[
3223 E=\sum_{n}\left(x[n]-\overline{x}[n]\right)^{2}\]
3224
3225 \end_inset 
3226
3227 where 
3228 \begin_inset Formula $\overline{x}[n]$
3229 \end_inset 
3230
3231  is the encoder signal, we minimize the error for the perceptually weighted
3232  signal
3233 \begin_inset Formula \[
3234 X_{w}(z)=W(z)X(z)\]
3235
3236 \end_inset 
3237
3238 where 
3239 \begin_inset Formula $W(z)$
3240 \end_inset 
3241
3242  is the weighting filter, usually of the form
3243 \layout Standard
3244
3245
3246 \begin_inset Formula \begin{equation}
3247 W(z)=\frac{A\left(\frac{z}{\gamma_{1}}\right)}{A\left(\frac{z}{\gamma_{2}}\right)}\label{eq:weighting_filter}\end{equation}
3248
3249 \end_inset 
3250
3251
3252 \layout Standard
3253
3254 with control parameters 
3255 \begin_inset Formula $\gamma_{1}>\gamma_{2}$
3256 \end_inset 
3257
3258 .
3259  If the noise is white in the perceptually weighted domain, then in the
3260  signal domain its spectral shape will be of the form
3261 \begin_inset Formula \[
3262 A_{noise}(z)=\frac{1}{W(z)}=\frac{A\left(\frac{z}{\gamma_{2}}\right)}{A\left(\frac{z}{\gamma_{1}}\right)}\]
3263
3264 \end_inset 
3265
3266
3267 \layout Standard
3268
3269 If a filter 
3270 \begin_inset Formula $A(z)$
3271 \end_inset 
3272
3273  has (complex) poles at 
3274 \begin_inset Formula $p_{i}$
3275 \end_inset 
3276
3277  in the 
3278 \begin_inset Formula $z$
3279 \end_inset 
3280
3281 -plane, the filter 
3282 \begin_inset Formula $A(z/\gamma)$
3283 \end_inset 
3284
3285  will have its poles at 
3286 \begin_inset Formula $p'_{i}=\gamma p_{i}$
3287 \end_inset 
3288
3289 , making it a flatter version of 
3290 \begin_inset Formula $A(z)$
3291 \end_inset 
3292
3293 .
3294 \layout Standard
3295
3296 Analysis-by-synthesis refers to the fact that when trying to find the best
3297  pitch parameters (
3298 \begin_inset Formula $T$
3299 \end_inset 
3300
3301
3302 \begin_inset Formula $\beta$
3303 \end_inset 
3304
3305 ) and innovation signal 
3306 \begin_inset Formula $c[n]$
3307 \end_inset 
3308
3309 , we do not work by making the excitation 
3310 \begin_inset Formula $e[n]$
3311 \end_inset 
3312
3313  as close as the original one (which would be simpler), but apply the synthesis
3314  (and weighting) filter and try making 
3315 \begin_inset Formula $X_{w}(z)$
3316 \end_inset 
3317
3318  as close to the original as possible.
3319 \layout Section
3320 \pagebreak_top 
3321 Speex narrowband mode
3322 \begin_inset LatexCommand \label{sec:Speex-narrowband-mode}
3323
3324 \end_inset 
3325
3326
3327 \begin_inset LatexCommand \index{narrowband}
3328
3329 \end_inset 
3330
3331
3332 \layout Standard
3333
3334 This section looks at how Speex works for narrowband (
3335 \begin_inset Formula $8\:\mathrm{kHz}$
3336 \end_inset 
3337
3338  sampling rate) operation.
3339  The frame size for this mode is 
3340 \begin_inset Formula $20\:\mathrm{ms}$
3341 \end_inset 
3342
3343 , corresponding to 160 samples.
3344  Each frame is also subdivided into 4 sub-frames of 40 samples each.
3345 \layout Standard
3346
3347 Also many design decisions were based on the original goals and assumptions:
3348 \layout Itemize
3349
3350 Minimizing the amount of information extracted from past frames (for robustness
3351  to packet loss)
3352 \layout Itemize
3353
3354 Dynamically-selectable codebooks (LSP, pitch and innovation)
3355 \layout Itemize
3356
3357 sub-vector fixed (innovation) codebooks
3358 \layout Subsection
3359
3360 LPC Analysis
3361 \begin_inset LatexCommand \index{linear prediction}
3362
3363 \end_inset 
3364
3365
3366 \layout Standard
3367
3368 An LPC analysis is first performed on a (asymetric Hamming) window that
3369  spans all of the current frame and half a frame in advance.
3370  The LPC coefficients are then converted to Line Spectral Pair
3371 \begin_inset LatexCommand \index{line spectral pair}
3372
3373 \end_inset 
3374
3375  (LSP), a representation that is more robust to quantization.
3376  The LSP's are considered to be associated to the 
3377 \begin_inset Formula $4^{th}$
3378 \end_inset 
3379
3380  sub-frames and the LSP's associated to the first 3 sub-frames are linearly
3381  interpolated using the current and previous LSP's.
3382 \layout Standard
3383
3384 The LSP's are encoded using 30 bits for higher quality modes and 18 bits
3385  for lower quality, through the use of a multi-stage split-vector quantizer.
3386  For the lower quality modes, the 10 coefficients are first quantized with
3387  6 bits and the error is then divided in two 5-coefficient sub-vectors.
3388  Each of them is quantized with 6 bits, for a total of 18 bits.
3389  For the higher quality modes, the remaining error on both sub-vectors is
3390  further quantized with 6 bits each, for a total of 30 bits.
3391 \layout Standard
3392
3393 The perceptual weighting filter 
3394 \begin_inset Formula $W(z)$
3395 \end_inset 
3396
3397  used by Speex is derived from the LPC filter 
3398 \begin_inset Formula $A(z)$
3399 \end_inset 
3400
3401  and corresponds to the one described by eq.
3402  
3403 \begin_inset LatexCommand \ref{eq:weighting_filter}
3404
3405 \end_inset 
3406
3407  with 
3408 \begin_inset Formula $\gamma_{1}=0.9$
3409 \end_inset 
3410
3411  and 
3412 \begin_inset Formula $\gamma_{2}=0.6$
3413 \end_inset 
3414
3415 .
3416  We can use the unquantized 
3417 \begin_inset Formula $A(z)$
3418 \end_inset 
3419
3420  filter since the weighting filter is only used in the encoder.
3421 \layout Subsection
3422
3423 Pitch Prediction (adaptive codebook)
3424 \begin_inset LatexCommand \index{pitch}
3425
3426 \end_inset 
3427
3428
3429 \layout Standard
3430
3431 Speex uses a 3-tap prediction for pitch.
3432  That is, the pitch prediction signal 
3433 \begin_inset Formula $p[n]$
3434 \end_inset 
3435
3436  is obtained by the past of the excitation by:
3437 \begin_inset Formula \[
3438 p[n]=\beta_{0}e[n-T-1]+\beta_{1}e[n-T]+\beta_{2}e[n-T+1]\]
3439
3440 \end_inset 
3441
3442
3443 \layout Standard
3444
3445 where 
3446 \begin_inset Formula $T$
3447 \end_inset 
3448
3449  is the pitch period and the 
3450 \begin_inset Formula $\beta_{i}$
3451 \end_inset 
3452
3453  are the prediction (filter) taps.
3454  It is worth noting that when the pitch is smaller than the sub-frame size,
3455  we repeat the excitation at a period 
3456 \begin_inset Formula $T$
3457 \end_inset 
3458
3459 .
3460  For example, when 
3461 \begin_inset Formula $n-T+1$
3462 \end_inset 
3463
3464 , we use 
3465 \begin_inset Formula $n-2T+1$
3466 \end_inset 
3467
3468  instead.
3469  The period and quantized gains are determined in closed loop (analysis-by-synth
3470 esis).
3471  In most modes, the pitch period is encoded with 7 bits in the 
3472 \begin_inset Formula $\left[17,144\right]$
3473 \end_inset 
3474
3475  range and the 
3476 \begin_inset Formula $\beta_{i}$
3477 \end_inset 
3478
3479  coefficients are vector-quantized using 7 bits (15 kbps narrowband and
3480  above) at higher bit-rates and 5 bits at lower bit-rates (11 kbps narrowband
3481  and below).
3482 \layout Subsection
3483
3484 Innovation Codebook
3485 \layout Standard
3486
3487 In Speex, the innovation signal is quantized using sub-vector shape-only
3488  vector quantization (VQ).
3489  That means that the innovation signal is divided in sub-vectors (of size
3490  5 to 20) and quantized using a codebook that represents both the shape
3491  and the gain at the same time.
3492  This saves many bits that would otherwise be allocated for a separate gain
3493  at the price of a slight increase in complexity.
3494  
3495 \layout Subsection
3496
3497 Bit allocation
3498 \layout Standard
3499
3500 There are 7 different narrowband bit-rates defined for Speex, ranging from
3501  250 bps to 24.6 kbps, although the modes below 5.9 kbps should not be used
3502  for speech.
3503  The bit-allocation for each mode is detailed in table 
3504 \begin_inset LatexCommand \ref{cap:bits-narrowband}
3505
3506 \end_inset 
3507
3508 .
3509  Each frame starts with the mode ID encoded with 4 bits which allows a range
3510  from 0 to 15, though only the first 7 values are used (the others are reserved).
3511  The parameters are listed in the table in the order they are packed in
3512  the bit-stream.
3513  All frame-based parameters are packed before sub-frame parameters.
3514  The parameters for a certain sub-frame are all packed before the following
3515  sub-frame is packed.
3516  Note that the 
3517 \begin_inset Quotes eld
3518 \end_inset 
3519
3520 OL
3521 \begin_inset Quotes erd
3522 \end_inset 
3523
3524  in the parameter description means that the parameter is an open loop estimatio
3525 n based on the whole frame.
3526 \layout Standard
3527
3528
3529 \begin_inset Float table
3530 placement h
3531 wide true
3532 collapsed false
3533
3534 \layout Standard
3535
3536
3537 \begin_inset  Tabular
3538 <lyxtabular version="3" rows="12" columns="11">
3539 <features>
3540 <column alignment="center" valignment="top" leftline="true" width="0pt">
3541 <column alignment="center" valignment="top" leftline="true" width="0pt">
3542 <column alignment="center" valignment="top" leftline="true" width="0pt">
3543 <column alignment="center" valignment="top" leftline="true" width="0pt">
3544 <column alignment="center" valignment="top" leftline="true" width="0pt">
3545 <column alignment="center" valignment="top" leftline="true" width="0pt">
3546 <column alignment="center" valignment="top" leftline="true" width="0pt">
3547 <column alignment="center" valignment="top" leftline="true" width="0pt">
3548 <column alignment="center" valignment="top" leftline="true" width="0pt">
3549 <column alignment="center" valignment="top" leftline="true" width="0pt">
3550 <column alignment="center" valignment="top" leftline="true" rightline="true" width="0pt">
3551 <row topline="true" bottomline="true">
3552 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3553 \begin_inset Text
3554
3555 \layout Standard
3556
3557 Parameter
3558 \end_inset 
3559 </cell>
3560 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3561 \begin_inset Text
3562
3563 \layout Standard
3564
3565 Update rate
3566 \end_inset 
3567 </cell>
3568 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3569 \begin_inset Text
3570
3571 \layout Standard
3572
3573 0
3574 \end_inset 
3575 </cell>
3576 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3577 \begin_inset Text
3578
3579 \layout Standard
3580
3581 1
3582 \end_inset 
3583 </cell>
3584 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3585 \begin_inset Text
3586
3587 \layout Standard
3588
3589 2
3590 \end_inset 
3591 </cell>
3592 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3593 \begin_inset Text
3594
3595 \layout Standard
3596
3597 3
3598 \end_inset 
3599 </cell>
3600 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3601 \begin_inset Text
3602
3603 \layout Standard
3604
3605 4
3606 \end_inset 
3607 </cell>
3608 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3609 \begin_inset Text
3610
3611 \layout Standard
3612
3613 5
3614 \end_inset 
3615 </cell>
3616 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
3617 \begin_inset Text
3618
3619 \layout Standard
3620
3621 6
3622 \end_inset 
3623 </cell>
3624 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
3625 \begin_inset Text
3626
3627 \layout Standard
3628
3629 7
3630 \end_inset 
3631 </cell>
3632 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
3633 \begin_inset Text
3634
3635 \layout Standard
3636
3637 8
3638 \end_inset 
3639 </cell>
3640 </row>
3641 <row topline="true">
3642 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3643 \begin_inset Text
3644
3645 \layout Standard
3646
3647 Wideband bit
3648 \end_inset 
3649 </cell>
3650 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3651 \begin_inset Text
3652
3653 \layout Standard
3654
3655 frame
3656 \end_inset 
3657 </cell>
3658 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3659 \begin_inset Text
3660
3661 \layout Standard
3662
3663 1
3664 \end_inset 
3665 </cell>
3666 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3667 \begin_inset Text
3668
3669 \layout Standard
3670
3671 1
3672 \end_inset 
3673 </cell>
3674 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3675 \begin_inset Text
3676
3677 \layout Standard
3678
3679 1
3680 \end_inset 
3681 </cell>
3682 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3683 \begin_inset Text
3684
3685 \layout Standard
3686
3687 1
3688 \end_inset 
3689 </cell>
3690 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3691 \begin_inset Text
3692
3693 \layout Standard
3694
3695 1
3696 \end_inset 
3697 </cell>
3698 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3699 \begin_inset Text
3700
3701 \layout Standard
3702
3703 1
3704 \end_inset 
3705 </cell>
3706 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
3707 \begin_inset Text
3708
3709 \layout Standard
3710
3711 1
3712 \end_inset 
3713 </cell>
3714 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
3715 \begin_inset Text
3716
3717 \layout Standard
3718
3719 1
3720 \end_inset 
3721 </cell>
3722 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
3723 \begin_inset Text
3724
3725 \layout Standard
3726
3727 1
3728 \end_inset 
3729 </cell>
3730 </row>
3731 <row topline="true">
3732 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3733 \begin_inset Text
3734
3735 \layout Standard
3736
3737 Mode ID
3738 \end_inset 
3739 </cell>
3740 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3741 \begin_inset Text
3742
3743 \layout Standard
3744
3745 frame
3746 \end_inset 
3747 </cell>
3748 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3749 \begin_inset Text
3750
3751 \layout Standard
3752
3753 4
3754 \end_inset 
3755 </cell>
3756 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3757 \begin_inset Text
3758
3759 \layout Standard
3760
3761 4
3762 \end_inset 
3763 </cell>
3764 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3765 \begin_inset Text
3766
3767 \layout Standard
3768
3769 4
3770 \end_inset 
3771 </cell>
3772 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3773 \begin_inset Text
3774
3775 \layout Standard
3776
3777 4
3778 \end_inset 
3779 </cell>
3780 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3781 \begin_inset Text
3782
3783 \layout Standard
3784
3785 4
3786 \end_inset 
3787 </cell>
3788 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3789 \begin_inset Text
3790
3791 \layout Standard
3792
3793 4
3794 \end_inset 
3795 </cell>
3796 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
3797 \begin_inset Text
3798
3799 \layout Standard
3800
3801 4
3802 \end_inset 
3803 </cell>
3804 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
3805 \begin_inset Text
3806
3807 \layout Standard
3808
3809 4
3810 \end_inset 
3811 </cell>
3812 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
3813 \begin_inset Text
3814
3815 \layout Standard
3816
3817 4
3818 \end_inset 
3819 </cell>
3820 </row>
3821 <row topline="true">
3822 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3823 \begin_inset Text
3824
3825 \layout Standard
3826
3827 LSP
3828 \end_inset 
3829 </cell>
3830 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3831 \begin_inset Text
3832
3833 \layout Standard
3834
3835 frame
3836 \end_inset 
3837 </cell>
3838 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3839 \begin_inset Text
3840
3841 \layout Standard
3842
3843 0
3844 \end_inset 
3845 </cell>
3846 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3847 \begin_inset Text
3848
3849 \layout Standard
3850
3851 18
3852 \end_inset 
3853 </cell>
3854 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3855 \begin_inset Text
3856
3857 \layout Standard
3858
3859 18
3860 \end_inset 
3861 </cell>
3862 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3863 \begin_inset Text
3864
3865 \layout Standard
3866
3867 18
3868 \end_inset 
3869 </cell>
3870 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3871 \begin_inset Text
3872
3873 \layout Standard
3874
3875 18
3876 \end_inset 
3877 </cell>
3878 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3879 \begin_inset Text
3880
3881 \layout Standard
3882
3883 30
3884 \end_inset 
3885 </cell>
3886 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
3887 \begin_inset Text
3888
3889 \layout Standard
3890
3891 30
3892 \end_inset 
3893 </cell>
3894 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
3895 \begin_inset Text
3896
3897 \layout Standard
3898
3899 30
3900 \end_inset 
3901 </cell>
3902 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
3903 \begin_inset Text
3904
3905 \layout Standard
3906
3907 18
3908 \end_inset 
3909 </cell>
3910 </row>
3911 <row topline="true">
3912 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3913 \begin_inset Text
3914
3915 \layout Standard
3916
3917 OL pitch
3918 \end_inset 
3919 </cell>
3920 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3921 \begin_inset Text
3922
3923 \layout Standard
3924
3925 frame
3926 \end_inset 
3927 </cell>
3928 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3929 \begin_inset Text
3930
3931 \layout Standard
3932
3933 0
3934 \end_inset 
3935 </cell>
3936 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3937 \begin_inset Text
3938
3939 \layout Standard
3940
3941 7
3942 \end_inset 
3943 </cell>
3944 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3945 \begin_inset Text
3946
3947 \layout Standard
3948
3949 7
3950 \end_inset 
3951 </cell>
3952 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3953 \begin_inset Text
3954
3955 \layout Standard
3956
3957 0
3958 \end_inset 
3959 </cell>
3960 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3961 \begin_inset Text
3962
3963 \layout Standard
3964
3965 0
3966 \end_inset 
3967 </cell>
3968 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3969 \begin_inset Text
3970
3971 \layout Standard
3972
3973 0
3974 \end_inset 
3975 </cell>
3976 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
3977 \begin_inset Text
3978
3979 \layout Standard
3980
3981 0
3982 \end_inset 
3983 </cell>
3984 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
3985 \begin_inset Text
3986
3987 \layout Standard
3988
3989 0
3990 \end_inset 
3991 </cell>
3992 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
3993 \begin_inset Text
3994
3995 \layout Standard
3996
3997 7
3998 \end_inset 
3999 </cell>
4000 </row>
4001 <row topline="true">
4002 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4003 \begin_inset Text
4004
4005 \layout Standard
4006
4007 OL pitch gain
4008 \end_inset 
4009 </cell>
4010 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4011 \begin_inset Text
4012
4013 \layout Standard
4014
4015 frame
4016 \end_inset 
4017 </cell>
4018 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4019 \begin_inset Text
4020
4021 \layout Standard
4022
4023 0
4024 \end_inset 
4025 </cell>
4026 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4027 \begin_inset Text
4028
4029 \layout Standard
4030
4031 4
4032 \end_inset 
4033 </cell>
4034 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4035 \begin_inset Text
4036
4037 \layout Standard
4038
4039 0
4040 \end_inset 
4041 </cell>
4042 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4043 \begin_inset Text
4044
4045 \layout Standard
4046
4047 0
4048 \end_inset 
4049 </cell>
4050 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4051 \begin_inset Text
4052
4053 \layout Standard
4054
4055 0
4056 \end_inset 
4057 </cell>
4058 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4059 \begin_inset Text
4060
4061 \layout Standard
4062
4063 0
4064 \end_inset 
4065 </cell>
4066 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
4067 \begin_inset Text
4068
4069 \layout Standard
4070
4071 0
4072 \end_inset 
4073 </cell>
4074 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
4075 \begin_inset Text
4076
4077 \layout Standard
4078
4079 0
4080 \end_inset 
4081 </cell>
4082 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
4083 \begin_inset Text
4084
4085 \layout Standard
4086
4087 4
4088 \end_inset 
4089 </cell>
4090 </row>
4091 <row topline="true">
4092 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4093 \begin_inset Text
4094
4095 \layout Standard
4096
4097 OL Exc gain
4098 \end_inset 
4099 </cell>
4100 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4101 \begin_inset Text
4102
4103 \layout Standard
4104
4105 frame
4106 \end_inset 
4107 </cell>
4108 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4109 \begin_inset Text
4110
4111 \layout Standard
4112
4113 0
4114 \end_inset 
4115 </cell>
4116 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4117 \begin_inset Text
4118
4119 \layout Standard
4120
4121 5
4122 \end_inset 
4123 </cell>
4124 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4125 \begin_inset Text
4126
4127 \layout Standard
4128
4129 5
4130 \end_inset 
4131 </cell>
4132 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4133 \begin_inset Text
4134
4135 \layout Standard
4136
4137 5
4138 \end_inset 
4139 </cell>
4140 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4141 \begin_inset Text
4142
4143 \layout Standard
4144
4145 5
4146 \end_inset 
4147 </cell>
4148 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4149 \begin_inset Text
4150
4151 \layout Standard
4152
4153 5
4154 \end_inset 
4155 </cell>
4156 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
4157 \begin_inset Text
4158
4159 \layout Standard
4160
4161 5
4162 \end_inset 
4163 </cell>
4164 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
4165 \begin_inset Text
4166
4167 \layout Standard
4168
4169 5
4170 \end_inset 
4171 </cell>
4172 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
4173 \begin_inset Text
4174
4175 \layout Standard
4176
4177 5
4178 \end_inset 
4179 </cell>
4180 </row>
4181 <row topline="true">
4182 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4183 \begin_inset Text
4184
4185 \layout Standard
4186
4187 Fine pitch
4188 \end_inset 
4189 </cell>
4190 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4191 \begin_inset Text
4192
4193 \layout Standard
4194
4195 sub-frame
4196 \end_inset 
4197 </cell>
4198 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4199 \begin_inset Text
4200
4201 \layout Standard
4202
4203 0
4204 \end_inset 
4205 </cell>
4206 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4207 \begin_inset Text
4208
4209 \layout Standard
4210
4211 0
4212 \end_inset 
4213 </cell>
4214 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4215 \begin_inset Text
4216
4217 \layout Standard
4218
4219 0
4220 \end_inset 
4221 </cell>
4222 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4223 \begin_inset Text
4224
4225 \layout Standard
4226
4227 7
4228 \end_inset 
4229 </cell>
4230 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4231 \begin_inset Text
4232
4233 \layout Standard
4234
4235 7
4236 \end_inset 
4237 </cell>
4238 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4239 \begin_inset Text
4240
4241 \layout Standard
4242
4243 7
4244 \end_inset 
4245 </cell>
4246 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
4247 \begin_inset Text
4248
4249 \layout Standard
4250
4251 7
4252 \end_inset 
4253 </cell>
4254 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
4255 \begin_inset Text
4256
4257 \layout Standard
4258
4259 7
4260 \end_inset 
4261 </cell>
4262 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
4263 \begin_inset Text
4264
4265 \layout Standard
4266
4267 0
4268 \end_inset 
4269 </cell>
4270 </row>
4271 <row topline="true">
4272 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4273 \begin_inset Text
4274
4275 \layout Standard
4276
4277 Pitch gain
4278 \end_inset 
4279 </cell>
4280 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4281 \begin_inset Text
4282
4283 \layout Standard
4284
4285 sub-frame
4286 \end_inset 
4287 </cell>
4288 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4289 \begin_inset Text
4290
4291 \layout Standard
4292
4293 0
4294 \end_inset 
4295 </cell>
4296 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4297 \begin_inset Text
4298
4299 \layout Standard
4300
4301 0
4302 \end_inset 
4303 </cell>
4304 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4305 \begin_inset Text
4306
4307 \layout Standard
4308
4309 5
4310 \end_inset 
4311 </cell>
4312 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4313 \begin_inset Text
4314
4315 \layout Standard
4316
4317 5
4318 \end_inset 
4319 </cell>
4320 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4321 \begin_inset Text
4322
4323 \layout Standard
4324
4325 5
4326 \end_inset 
4327 </cell>
4328 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4329 \begin_inset Text
4330
4331 \layout Standard
4332
4333 7
4334 \end_inset 
4335 </cell>
4336 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
4337 \begin_inset Text
4338
4339 \layout Standard
4340
4341 7
4342 \end_inset 
4343 </cell>
4344 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
4345 \begin_inset Text
4346
4347 \layout Standard
4348
4349 7
4350 \end_inset 
4351 </cell>
4352 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
4353 \begin_inset Text
4354
4355 \layout Standard
4356
4357 0
4358 \end_inset 
4359 </cell>
4360 </row>
4361 <row topline="true">
4362 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4363 \begin_inset Text
4364
4365 \layout Standard
4366
4367 Innovation gain
4368 \end_inset 
4369 </cell>
4370 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4371 \begin_inset Text
4372
4373 \layout Standard
4374
4375 sub-frame
4376 \end_inset 
4377 </cell>
4378 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4379 \begin_inset Text
4380
4381 \layout Standard
4382
4383 0
4384 \end_inset 
4385 </cell>
4386 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4387 \begin_inset Text
4388
4389 \layout Standard
4390
4391 1
4392 \end_inset 
4393 </cell>
4394 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4395 \begin_inset Text
4396
4397 \layout Standard
4398
4399 0
4400 \end_inset 
4401 </cell>
4402 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4403 \begin_inset Text
4404
4405 \layout Standard
4406
4407 1
4408 \end_inset 
4409 </cell>
4410 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4411 \begin_inset Text
4412
4413 \layout Standard
4414
4415 1
4416 \end_inset 
4417 </cell>
4418 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4419 \begin_inset Text
4420
4421 \layout Standard
4422
4423 3
4424 \end_inset 
4425 </cell>
4426 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
4427 \begin_inset Text
4428
4429 \layout Standard
4430
4431 3
4432 \end_inset 
4433 </cell>
4434 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
4435 \begin_inset Text
4436
4437 \layout Standard
4438
4439 3
4440 \end_inset 
4441 </cell>
4442 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
4443 \begin_inset Text
4444
4445 \layout Standard
4446
4447 0
4448 \end_inset 
4449 </cell>
4450 </row>
4451 <row topline="true" bottomline="true">
4452 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4453 \begin_inset Text
4454
4455 \layout Standard
4456
4457 Innovation VQ
4458 \end_inset 
4459 </cell>
4460 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4461 \begin_inset Text
4462
4463 \layout Standard
4464
4465 sub-frame
4466 \end_inset 
4467 </cell>
4468 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4469 \begin_inset Text
4470
4471 \layout Standard
4472
4473 0
4474 \end_inset 
4475 </cell>
4476 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4477 \begin_inset Text
4478
4479 \layout Standard
4480
4481 0
4482 \end_inset 
4483 </cell>
4484 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4485 \begin_inset Text
4486
4487 \layout Standard
4488
4489 16
4490 \end_inset 
4491 </cell>
4492 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4493 \begin_inset Text
4494
4495 \layout Standard
4496
4497 20
4498 \end_inset 
4499 </cell>
4500 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4501 \begin_inset Text
4502
4503 \layout Standard
4504
4505 35
4506 \end_inset 
4507 </cell>
4508 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4509 \begin_inset Text
4510
4511 \layout Standard
4512
4513 48
4514 \end_inset 
4515 </cell>
4516 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
4517 \begin_inset Text
4518
4519 \layout Standard
4520
4521 64
4522 \end_inset 
4523 </cell>
4524 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
4525 \begin_inset Text
4526
4527 \layout Standard
4528
4529 96
4530 \end_inset 
4531 </cell>
4532 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
4533 \begin_inset Text
4534
4535 \layout Standard
4536
4537 10
4538 \end_inset 
4539 </cell>
4540 </row>
4541 <row topline="true" bottomline="true">
4542 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4543 \begin_inset Text
4544
4545 \layout Standard
4546
4547 Total
4548 \end_inset 
4549 </cell>
4550 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4551 \begin_inset Text
4552
4553 \layout Standard
4554
4555 frame
4556 \end_inset 
4557 </cell>
4558 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4559 \begin_inset Text
4560
4561 \layout Standard
4562
4563 5
4564 \end_inset 
4565 </cell>
4566 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4567 \begin_inset Text
4568
4569 \layout Standard
4570
4571 43
4572 \end_inset 
4573 </cell>
4574 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4575 \begin_inset Text
4576
4577 \layout Standard
4578
4579 119
4580 \end_inset 
4581 </cell>
4582 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4583 \begin_inset Text
4584
4585 \layout Standard
4586
4587 160
4588 \end_inset 
4589 </cell>
4590 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4591 \begin_inset Text
4592
4593 \layout Standard
4594
4595 220
4596 \end_inset 
4597 </cell>
4598 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4599 \begin_inset Text
4600
4601 \layout Standard
4602
4603 300
4604 \end_inset 
4605 </cell>
4606 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
4607 \begin_inset Text
4608
4609 \layout Standard
4610
4611 364
4612 \end_inset 
4613 </cell>
4614 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
4615 \begin_inset Text
4616
4617 \layout Standard
4618
4619 492
4620 \end_inset 
4621 </cell>
4622 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
4623 \begin_inset Text
4624
4625 \layout Standard
4626
4627 79
4628 \end_inset 
4629 </cell>
4630 </row>
4631 </lyxtabular>
4632
4633 \end_inset 
4634
4635
4636 \layout Caption
4637
4638 Bit allocation for narrowband modes
4639 \begin_inset LatexCommand \label{cap:bits-narrowband}
4640
4641 \end_inset 
4642
4643
4644 \end_inset 
4645
4646
4647 \layout Standard
4648
4649 So far, no MOS (Mean Opinion Score
4650 \begin_inset LatexCommand \index{mean opinion score}
4651
4652 \end_inset 
4653
4654 ) subjective evaluation has been performed for Speex.
4655  In order to give an idea of the quality achivable with it, table 
4656 \begin_inset LatexCommand \ref{cap:quality_vs_bps}
4657
4658 \end_inset 
4659
4660  presents my own subjective opinion on it.
4661  It sould be noted that different people will perceive the quality differently
4662  and that the person that designed the codec often has a bias (one way or
4663  another) when it comes to subjective evaluation.
4664  Last thing, it should be noted that for most codecs (including Speex) encoding
4665  quality sometimes varies depending on the input.
4666  Note that the complexity is only approximate (within 0.5 mflops and using
4667  the lowest complexity setting).
4668  Decoding requires approximately 0.5 mflops
4669 \begin_inset LatexCommand \index{complexity}
4670
4671 \end_inset 
4672
4673  in most modes (1 mflops with perceptual enhancement).
4674 \layout Standard
4675
4676
4677 \begin_inset Float table
4678 placement h
4679 wide true
4680 collapsed false
4681
4682 \layout Standard
4683
4684
4685 \begin_inset  Tabular
4686 <lyxtabular version="3" rows="17" columns="4">
4687 <features>
4688 <column alignment="center" valignment="top" leftline="true" width="0pt">
4689 <column alignment="center" valignment="top" leftline="true" width="0pt">
4690 <column alignment="center" valignment="top" leftline="true" width="0pt">
4691 <column alignment="center" valignment="top" leftline="true" rightline="true" width="0pt">
4692 <row topline="true" bottomline="true">
4693 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4694 \begin_inset Text
4695
4696 \layout Standard
4697
4698 Mode
4699 \end_inset 
4700 </cell>
4701 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4702 \begin_inset Text
4703
4704 \layout Standard
4705
4706 Bit-rate
4707 \begin_inset LatexCommand \index{bit-rate}
4708
4709 \end_inset 
4710
4711  (bps)
4712 \end_inset 
4713 </cell>
4714 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4715 \begin_inset Text
4716
4717 \layout Standard
4718
4719 mflops
4720 \begin_inset LatexCommand \index{complexity}
4721
4722 \end_inset 
4723
4724
4725 \end_inset 
4726 </cell>
4727 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
4728 \begin_inset Text
4729
4730 \layout Standard
4731
4732 Quality/description
4733 \end_inset 
4734 </cell>
4735 </row>
4736 <row topline="true">
4737 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4738 \begin_inset Text
4739
4740 \layout Standard
4741
4742 0
4743 \end_inset 
4744 </cell>
4745 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4746 \begin_inset Text
4747
4748 \layout Standard
4749
4750 250
4751 \end_inset 
4752 </cell>
4753 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4754 \begin_inset Text
4755
4756 \layout Standard
4757
4758 N/A
4759 \end_inset 
4760 </cell>
4761 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
4762 \begin_inset Text
4763
4764 \layout Standard
4765
4766 No transmission (DTX)
4767 \end_inset 
4768 </cell>
4769 </row>
4770 <row topline="true">
4771 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4772 \begin_inset Text
4773
4774 \layout Standard
4775
4776 1
4777 \end_inset 
4778 </cell>
4779 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4780 \begin_inset Text
4781
4782 \layout Standard
4783
4784 2,150
4785 \end_inset 
4786 </cell>
4787 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4788 \begin_inset Text
4789
4790 \layout Standard
4791
4792 6
4793 \end_inset 
4794 </cell>
4795 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
4796 \begin_inset Text
4797
4798 \layout Standard
4799
4800 Vocoder (mostly for comfort noise)
4801 \end_inset 
4802 </cell>
4803 </row>
4804 <row topline="true">
4805 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4806 \begin_inset Text
4807
4808 \layout Standard
4809
4810 2
4811 \end_inset 
4812 </cell>
4813 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4814 \begin_inset Text
4815
4816 \layout Standard
4817
4818 5,950
4819 \end_inset 
4820 </cell>
4821 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4822 \begin_inset Text
4823
4824 \layout Standard
4825
4826 9
4827 \end_inset 
4828 </cell>
4829 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
4830 \begin_inset Text
4831
4832 \layout Standard
4833
4834 Very noticeable artifacts/noise, good intelligibility
4835 \end_inset 
4836 </cell>
4837 </row>
4838 <row topline="true">
4839 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4840 \begin_inset Text
4841
4842 \layout Standard
4843
4844 3
4845 \end_inset 
4846 </cell>
4847 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4848 \begin_inset Text
4849
4850 \layout Standard
4851
4852 8,000
4853 \end_inset 
4854 </cell>
4855 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4856 \begin_inset Text
4857
4858 \layout Standard
4859
4860 10
4861 \end_inset 
4862 </cell>
4863 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
4864 \begin_inset Text
4865
4866 \layout Standard
4867
4868 Artifacts/noise sometimes noticeable
4869 \end_inset 
4870 </cell>
4871 </row>
4872 <row topline="true">
4873 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4874 \begin_inset Text
4875
4876 \layout Standard
4877
4878 4
4879 \end_inset 
4880 </cell>
4881 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4882 \begin_inset Text
4883
4884 \layout Standard
4885
4886 11,000
4887 \end_inset 
4888 </cell>
4889 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4890 \begin_inset Text
4891
4892 \layout Standard
4893
4894 14
4895 \end_inset 
4896 </cell>
4897 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
4898 \begin_inset Text
4899
4900 \layout Standard
4901
4902 Artifacts usually noticeable only with headphones
4903 \end_inset 
4904 </cell>
4905 </row>
4906 <row topline="true">
4907 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4908 \begin_inset Text
4909
4910 \layout Standard
4911
4912 5
4913 \end_inset 
4914 </cell>
4915 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4916 \begin_inset Text
4917
4918 \layout Standard
4919
4920 15,000
4921 \end_inset 
4922 </cell>
4923 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4924 \begin_inset Text
4925
4926 \layout Standard
4927
4928 11
4929 \end_inset 
4930 </cell>
4931 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
4932 \begin_inset Text
4933
4934 \layout Standard
4935
4936 Need good headphones to tell the difference
4937 \end_inset 
4938 </cell>
4939 </row>
4940 <row topline="true">
4941 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4942 \begin_inset Text
4943
4944 \layout Standard
4945
4946 6
4947 \end_inset 
4948 </cell>
4949 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4950 \begin_inset Text
4951
4952 \layout Standard
4953
4954 18,200
4955 \end_inset 
4956 </cell>
4957 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4958 \begin_inset Text
4959
4960 \layout Standard
4961
4962 17.5
4963 \end_inset 
4964 </cell>
4965 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
4966 \begin_inset Text
4967
4968 \layout Standard
4969
4970 Hard to tell the difference even with good headphones
4971 \end_inset 
4972 </cell>
4973 </row>
4974 <row topline="true">
4975 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4976 \begin_inset Text
4977
4978 \layout Standard
4979
4980 7
4981 \end_inset 
4982 </cell>
4983 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4984 \begin_inset Text
4985
4986 \layout Standard
4987
4988 24,600
4989 \end_inset 
4990 </cell>
4991 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4992 \begin_inset Text
4993
4994 \layout Standard
4995
4996 14.5
4997 \end_inset 
4998 </cell>
4999 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
5000 \begin_inset Text
5001
5002 \layout Standard
5003
5004 Completely transparent for voice, good quality music
5005 \end_inset 
5006 </cell>
5007 </row>
5008 <row topline="true">
5009 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5010 \begin_inset Text
5011
5012 \layout Standard
5013
5014 8
5015 \end_inset 
5016 </cell>
5017 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5018 \begin_inset Text
5019
5020 \layout Standard
5021
5022 3,950
5023 \end_inset 
5024 </cell>
5025 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5026 \begin_inset Text
5027
5028 \layout Standard
5029
5030 10.5
5031 \end_inset 
5032 </cell>
5033 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
5034 \begin_inset Text
5035
5036 \layout Standard
5037
5038 Very noticeable artifacts/noise, good intelligibility
5039 \end_inset 
5040 </cell>
5041 </row>
5042 <row topline="true">
5043 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5044 \begin_inset Text
5045
5046 \layout Standard
5047
5048 9
5049 \end_inset 
5050 </cell>
5051 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5052 \begin_inset Text
5053
5054 \layout Standard
5055
5056 N/A
5057 \end_inset 
5058 </cell>
5059 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5060 \begin_inset Text
5061
5062 \layout Standard
5063
5064 N/A
5065 \end_inset 
5066 </cell>
5067 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
5068 \begin_inset Text
5069
5070 \layout Standard
5071
5072 reserved
5073 \end_inset 
5074 </cell>
5075 </row>
5076 <row topline="true">
5077 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5078 \begin_inset Text
5079
5080 \layout Standard
5081
5082 10
5083 \end_inset 
5084 </cell>
5085 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5086 \begin_inset Text
5087
5088 \layout Standard
5089
5090 N/A
5091 \end_inset 
5092 </cell>
5093 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5094 \begin_inset Text
5095
5096 \layout Standard
5097
5098 N/A
5099 \end_inset 
5100 </cell>
5101 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
5102 \begin_inset Text
5103
5104 \layout Standard
5105
5106 reserved
5107 \end_inset 
5108 </cell>
5109 </row>
5110 <row topline="true">
5111 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5112 \begin_inset Text
5113
5114 \layout Standard
5115
5116 11
5117 \end_inset 
5118 </cell>
5119 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5120 \begin_inset Text
5121
5122 \layout Standard
5123
5124 N/A
5125 \end_inset 
5126 </cell>
5127 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5128 \begin_inset Text
5129
5130 \layout Standard
5131
5132 N/A
5133 \end_inset 
5134 </cell>
5135 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
5136 \begin_inset Text
5137
5138 \layout Standard
5139
5140 reserved
5141 \end_inset 
5142 </cell>
5143 </row>
5144 <row topline="true">
5145 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5146 \begin_inset Text
5147
5148 \layout Standard
5149
5150 12
5151 \end_inset 
5152 </cell>
5153 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5154 \begin_inset Text
5155
5156 \layout Standard
5157
5158 N/A
5159 \end_inset 
5160 </cell>
5161 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5162 \begin_inset Text
5163
5164 \layout Standard
5165
5166 N/A
5167 \end_inset 
5168 </cell>
5169 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
5170 \begin_inset Text
5171
5172 \layout Standard
5173
5174 reserved
5175 \end_inset 
5176 </cell>
5177 </row>
5178 <row topline="true">
5179 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5180 \begin_inset Text
5181
5182 \layout Standard
5183
5184 13
5185 \end_inset 
5186 </cell>
5187 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5188 \begin_inset Text
5189
5190 \layout Standard
5191
5192 N/A
5193 \end_inset 
5194 </cell>
5195 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5196 \begin_inset Text
5197
5198 \layout Standard
5199
5200 N/A
5201 \end_inset 
5202 </cell>
5203 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
5204 \begin_inset Text
5205
5206 \layout Standard
5207
5208 Application-defined, interpreted by callback or skipped
5209 \end_inset 
5210 </cell>
5211 </row>
5212 <row topline="true">
5213 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5214 \begin_inset Text
5215
5216 \layout Standard
5217
5218 14
5219 \end_inset 
5220 </cell>
5221 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5222 \begin_inset Text
5223
5224 \layout Standard
5225
5226 N/A
5227 \end_inset 
5228 </cell>
5229 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5230 \begin_inset Text
5231
5232 \layout Standard
5233
5234 N/A
5235 \end_inset 
5236 </cell>
5237 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
5238 \begin_inset Text
5239
5240 \layout Standard
5241
5242 Speex in-band signaling
5243 \end_inset 
5244 </cell>
5245 </row>
5246 <row topline="true" bottomline="true">
5247 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5248 \begin_inset Text
5249
5250 \layout Standard
5251
5252 15
5253 \end_inset 
5254 </cell>
5255 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5256 \begin_inset Text
5257
5258 \layout Standard
5259
5260 N/A
5261 \end_inset 
5262 </cell>
5263 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5264 \begin_inset Text
5265
5266 \layout Standard
5267
5268 N/A
5269 \end_inset 
5270 </cell>
5271 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
5272 \begin_inset Text
5273
5274 \layout Standard
5275
5276 Terminator code
5277 \end_inset 
5278 </cell>
5279 </row>
5280 </lyxtabular>
5281
5282 \end_inset 
5283
5284
5285 \layout Caption
5286
5287 Quality versus bit-rate
5288 \begin_inset LatexCommand \label{cap:quality_vs_bps}
5289
5290 \end_inset 
5291
5292
5293 \end_inset 
5294
5295
5296 \layout Subsection
5297
5298 Perceptual enhancement
5299 \begin_inset LatexCommand \index{perceptual enhancement}
5300
5301 \end_inset 
5302
5303
5304 \layout Standard
5305
5306 This part of the codec only applies to the decoder and can even be changed
5307  without affecting inter-operability.
5308  For that reason, the implementation provided and described here should
5309  only be considered as a reference implementation.
5310  The enhancement system is divided into two parts.
5311  First, the synthesis filter 
5312 \begin_inset Formula $S(z)=1/A(z)$
5313 \end_inset 
5314
5315  is replaced by an enhanced filter
5316 \begin_inset Formula \[
5317 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)}\]
5318
5319 \end_inset 
5320
5321 where 
5322 \begin_inset Formula $a_{1}$
5323 \end_inset 
5324
5325  and 
5326 \begin_inset Formula $a_{2}$
5327 \end_inset 
5328
5329  depend on the mode in use and 
5330 \begin_inset Formula $a_{3}=\frac{1}{r}\left(1-\frac{1-ra_{1}}{1-ra_{2}}\right)$
5331 \end_inset 
5332
5333  with 
5334 \begin_inset Formula $r=.9$
5335 \end_inset 
5336
5337 .
5338  The second part of the enhancement consists of using a comb filter to enhance
5339  the pitch in the excitation domain.
5340  
5341 \layout Section
5342 \pagebreak_top 
5343 Speex wideband mode (sub-band CELP)
5344 \begin_inset LatexCommand \index{wideband}
5345
5346 \end_inset 
5347
5348
5349 \begin_inset LatexCommand \label{sec:Speex-wideband-mode}
5350
5351 \end_inset 
5352
5353
5354 \layout Standard
5355
5356 For wideband, the Speex approach uses a 
5357 \emph on 
5358 q
5359 \emph default 
5360 uadrature 
5361 \emph on 
5362 m
5363 \emph default 
5364 irror 
5365 \emph on 
5366 f
5367 \emph default 
5368 ilter
5369 \begin_inset LatexCommand \index{quadrature mirror filter}
5370
5371 \end_inset 
5372
5373  (QMF) to split the band in two.
5374  The 16 kHz signal is thus divided into two 8 kHz signals, one representing
5375  the low band (0-4 kHz), the other the high band (4-8 kHz).
5376  The low band is encoded with the narrowband mode described in section 
5377 \begin_inset LatexCommand \ref{sec:Speex-narrowband-mode}
5378
5379 \end_inset 
5380
5381  in such a way that the resulting 
5382 \begin_inset Quotes eld
5383 \end_inset 
5384
5385 embedded narrowband bit-stream
5386 \begin_inset Quotes erd
5387 \end_inset 
5388
5389  can also be decoded with the narrowband decoder.
5390  Since the low band encoding has already been described, only the high band
5391  encoding is described in this section.
5392 \layout Subsection
5393
5394 Linear Prediction
5395 \layout Standard
5396
5397 The linear prediction part used for the high-band is very similar to what
5398  is done for narrowband.
5399  The only difference is that we use only 12 bits to encode the high-band
5400  LSP's using a multi-stage vector quantizer (MSVQ).
5401  The first level quantizes the 10 coefficients with 6 bits and the error
5402  is then quantized using 6 bits, too.
5403 \layout Subsection
5404
5405 Pitch Prediction
5406 \layout Standard
5407
5408 That part is easy: there's no pitch prediction for the high-band.
5409  There are two reasons for that.
5410  First, there is usually little harmonic structure in this band (above 4
5411  kHz).
5412  Second, it would be very hard to implement since the QMF folds the 4-8
5413  kHz band into 4-0 kHz (reversing the frequency axis), which means that
5414  the location of the harmonics is no longer at multiples of the fundamental
5415  (pitch).
5416 \layout Subsection
5417