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