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