added CELP decoder figure
[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 \begin_inset ERT
3416 status collapsed
3417
3418 \begin_layout Standard
3419
3420
3421 \backslash
3422 clearpage
3423 \end_layout
3424
3425 \end_inset
3426
3427
3428 \end_layout
3429
3430 \begin_layout Section
3431 Introduction to CELP Coding
3432 \begin_inset LatexCommand \index{CELP}
3433
3434 \end_inset
3435
3436
3437 \begin_inset LatexCommand \label{sec:Introduction-to-CELP}
3438
3439 \end_inset
3440
3441
3442 \end_layout
3443
3444 \begin_layout Standard
3445 Speex is based on CELP, which stands for Code Excited Linear Prediction.
3446  This section attempts to introduce the principles behind CELP, so if you
3447  are already familiar with CELP, you can safely skip to section 
3448 \begin_inset LatexCommand \ref{sec:Speex-narrowband-mode}
3449
3450 \end_inset
3451
3452 .
3453  The CELP technique is based on three ideas:
3454 \end_layout
3455
3456 \begin_layout Enumerate
3457 The use of a linear prediction (LP) model to model the vocal tract
3458 \end_layout
3459
3460 \begin_layout Enumerate
3461 The use of (adaptive and fixed) codebook entries as input (excitation) of
3462  the LP model
3463 \end_layout
3464
3465 \begin_layout Enumerate
3466 The search performed in closed-loop in a 
3467 \begin_inset Quotes eld
3468 \end_inset
3469
3470 perceptually weighted domain
3471 \begin_inset Quotes erd
3472 \end_inset
3473
3474
3475 \end_layout
3476
3477 \begin_layout Standard
3478 This section describes the basic ideas behind CELP.
3479  This is still a work in progress.
3480 \end_layout
3481
3482 \begin_layout Subsection
3483 Source-Filter Model of Speech Prediction
3484 \end_layout
3485
3486 \begin_layout Standard
3487 The source-filter model of speech production assumes that the vocal cords
3488  are the source of spectrally flat sound (the excitation signal), and that
3489  the vocal tract acts as a filter to spectrally shape the various sounds
3490  of speech.
3491  While still an approximation, the model is widely used in speech coding
3492  because of its simplicity.Its use is also the reason why most speech codecs
3493  (Speex included) perform badly on music signals.
3494  The different phonemes can be distinguished by their excitation (source)
3495  and spectral shape (filter).
3496  Voiced sounds (e.g.
3497  vowels) have an excitation signal that is periodic and that can be approximated
3498  by an impulse train in the time domain or by regularly-spaced harmonics
3499  in the frequency domain.
3500  On the other hand, fricatives (such as the "s", "sh" and "f" sounds) have
3501  an excitation signal that is similar to white Gaussian noise.
3502  So called voice fricatives (such as "z" and "v") have excitation signal
3503  composed of an harmonic part and a noisy part.
3504 \end_layout
3505
3506 \begin_layout Standard
3507 The source-filter model is usually tied with the use of Linear prediction.
3508  The CELP model is based on source-filter model, as can be seen from the
3509  CELP decoder illustrated in Figure 
3510 \begin_inset LatexCommand \ref{fig:The-CELP-model}
3511
3512 \end_inset
3513
3514 .
3515  
3516 \end_layout
3517
3518 \begin_layout Standard
3519 \begin_inset Float figure
3520 wide false
3521 sideways false
3522 status open
3523
3524 \begin_layout Standard
3525 \begin_inset ERT
3526 status collapsed
3527
3528 \begin_layout Standard
3529
3530
3531 \backslash
3532 begin{center}
3533 \end_layout
3534
3535 \end_inset
3536
3537
3538 \begin_inset Graphics
3539         filename celp_decoder.eps
3540         width 45page%
3541         keepAspectRatio
3542
3543 \end_inset
3544
3545
3546 \begin_inset ERT
3547 status collapsed
3548
3549 \begin_layout Standard
3550
3551
3552 \backslash
3553 end{center}
3554 \end_layout
3555
3556 \end_inset
3557
3558
3559 \end_layout
3560
3561 \begin_layout Caption
3562 The CELP model of speech synthesis (decoder)
3563 \begin_inset LatexCommand \label{fig:The-CELP-model}
3564
3565 \end_inset
3566
3567  
3568 \end_layout
3569
3570 \end_inset
3571
3572
3573 \end_layout
3574
3575 \begin_layout Subsection
3576 Linear Prediction (LPC)
3577 \begin_inset LatexCommand \index{linear prediction}
3578
3579 \end_inset
3580
3581
3582 \end_layout
3583
3584 \begin_layout Standard
3585 Linear prediction is at the base of many speech coding techniques, including
3586  CELP.
3587  The idea behind it is to predict the signal 
3588 \begin_inset Formula $x[n]$
3589 \end_inset
3590
3591  using a linear combination of its past samples:
3592 \end_layout
3593
3594 \begin_layout Standard
3595 \begin_inset Formula \[
3596 y[n]=\sum_{i=1}^{N}a_{i}x[n-i]\]
3597
3598 \end_inset
3599
3600 where 
3601 \begin_inset Formula $y[n]$
3602 \end_inset
3603
3604  is the linear prediction of 
3605 \begin_inset Formula $x[n]$
3606 \end_inset
3607
3608 .
3609  The prediction error is thus given by:
3610 \begin_inset Formula \[
3611 e[n]=x[n]-y[n]=x[n]-\sum_{i=1}^{N}a_{i}x[n-i]\]
3612
3613 \end_inset
3614
3615
3616 \end_layout
3617
3618 \begin_layout Standard
3619 The goal of the LPC analysis is to find the best prediction coefficients
3620  
3621 \begin_inset Formula $a_{i}$
3622 \end_inset
3623
3624  which minimize the quadratic error function:
3625 \begin_inset Formula \[
3626 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}\]
3627
3628 \end_inset
3629
3630 That can be done by making all derivatives 
3631 \begin_inset Formula $\frac{\partial E}{\partial a_{i}}$
3632 \end_inset
3633
3634  equal to zero:
3635 \begin_inset Formula \[
3636 \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\]
3637
3638 \end_inset
3639
3640
3641 \end_layout
3642
3643 \begin_layout Standard
3644 For an order 
3645 \begin_inset Formula $N$
3646 \end_inset
3647
3648  filter, the filter coefficients 
3649 \begin_inset Formula $a_{i}$
3650 \end_inset
3651
3652  are found by solving the system 
3653 \begin_inset Formula $N\times N$
3654 \end_inset
3655
3656  linear system 
3657 \begin_inset Formula $\mathbf{Ra}=\mathbf{r}$
3658 \end_inset
3659
3660 , where
3661 \begin_inset Formula \[
3662 \mathbf{R}=\left[\begin{array}{cccc}
3663 R(0) & R(1) & \cdots & R(N-1)\\
3664 R(1) & R(0) & \cdots & R(N-2)\\
3665 \vdots & \vdots & \ddots & \vdots\\
3666 R(N-1) & R(N-2) & \cdots & R(0)\end{array}\right]\]
3667
3668 \end_inset
3669
3670
3671 \begin_inset Formula \[
3672 \mathbf{r}=\left[\begin{array}{c}
3673 R(1)\\
3674 R(2)\\
3675 \vdots\\
3676 R(N)\end{array}\right]\]
3677
3678 \end_inset
3679
3680 with 
3681 \begin_inset Formula $R(m)$
3682 \end_inset
3683
3684 , the auto-correlation
3685 \begin_inset LatexCommand \index{auto-correlation}
3686
3687 \end_inset
3688
3689  of the signal 
3690 \begin_inset Formula $x[n]$
3691 \end_inset
3692
3693 , computed as:
3694 \end_layout
3695
3696 \begin_layout Standard
3697 \begin_inset Formula \[
3698 R(m)=\sum_{i=0}^{N-1}x[i]x[i-m]\]
3699
3700 \end_inset
3701
3702
3703 \end_layout
3704
3705 \begin_layout Standard
3706 Because 
3707 \begin_inset Formula $\mathbf{R}$
3708 \end_inset
3709
3710  is toeplitz hermitian, the Levinson-Durbin
3711 \begin_inset LatexCommand \index{Levinson-Durbin}
3712
3713 \end_inset
3714
3715  algorithm can be used, making the solution to the problem 
3716 \begin_inset Formula $\mathcal{O}\left(N^{2}\right)$
3717 \end_inset
3718
3719  instead of 
3720 \begin_inset Formula $\mathcal{O}\left(N^{3}\right)$
3721 \end_inset
3722
3723 .
3724  Also, it can be proven that all the roots of 
3725 \begin_inset Formula $A(z)$
3726 \end_inset
3727
3728  are within the unit circle, which means that 
3729 \begin_inset Formula $1/A(z)$
3730 \end_inset
3731
3732  is always stable.
3733  This is in theory; in practice because of finite precision, there are two
3734  commonly used techniques to make sure we have a stable filter.
3735  First, we multiply 
3736 \begin_inset Formula $R(0)$
3737 \end_inset
3738
3739  by a number slightly above one (such as 1.0001), which is equivalent to
3740  adding noise to the signal.
3741  Also, we can apply a window to the auto-correlation, which is equivalent
3742  to filtering in the frequency domain, reducing sharp resonances.
3743 \end_layout
3744
3745 \begin_layout Subsection
3746 Pitch Prediction
3747 \begin_inset LatexCommand \index{pitch}
3748
3749 \end_inset
3750
3751
3752 \end_layout
3753
3754 \begin_layout Standard
3755 During voiced segments, the speech signal is periodic, so it is possible
3756  to take advantage of that property by approximating the excitation signal
3757  
3758 \begin_inset Formula $e[n]$
3759 \end_inset
3760
3761  by a gain times the past of the excitation:
3762 \end_layout
3763
3764 \begin_layout Standard
3765 \begin_inset Formula \[
3766 e[n]\simeq p[n]=\beta e[n-T]\]
3767
3768 \end_inset
3769
3770
3771 \end_layout
3772
3773 \begin_layout Standard
3774 where 
3775 \begin_inset Formula $T$
3776 \end_inset
3777
3778  is the pitch period, 
3779 \begin_inset Formula $\beta$
3780 \end_inset
3781
3782  is the pitch gain.
3783  We call that long-term prediction since the excitation is predicted from
3784  
3785 \begin_inset Formula $e[n-T]$
3786 \end_inset
3787
3788  with 
3789 \begin_inset Formula $T\gg N$
3790 \end_inset
3791
3792 .
3793 \end_layout
3794
3795 \begin_layout Subsection
3796 Innovation Codebook
3797 \end_layout
3798
3799 \begin_layout Standard
3800 The final excitation 
3801 \begin_inset Formula $e[n]$
3802 \end_inset
3803
3804  will be the sum of the pitch prediction and an 
3805 \emph on
3806 innovation
3807 \emph default
3808  signal 
3809 \begin_inset Formula $c[n]$
3810 \end_inset
3811
3812  taken from a fixed codebook, hence the name 
3813 \emph on
3814 Code
3815 \emph default
3816  Excited Linear Prediction.
3817  The final excitation is given by:
3818 \end_layout
3819
3820 \begin_layout Standard
3821 \begin_inset Formula \[
3822 e[n]=p[n]+c[n]=\beta e[n-T]+c[n]\]
3823
3824 \end_inset
3825
3826 The quantization of 
3827 \begin_inset Formula $c[n]$
3828 \end_inset
3829
3830  is where most of the bits in a CELP codec are allocated.
3831  It represents the information that couldn't be obtained either from linear
3832  prediction or pitch prediction.
3833  In the 
3834 \emph on
3835 z
3836 \emph default
3837 -domain we can represent the final signal 
3838 \begin_inset Formula $X(z)$
3839 \end_inset
3840
3841  as 
3842 \begin_inset Formula \[
3843 X(z)=\frac{C(z)}{A(z)\left(1-\beta z^{-T}\right)}\]
3844
3845 \end_inset
3846
3847
3848 \end_layout
3849
3850 \begin_layout Subsection
3851 Noise Weighting
3852 \begin_inset LatexCommand \index{error weighting}
3853
3854 \end_inset
3855
3856
3857 \begin_inset LatexCommand \index{analysis-by-synthesis}
3858
3859 \end_inset
3860
3861
3862 \end_layout
3863
3864 \begin_layout Standard
3865 Most (if not all) modern audio codecs attempt to 
3866 \begin_inset Quotes eld
3867 \end_inset
3868
3869 shape
3870 \begin_inset Quotes erd
3871 \end_inset
3872
3873  the noise so that it appears mostly in the frequency regions where the
3874  ear cannot detect it.
3875  For example, the ear is more tolerant to noise in parts of the spectrum
3876  that are louder and 
3877 \emph on
3878 vice versa
3879 \emph default
3880 .
3881  In order to maximize speech quality, CELP codecs minimize the mean square
3882  of the error (noise) in the perceptually weighted domain.
3883  This means that a perceptual noise weighting filter 
3884 \begin_inset Formula $W(z)$
3885 \end_inset
3886
3887  is applied to the error signal in the encoder.
3888  In most CELP codecs, 
3889 \begin_inset Formula $W(z)$
3890 \end_inset
3891
3892  is a pole-zero weighting filter derived from the linear prediction coefficients
3893  (LPC), generally using bandwidth expansion.
3894  Let the spectral envelope be represented by the synthesis filter 
3895 \begin_inset Formula $1/A(z)$
3896 \end_inset
3897
3898 , CELP codecs typically derive the noise weighting filter as: 
3899 \begin_inset Formula \begin{equation}
3900 W(z)=\frac{A(z/\gamma_{1})}{A(z/\gamma_{2})}\label{eq:gamma-weighting}\end{equation}
3901
3902 \end_inset
3903
3904 where 
3905 \begin_inset Formula $\gamma_{1}=0.9$
3906 \end_inset
3907
3908  and 
3909 \begin_inset Formula $\gamma_{2}=0.6$
3910 \end_inset
3911
3912  in the Speex reference implementation.
3913  If a filter 
3914 \begin_inset Formula $A(z)$
3915 \end_inset
3916
3917  has (complex) poles at 
3918 \begin_inset Formula $p_{i}$
3919 \end_inset
3920
3921  in the 
3922 \begin_inset Formula $z$
3923 \end_inset
3924
3925 -plane, the filter 
3926 \begin_inset Formula $A(z/\gamma)$
3927 \end_inset
3928
3929  will have its poles at 
3930 \begin_inset Formula $p'_{i}=\gamma p_{i}$
3931 \end_inset
3932
3933 , making it a flatter version of 
3934 \begin_inset Formula $A(z)$
3935 \end_inset
3936
3937 .
3938 \end_layout
3939
3940 \begin_layout Standard
3941 The weighting filter is applied to the error signal used to optimize the
3942  codebook search through analysis-by-synthesis (AbS).
3943  This results in a spectral shape of the noise that tends towards 
3944 \begin_inset Formula $1/W(z)$
3945 \end_inset
3946
3947 .
3948  While the simplicity of the model has been an important reason for the
3949  success of CELP, it remains that 
3950 \begin_inset Formula $W(z)$
3951 \end_inset
3952
3953  is a very rough approximation for the perceptually optimal noise weighting
3954  function.
3955  Fig.
3956  
3957 \begin_inset LatexCommand \ref{cap:Standard-noise-shaping}
3958
3959 \end_inset
3960
3961  illustrates the noise shaping that results from Eq.
3962  
3963 \begin_inset LatexCommand \ref{eq:gamma-weighting}
3964
3965 \end_inset
3966
3967 .
3968  Throughout this paper, we refer to 
3969 \begin_inset Formula $W(z)$
3970 \end_inset
3971
3972  as the noise weighting filter and to 
3973 \begin_inset Formula $1/W(z)$
3974 \end_inset
3975
3976  as the noise shaping filter (or curve).
3977 \end_layout
3978
3979 \begin_layout Standard
3980 \begin_inset Float figure
3981 wide false
3982 sideways false
3983 status open
3984
3985 \begin_layout Standard
3986 \begin_inset ERT
3987 status collapsed
3988
3989 \begin_layout Standard
3990
3991
3992 \backslash
3993 begin{center}
3994 \end_layout
3995
3996 \end_inset
3997
3998
3999 \begin_inset Graphics
4000         filename ref_shaping.eps
4001         width 45page%
4002         keepAspectRatio
4003
4004 \end_inset
4005
4006
4007 \begin_inset ERT
4008 status collapsed
4009
4010 \begin_layout Standard
4011
4012
4013 \backslash
4014 end{center}
4015 \end_layout
4016
4017 \end_inset
4018
4019
4020 \end_layout
4021
4022 \begin_layout Caption
4023 Standard noise shaping in CELP.
4024  Arbitrary y-axis offset.
4025 \begin_inset LatexCommand \label{cap:Standard-noise-shaping}
4026
4027 \end_inset
4028
4029
4030 \end_layout
4031
4032 \end_inset
4033
4034
4035 \end_layout
4036
4037 \begin_layout Subsection
4038 Analysis-by-Synthesis
4039 \end_layout
4040
4041 \begin_layout Standard
4042 One of the main principles behind CELP is called Analysis-by-Synthesis (AbS),
4043  meaning that the encoding (analysis) is performed by perceptually optimising
4044  the decoded (synthesis) signal in a closed loop.
4045  In theory, the best CELP stream would be produced by trying all possible
4046  bit combinations and selecting the one that produces the best-sounding
4047  decoded signal.
4048  This is obviously not possible in practice for two reasons: the required
4049  complexity is beyond any currently available hardware and the 
4050 \begin_inset Quotes eld
4051 \end_inset
4052
4053 best sounding
4054 \begin_inset Quotes erd
4055 \end_inset
4056
4057  selection criterion implies a human listener.
4058  
4059 \end_layout
4060
4061 \begin_layout Standard
4062 In order to achieve real-time encoding using limited computing resources,
4063  the CELP optimisation is broken down into smaller, more manageable, sequential
4064  searches using the perceptual weighting function described earlier.
4065 \end_layout
4066
4067 \begin_layout Standard
4068
4069 \newpage
4070
4071 \end_layout
4072
4073 \begin_layout Section
4074 Speex narrowband mode
4075 \begin_inset LatexCommand \label{sec:Speex-narrowband-mode}
4076
4077 \end_inset
4078
4079
4080 \begin_inset LatexCommand \index{narrowband}
4081
4082 \end_inset
4083
4084
4085 \end_layout
4086
4087 \begin_layout Standard
4088 This section looks at how Speex works for narrowband (
4089 \begin_inset Formula $8\:\mathrm{kHz}$
4090 \end_inset
4091
4092  sampling rate) operation.
4093  The frame size for this mode is 
4094 \begin_inset Formula $20\:\mathrm{ms}$
4095 \end_inset
4096
4097 , corresponding to 160 samples.
4098  Each frame is also subdivided into 4 sub-frames of 40 samples each.
4099 \end_layout
4100
4101 \begin_layout Standard
4102 Also many design decisions were based on the original goals and assumptions:
4103 \end_layout
4104
4105 \begin_layout Itemize
4106 Minimizing the amount of information extracted from past frames (for robustness
4107  to packet loss)
4108 \end_layout
4109
4110 \begin_layout Itemize
4111 Dynamically-selectable codebooks (LSP, pitch and innovation)
4112 \end_layout
4113
4114 \begin_layout Itemize
4115 sub-vector fixed (innovation) codebooks
4116 \end_layout
4117
4118 \begin_layout Subsection
4119 Whole-Frame Analysis
4120 \begin_inset LatexCommand \index{linear prediction}
4121
4122 \end_inset
4123
4124
4125 \end_layout
4126
4127 \begin_layout Standard
4128 In narrowband, Speex frames are 20 ms long (160 samples) and are subdivided
4129  in 4 sub-frames of 5 ms each (40 samples).
4130  For most narrowband bit-rates (8 kbps and above), the only parameters encoded
4131  at the frame level are the Line Spectral Pairs (LSP) and a global excitation
4132  gain 
4133 \begin_inset Formula $g_{frame}$
4134 \end_inset
4135
4136 , as shown in Fig.
4137  
4138 \begin_inset LatexCommand \ref{cap:Frame-open-loop-analysis}
4139
4140 \end_inset
4141
4142 .
4143  All other parameters are encoded at the sub-frame level.
4144 \end_layout
4145
4146 \begin_layout Standard
4147 Linear prediction analysis is performed once per frame using an asymmetric
4148  Hamming window centered on the fourth sub-frame.
4149  Because linear prediction coefficients (LPC) are not robust to quantization,
4150  they are first are converted to line spectral pairs (LSP)
4151 \begin_inset LatexCommand \index{line spectral pair}
4152
4153 \end_inset
4154
4155 .
4156  The LSP's are considered to be associated to the 
4157 \begin_inset Formula $4^{th}$
4158 \end_inset
4159
4160  sub-frames and the LSP's associated to the first 3 sub-frames are linearly
4161  interpolated using the current and previous LSP coefficients.
4162  The LSP coefficients and converted back to the LPC filter 
4163 \begin_inset Formula $\hat{A}(z)$
4164 \end_inset
4165
4166 .
4167  The non-quantized interpolated filter is denoted 
4168 \begin_inset Formula $A(z)$
4169 \end_inset
4170
4171  and can be used for the weighting filter 
4172 \begin_inset Formula $W(z)$
4173 \end_inset
4174
4175  because it does not need to be available to the decoder.
4176  
4177 \end_layout
4178
4179 \begin_layout Standard
4180 To make Speex more robust to packet loss, no prediction is applied on the
4181  LSP coefficients prior to quantization.
4182  The LSPs are encoded using vector quantizatin (VQ) with 30 bits for higher
4183  quality modes and 18 bits for lower quality.
4184 \end_layout
4185
4186 \begin_layout Standard
4187 \begin_inset Float figure
4188 wide false
4189 sideways false
4190 status open
4191
4192 \begin_layout Standard
4193 \begin_inset ERT
4194 status collapsed
4195
4196 \begin_layout Standard
4197
4198
4199 \backslash
4200 begin{center}
4201 \end_layout
4202
4203 \end_inset
4204
4205
4206 \begin_inset Graphics
4207         filename speex_analysis.eps
4208         width 35page%
4209
4210 \end_inset
4211
4212
4213 \begin_inset ERT
4214 status collapsed
4215
4216 \begin_layout Standard
4217
4218
4219 \backslash
4220 end{center}
4221 \end_layout
4222
4223 \end_inset
4224
4225
4226 \end_layout
4227
4228 \begin_layout Caption
4229 Frame open-loop analysis
4230 \begin_inset LatexCommand \label{cap:Frame-open-loop-analysis}
4231
4232 \end_inset
4233
4234
4235 \end_layout
4236
4237 \end_inset
4238
4239
4240 \end_layout
4241
4242 \begin_layout Subsection
4243 Sub-Frame Analysis-by-Synthesis
4244 \end_layout
4245
4246 \begin_layout Standard
4247 \begin_inset Float figure
4248 wide false
4249 sideways false
4250 status open
4251
4252 \begin_layout Standard
4253 \begin_inset ERT
4254 status collapsed
4255
4256 \begin_layout Standard
4257
4258
4259 \backslash
4260 begin{center}
4261 \end_layout
4262
4263 \end_inset
4264
4265
4266 \begin_inset Graphics
4267         filename speex_abs.eps
4268         lyxscale 75
4269         width 40page%
4270
4271 \end_inset
4272
4273
4274 \begin_inset ERT
4275 status collapsed
4276
4277 \begin_layout Standard
4278
4279
4280 \backslash
4281 end{center}
4282 \end_layout
4283
4284 \end_inset
4285
4286
4287 \end_layout
4288
4289 \begin_layout Caption
4290 Analysis-by-synthesis closed-loop optimization on a sub-frame.
4291 \begin_inset LatexCommand \label{cap:Sub-frame-AbS}
4292
4293 \end_inset
4294
4295
4296 \end_layout
4297
4298 \end_inset
4299
4300
4301 \end_layout
4302
4303 \begin_layout Standard
4304 The analysis-by-synthesis (AbS) encoder loop is described in Fig.
4305  
4306 \begin_inset LatexCommand \ref{cap:Sub-frame-AbS}
4307
4308 \end_inset
4309
4310 .
4311  There are three main aspects where Speex significantly differs from most
4312  other CELP codecs.
4313  First, while most recent CELP codecs make use of fractional pitch estimation
4314  with a single gain, Speex uses an integer to encode the pitch period, but
4315  uses a 3-tap predictor (3 gains).
4316  The adaptive codebook contribution 
4317 \begin_inset Formula $e_{a}[n]$
4318 \end_inset
4319
4320  can thus be expressed as:
4321 \begin_inset Formula \begin{equation}
4322 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}
4323
4324 \end_inset
4325
4326 where 
4327 \begin_inset Formula $g_{0}$
4328 \end_inset
4329
4330
4331 \begin_inset Formula $g_{1}$
4332 \end_inset
4333
4334  and 
4335 \begin_inset Formula $g_{2}$
4336 \end_inset
4337
4338  are the jointly quantized pitch gains and 
4339 \begin_inset Formula $e[n]$
4340 \end_inset
4341
4342  is the codec excitation memory.
4343  It is worth noting that when the pitch is smaller than the sub-frame size,
4344  we repeat the excitation at a period 
4345 \begin_inset Formula $T$
4346 \end_inset
4347
4348 .
4349  For example, when 
4350 \begin_inset Formula $n-T+1\geq0$
4351 \end_inset
4352
4353 , we use 
4354 \begin_inset Formula $n-2T+1$
4355 \end_inset
4356
4357  instead.
4358  In most modes, the pitch period is encoded with 7 bits in the 
4359 \begin_inset Formula $\left[17,144\right]$
4360 \end_inset
4361
4362  range and the 
4363 \begin_inset Formula $\beta_{i}$
4364 \end_inset
4365
4366  coefficients are vector-quantized using 7 bits at higher bit-rates (15
4367  kbps narrowband and above) and 5 bits at lower bit-rates (11 kbps narrowband
4368  and below).
4369 \end_layout
4370
4371 \begin_layout Standard
4372 Many current CELP codecs use moving average (MA) prediction to encode the
4373  fixed codebook gain.
4374  This provides slightly better coding at the expense of introducing a dependency
4375  on previously encoded frames.
4376  A second difference is that Speex encodes the fixed codebook gain as the
4377  product of the global excitation gain 
4378 \begin_inset Formula $g_{frame}$
4379 \end_inset
4380
4381  with a sub-frame gain corrections 
4382 \begin_inset Formula $g_{subf}$
4383 \end_inset
4384
4385 .
4386  This increases robustness to packet loss by eliminating the inter-frame
4387  dependency.
4388  The sub-frame gain correction is encoded before the fixed codebook is searched
4389  (not closed-loop optimized) and uses between 0 and 3 bits per sub-frame,
4390  depending on the bit-rate.
4391 \end_layout
4392
4393 \begin_layout Standard
4394 The third difference is that Speex uses sub-vector quantization of the innovatio
4395 n (fixed codebook) signal instead of an algebraic codebook.
4396  Each sub-frame is divided into sub-vectors of lengths ranging between 5
4397  and 20 samples.
4398  Each sub-vector is chosen from a bitrate-dependent codebook and all sub-vectors
4399  are concatenated to form a sub-frame.
4400  As an example, the 3.95 kbps mode uses a sub-vector size of 20 samples with
4401  32 entries in the codebook (5 bits).
4402  This means that the innovation is encoded with 10 bits per sub-frame, or
4403  2000 bps.
4404  On the other hand, the 18.2 kbps mode uses a sub-vector size of 5 samples
4405  with 256 entries in the codebook (8 bits), so the innovation uses 64 bits
4406  per sub-frame, or 12800 bps.
4407  
4408 \end_layout
4409
4410 \begin_layout Subsection
4411 Bit allocation
4412 \end_layout
4413
4414 \begin_layout Standard
4415 There are 7 different narrowband bit-rates defined for Speex, ranging from
4416  250 bps to 24.6 kbps, although the modes below 5.9 kbps should not be used
4417  for speech.
4418  The bit-allocation for each mode is detailed in table 
4419 \begin_inset LatexCommand \ref{cap:bits-narrowband}
4420
4421 \end_inset
4422
4423 .
4424  Each frame starts with the mode ID encoded with 4 bits which allows a range
4425  from 0 to 15, though only the first 7 values are used (the others are reserved).
4426  The parameters are listed in the table in the order they are packed in
4427  the bit-stream.
4428  All frame-based parameters are packed before sub-frame parameters.
4429  The parameters for a certain sub-frame are all packed before the following
4430  sub-frame is packed.
4431  Note that the 
4432 \begin_inset Quotes eld
4433 \end_inset
4434
4435 OL
4436 \begin_inset Quotes erd
4437 \end_inset
4438
4439  in the parameter description means that the parameter is an open loop estimatio
4440 n based on the whole frame.
4441 \end_layout
4442
4443 \begin_layout Standard
4444 \begin_inset Float table
4445 placement h
4446 wide true
4447 sideways false
4448 status open
4449
4450 \begin_layout Standard
4451 \begin_inset Tabular
4452 <lyxtabular version="3" rows="12" columns="11">
4453 <features>
4454 <column alignment="center" valignment="top" leftline="true" width="0pt">
4455 <column alignment="center" valignment="top" leftline="true" width="0pt">
4456 <column alignment="center" valignment="top" leftline="true" width="0pt">
4457 <column alignment="center" valignment="top" leftline="true" width="0pt">
4458 <column alignment="center" valignment="top" leftline="true" width="0pt">
4459 <column alignment="center" valignment="top" leftline="true" width="0pt">
4460 <column alignment="center" valignment="top" leftline="true" width="0pt">
4461 <column alignment="center" valignment="top" leftline="true" width="0pt">
4462 <column alignment="center" valignment="top" leftline="true" width="0pt">
4463 <column alignment="center" valignment="top" leftline="true" width="0pt">
4464 <column alignment="center" valignment="top" leftline="true" rightline="true" width="0pt">
4465 <row topline="true" bottomline="true">
4466 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4467 \begin_inset Text
4468
4469 \begin_layout Standard
4470 Parameter
4471 \end_layout
4472
4473 \end_inset
4474 </cell>
4475 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4476 \begin_inset Text
4477
4478 \begin_layout Standard
4479 Update rate
4480 \end_layout
4481
4482 \end_inset
4483 </cell>
4484 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4485 \begin_inset Text
4486
4487 \begin_layout Standard
4488 0
4489 \end_layout
4490
4491 \end_inset
4492 </cell>
4493 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4494 \begin_inset Text
4495
4496 \begin_layout Standard
4497 1
4498 \end_layout
4499
4500 \end_inset
4501 </cell>
4502 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4503 \begin_inset Text
4504
4505 \begin_layout Standard
4506 2
4507 \end_layout
4508
4509 \end_inset
4510 </cell>
4511 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4512 \begin_inset Text
4513
4514 \begin_layout Standard
4515 3
4516 \end_layout
4517
4518 \end_inset
4519 </cell>
4520 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4521 \begin_inset Text
4522
4523 \begin_layout Standard
4524 4
4525 \end_layout
4526
4527 \end_inset
4528 </cell>
4529 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4530 \begin_inset Text
4531
4532 \begin_layout Standard
4533 5
4534 \end_layout
4535
4536 \end_inset
4537 </cell>
4538 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
4539 \begin_inset Text
4540
4541 \begin_layout Standard
4542 6
4543 \end_layout
4544
4545 \end_inset
4546 </cell>
4547 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
4548 \begin_inset Text
4549
4550 \begin_layout Standard
4551 7
4552 \end_layout
4553
4554 \end_inset
4555 </cell>
4556 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
4557 \begin_inset Text
4558
4559 \begin_layout Standard
4560 8
4561 \end_layout
4562
4563 \end_inset
4564 </cell>
4565 </row>
4566 <row topline="true">
4567 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4568 \begin_inset Text
4569
4570 \begin_layout Standard
4571 Wideband bit
4572 \end_layout
4573
4574 \end_inset
4575 </cell>
4576 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4577 \begin_inset Text
4578
4579 \begin_layout Standard
4580 frame
4581 \end_layout
4582
4583 \end_inset
4584 </cell>
4585 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4586 \begin_inset Text
4587
4588 \begin_layout Standard
4589 1
4590 \end_layout
4591
4592 \end_inset
4593 </cell>
4594 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4595 \begin_inset Text
4596
4597 \begin_layout Standard
4598 1
4599 \end_layout
4600
4601 \end_inset
4602 </cell>
4603 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4604 \begin_inset Text
4605
4606 \begin_layout Standard
4607 1
4608 \end_layout
4609
4610 \end_inset
4611 </cell>
4612 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4613 \begin_inset Text
4614
4615 \begin_layout Standard
4616 1
4617 \end_layout
4618
4619 \end_inset
4620 </cell>
4621 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4622 \begin_inset Text
4623
4624 \begin_layout Standard
4625 1
4626 \end_layout
4627
4628 \end_inset
4629 </cell>
4630 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4631 \begin_inset Text
4632
4633 \begin_layout Standard
4634 1
4635 \end_layout
4636
4637 \end_inset
4638 </cell>
4639 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
4640 \begin_inset Text
4641
4642 \begin_layout Standard
4643 1
4644 \end_layout
4645
4646 \end_inset
4647 </cell>
4648 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
4649 \begin_inset Text
4650
4651 \begin_layout Standard
4652 1
4653 \end_layout
4654
4655 \end_inset
4656 </cell>
4657 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
4658 \begin_inset Text
4659
4660 \begin_layout Standard
4661 1
4662 \end_layout
4663
4664 \end_inset
4665 </cell>
4666 </row>
4667 <row topline="true">
4668 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4669 \begin_inset Text
4670
4671 \begin_layout Standard
4672 Mode ID
4673 \end_layout
4674
4675 \end_inset
4676 </cell>
4677 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4678 \begin_inset Text
4679
4680 \begin_layout Standard
4681 frame
4682 \end_layout
4683
4684 \end_inset
4685 </cell>
4686 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4687 \begin_inset Text
4688
4689 \begin_layout Standard
4690 4
4691 \end_layout
4692
4693 \end_inset
4694 </cell>
4695 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4696 \begin_inset Text
4697
4698 \begin_layout Standard
4699 4
4700 \end_layout
4701
4702 \end_inset
4703 </cell>
4704 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4705 \begin_inset Text
4706
4707 \begin_layout Standard
4708 4
4709 \end_layout
4710
4711 \end_inset
4712 </cell>
4713 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4714 \begin_inset Text
4715
4716 \begin_layout Standard
4717 4
4718 \end_layout
4719
4720 \end_inset
4721 </cell>
4722 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4723 \begin_inset Text
4724
4725 \begin_layout Standard
4726 4
4727 \end_layout
4728
4729 \end_inset
4730 </cell>
4731 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4732 \begin_inset Text
4733
4734 \begin_layout Standard
4735 4
4736 \end_layout
4737
4738 \end_inset
4739 </cell>
4740 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
4741 \begin_inset Text
4742
4743 \begin_layout Standard
4744 4
4745 \end_layout
4746
4747 \end_inset
4748 </cell>
4749 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
4750 \begin_inset Text
4751
4752 \begin_layout Standard
4753 4
4754 \end_layout
4755
4756 \end_inset
4757 </cell>
4758 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
4759 \begin_inset Text
4760
4761 \begin_layout Standard
4762 4
4763 \end_layout
4764
4765 \end_inset
4766 </cell>
4767 </row>
4768 <row topline="true">
4769 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4770 \begin_inset Text
4771
4772 \begin_layout Standard
4773 LSP
4774 \end_layout
4775
4776 \end_inset
4777 </cell>
4778 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4779 \begin_inset Text
4780
4781 \begin_layout Standard
4782 frame
4783 \end_layout
4784
4785 \end_inset
4786 </cell>
4787 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4788 \begin_inset Text
4789
4790 \begin_layout Standard
4791 0
4792 \end_layout
4793
4794 \end_inset
4795 </cell>
4796 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4797 \begin_inset Text
4798
4799 \begin_layout Standard
4800 18
4801 \end_layout
4802
4803 \end_inset
4804 </cell>
4805 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4806 \begin_inset Text
4807
4808 \begin_layout Standard
4809 18
4810 \end_layout
4811
4812 \end_inset
4813 </cell>
4814 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4815 \begin_inset Text
4816
4817 \begin_layout Standard
4818 18
4819 \end_layout
4820
4821 \end_inset
4822 </cell>
4823 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4824 \begin_inset Text
4825
4826 \begin_layout Standard
4827 18
4828 \end_layout
4829
4830 \end_inset
4831 </cell>
4832 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4833 \begin_inset Text
4834
4835 \begin_layout Standard
4836 30
4837 \end_layout
4838
4839 \end_inset
4840 </cell>
4841 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
4842 \begin_inset Text
4843
4844 \begin_layout Standard
4845 30
4846 \end_layout
4847
4848 \end_inset
4849 </cell>
4850 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
4851 \begin_inset Text
4852
4853 \begin_layout Standard
4854 30
4855 \end_layout
4856
4857 \end_inset
4858 </cell>
4859 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
4860 \begin_inset Text
4861
4862 \begin_layout Standard
4863 18
4864 \end_layout
4865
4866 \end_inset
4867 </cell>
4868 </row>
4869 <row topline="true">
4870 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4871 \begin_inset Text
4872
4873 \begin_layout Standard
4874 OL pitch
4875 \end_layout
4876
4877 \end_inset
4878 </cell>
4879 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4880 \begin_inset Text
4881
4882 \begin_layout Standard
4883 frame
4884 \end_layout
4885
4886 \end_inset
4887 </cell>
4888 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4889 \begin_inset Text
4890
4891 \begin_layout Standard
4892 0
4893 \end_layout
4894
4895 \end_inset
4896 </cell>
4897 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4898 \begin_inset Text
4899
4900 \begin_layout Standard
4901 7
4902 \end_layout
4903
4904 \end_inset
4905 </cell>
4906 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4907 \begin_inset Text
4908
4909 \begin_layout Standard
4910 7
4911 \end_layout
4912
4913 \end_inset
4914 </cell>
4915 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4916 \begin_inset Text
4917
4918 \begin_layout Standard
4919 0
4920 \end_layout
4921
4922 \end_inset
4923 </cell>
4924 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4925 \begin_inset Text
4926
4927 \begin_layout Standard
4928 0
4929 \end_layout
4930
4931 \end_inset
4932 </cell>
4933 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4934 \begin_inset Text
4935
4936 \begin_layout Standard
4937 0
4938 \end_layout
4939
4940 \end_inset
4941 </cell>
4942 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
4943 \begin_inset Text
4944
4945 \begin_layout Standard
4946 0
4947 \end_layout
4948
4949 \end_inset
4950 </cell>
4951 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
4952 \begin_inset Text
4953
4954 \begin_layout Standard
4955 0
4956 \end_layout
4957
4958 \end_inset
4959 </cell>
4960 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
4961 \begin_inset Text
4962
4963 \begin_layout Standard
4964 7
4965 \end_layout
4966
4967 \end_inset
4968 </cell>
4969 </row>
4970 <row topline="true">
4971 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4972 \begin_inset Text
4973
4974 \begin_layout Standard
4975 OL pitch gain
4976 \end_layout
4977
4978 \end_inset
4979 </cell>
4980 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4981 \begin_inset Text
4982
4983 \begin_layout Standard
4984 frame
4985 \end_layout
4986
4987 \end_inset
4988 </cell>
4989 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4990 \begin_inset Text
4991
4992 \begin_layout Standard
4993 0
4994 \end_layout
4995
4996 \end_inset
4997 </cell>
4998 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4999 \begin_inset Text
5000
5001 \begin_layout Standard
5002 4
5003 \end_layout
5004
5005 \end_inset
5006 </cell>
5007 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5008 \begin_inset Text
5009
5010 \begin_layout Standard
5011 0
5012 \end_layout
5013
5014 \end_inset
5015 </cell>
5016 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5017 \begin_inset Text
5018
5019 \begin_layout Standard
5020 0
5021 \end_layout
5022
5023 \end_inset
5024 </cell>
5025 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5026 \begin_inset Text
5027
5028 \begin_layout Standard
5029 0
5030 \end_layout
5031
5032 \end_inset
5033 </cell>
5034 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5035 \begin_inset Text
5036
5037 \begin_layout Standard
5038 0
5039 \end_layout
5040
5041 \end_inset
5042 </cell>
5043 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
5044 \begin_inset Text
5045
5046 \begin_layout Standard
5047 0
5048 \end_layout
5049
5050 \end_inset
5051 </cell>
5052 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
5053 \begin_inset Text
5054
5055 \begin_layout Standard
5056 0
5057 \end_layout
5058
5059 \end_inset
5060 </cell>
5061 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
5062 \begin_inset Text
5063
5064 \begin_layout Standard
5065 4
5066 \end_layout
5067
5068 \end_inset
5069 </cell>
5070 </row>
5071 <row topline="true">
5072 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5073 \begin_inset Text
5074
5075 \begin_layout Standard
5076 OL Exc gain
5077 \end_layout
5078
5079 \end_inset
5080 </cell>
5081 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5082 \begin_inset Text
5083
5084 \begin_layout Standard
5085 frame
5086 \end_layout
5087
5088 \end_inset
5089 </cell>
5090 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5091 \begin_inset Text
5092
5093 \begin_layout Standard
5094 0
5095 \end_layout
5096
5097 \end_inset
5098 </cell>
5099 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5100 \begin_inset Text
5101
5102 \begin_layout Standard
5103 5
5104 \end_layout
5105
5106 \end_inset
5107 </cell>
5108 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5109 \begin_inset Text
5110
5111 \begin_layout Standard
5112 5
5113 \end_layout
5114
5115 \end_inset
5116 </cell>
5117 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5118 \begin_inset Text
5119
5120 \begin_layout Standard
5121 5
5122 \end_layout
5123
5124 \end_inset
5125 </cell>
5126 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5127 \begin_inset Text
5128
5129 \begin_layout Standard
5130 5
5131 \end_layout
5132
5133 \end_inset
5134 </cell>
5135 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5136 \begin_inset Text
5137
5138 \begin_layout Standard
5139 5
5140 \end_layout
5141
5142 \end_inset
5143 </cell>
5144 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
5145 \begin_inset Text
5146
5147 \begin_layout Standard
5148 5
5149 \end_layout
5150
5151 \end_inset
5152 </cell>
5153 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
5154 \begin_inset Text
5155
5156 \begin_layout Standard
5157 5
5158 \end_layout
5159
5160 \end_inset
5161 </cell>
5162 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
5163 \begin_inset Text
5164
5165 \begin_layout Standard
5166 5
5167 \end_layout
5168
5169 \end_inset
5170 </cell>
5171 </row>
5172 <row topline="true">
5173 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5174 \begin_inset Text
5175
5176 \begin_layout Standard
5177 Fine pitch
5178 \end_layout
5179
5180 \end_inset
5181 </cell>
5182 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5183 \begin_inset Text
5184
5185 \begin_layout Standard
5186 sub-frame
5187 \end_layout
5188
5189 \end_inset
5190 </cell>
5191 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5192 \begin_inset Text
5193
5194 \begin_layout Standard
5195 0
5196 \end_layout
5197
5198 \end_inset
5199 </cell>
5200 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5201 \begin_inset Text
5202
5203 \begin_layout Standard
5204 0
5205 \end_layout
5206
5207 \end_inset
5208 </cell>
5209 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5210 \begin_inset Text
5211
5212 \begin_layout Standard
5213 0
5214 \end_layout
5215
5216 \end_inset
5217 </cell>
5218 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5219 \begin_inset Text
5220
5221 \begin_layout Standard
5222 7
5223 \end_layout
5224
5225 \end_inset
5226 </cell>
5227 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5228 \begin_inset Text
5229
5230 \begin_layout Standard
5231 7
5232 \end_layout
5233
5234 \end_inset
5235 </cell>
5236 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5237 \begin_inset Text
5238
5239 \begin_layout Standard
5240 7
5241 \end_layout
5242
5243 \end_inset
5244 </cell>
5245 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
5246 \begin_inset Text
5247
5248 \begin_layout Standard
5249 7
5250 \end_layout
5251
5252 \end_inset
5253 </cell>
5254 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
5255 \begin_inset Text
5256
5257 \begin_layout Standard
5258 7
5259 \end_layout
5260
5261 \end_inset
5262 </cell>
5263 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
5264 \begin_inset Text
5265
5266 \begin_layout Standard
5267 0
5268 \end_layout
5269
5270 \end_inset
5271 </cell>
5272 </row>
5273 <row topline="true">
5274 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5275 \begin_inset Text
5276
5277 \begin_layout Standard
5278 Pitch gain
5279 \end_layout
5280
5281 \end_inset
5282 </cell>
5283 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5284 \begin_inset Text
5285
5286 \begin_layout Standard
5287 sub-frame
5288 \end_layout
5289
5290 \end_inset
5291 </cell>
5292 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5293 \begin_inset Text
5294
5295 \begin_layout Standard
5296 0
5297 \end_layout
5298
5299 \end_inset
5300 </cell>
5301 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5302 \begin_inset Text
5303
5304 \begin_layout Standard
5305 0
5306 \end_layout
5307
5308 \end_inset
5309 </cell>
5310 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5311 \begin_inset Text
5312
5313 \begin_layout Standard
5314 5
5315 \end_layout
5316
5317 \end_inset
5318 </cell>
5319 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5320 \begin_inset Text
5321
5322 \begin_layout Standard
5323 5
5324 \end_layout
5325
5326 \end_inset
5327 </cell>
5328 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5329 \begin_inset Text
5330
5331 \begin_layout Standard
5332 5
5333 \end_layout
5334
5335 \end_inset
5336 </cell>
5337 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5338 \begin_inset Text
5339
5340 \begin_layout Standard
5341 7
5342 \end_layout
5343
5344 \end_inset
5345 </cell>
5346 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
5347 \begin_inset Text
5348
5349 \begin_layout Standard
5350 7
5351 \end_layout
5352
5353 \end_inset
5354 </cell>
5355 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
5356 \begin_inset Text
5357
5358 \begin_layout Standard
5359 7
5360 \end_layout
5361
5362 \end_inset
5363 </cell>
5364 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
5365 \begin_inset Text
5366
5367 \begin_layout Standard
5368 0
5369 \end_layout
5370
5371 \end_inset
5372 </cell>
5373 </row>
5374 <row topline="true">
5375 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5376 \begin_inset Text
5377
5378 \begin_layout Standard
5379 Innovation gain
5380 \end_layout
5381
5382 \end_inset
5383 </cell>
5384 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5385 \begin_inset Text
5386
5387 \begin_layout Standard
5388 sub-frame
5389 \end_layout
5390
5391 \end_inset
5392 </cell>
5393 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5394 \begin_inset Text
5395
5396 \begin_layout Standard
5397 0
5398 \end_layout
5399
5400 \end_inset
5401 </cell>
5402 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5403 \begin_inset Text
5404
5405 \begin_layout Standard
5406 1
5407 \end_layout
5408
5409 \end_inset
5410 </cell>
5411 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5412 \begin_inset Text
5413
5414 \begin_layout Standard
5415 0
5416 \end_layout
5417
5418 \end_inset
5419 </cell>
5420 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5421 \begin_inset Text
5422
5423 \begin_layout Standard
5424 1
5425 \end_layout
5426
5427 \end_inset
5428 </cell>
5429 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5430 \begin_inset Text
5431
5432 \begin_layout Standard
5433 1
5434 \end_layout
5435
5436 \end_inset
5437 </cell>
5438 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5439 \begin_inset Text
5440
5441 \begin_layout Standard
5442 3
5443 \end_layout
5444
5445 \end_inset
5446 </cell>
5447 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
5448 \begin_inset Text
5449
5450 \begin_layout Standard
5451 3
5452 \end_layout
5453
5454 \end_inset
5455 </cell>
5456 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
5457 \begin_inset Text
5458
5459 \begin_layout Standard
5460 3
5461 \end_layout
5462
5463 \end_inset
5464 </cell>
5465 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
5466 \begin_inset Text
5467
5468 \begin_layout Standard
5469 0
5470 \end_layout
5471
5472 \end_inset
5473 </cell>
5474 </row>
5475 <row topline="true" bottomline="true">
5476 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5477 \begin_inset Text
5478
5479 \begin_layout Standard
5480 Innovation VQ
5481 \end_layout
5482
5483 \end_inset
5484 </cell>
5485 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5486 \begin_inset Text