Remove hardcoded docdir, mandir from {doc,src}/Makefile.am, to allow
[speexdsp.git] / doc / manual.lyx
index a6de549..be973a6 100644 (file)
@@ -1,20 +1,32 @@
-#LyX 1.4.2 created this file. For more info see http://www.lyx.org/
-\lyxformat 245
+#LyX 1.5.0rc1 created this file. For more info see http://www.lyx.org/
+\lyxformat 271
 \begin_document
 \begin_header
-\textclass article
+\textclass scrbook
 \language english
 \inputencoding auto
-\fontscheme pslatex
+\font_roman times
+\font_sans helvet
+\font_typewriter courier
+\font_default_family default
+\font_sc false
+\font_osf false
+\font_sf_scale 100
+\font_tt_scale 100
 \graphics default
-\paperfontsize default
-\spacing onehalf
+\paperfontsize 10
+\spacing single
 \papersize letterpaper
-\use_geometry false
-\use_amsmath 1
+\use_geometry true
+\use_amsmath 2
+\use_esint 0
 \cite_engine basic
 \use_bibtopic false
 \paperorientation portrait
+\leftmargin 2cm
+\topmargin 2cm
+\rightmargin 2cm
+\bottommargin 2cm
 \secnumdepth 3
 \tocdepth 3
 \paragraph_separation indent
@@ -24,7 +36,8 @@
 \papersides 1
 \paperpagestyle headings
 \tracking_changes false
-\output_changes true
+\output_changes false
+\author "Jean-Marc Valin,,," 
 \end_header
 
 \begin_body
@@ -32,7 +45,7 @@
 \begin_layout Title
 The Speex Codec Manual
 \newline
-(version 1.2-beta1)
+Version 1.2 Beta 2
 \end_layout
 
 \begin_layout Author
@@ -42,7 +55,24 @@ Jean-Marc Valin
 \begin_layout Standard
 
 \newpage
-Copyright (c) 2002-2005 Jean-Marc Valin/Xiph.org Foundation
+
+\end_layout
+
+\begin_layout Standard
+Copyright 
+\begin_inset ERT
+status collapsed
+
+\begin_layout Standard
+
+
+\backslash
+copyright
+\end_layout
+
+\end_inset
+
+ 2002-2007 Jean-Marc Valin/Xiph.org Foundation
 \end_layout
 
 \begin_layout Standard
@@ -59,7 +89,7 @@ on License".
 
 \newpage
 
-\begin_inset LatexCommand \tableofcontents{}
+\begin_inset LatexCommand tableofcontents
 
 \end_inset
 
@@ -78,176 +108,200 @@ on License".
 
 \end_layout
 
-\begin_layout Section
+\begin_layout Chapter
 Introduction to Speex
 \end_layout
 
 \begin_layout Standard
-The Speex project (
+The Speex codec (
 \family typewriter
 http://www.speex.org/
 \family default
-) has been started because there was a need for a speech codec that was
- open-source and free from software patents.
- These are essential conditions for being used by any open-source software.
- There is already Vorbis that does general audio, but it is not really suitable
- for speech.
- Also, unlike many other speech codecs, Speex is not targeted at cell phones
- (not many open-source cell phones anyway :-) ) but rather at voice over
- IP (VoIP) and file-based compression.
+) exists because there is a need for a speech codec that is open-source
+ and free from software patent royalties.
+ These are essential conditions for being usable in any open-source software.
+ In essence, Speex is to speech what Vorbis is to audio/music.
+ Unlike many other speech codecs, Speex is not designed for mobile phones
+ but rather for packet networks and voice over IP (VoIP) applications.
+ File-based compression is of course also supported.
  
 \end_layout
 
 \begin_layout Standard
-As design goals, we wanted to have a codec that would allow both very good
- quality speech and low bit-rate (unfortunately not at the same time!),
- which led us to developing a codec with multiple bit-rates.
- Of course very good quality also meant we had to do wideband (16 kHz sampling
rate) in addition to narrowband (telephone quality, 8 kHz sampling rate).
+The Speex codec is designed to be very flexible and support a wide range
+ of speech quality and bit-rate.
+ Support for very good quality speech also means that Speex can encode wideband
+ speech (16 kHz sampling rate) in addition to narrowband speech (telephone
+ quality, 8 kHz sampling rate).
 \end_layout
 
 \begin_layout Standard
-Designing for VoIP instead of cell phone use means that Speex must be robust
- to lost packets, but not to corrupted ones since packets either arrive
- unaltered or don't arrive at all.
- Also, the idea was to have a reasonable complexity and memory requirement
- without compromising too much on the efficiency of the codec.
+Designing for VoIP instead of mobile phones means that Speex is robust to
+ lost packets, but not to corrupted ones.
+ This is based on the assumption that in VoIP, packets either arrive unaltered
+ or don't arrive at all.
+ Because Speex is targeted at a wide range of devices, it has modest (adjustable
+) complexity and a small memory footprint.
 \end_layout
 
 \begin_layout Standard
-All this led us to the choice of CELP
-\begin_inset LatexCommand \index{CELP}
+All the design goals led to the choice of CELP
+\begin_inset LatexCommand index
+name "CELP"
 
 \end_inset
 
- as the encoding technique to use for Speex.
- One of the main reasons is that CELP has long proved that it could do the
- job and scale well to both low bit-rates (think DoD CELP @ 4.8 kbps) and
- high bit-rates (think G.728 @ 16 kbps).
+ as the encoding technique.
+ One of the main reasons is that CELP has long proved that it could work
+ reliably and scale well to both low bit-rates (e.g.
+ DoD CELP @ 4.8 kbps) and high bit-rates (e.g.
+ G.728 @ 16 kbps).
  
 \end_layout
 
-\begin_layout Standard
-The main characteristics can be summarized as follows:
-\end_layout
-
-\begin_layout Itemize
-Free software/open-source
-\begin_inset LatexCommand \index{open-source}
+\begin_layout Section
+Getting help
+\begin_inset LatexCommand label
+name "sec:Getting-help"
 
 \end_inset
 
-, patent
-\begin_inset LatexCommand \index{patent}
 
-\end_inset
+\end_layout
 
- and royalty-free
+\begin_layout Standard
+As for many open source projects, there are many ways to get help with Speex.
+ These include:
 \end_layout
 
 \begin_layout Itemize
-Integration of narrowband
-\begin_inset LatexCommand \index{narrowband}
-
-\end_inset
-
- and wideband
-\begin_inset LatexCommand \index{wideband}
-
-\end_inset
-
- using an embedded bit-stream
+This manual
 \end_layout
 
 \begin_layout Itemize
-Wide range of bit-rates available (from 2 kbps to 44 kbps)
+Other documentation on the Speex website (http://www.speex.org/)
 \end_layout
 
 \begin_layout Itemize
-Dynamic bit-rate switching and Variable Bit-Rate
-\begin_inset LatexCommand \index{variable bit-rate}
-
-\end_inset
-
- (VBR)
+Mailing list: Discuss any Speex-related topic on speex-dev@xiph.org (not
+ just for developers)
 \end_layout
 
 \begin_layout Itemize
-Voice Activity Detection
-\begin_inset LatexCommand \index{voice activity detection}
-
-\end_inset
-
- (VAD, integrated with VBR)
+IRC: The main channel is #speex on irc.freenode.net.
+ Note that due to time differences, it may take a while to get someone,
+ so please be patient.
 \end_layout
 
 \begin_layout Itemize
-Variable complexity
-\begin_inset LatexCommand \index{complexity}
-
-\end_inset
-
-
+Email the author privately at jean-marc.valin@usherbrooke.ca 
+\series bold
+only
+\series default
+ for private/delicate topics you do not wish to discuss publically.
 \end_layout
 
-\begin_layout Itemize
-Ultra-wideband mode at 32 kHz (up to 48 kHz)
+\begin_layout Standard
+Before asking for help (mailing list or IRC), 
+\series bold
+it is important to first read this manual
+\series default
+ (OK, so if you made it here it's already a good sign).
+ It is generally considered rude to ask on a mailing list about topics that
+ are clearly detailed in the documentation.
+ On the other hand, it's perfectly OK (and encouraged) to ask for clarifications
+ about something covered in the manual.
+ This manual does not (yet) cover everything about Speex, so everyone is
+ encouraged to ask questions, send comments, feature requests, or just let
+ us know how Speex is being used.
 \end_layout
 
-\begin_layout Itemize
-Intensity stereo encoding option
+\begin_layout Standard
+Here are some additional guidelines related to the mailing list.
+ Before reporting bugs in Speex to the list, it is strongly recommended
+ (if possible) to first test whether these bugs can be reproduced using
+ the speexenc and speexdec (see Section 
+\begin_inset LatexCommand ref
+reference "sec:Command-line-encoder/decoder"
+
+\end_inset
+
+) command-line utilities.
+ Bugs reported based on 3rd party code are both harder to find and far too
+ often caused by errors that have nothing to do with Speex.
 \end_layout
 
-\begin_layout Itemize
-Fixed-point implementation (work in progress)
+\begin_layout Section
+About this document
 \end_layout
 
 \begin_layout Standard
 This document is divided in the following way.
  Section 
-\begin_inset LatexCommand \ref{sec:Feature-description}
+\begin_inset LatexCommand ref
+reference "sec:Feature-description"
+
+\end_inset
+
+ describes the different Speex features and defines many basic terms that
+ are used throughout this manual.
+ Section 
+\begin_inset LatexCommand ref
+reference "sec:Command-line-encoder/decoder"
 
 \end_inset
 
- describes the different Speex features and defines some terms that will
- be used in later sections.
+ documents the standard command-line tools provided in the Speex distribution.
  Section 
-\begin_inset LatexCommand \ref{sec:Command-line-encoder/decoder}
+\begin_inset LatexCommand ref
+reference "sec:Programming-with-Speex"
 
 \end_inset
 
- provides information about the standard command-line tools, while 
-\begin_inset LatexCommand \ref{sec:Programming-with-Speex}
+ includes detailed instructions about programming using the libspeex
+\begin_inset LatexCommand index
+name "libspeex"
 
 \end_inset
 
contains information about programming using the Speex API.
+ API.
  Section 
-\begin_inset LatexCommand \ref{sec:Formats-and-standards}
+\begin_inset LatexCommand ref
+reference "sec:Formats-and-standards"
 
 \end_inset
 
  has some information related to Speex and standards.
- The three last sections describe the internals of the codec and require
- some signal processing knowledge.
+\end_layout
+
+\begin_layout Standard
+The three last sections describe the algorithms used in Speex.
+ These sections require signal processing knowledge, but are not required
+ for merely using Speex.
+ They are intended for people who want to understand how Speex really works
+ and/or want to do research based on Speex.
  Section 
-\begin_inset LatexCommand \ref{sec:Introduction-to-CELP}
+\begin_inset LatexCommand ref
+reference "sec:Introduction-to-CELP"
 
 \end_inset
 
  explains the general idea behind CELP, while sections 
-\begin_inset LatexCommand \ref{sec:Speex-narrowband-mode}
+\begin_inset LatexCommand ref
+reference "sec:Speex-narrowband-mode"
 
 \end_inset
 
  and 
-\begin_inset LatexCommand \ref{sec:Speex-wideband-mode}
+\begin_inset LatexCommand ref
+reference "sec:Speex-wideband-mode"
 
 \end_inset
 
  are specific to Speex.
- Note that if you are only interested in using Speex, those three last sections
- are not required.
 \end_layout
 
 \begin_layout Standard
@@ -256,9 +310,10 @@ This document is divided in the following way.
 
 \end_layout
 
-\begin_layout Section
+\begin_layout Chapter
 Codec description
-\begin_inset LatexCommand \label{sec:Feature-description}
+\begin_inset LatexCommand label
+name "sec:Feature-description"
 
 \end_inset
 
@@ -266,22 +321,24 @@ Codec description
 \end_layout
 
 \begin_layout Standard
-This section describes the main features provided by Speex.
+This section describes Speex and its features into more details.
 \end_layout
 
-\begin_layout Subsection
+\begin_layout Section
 Concepts
 \end_layout
 
 \begin_layout Standard
-Here are some concepts in speech coding that help better understand the
- rest of the manual.
- Emphasis is placed on the Speex features.
+Before introducing all the Speex features, here are some concepts in speech
+ coding that help better understand the rest of the manual.
+ Although some are general concepts in speech/audio processing, others are
+ specific to Speex.
 \end_layout
 
 \begin_layout Subsection*
 Sampling rate
-\begin_inset LatexCommand \index{sampling rate}
+\begin_inset LatexCommand index
+name "sampling rate"
 
 \end_inset
 
@@ -289,20 +346,40 @@ Sampling rate
 \end_layout
 
 \begin_layout Standard
-Speex is mainly designed for 3 different sampling rates: 8 kHz, 16 kHz,
- and 32 kHz.
+The sampling rate expressed in Hertz (Hz) is the number of samples taken
+ from a signal per second.
+ For a sampling rate of 
+\begin_inset Formula $F_{s}$
+\end_inset
+
+ kHz, the highest frequency that can be represented is equal to 
+\begin_inset Formula $F_{s}/2$
+\end_inset
+
+ kHz (
+\begin_inset Formula $F_{s}/2$
+\end_inset
+
+ is known as the Nyquist frequency).
+ This is a fundamental property in signal processing and is described by
+ the sampling theorem.
+ Speex is mainly designed for three different sampling rates: 8 kHz, 16
+ kHz, and 32 kHz.
  These are respectively refered to as narrowband
-\begin_inset LatexCommand \index{narrowband}
+\begin_inset LatexCommand index
+name "narrowband"
 
 \end_inset
 
 , wideband
-\begin_inset LatexCommand \index{wideband}
+\begin_inset LatexCommand index
+name "wideband"
 
 \end_inset
 
  and ultra-wideband
-\begin_inset LatexCommand \index{ultra-wideband}
+\begin_inset LatexCommand index
+name "ultra-wideband"
 
 \end_inset
 
@@ -311,19 +388,74 @@ Speex is mainly designed for 3 different sampling rates: 8 kHz, 16 kHz,
 \end_layout
 
 \begin_layout Subsection*
+Bit-rate
+\end_layout
+
+\begin_layout Standard
+When encoding a speech signal, the bit-rate is defined as the number of
+ bits per unit of time required to encode the speech.
+ It is measured in 
+\emph on
+bits per second
+\emph default
+ (bps), or generally 
+\emph on
+kilobits per second
+\emph default
+.
+ It is important to make the distinction between 
+\emph on
+kilo
+\series bold
+bits
+\series default
+\emph default
+\emph on
+per second
+\emph default
+ (k
+\series bold
+b
+\series default
+ps) and 
+\emph on
+kilo
+\series bold
+bytes
+\series default
+\emph default
+\emph on
+per second
+\emph default
+ (k
+\series bold
+B
+\series default
+ps).
+\end_layout
+
+\begin_layout Subsection*
 Quality
-\begin_inset LatexCommand \index{quality}
+\begin_inset LatexCommand index
+name "quality"
 
 \end_inset
 
-
+ (variable)
 \end_layout
 
 \begin_layout Standard
-Speex encoding is controlled most of the time by a quality parameter that
- ranges from 0 to 10.
+Speex is a lossy codec, which means that it achives compression at the expense
+ of fidelity of the input speech signal.
+ Unlike some other speech codecs, it is possible to control the tradeoff
+ made between quality and bit-rate.
+ The Speex encoding process is controlled most of the time by a quality
+ parameter that ranges from 0 to 10.
  In constant bit-rate
-\begin_inset LatexCommand \index{constant bit-rate}
+\begin_inset LatexCommand index
+name "constant bit-rate"
 
 \end_inset
 
@@ -334,7 +466,8 @@ Speex encoding is controlled most of the time by a quality parameter that
 
 \begin_layout Subsection*
 Complexity
-\begin_inset LatexCommand \index{complexity}
+\begin_inset LatexCommand index
+name "complexity"
 
 \end_inset
 
@@ -359,7 +492,8 @@ bzip2
  5 times higher than for complexity 1.
  In practice, the best trade-off is between complexity 2 and 4, though higher
  settings are often useful when encoding non-speech sounds like DTMF
-\begin_inset LatexCommand \index{DTMF}
+\begin_inset LatexCommand index
+name "DTMF"
 
 \end_inset
 
@@ -368,7 +502,8 @@ bzip2
 
 \begin_layout Subsection*
 Variable Bit-Rate
-\begin_inset LatexCommand \index{variable bit-rate}
+\begin_inset LatexCommand index
+name "variable bit-rate"
 
 \end_inset
 
@@ -400,7 +535,8 @@ difficulty
 
 \begin_layout Subsection*
 Average Bit-Rate
-\begin_inset LatexCommand \index{average bit-rate}
+\begin_inset LatexCommand index
+name "average bit-rate"
 
 \end_inset
 
@@ -417,7 +553,8 @@ Average bit-rate solves one of the problems of VBR, as it dynamically adjusts
 
 \begin_layout Subsection*
 Voice Activity Detection
-\begin_inset LatexCommand \index{voice activity detection}
+\begin_inset LatexCommand index
+name "voice activity detection"
 
 \end_inset
 
@@ -444,7 +581,8 @@ comfort noise generation
 
 \begin_layout Subsection*
 Discontinuous Transmission
-\begin_inset LatexCommand \index{discontinuous transmission}
+\begin_inset LatexCommand index
+name "discontinuous transmission"
 
 \end_inset
 
@@ -460,7 +598,8 @@ Discontinuous transmission is an addition to VAD/VBR operation, that allows
 
 \begin_layout Subsection*
 Perceptual enhancement
-\begin_inset LatexCommand \index{perceptual enhancement}
+\begin_inset LatexCommand index
+name "perceptual enhancement"
 
 \end_inset
 
@@ -468,15 +607,16 @@ Perceptual enhancement
 \end_layout
 
 \begin_layout Standard
-Perceptual enhancement is a part of the decoder which, when turned on, tries
- to reduce (the perception of) the noise produced by the coding/decoding
- process.
- In most cases, perceptual enhancement make the sound further from the original
+Perceptual enhancement is a part of the decoder which, when turned on, attempts
+ to reduce the perception of the noise/distortion produced by the encoding/decod
+ing process.
+ In most cases, perceptual enhancement brings the sound further from the
+ original 
 \emph on
 objectively
 \emph default
- (if you use SNR), but in the end it still 
+ (e.g.
+ considering only SNR), but in the end it still 
 \emph on
 sounds
 \emph default
@@ -484,8 +624,9 @@ sounds
 \end_layout
 
 \begin_layout Subsection*
-Algorithmic delay
-\begin_inset LatexCommand \index{algorithmic delay}
+Latency and algorithmic delay
+\begin_inset LatexCommand index
+name "algorithmic delay"
 
 \end_inset
 
@@ -509,11 +650,97 @@ look-ahead
  the frames.
 \end_layout
 
-\begin_layout Subsection
+\begin_layout Section
 Codec
 \end_layout
 
-\begin_layout Subsection
+\begin_layout Standard
+The main characteristics of Speex can be summarized as follows:
+\end_layout
+
+\begin_layout Itemize
+Free software/open-source
+\begin_inset LatexCommand index
+name "open-source"
+
+\end_inset
+
+, patent
+\begin_inset LatexCommand index
+name "patent"
+
+\end_inset
+
+ and royalty-free
+\end_layout
+
+\begin_layout Itemize
+Integration of narrowband
+\begin_inset LatexCommand index
+name "narrowband"
+
+\end_inset
+
+ and wideband
+\begin_inset LatexCommand index
+name "wideband"
+
+\end_inset
+
+ using an embedded bit-stream
+\end_layout
+
+\begin_layout Itemize
+Wide range of bit-rates available (from 2.15 kbps to 44 kbps)
+\end_layout
+
+\begin_layout Itemize
+Dynamic bit-rate switching (AMR) and Variable Bit-Rate
+\begin_inset LatexCommand index
+name "variable bit-rate"
+
+\end_inset
+
+ (VBR) operation
+\end_layout
+
+\begin_layout Itemize
+Voice Activity Detection
+\begin_inset LatexCommand index
+name "voice activity detection"
+
+\end_inset
+
+ (VAD, integrated with VBR) and discontinuous transmission (DTX)
+\end_layout
+
+\begin_layout Itemize
+Variable complexity
+\begin_inset LatexCommand index
+name "complexity"
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Itemize
+Embedded wideband structure (scalable sampling rate)
+\end_layout
+
+\begin_layout Itemize
+Ultra-wideband sampling rate at 32 kHz
+\end_layout
+
+\begin_layout Itemize
+Intensity stereo encoding option
+\end_layout
+
+\begin_layout Itemize
+Fixed-point implementation
+\end_layout
+
+\begin_layout Section
 Preprocessor
 \end_layout
 
@@ -528,7 +755,7 @@ before
 \end_layout
 
 \begin_layout Itemize
-denoising
+noise suppression
 \end_layout
 
 \begin_layout Itemize
@@ -567,84 +794,182 @@ The voice activity detector (VAD) provided by the preprocessor is more advanced
  
 \end_layout
 
-\begin_layout Subsection
+\begin_layout Section
 Adaptive Jitter Buffer
 \end_layout
 
-\begin_layout Subsection
+\begin_layout Standard
+When transmitting voice (or any content for that matter) over UDP or RTP,
+ packet may be lost, arrive with different delay, or even out of order.
+ The purpose of a jitter buffer is to reorder packets and buffer them long
+ enough (but no longer than necessary) so they can be sent to be decoded.
+\end_layout
+
+\begin_layout Section
 Acoustic Echo Canceller
 \end_layout
 
 \begin_layout Standard
+In any hands-free communication system (Fig.
+\begin_inset LatexCommand ref
+reference "fig:Acoustic-echo-model"
 
-\newpage
+\end_inset
 
+), speech from the remote end is played in the local loudspeaker, propagates
+ in the room and is captured by the microphone.
+ If the audio captured from the microphone is sent directly to the remote
+ end, then the remove user hears an echo of his voice.
+ An acoustic echo canceller is designed to remove the acoustic echo before
+ it is sent to the remote end.
+ It is important to understand that the echo canceller is meant to improve
+ the quality on the 
+\series bold
+remote
+\series default
+ end.
 \end_layout
 
-\begin_layout Section
-Compiling
-\end_layout
+\begin_layout Standard
+\begin_inset Float figure
+wide false
+sideways false
+status open
 
 \begin_layout Standard
-Compiling Speex under UNIX or any platform supported by autoconf (e.g.
- Win32/cygwin) is as easy as typing:
-\end_layout
+\begin_inset ERT
+status collapsed
 
-\begin_layout LyX-Code
-% ./configure [options]
-\end_layout
+\begin_layout Standard
 
-\begin_layout LyX-Code
-% make
-\end_layout
 
-\begin_layout LyX-Code
-% make install
+\backslash
+begin{center}
 \end_layout
 
+\end_inset
+
+
+\begin_inset Graphics
+       filename echo_path.eps
+       width 10cm
+
+\end_inset
+
+
+\begin_inset ERT
+status collapsed
+
 \begin_layout Standard
-The options supported by the Speex configure script are:
-\end_layout
 
-\begin_layout Description
---prefix=<path> Specifies where to install Speex
-\end_layout
 
-\begin_layout Description
---enable-shared/--disable-shared Whether to compile shared libraries
+\backslash
+end{center}
 \end_layout
 
-\begin_layout Description
---enable-static/--disable-static Whether to compile static libraries
-\end_layout
+\end_inset
 
-\begin_layout Description
---disable-wideband Disable the wideband part of Speex (typically to same
- space)
-\end_layout
 
-\begin_layout Description
---enable-valgrind Enable extra information when (and only when) running
- with valgrind
 \end_layout
 
-\begin_layout Description
---enable-sse Enable use of SSE instructions (x86/float only)
-\end_layout
+\begin_layout Standard
+\begin_inset Caption
 
-\begin_layout Description
---enable-fixed-point
-\begin_inset LatexCommand \index{fixed-point}
+\begin_layout Standard
+Acoustic echo model
+\begin_inset LatexCommand label
+name "fig:Acoustic-echo-model"
 
 \end_inset
 
- Compile Speex for a processor that does not have a floating point unit
- (FPU)
-\end_layout
 
-\begin_layout Description
---enable-arm4-asm Enable assembly specific to the ARMv4 architecture (gcc
- only)
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Standard
+
+\newpage
+
+\end_layout
+
+\begin_layout Chapter
+Compiling
+\end_layout
+
+\begin_layout Standard
+Compiling Speex under UNIX/Linux or any other platform supported by autoconf
+ (e.g.
+ Win32/cygwin) is as easy as typing:
+\end_layout
+
+\begin_layout LyX-Code
+% ./configure [options]
+\end_layout
+
+\begin_layout LyX-Code
+% make
+\end_layout
+
+\begin_layout LyX-Code
+% make install
+\end_layout
+
+\begin_layout Standard
+The options supported by the Speex configure script are:
+\end_layout
+
+\begin_layout Description
+--prefix=<path> Specifies the base path for installing Speex (e.g.
+ /usr)
+\end_layout
+
+\begin_layout Description
+--enable-shared/--disable-shared Whether to compile shared libraries
+\end_layout
+
+\begin_layout Description
+--enable-static/--disable-static Whether to compile static libraries
+\end_layout
+
+\begin_layout Description
+--disable-wideband Disable the wideband part of Speex (typically to save
+ space)
+\end_layout
+
+\begin_layout Description
+--enable-valgrind Enable extra hits for valgrind for debugging purposes
+ (do not use by default)
+\end_layout
+
+\begin_layout Description
+--enable-sse Enable use of SSE instructions (x86/float only)
+\end_layout
+
+\begin_layout Description
+--enable-fixed-point
+\begin_inset LatexCommand index
+name "fixed-point"
+
+\end_inset
+
+ Compile Speex for a processor that does not have a floating point unit
+ (FPU)
+\end_layout
+
+\begin_layout Description
+--enable-arm4-asm Enable assembly specific to the ARMv4 architecture (gcc
+ only)
 \end_layout
 
 \begin_layout Description
@@ -654,7 +979,8 @@ The options supported by the Speex configure script are:
 
 \begin_layout Description
 --enable-fixed-point-debug Use only for debugging the fixed-point
-\begin_inset LatexCommand \index{fixed-point}
+\begin_inset LatexCommand index
+name "fixed-point"
 
 \end_inset
 
@@ -663,7 +989,7 @@ The options supported by the Speex configure script are:
 
 \begin_layout Description
 --enable-epic-48k Enable a special (and non-compatible) 4.8 kbps narrowband
- mode
+ mode (broken in 1.1.x and 1.2beta)
 \end_layout
 
 \begin_layout Description
@@ -676,8 +1002,94 @@ The options supported by the Speex configure script are:
 \end_layout
 
 \begin_layout Description
---enable-16bit-precision Reduces precision to 16 bits in time-critical areas
- (fixed-point only)
+--enable-vorbis-psycho Make the encoder use the Vorbis psycho-acoustic model.
+ This is very experimental and may be removed in the future.
+\end_layout
+
+\begin_layout Section
+Platforms
+\end_layout
+
+\begin_layout Standard
+Speex is known to compile and work on a large number of architectures, both
+ floating-point and fixed-point.
+ In general, any architecture that can natively compute the multiplication
+ of two signed 16-bit numbers (32-bit result) and runs at a sufficient clock
+ rate (architecture-dependent) is capable of running Speex.
+ Architectures that are 
+\series bold
+known
+\series default
+ to be supported (it probably works on many others) are:
+\end_layout
+
+\begin_layout Itemize
+x86 & x86-64
+\end_layout
+
+\begin_layout Itemize
+Power
+\end_layout
+
+\begin_layout Itemize
+SPARC
+\end_layout
+
+\begin_layout Itemize
+ARM
+\end_layout
+
+\begin_layout Itemize
+Blackfin
+\end_layout
+
+\begin_layout Itemize
+TI C54xx & C55xx
+\end_layout
+
+\begin_layout Itemize
+TI C6xxx
+\end_layout
+
+\begin_layout Itemize
+TriMedia (experimental)
+\end_layout
+
+\begin_layout Standard
+Operating systems on top of which Speex is known to work include (it probably
+ works on many others):
+\end_layout
+
+\begin_layout Itemize
+Linux
+\end_layout
+
+\begin_layout Itemize
+\begin_inset Formula $\mu$
+\end_inset
+
+Clinux
+\end_layout
+
+\begin_layout Itemize
+MacOS X
+\end_layout
+
+\begin_layout Itemize
+BSD
+\end_layout
+
+\begin_layout Itemize
+Other UNIX/POSIX variants
+\end_layout
+
+\begin_layout Itemize
+Symbian
+\end_layout
+
+\begin_layout Standard
+The source code directory include additional information for compiling on
+ certain architectures or operating systems in README.xxx files.
 \end_layout
 
 \begin_layout Standard
@@ -686,9 +1098,10 @@ The options supported by the Speex configure script are:
 
 \end_layout
 
-\begin_layout Section
+\begin_layout Chapter
 Command-line encoder/decoder
-\begin_inset LatexCommand \label{sec:Command-line-encoder/decoder}
+\begin_inset LatexCommand label
+name "sec:Command-line-encoder/decoder"
 
 \end_inset
 
@@ -708,11 +1121,12 @@ speexdec
  This section describes how to use these tools.
 \end_layout
 
-\begin_layout Subsection
+\begin_layout Section
 
 \emph on
 speexenc
-\begin_inset LatexCommand \index{speexenc}
+\begin_inset LatexCommand index
+name "speexenc"
 
 \end_inset
 
@@ -814,7 +1228,7 @@ n Set encoding speed/quality tradeoff.
 (-v) Print version information
 \end_layout
 
-\begin_layout Subsubsection*
+\begin_layout Subsection*
 Speex comments
 \end_layout
 
@@ -834,7 +1248,7 @@ Speex comments
  
 \end_layout
 
-\begin_layout Subsubsection*
+\begin_layout Subsection*
 Raw input options
 \end_layout
 
@@ -863,11 +1277,12 @@ n Sampling rate for raw input
 --16bit Raw input is 16-bit signed 
 \end_layout
 
-\begin_layout Subsection
+\begin_layout Section
 
 \emph on
 speexdec
-\begin_inset LatexCommand \index{speexdec}
+\begin_inset LatexCommand index
+name "speexdec"
 
 \end_inset
 
@@ -951,19 +1366,22 @@ n Simulate n % random packet loss
 
 \end_layout
 
-\begin_layout Section
+\begin_layout Chapter
 Programming with Speex (the libspeex
-\begin_inset LatexCommand \index{libspeex}
+\begin_inset LatexCommand index
+name "libspeex"
 
 \end_inset
 
  API
-\begin_inset LatexCommand \index{API}
+\begin_inset LatexCommand index
+name "API"
 
 \end_inset
 
 )
-\begin_inset LatexCommand \label{sec:Programming-with-Speex}
+\begin_inset LatexCommand label
+name "sec:Programming-with-Speex"
 
 \end_inset
 
@@ -972,17 +1390,20 @@ Programming with Speex (the libspeex
 
 \begin_layout Standard
 This section explains how to use the Speex API.
- Examples of code can also be found in appendix 
-\begin_inset LatexCommand \ref{sec:Sample-code}
+ Examples of code can also be found in Appendix 
+\begin_inset LatexCommand ref
+reference "sec:Sample-code"
 
 \end_inset
 
-.
+ and the complete API documentation is included in the Documentation section
+ of the Speex website (http://www.speex.org/).
 \end_layout
 
-\begin_layout Subsection
+\begin_layout Section
 Encoding
-\begin_inset LatexCommand \label{sub:Encoding}
+\begin_inset LatexCommand label
+name "sub:Encoding"
 
 \end_inset
 
@@ -990,7 +1411,7 @@ Encoding
 \end_layout
 
 \begin_layout Standard
-In order to encode speech using Speex, you first need to:
+In order to encode speech using Speex, one first needs to:
 \end_layout
 
 \begin_layout LyX-Code
@@ -998,7 +1419,7 @@ In order to encode speech using Speex, you first need to:
 \end_layout
 
 \begin_layout Standard
-You then need to declare a Speex bit-packing struct
+Then a Speex bit-packing struct must be declared as:
 \end_layout
 
 \begin_layout LyX-Code
@@ -1006,7 +1427,7 @@ SpeexBits bits;
 \end_layout
 
 \begin_layout Standard
-and a Speex encoder state
+along with a Speex encoder state
 \end_layout
 
 \begin_layout LyX-Code
@@ -1035,13 +1456,17 @@ speex_nb_mode
 speex_wb_mode
 \emph default
 .
- In most cases, you will need to know the frame size used by the mode you
- are using.
+ In most cases, you will need to know the frame size used at the sampling
rate you are using.
  You can get that value in the 
 \emph on
 frame_size
 \emph default
- variable with:
+ variable (expressed in 
+\series bold
+samples
+\series default
+, not bytes) with:
 \end_layout
 
 \begin_layout LyX-Code
@@ -1054,6 +1479,30 @@ In practice,
 frame_size
 \emph default
  will correspond to 20 ms when using 8, 16, or 32 kHz sampling rate.
+ There are many parameters that can be set for the Speex encoder, but the
+ most useful one is the quality parameter that controls the quality vs bit-rate
+ tradeoff.
+ This is set by:
+\end_layout
+
+\begin_layout LyX-Code
+speex_encoder_ctl(enc_state,SPEEX_SET_QUALITY,&quality);
+\end_layout
+
+\begin_layout Standard
+where 
+\emph on
+quality
+\emph default
+ is an integer value ranging from 0 to 10 (inclusively).
+ The mapping between quality and bit-rate is described in Fig.
+\begin_inset LatexCommand ref
+reference "cap:quality_vs_bps"
+
+\end_inset
+
+ for narrowband.
 \end_layout
 
 \begin_layout Standard
@@ -1081,9 +1530,9 @@ input_frame
 \emph on
 (
 \emph default
-short
+short 
 \emph on
- *)
+*)
 \emph default
  pointing to the beginning of a speech frame, 
 \emph on
@@ -1132,11 +1581,11 @@ speex_encode()
  ARM) more complicated.
  Internally, 
 \emph on
-speex_encode() 
+speex_encode()
 \emph default
-and
+ and 
 \emph on
- speex_encode_int()
+speex_encode_int()
 \emph default
  are processed in the same way.
  Whether the encoder uses the fixed-point version is only decided by the
@@ -1160,9 +1609,10 @@ That's about it for the encoder.
  
 \end_layout
 
-\begin_layout Subsection
+\begin_layout Section
 Decoding
-\begin_inset LatexCommand \label{sub:Decoding}
+\begin_inset LatexCommand label
+name "sub:Decoding"
 
 \end_inset
 
@@ -1220,7 +1670,11 @@ speex_wb_mode
 \emph on
 frame_size
 \emph default
- variable with:
+ variable (expressed in 
+\series bold
+samples
+\series default
+, not bytes) with:
 \end_layout
 
 \begin_layout LyX-Code
@@ -1276,7 +1730,7 @@ output_frame
 (short *)
 \emph default
  and points to the area where the decoded speech frame will be written.
- A NULL value as the first argument indicates that we don't have the bits
+ A NULL value as the second argument indicates that we don't have the bits
  for the current frame.
  When a frame is lost, the Speex decoder will do its best to "guess" the
  correct signal.
@@ -1306,9 +1760,10 @@ speex_bits_destroy(&bits);
 speex_decoder_destroy(dec_state);
 \end_layout
 
-\begin_layout Subsection
+\begin_layout Section
 Preprocessor
-\begin_inset LatexCommand \label{sub:Preprocessor}
+\begin_inset LatexCommand label
+name "sub:Preprocessor"
 
 \end_inset
 
@@ -1317,7 +1772,8 @@ Preprocessor
 
 \begin_layout Standard
 In order to use the Speex preprocessor
-\begin_inset LatexCommand \index{preprocessor}
+\begin_inset LatexCommand index
+name "preprocessor"
 
 \end_inset
 
@@ -1354,7 +1810,7 @@ For each input frame, you need to call:
 \end_layout
 
 \begin_layout LyX-Code
-speex_preprocess(preprocess_state, audio_frame, echo_residue);
+speex_preprocess_run(preprocess_state, audio_frame);
 \end_layout
 
 \begin_layout Standard
@@ -1362,12 +1818,7 @@ where
 \family typewriter
 audio_frame
 \family default
- is used both as input and output and 
-\family typewriter
-echo_residue
-\family default
- is either an array filled by the echo canceller, or NULL if the preprocessor
- is used without the echo canceller.
+ is used both as input and output.
 \end_layout
 
 \begin_layout Standard
@@ -1376,7 +1827,7 @@ In cases where the output audio is not useful for a certain frame, it is
 \end_layout
 
 \begin_layout LyX-Code
-speex_preprocess_estimate_update(preprocess_state, audio_frame, echo_residue);
+speex_preprocess_estimate_update(preprocess_state, audio_frame);
 \end_layout
 
 \begin_layout Standard
@@ -1405,9 +1856,10 @@ The preprocessor state can be destroyed using:
 speex_preprocess_state_destroy(preprocess_state);
 \end_layout
 
-\begin_layout Subsection
+\begin_layout Section
 Echo Cancellation
-\begin_inset LatexCommand \label{sub:Echo-Cancellation}
+\begin_inset LatexCommand label
+name "sub:Echo-Cancellation"
 
 \end_inset
 
@@ -1416,12 +1868,14 @@ Echo Cancellation
 
 \begin_layout Standard
 The Speex library now includes an echo cancellation
-\begin_inset LatexCommand \index{echo cancellation}
+\begin_inset LatexCommand index
+name "echo cancellation"
 
 \end_inset
 
  algorithm suitable for Acoustic Echo Cancellation
-\begin_inset LatexCommand \index{acoustic echo cancellation}
+\begin_inset LatexCommand index
+name "acoustic echo cancellation"
 
 \end_inset
 
@@ -1456,7 +1910,8 @@ filter_length
 tail length
 \shape default
 
-\begin_inset LatexCommand \index{tail length}
+\begin_inset LatexCommand index
+name "tail length"
 
 \end_inset
 
@@ -1476,7 +1931,7 @@ Once the echo canceller state is created, audio can be processed by:
 \end_layout
 
 \begin_layout LyX-Code
-speex_echo_cancel(echo_state, input_frame, echo_frame, output_frame, residue);
+speex_echo_cancellation(echo_state, input_frame, echo_frame, output_frame);
 \end_layout
 
 \begin_layout Standard
@@ -1494,13 +1949,6 @@ echo_frame
 output_frame
 \family default
  is the signal with echo removed.
- The 
-\family typewriter
-residue
-\family default
- parameter is optional (you can set it to NULL) and is used to return the
- estimated power spectrum of the echo residue so it can be removed by the
- preprocessor (if you with to use it).
  
 \end_layout
 
@@ -1537,32 +1985,39 @@ read_from_soundcard(input_frame, frame_size);
 \end_layout
 
 \begin_layout LyX-Code
-speex_echo_cancel(echo_state, input_frame, echo_frame, output_frame, residue);
+speex_echo_cancellation(echo_state, input_frame, echo_frame, output_frame);
 \end_layout
 
 \begin_layout Standard
-As stated above, if you wish to further reduce the echo present in the signal,
- you can do so by passing 
-\family typewriter
-residue
-\family default
- as the last parameter of 
+If you wish to further reduce the echo present in the signal, you can do
+ so by 
 \family typewriter
-speex_preprocess()
+associating the echo canceller to the preprocessor
 \family default
- function (see Section 
-\begin_inset LatexCommand \ref{sub:Preprocessor}
+ (see Section 
+\begin_inset LatexCommand ref
+reference "sub:Preprocessor"
 
 \end_inset
 
 ).
+ This is done by calling:
+\end_layout
+
+\begin_layout LyX-Code
+speex_preprocess_ctl(preprocess_state, SPEEX_PREPROCESS_SET_ECHO_STATE,
+ echo_state);
+\end_layout
+
+\begin_layout Standard
+in the initialisation.
 \end_layout
 
 \begin_layout Standard
-As of version 1.2-beta1, there is an alternative, simpler API that can be
+As of version 1.2-beta2, there is an alternative, simpler API that can be
  used instead of 
 \emph on
-speex_echo_cancel()
+speex_echo_cancellation()
 \emph default
 .
  When audio capture and playback are handled asynchronously (e.g.
@@ -1589,7 +2044,7 @@ every time an audio frame is played.
 \end_layout
 
 \begin_layout LyX-Code
-speex_echo_capture(echo_state, input_frame, output_frame, residue);
+speex_echo_capture(echo_state, input_frame, output_frame);
 \end_layout
 
 \begin_layout Standard
@@ -1607,12 +2062,13 @@ speex_echo_capture()
 speex_echo_cancel()
 \emph default
 .
- When capture and playback are done synchronously, 
+ A side effect of using this alternate API is that the playback audio is
+ delayed by two frames, which is the normal delay caused by the soundcard.
+ When capture and playback are already synchronised, 
 \emph on
-speex_echo_cancel()
+speex_echo_cancellation()
 \emph default
- is still prefered since it gives better control on the exact input/echo
- timing.
+ is preferable since it gives better control on the exact input/echo timing.
 \end_layout
 
 \begin_layout Standard
@@ -1632,7 +2088,7 @@ It is also possible to reset the state of the echo canceller so it can be
 speex_echo_state_reset(echo_state);
 \end_layout
 
-\begin_layout Subsubsection
+\begin_layout Subsection
 Troubleshooting
 \end_layout
 
@@ -1718,102 +2174,251 @@ http://www.embeddedstar.com/articles/2003/7/article20030720-1.html
  same.
 \end_layout
 
-\begin_layout Subsection
-Codec Options (speex_*_ctl)
-\begin_inset LatexCommand \label{sub:Codec-Options}
+\begin_layout Standard
+As of version 1.2beta2, a new 
+\family typewriter
+echo_diagnostic.m
+\family default
+ tool is included in the source distribution.
+ The first step is to define DUMP_ECHO_CANCEL_DATA during the build.
+ This causes the echo canceller to automatically save the near-end, far-end
+ and output signals to files (aec_rec.sw aec_play.sw and aec_out.sw).
+ These are exactly what the AEC receives and outputs.
+ From there, it is necessary to start Octave and type:
+\end_layout
 
-\end_inset
+\begin_layout LyX-Code
+echo_diagnostic('aec_rec.sw', 'aec_play.sw', 'aec_diagnostic.sw', 1024);
+\end_layout
 
+\begin_layout Standard
+The value of 1024 is the filter length and can be changed.
+ There will be some (hopefully) useful messages printed and echo cancelled
+ audio will be saved to aec_diagnostic.sw .
+ If even that output is bad (almost no cancellation) then there is  probably
+ problem with the playback or recording process.
+\end_layout
 
+\begin_layout Section
+Jitter Buffer
 \end_layout
 
 \begin_layout Standard
-The Speex encoder and decoder support many options and requests that can
- be accessed through the 
-\emph on
-speex_encoder_ctl
-\emph default
- and 
-\emph on
-speex_decoder_ctl
-\emph default
- functions.
- These functions are similar to the 
-\emph on
-ioctl
-\emph default
- system call and their prototypes are:
+There are two jitter buffers.
+ Both can be enabled by including:
 \end_layout
 
 \begin_layout LyX-Code
-void speex_encoder_ctl(void *encoder, int request, void *ptr);
+#include <speex/speex_jitter.c>
 \end_layout
 
-\begin_layout LyX-Code
-void speex_decoder_ctl(void *encoder, int request, void *ptr);
+\begin_layout Subsection
+Generic Jitter Buffer
 \end_layout
 
-\begin_layout Standard
-The different values of request allowed are (note that some only apply to
- the encoder or the decoder):
+\begin_layout Subsection
+Speex Jitter Buffer
 \end_layout
 
-\begin_layout Description
-SPEEX_SET_ENH** Set perceptual enhancer
-\begin_inset LatexCommand \index{perceptual enhancement}
-
-\end_inset
-
- to on (1) or off (0) (integer)
+\begin_layout Section
+Resampler
 \end_layout
 
-\begin_layout Description
-SPEEX_GET_ENH** Get perceptual enhancer status (integer)
+\begin_layout Standard
+As of version 1.2beta2, Speex includes a resampling modules.
+ To make use of the resampler, it is necessary to include its header file:
 \end_layout
 
-\begin_layout Description
-SPEEX_GET_FRAME_SIZE Get the frame size used for the current mode (integer)
+\begin_layout LyX-Code
+#include <speex/speex_resampler.h>
 \end_layout
 
-\begin_layout Description
-SPEEX_SET_QUALITY* Set the encoder speech quality (integer 0 to 10)
+\begin_layout Standard
+For each stream that is to be resampled, it is necessary to create a resampler
+ state with:
 \end_layout
 
-\begin_layout Description
-SPEEX_GET_QUALITY* Get the current encoder speech quality (integer 0 to
- 10)
+\begin_layout LyX-Code
+SpeexResamplerState *resampler;
 \end_layout
 
-\begin_layout Description
-SPEEX_SET_MODE*
-\begin_inset Formula $\dagger$
-\end_inset
-
-
+\begin_layout LyX-Code
+resampler = speex_resampler_init(nb_channels, input_rate, output_rate, quality,
+ &err);
 \end_layout
 
-\begin_layout Description
-SPEEX_GET_MODE*
-\begin_inset Formula $\dagger$
-\end_inset
-
-
+\begin_layout Standard
+where nb_channels is the number of channels that will be used (either interleave
+d or non-interleaved), input_rate is the sampling rate of the input stream,
+ output_rate is the sampling rate of the output stream and quality is the
+ requested quality setting (0 to 10).
+ The quality parameter is useful for controlling the quality/complexity/latency
+ tradeoff.
+ Using a higher quality setting means less noise/aliasing, a higher complexity
+ and a higher latency.
+ Usually, a quality of 3 is acceptable for most desktop uses and quality
+ 10 is mostly recommended for pro audio work.
+ Quality 0 usually has a decent sound (certainly better than using linear
+ interpolation resampling), but artifacts may be heard.
 \end_layout
 
-\begin_layout Description
-SPEEX_SET_LOW_MODE*
-\begin_inset Formula $\dagger$
-\end_inset
-
+\begin_layout Standard
+The actual resampling is performed using
+\end_layout
 
+\begin_layout LyX-Code
+err = speex_resampler_process_int(resampler, channelID, in, &in_length,
+ out, &out_length);
 \end_layout
 
-\begin_layout Description
-SPEEX_GET_LOW_MODE*
+\begin_layout Standard
+where channelID is the ID of the channel to be processed.
+ For a mono stream, use 0.
+ The 
+\emph on
+in
+\emph default
+ pointer points to the first sample of the input buffer for the selected
+ channel and 
+\emph on
+out
+\emph default
+ points to the first sample of the output.
+ The size of the input and output buffers are specified by 
+\emph on
+in_length
+\emph default
+ and 
+\emph on
+out_length
+\emph default
+ respectively.
+ Upon completion, these values are replaced by the number of samples read
+ and written by the resampler.
+ Unless an error occurs, either all input samples will be read or all output
+ samples will be written to (or both).
+ For floating-point samples, the function speex_resampler_process_float()
+ behaves similarly.
+\end_layout
+
+\begin_layout Standard
+It is also possible to process multiple channels at once.
+\end_layout
+
+\begin_layout Section
+Codec Options (speex_*_ctl)
+\begin_inset LatexCommand label
+name "sub:Codec-Options"
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Quote
+\align center
+
+\emph on
+Entities should not be multiplied beyond necessity -- William of Ockham.
+\end_layout
+
+\begin_layout Quote
+\align center
+
+\emph on
+Just because there's an option doesn't mean you have to use it -- me.
+\end_layout
+
+\begin_layout Standard
+The Speex encoder and decoder support many options and requests that can
+ be accessed through the 
+\emph on
+speex_encoder_ctl
+\emph default
+ and 
+\emph on
+speex_decoder_ctl
+\emph default
+ functions.
+ Despite that, the defaults are good for many applications and 
+\series bold
+optional settings should only be used when one understands them and knows
+ that they are needed
+\series default
+.
+ A common error is to attempt to set many unnecessary settings.
+ These functions are similar to the 
+\emph on
+ioctl
+\emph default
+ system call and their prototypes are:
+\end_layout
+
+\begin_layout LyX-Code
+void speex_encoder_ctl(void *encoder, int request, void *ptr);
+\end_layout
+
+\begin_layout LyX-Code
+void speex_decoder_ctl(void *encoder, int request, void *ptr);
+\end_layout
+
+\begin_layout Standard
+The different values of request allowed are (note that some only apply to
+ the encoder or the decoder):
+\end_layout
+
+\begin_layout Description
+SPEEX_SET_ENH** Set perceptual enhancer
+\begin_inset LatexCommand index
+name "perceptual enhancement"
+
+\end_inset
+
+ to on (1) or off (0) (spx_int32_t)
+\end_layout
+
+\begin_layout Description
+SPEEX_GET_ENH** Get perceptual enhancer status (spx_int32_t)
+\end_layout
+
+\begin_layout Description
+SPEEX_GET_FRAME_SIZE Get the number of samples per frame for the current
+ mode (spx_int32_t)
+\end_layout
+
+\begin_layout Description
+SPEEX_SET_QUALITY* Set the encoder speech quality (spx_int32_t 0 to 10)
+\end_layout
+
+\begin_layout Description
+SPEEX_GET_QUALITY* Get the current encoder speech quality (spx_int32_t 0
+ to 10)
+\end_layout
+
+\begin_layout Description
+SPEEX_SET_MODE* Set the mode number, as specified in the RTP spec (spx_int32_t)
+\end_layout
+
+\begin_layout Description
+SPEEX_GET_MODE* Get the current mode number, as specified in the RTP spec
+ (spx_int32_t)
+\end_layout
+
+\begin_layout Description
+SPEEX_SET_LOW_MODE*
 \begin_inset Formula $\dagger$
 \end_inset
 
+ Use the source, Luke!
+\end_layout
+
+\begin_layout Description
+SPEEX_GET_LOW_MODE*
+\begin_inset Formula $\dagger$
+\end_inset
 
+ Use the source, Luke!
 \end_layout
 
 \begin_layout Description
@@ -1821,7 +2426,7 @@ SPEEX_SET_HIGH_MODE*
 \begin_inset Formula $\dagger$
 \end_inset
 
-
+ Use the source, Luke!
 \end_layout
 
 \begin_layout Description
@@ -1829,20 +2434,21 @@ SPEEX_GET_HIGH_MODE*
 \begin_inset Formula $\dagger$
 \end_inset
 
-
+ Use the source, Luke!
 \end_layout
 
 \begin_layout Description
-SPEEX_SET_VBR* Set variable bit-rate (VBR) to on (1) or off (0) (integer)
+SPEEX_SET_VBR* Set variable bit-rate (VBR) to on (1) or off (0) (spx_int32_t)
 \end_layout
 
 \begin_layout Description
 SPEEX_GET_VBR* Get variable bit-rate
-\begin_inset LatexCommand \index{variable bit-rate}
+\begin_inset LatexCommand index
+name "variable bit-rate"
 
 \end_inset
 
- (VBR) status (integer)
+ (VBR) status (spx_int32_t)
 \end_layout
 
 \begin_layout Description
@@ -1855,87 +2461,108 @@ SPEEX_GET_VBR_QUALITY* Get the current encoder VBR speech quality (float
 \end_layout
 
 \begin_layout Description
-SPEEX_SET_COMPLEXITY* Set the CPU resources allowed for the encoder (integer
+SPEEX_SET_COMPLEXITY* Set the CPU resources allowed for the encoder (spx_int32_t
  1 to 10)
 \end_layout
 
 \begin_layout Description
-SPEEX_GET_COMPLEXITY* Get the CPU resources allowed for the encoder (integer
+SPEEX_GET_COMPLEXITY* Get the CPU resources allowed for the encoder (spx_int32_t
  1 to 10)
 \end_layout
 
 \begin_layout Description
 SPEEX_SET_BITRATE* Set the bit-rate to use to the closest value not exceeding
- the parameter (integer in bps)
+ the parameter (spx_int32_t in bps)
 \end_layout
 
 \begin_layout Description
-SPEEX_GET_BITRATE Get the current bit-rate in use (integer in bps)
+SPEEX_GET_BITRATE Get the current bit-rate in use (spx_int32_t in bps)
 \end_layout
 
 \begin_layout Description
-SPEEX_SET_SAMPLING_RATE Set real sampling rate (integer in Hz)
+SPEEX_SET_SAMPLING_RATE Set real sampling rate (spx_int32_t in Hz)
 \end_layout
 
 \begin_layout Description
-SPEEX_GET_SAMPLING_RATE Get real sampling rate (integer in Hz)
+SPEEX_GET_SAMPLING_RATE Get real sampling rate (spx_int32_t in Hz)
 \end_layout
 
 \begin_layout Description
-SPEEX_RESET_STATE Reset the encoder/decoder state to its original state
(zeros all memories)
+SPEEX_RESET_STATE Reset the encoder/decoder state to its original state,
clearing all memories (no argument)
 \end_layout
 
 \begin_layout Description
 SPEEX_SET_VAD* Set voice activity detection
-\begin_inset LatexCommand \index{voice activity detection}
+\begin_inset LatexCommand index
+name "voice activity detection"
 
 \end_inset
 
- (VAD) to on (1) or off (0) (integer)
+ (VAD) to on (1) or off (0) (spx_int32_t)
 \end_layout
 
 \begin_layout Description
-SPEEX_GET_VAD* Get voice activity detection (VAD) status (integer)
+SPEEX_GET_VAD* Get voice activity detection (VAD) status (spx_int32_t)
 \end_layout
 
 \begin_layout Description
 SPEEX_SET_DTX* Set discontinuous transmission
-\begin_inset LatexCommand \index{discontinuous transmission}
+\begin_inset LatexCommand index
+name "discontinuous transmission"
 
 \end_inset
 
- (DTX) to on (1) or off (0) (integer)
+ (DTX) to on (1) or off (0) (spx_int32_t)
 \end_layout
 
 \begin_layout Description
-SPEEX_GET_DTX* Get discontinuous transmission (DTX) status (integer)
+SPEEX_GET_DTX* Get discontinuous transmission (DTX) status (spx_int32_t)
 \end_layout
 
 \begin_layout Description
 SPEEX_SET_ABR* Set average bit-rate
-\begin_inset LatexCommand \index{average bit-rate}
+\begin_inset LatexCommand index
+name "average bit-rate"
 
 \end_inset
 
- (ABR) to a value n in bits per second (integer in bps)
+ (ABR) to a value n in bits per second (spx_int32_t in bps)
 \end_layout
 
 \begin_layout Description
-SPEEX_GET_ABR* Get average bit-rate (ABR) setting (integer in bps)
+SPEEX_GET_ABR* Get average bit-rate (ABR) setting (spx_int32_t in bps)
 \end_layout
 
 \begin_layout Description
 SPEEX_SET_PLC_TUNING* Tell the encoder to optimize encoding for a certain
- percentage of packet loss (integer in percent)
+ percentage of packet loss (spx_int32_t in percent)
 \end_layout
 
 \begin_layout Description
-SPEEX_GET_PLC_TUNING* Get the current tuning of the encoder for PLC (integer
+SPEEX_GET_PLC_TUNING* Get the current tuning of the encoder for PLC (spx_int32_t
  in percent)
 \end_layout
 
 \begin_layout Description
+SPEEX_SET_VBR_MAX_BITRATE* Set the maximum bit-rate allowed in VBR operation
+ (spx_int32_t in bps)
+\end_layout
+
+\begin_layout Description
+SPEEX_GET_VBR_MAX_BITRATE* Get the current maximum bit-rate allowed in VBR
+ operation (spx_int32_t in bps)
+\end_layout
+
+\begin_layout Description
+SPEEX_SET_HIGHPASS Set the high-pass filter on (1) or off (0) (spx_int32_t)
+\end_layout
+
+\begin_layout Description
+SPEEX_TET_HIGHPASS Get the current high-pass filter status (spx_int32_t)
+\end_layout
+
+\begin_layout Description
 * applies only to the encoder
 \end_layout
 
@@ -1950,9 +2577,10 @@ SPEEX_GET_PLC_TUNING* Get the current tuning of the encoder for PLC (integer
  normally only used internally
 \end_layout
 
-\begin_layout Subsection
+\begin_layout Section
 Mode queries
-\begin_inset LatexCommand \label{sub:Mode-queries}
+\begin_inset LatexCommand label
+name "sub:Mode-queries"
 
 \end_inset
 
@@ -1994,9 +2622,10 @@ ptr
  
 \end_layout
 
-\begin_layout Subsection
+\begin_layout Section
 Preprocessor options
-\begin_inset LatexCommand \label{sub:Preprocessor-options}
+\begin_inset LatexCommand label
+name "sub:Preprocessor-options"
 
 \end_inset
 
@@ -2062,9 +2691,65 @@ SPEEX_PREPROCESS_SET_DEREVERB_DECAY
 SPEEX_PREPROCESS_GET_DEREVERB_DECAY
 \end_layout
 
-\begin_layout Subsection
+\begin_layout Description
+SPEEX_PREPROCESS_SET_PROB_START
+\end_layout
+
+\begin_layout Description
+SPEEX_PREPROCESS_GET_PROB_START
+\end_layout
+
+\begin_layout Description
+SPEEX_PREPROCESS_SET_PROB_CONTINUE
+\end_layout
+
+\begin_layout Description
+SPEEX_PREPROCESS_GET_PROB_CONTINUE
+\end_layout
+
+\begin_layout Description
+SPEEX_PREPROCESS_SET_NOISE_SUPPRESS Set maximum attenuation of the noise
+ in dB (negative number)
+\end_layout
+
+\begin_layout Description
+SPEEX_PREPROCESS_GET_NOISE_SUPPRESS Get maximum attenuation of the noise
+ in dB (negative number)
+\end_layout
+
+\begin_layout Description
+SPEEX_PREPROCESS_SET_ECHO_SUPPRESS Set maximum attenuation of the residual
+ echo in dB (negative number)
+\end_layout
+
+\begin_layout Description
+SPEEX_PREPROCESS_GET_ECHO_SUPPRESS Set maximum attenuation of the residual
+ echo in dB (negative number)
+\end_layout
+
+\begin_layout Description
+SPEEX_PREPROCESS_SET_ECHO_SUPPRESS_ACTIVE Set maximum attenuation of the
+ echo in dB when near end is active (negative number)
+\end_layout
+
+\begin_layout Description
+SPEEX_PREPROCESS_GET_ECHO_SUPPRESS_ACTIVE Set maximum attenuation of the
+ echo in dB when near end is active (negative number)
+\end_layout
+
+\begin_layout Description
+SPEEX_PREPROCESS_SET_ECHO_STATE Set the associated echo canceller for residual
+ echo suppression (NULL for no residual echo suppression)
+\end_layout
+
+\begin_layout Description
+SPEEX_PREPROCESS_GET_ECHO_STATE Get the associated echo canceller
+\end_layout
+
+\begin_layout Section
 Packing and in-band signalling
-\begin_inset LatexCommand \index{in-band signalling}
+\begin_inset LatexCommand index
+name "in-band signalling"
 
 \end_inset
 
@@ -2083,7 +2768,8 @@ Sometimes it is desirable to pack more than one frame per packet (or other
  mechanism, it is possible to include a terminator code.
  That terminator consists of the code 15 (decimal) encoded with 5 bits,
  as shown in Table 
-\begin_inset LatexCommand \ref{cap:quality_vs_bps}
+\begin_inset LatexCommand ref
+reference "cap:quality_vs_bps"
 
 \end_inset
 
@@ -2114,7 +2800,8 @@ pseudo-frames
 
  of mode 14 which contain a 4-bit message type code, followed by the message.
  Table 
-\begin_inset LatexCommand \ref{cap:In-band-signalling-codes}
+\begin_inset LatexCommand ref
+reference "cap:In-band-signalling-codes"
 
 \end_inset
 
@@ -2133,6 +2820,19 @@ sideways false
 status open
 
 \begin_layout Standard
+\begin_inset ERT
+status collapsed
+
+\begin_layout Standard
+
+
+\backslash
+begin{center}
+\end_layout
+
+\end_inset
+
+
 \begin_inset Tabular
 <lyxtabular version="3" rows="17" columns="3">
 <features>
@@ -2645,11 +3345,33 @@ reserved
 \end_inset
 
 
+\begin_inset ERT
+status collapsed
+
+\begin_layout Standard
+
+
+\backslash
+end{center}
+\end_layout
+
+\end_inset
+
+
 \end_layout
 
-\begin_layout Caption
+\begin_layout Standard
+\begin_inset Caption
+
+\begin_layout Standard
 In-band signalling codes
-\begin_inset LatexCommand \label{cap:In-band-signalling-codes}
+\begin_inset LatexCommand label
+name "cap:In-band-signalling-codes"
+
+\end_inset
+
+
+\end_layout
 
 \end_inset
 
@@ -2673,14 +3395,16 @@ Finally, applications may define custom in-band messages using mode 13.
 
 \end_layout
 
-\begin_layout Section
+\begin_layout Chapter
 Formats and standards
-\begin_inset LatexCommand \index{standards}
+\begin_inset LatexCommand index
+name "standards"
 
 \end_inset
 
 
-\begin_inset LatexCommand \label{sec:Formats-and-standards}
+\begin_inset LatexCommand label
+name "sec:Formats-and-standards"
 
 \end_inset
 
@@ -2732,9 +3456,10 @@ For encoders, at least one narrowband or wideband mode MUST be supported.
  some modes.
 \end_layout
 
-\begin_layout Subsection
+\begin_layout Section
 RTP
-\begin_inset LatexCommand \index{RTP}
+\begin_inset LatexCommand index
+name "RTP"
 
 \end_inset
 
@@ -2743,12 +3468,14 @@ RTP
 
 \begin_layout Standard
 The RTP payload draft is included in appendix 
-\begin_inset LatexCommand \ref{sec:IETF-draft}
+\begin_inset LatexCommand ref
+reference "sec:IETF-draft"
 
 \end_inset
 
  and the latest version is available at 
-\begin_inset LatexCommand \url{http://www.speex.org/drafts/latest}
+\begin_inset LatexCommand url
+target "http://www.speex.org/drafts/latest"
 
 \end_inset
 
@@ -2758,7 +3485,7 @@ The RTP payload draft is included in appendix
  
 \end_layout
 
-\begin_layout Subsection
+\begin_layout Section
 MIME Type
 \end_layout
 
@@ -2771,9 +3498,10 @@ audio/speex
  in the near future.
 \end_layout
 
-\begin_layout Subsection
+\begin_layout Section
 Ogg
-\begin_inset LatexCommand \index{Ogg}
+\begin_inset LatexCommand index
+name "Ogg"
 
 \end_inset
 
@@ -2784,7 +3512,8 @@ Ogg
 Speex bit-streams can be stored in Ogg files.
  In this case, the first packet of the Ogg file contains the Speex header
  described in table 
-\begin_inset LatexCommand \ref{cap:ogg_speex_header}
+\begin_inset LatexCommand ref
+reference "cap:ogg_speex_header"
 
 \end_inset
 
@@ -2882,6 +3611,19 @@ sideways false
 status open
 
 \begin_layout Standard
+\begin_inset ERT
+status collapsed
+
+\begin_layout Standard
+
+
+\backslash
+begin{center}
+\end_layout
+
+\end_inset
+
+
 \begin_inset Tabular
 <lyxtabular version="3" rows="16" columns="3">
 <features>
@@ -3357,11 +4099,33 @@ int
 \end_inset
 
 
+\begin_inset ERT
+status collapsed
+
+\begin_layout Standard
+
+
+\backslash
+end{center}
+\end_layout
+
+\end_inset
+
+
 \end_layout
 
-\begin_layout Caption
+\begin_layout Standard
+\begin_inset Caption
+
+\begin_layout Standard
 Ogg/Speex header packet
-\begin_inset LatexCommand \label{cap:ogg_speex_header}
+\begin_inset LatexCommand label
+name "cap:ogg_speex_header"
+
+\end_inset
+
+
+\end_layout
 
 \end_inset
 
@@ -3374,30 +4138,51 @@ Ogg/Speex header packet
 \end_layout
 
 \begin_layout Standard
+\begin_inset ERT
+status collapsed
+
+\begin_layout Standard
 
-\newpage
 
+\backslash
+clearpage
 \end_layout
 
-\begin_layout Section
+\end_inset
+
+
+\end_layout
+
+\begin_layout Chapter
 Introduction to CELP Coding
-\begin_inset LatexCommand \index{CELP}
+\begin_inset LatexCommand index
+name "CELP"
 
 \end_inset
 
 
-\begin_inset LatexCommand \label{sec:Introduction-to-CELP}
+\begin_inset LatexCommand label
+name "sec:Introduction-to-CELP"
 
 \end_inset
 
 
 \end_layout
 
+\begin_layout Quote
+\align center
+
+\emph on
+Do not meddle in the affairs of poles, for they are subtle and quick to
+ leave the unit circle.
+\end_layout
+
 \begin_layout Standard
 Speex is based on CELP, which stands for Code Excited Linear Prediction.
  This section attempts to introduce the principles behind CELP, so if you
  are already familiar with CELP, you can safely skip to section 
-\begin_inset LatexCommand \ref{sec:Speex-narrowband-mode}
+\begin_inset LatexCommand ref
+reference "sec:Speex-narrowband-mode"
 
 \end_inset
 
@@ -3428,14 +4213,118 @@ perceptually weighted domain
 
 \begin_layout Standard
 This section describes the basic ideas behind CELP.
Note that it's still incomplete.
This is still a work in progress.
 \end_layout
 
-\begin_layout Subsection
-Linear Prediction (LPC)
-\begin_inset LatexCommand \index{linear prediction}
+\begin_layout Section
+Source-Filter Model of Speech Prediction
+\end_layout
 
-\end_inset
+\begin_layout Standard
+The source-filter model of speech production assumes that the vocal cords
+ are the source of spectrally flat sound (the excitation signal), and that
+ the vocal tract acts as a filter to spectrally shape the various sounds
+ of speech.
+ While still an approximation, the model is widely used in speech coding
+ because of its simplicity.Its use is also the reason why most speech codecs
+ (Speex included) perform badly on music signals.
+ The different phonemes can be distinguished by their excitation (source)
+ and spectral shape (filter).
+ Voiced sounds (e.g.
+ vowels) have an excitation signal that is periodic and that can be approximated
+ by an impulse train in the time domain or by regularly-spaced harmonics
+ in the frequency domain.
+ On the other hand, fricatives (such as the "s", "sh" and "f" sounds) have
+ an excitation signal that is similar to white Gaussian noise.
+ So called voice fricatives (such as "z" and "v") have excitation signal
+ composed of an harmonic part and a noisy part.
+\end_layout
+
+\begin_layout Standard
+The source-filter model is usually tied with the use of Linear prediction.
+ The CELP model is based on source-filter model, as can be seen from the
+ CELP decoder illustrated in Figure 
+\begin_inset LatexCommand ref
+reference "fig:The-CELP-model"
+
+\end_inset
+
+.
+\end_layout
+
+\begin_layout Standard
+\begin_inset Float figure
+wide false
+sideways false
+status open
+
+\begin_layout Standard
+\begin_inset ERT
+status collapsed
+
+\begin_layout Standard
+
+
+\backslash
+begin{center}
+\end_layout
+
+\end_inset
+
+
+\begin_inset Graphics
+       filename celp_decoder.eps
+       width 45page%
+       keepAspectRatio
+
+\end_inset
+
+
+\begin_inset ERT
+status collapsed
+
+\begin_layout Standard
+
+
+\backslash
+end{center}
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Standard
+\begin_inset Caption
+
+\begin_layout Standard
+The CELP model of speech synthesis (decoder)
+\begin_inset LatexCommand label
+name "fig:The-CELP-model"
+
+\end_inset
+
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Section
+Linear Prediction (LPC)
+\begin_inset LatexCommand index
+name "linear prediction"
+
+\end_inset
 
 
 \end_layout
@@ -3500,46 +4389,23 @@ That can be done by making all derivatives
 \end_layout
 
 \begin_layout Standard
-The 
-\begin_inset Formula $a_{i}$
-\end_inset
-
- filter coefficients are computed using the Levinson-Durbin
-\begin_inset LatexCommand \index{Levinson-Durbin}
-
-\end_inset
-
- algorithm, which starts from the auto-correlation
-\begin_inset LatexCommand \index{auto-correlation}
-
-\end_inset
-
-\begin_inset Formula $R(m)$
+For an order 
+\begin_inset Formula $N$
 \end_inset
 
- of the signal 
-\begin_inset Formula $x[n]$
+ filter, the filter coefficients 
+\begin_inset Formula $a_{i}$
 \end_inset
 
-.
-\end_layout
-
-\begin_layout Standard
-\begin_inset Formula \[
-R(m)=\sum_{i=0}^{N-1}x[i]x[i-m]\]
-
+ are found by solving the system 
+\begin_inset Formula $N\times N$
 \end_inset
 
-
-\end_layout
-
-\begin_layout Standard
-For an order 
-\begin_inset Formula $N$
+ linear system 
+\begin_inset Formula $\mathbf{Ra}=\mathbf{r}$
 \end_inset
 
- filter, we have:
+, where
 \begin_inset Formula \[
 \mathbf{R}=\left[\begin{array}{cccc}
 R(0) & R(1) & \cdots & R(N-1)\\
@@ -3559,59 +4425,26 @@ R(N)\end{array}\right]\]
 
 \end_inset
 
-
-\end_layout
-
-\begin_layout Standard
-The filter coefficients 
-\begin_inset Formula $a_{i}$
-\end_inset
-
- are found by solving the system 
-\begin_inset Formula $\mathbf{Ra}=\mathbf{r}$
-\end_inset
-
-.
- What the Levinson-Durbin algorithm does here is making the solution to
- the problem 
-\begin_inset Formula $\mathcal{O}\left(N^{2}\right)$
-\end_inset
-
- instead of 
-\begin_inset Formula $\mathcal{O}\left(N^{3}\right)$
-\end_inset
-
- by exploiting the fact that matrix 
-\begin_inset Formula $\mathbf{R}$
+with 
+\begin_inset Formula $R(m)$
 \end_inset
 
- is toeplitz hermitian.
- Also, it can be proven that all the roots of 
-\begin_inset Formula $A(z)$
-\end_inset
+, the auto-correlation
+\begin_inset LatexCommand index
+name "auto-correlation"
 
- are within the unit circle, which means that 
-\begin_inset Formula $1/A(z)$
 \end_inset
 
- is always stable.
- This is in theory; in practice because of finite precision, there are two
- commonly used techniques to make sure we have a stable filter.
- First, we multiply 
-\begin_inset Formula $R(0)$
+ of the signal 
+\begin_inset Formula $x[n]$
 \end_inset
 
- by a number slightly above one (such as 1.0001), which is equivalent to
- adding noise to the signal.
- Also, we can apply a window to the auto-correlation, which is equivalent
- to filtering in the frequency domain, reducing sharp resonances.
+, computed as:
 \end_layout
 
 \begin_layout Standard
-The linear prediction model represents each speech sample as a linear combinatio
-n of past samples, plus an error signal called the excitation (or residual).
 \begin_inset Formula \[
-x[n]=\sum_{i=1}^{N}a_{i}x[n-i]+e[n]\]
+R(m)=\sum_{i=0}^{N-1}x[i]x[i-m]\]
 
 \end_inset
 
@@ -3619,93 +4452,50 @@ x[n]=\sum_{i=1}^{N}a_{i}x[n-i]+e[n]\]
 \end_layout
 
 \begin_layout Standard
-In the 
-\emph on
-z
-\emph default
--domain, this can be expressed as
-\end_layout
-
-\begin_layout Standard
-\begin_inset Formula \[
-x(z)=\frac{1}{A(z)}\: e(z)\]
-
+Because 
+\begin_inset Formula $\mathbf{R}$
 \end_inset
 
+ is toeplitz hermitian, the Levinson-Durbin
+\begin_inset LatexCommand index
+name "Levinson-Durbin"
 
-\end_layout
-
-\begin_layout Standard
-where 
-\begin_inset Formula $A(z)$
 \end_inset
 
- is defined as
-\end_layout
-
-\begin_layout Standard
-\begin_inset Formula \[
-A(z)=1-\sum_{i=1}^{N}a_{i}z^{-i}\]
-
+ algorithm can be used, making the solution to the problem 
+\begin_inset Formula $\mathcal{O}\left(N^{2}\right)$
 \end_inset
 
+ instead of 
+\begin_inset Formula $\mathcal{O}\left(N^{3}\right)$
+\end_inset
 
-\end_layout
-
-\begin_layout Standard
-We usually refer to 
+.
+ Also, it can be proven that all the roots of 
 \begin_inset Formula $A(z)$
 \end_inset
 
- as the analysis filter and 
+ are within the unit circle, which means that 
 \begin_inset Formula $1/A(z)$
 \end_inset
 
- as the synthesis filter.
- The whole process is called short-term prediction as it predicts the signal
-\begin_inset Formula $x[n]$
-\end_inset
-
- using a prediction using only the 
-\begin_inset Formula $N$
-\end_inset
-
- past samples, where 
-\begin_inset Formula $N$
-\end_inset
-
- is usually around 10.
-\end_layout
-
-\begin_layout Standard
-Because LPC coefficients have very little robustness to quantization, they
- are converted to Line Spectral Pair
-\begin_inset LatexCommand \index{line spectral pair}
-
-\end_inset
-
- (LSP) coefficients which have a much better behaviour with quantization,
- one of them being that it's easy to keep the filter stable.
-\end_layout
-
-\begin_layout Standard
-\begin_inset Note Comment
-status collapsed
-
-\begin_layout Standard
-Describe LSP's
-\end_layout
-
+ is always stable.
+ This is in theory; in practice because of finite precision, there are two
+ commonly used techniques to make sure we have a stable filter.
+ First, we multiply 
+\begin_inset Formula $R(0)$
 \end_inset
 
-
+ by a number slightly above one (such as 1.0001), which is equivalent to
+ adding noise to the signal.
+ Also, we can apply a window to the auto-correlation, which is equivalent
+ to filtering in the frequency domain, reducing sharp resonances.
 \end_layout
 
-\begin_layout Subsection
+\begin_layout Section
 Pitch Prediction
-\begin_inset LatexCommand \index{pitch}
+\begin_inset LatexCommand index
+name "pitch"
 
 \end_inset
 
@@ -3753,7 +4543,7 @@ where
 .
 \end_layout
 
-\begin_layout Subsection
+\begin_layout Section
 Innovation Codebook
 \end_layout
 
@@ -3808,14 +4598,16 @@ X(z)=\frac{C(z)}{A(z)\left(1-\beta z^{-T}\right)}\]
 
 \end_layout
 
-\begin_layout Subsection
-Analysis-by-Synthesis and Error Weighting
-\begin_inset LatexCommand \index{error weighting}
+\begin_layout Section
+Noise Weighting
+\begin_inset LatexCommand index
+name "error weighting"
 
 \end_inset
 
 
-\begin_inset LatexCommand \index{analysis-by-synthesis}
+\begin_inset LatexCommand index
+name "analysis-by-synthesis"
 
 \end_inset
 
@@ -3839,57 +4631,39 @@ shape
 vice versa
 \emph default
 .
- That's why instead of minimizing the simple quadratic error
-\begin_inset Formula \[
-E=\sum_{n}\left(x[n]-\overline{x}[n]\right)^{2}\]
-
-\end_inset
-
-where 
-\begin_inset Formula $\overline{x}[n]$
-\end_inset
-
- is the encoder signal, we minimize the error for the perceptually weighted
- signal
-\begin_inset Formula \[
-X_{w}(z)=W(z)X(z)\]
-
+ In order to maximize speech quality, CELP codecs minimize the mean square
+ of the error (noise) in the perceptually weighted domain.
+ This means that a perceptual noise weighting filter 
+\begin_inset Formula $W(z)$
 \end_inset
 
-where 
+ is applied to the error signal in the encoder.
+ In most CELP codecs, 
 \begin_inset Formula $W(z)$
 \end_inset
 
- is the weighting filter, usually of the form
-\end_layout
+ is a pole-zero weighting filter derived from the linear prediction coefficients
+ (LPC), generally using bandwidth expansion.
+ Let the spectral envelope be represented by the synthesis filter 
+\begin_inset Formula $1/A(z)$
+\end_inset
 
-\begin_layout Standard
+, CELP codecs typically derive the noise weighting filter as: 
 \begin_inset Formula \begin{equation}
-W(z)=\frac{A\left(\frac{z}{\gamma_{1}}\right)}{A\left(\frac{z}{\gamma_{2}}\right)}\label{eq:weighting_filter}\end{equation}
+W(z)=\frac{A(z/\gamma_{1})}{A(z/\gamma_{2})}\label{eq:gamma-weighting}\end{equation}
 
 \end_inset
 
-
-\end_layout
-
-\begin_layout Standard
-with control parameters 
-\begin_inset Formula $\gamma_{1}>\gamma_{2}$
+where 
+\begin_inset Formula $\gamma_{1}=0.9$
 \end_inset
 
-.
- If the noise is white in the perceptually weighted domain, then in the
- signal domain its spectral shape will be of the form
-\begin_inset Formula \[
-A_{noise}(z)=\frac{1}{W(z)}=\frac{A\left(\frac{z}{\gamma_{2}}\right)}{A\left(\frac{z}{\gamma_{1}}\right)}\]
-
+ and 
+\begin_inset Formula $\gamma_{2}=0.6$
 \end_inset
 
-
-\end_layout
-
-\begin_layout Standard
-If a filter 
+ in the Speex reference implementation.
+ If a filter 
 \begin_inset Formula $A(z)$
 \end_inset
 
@@ -3917,45 +4691,159 @@ If a filter
 \end_layout
 
 \begin_layout Standard
-Analysis-by-synthesis refers to the fact that when trying to find the best
- pitch parameters (
-\begin_inset Formula $T$
+The weighting filter is applied to the error signal used to optimize the
+ codebook search through analysis-by-synthesis (AbS).
+ This results in a spectral shape of the noise that tends towards 
+\begin_inset Formula $1/W(z)$
 \end_inset
 
-, 
-\begin_inset Formula $\beta$
+.
+ While the simplicity of the model has been an important reason for the
+ success of CELP, it remains that 
+\begin_inset Formula $W(z)$
 \end_inset
 
-) and innovation signal 
-\begin_inset Formula $c[n]$
+ is a very rough approximation for the perceptually optimal noise weighting
+ function.
+ Fig.
+\begin_inset LatexCommand ref
+reference "cap:Standard-noise-shaping"
+
 \end_inset
 
-, we do not work by making the excitation 
-\begin_inset Formula $e[n]$
+ illustrates the noise shaping that results from Eq.
+\begin_inset LatexCommand ref
+reference "eq:gamma-weighting"
+
+\end_inset
+
+.
+ Throughout this paper, we refer to 
+\begin_inset Formula $W(z)$
 \end_inset
 
- as close as the original one (which would be simpler), but apply the synthesis
- (and weighting) filter and try making 
-\begin_inset Formula $X_{w}(z)$
+ as the noise weighting filter and to 
+\begin_inset Formula $1/W(z)$
 \end_inset
 
- as close to the original as possible.
+ as the noise shaping filter (or curve).
 \end_layout
 
 \begin_layout Standard
+\begin_inset Float figure
+wide false
+sideways false
+status open
 
-\newpage
+\begin_layout Standard
+\begin_inset ERT
+status collapsed
 
-\end_layout
+\begin_layout Standard
+
+
+\backslash
+begin{center}
+\end_layout
+
+\end_inset
+
+
+\begin_inset Graphics
+       filename ref_shaping.eps
+       width 45page%
+       keepAspectRatio
+
+\end_inset
+
+
+\begin_inset ERT
+status collapsed
+
+\begin_layout Standard
+
+
+\backslash
+end{center}
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Standard
+\begin_inset Caption
+
+\begin_layout Standard
+Standard noise shaping in CELP.
+ Arbitrary y-axis offset.
+\begin_inset LatexCommand label
+name "cap:Standard-noise-shaping"
+
+\end_inset
+
+
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\end_inset
+
+
+\end_layout
 
 \begin_layout Section
+Analysis-by-Synthesis
+\end_layout
+
+\begin_layout Standard
+One of the main principles behind CELP is called Analysis-by-Synthesis (AbS),
+ meaning that the encoding (analysis) is performed by perceptually optimising
+ the decoded (synthesis) signal in a closed loop.
+ In theory, the best CELP stream would be produced by trying all possible
+ bit combinations and selecting the one that produces the best-sounding
+ decoded signal.
+ This is obviously not possible in practice for two reasons: the required
+ complexity is beyond any currently available hardware and the 
+\begin_inset Quotes eld
+\end_inset
+
+best sounding
+\begin_inset Quotes erd
+\end_inset
+
+ selection criterion implies a human listener.
+\end_layout
+
+\begin_layout Standard
+In order to achieve real-time encoding using limited computing resources,
+ the CELP optimisation is broken down into smaller, more manageable, sequential
+ searches using the perceptual weighting function described earlier.
+\end_layout
+
+\begin_layout Standard
+
+\newpage
+
+\end_layout
+
+\begin_layout Chapter
 Speex narrowband mode
-\begin_inset LatexCommand \label{sec:Speex-narrowband-mode}
+\begin_inset LatexCommand label
+name "sec:Speex-narrowband-mode"
 
 \end_inset
 
 
-\begin_inset LatexCommand \index{narrowband}
+\begin_inset LatexCommand index
+name "narrowband"
 
 \end_inset
 
@@ -3993,76 +4881,183 @@ Dynamically-selectable codebooks (LSP, pitch and innovation)
 sub-vector fixed (innovation) codebooks
 \end_layout
 
-\begin_layout Subsection
-LPC Analysis
-\begin_inset LatexCommand \index{linear prediction}
+\begin_layout Section
+Whole-Frame Analysis
+\begin_inset LatexCommand index
+name "linear prediction"
+
+\end_inset
+
+
+\end_layout
 
+\begin_layout Standard
+In narrowband, Speex frames are 20 ms long (160 samples) and are subdivided
+ in 4 sub-frames of 5 ms each (40 samples).
+ For most narrowband bit-rates (8 kbps and above), the only parameters encoded
+ at the frame level are the Line Spectral Pairs (LSP) and a global excitation
+ gain 
+\begin_inset Formula $g_{frame}$
 \end_inset
 
+, as shown in Fig.
+\begin_inset LatexCommand ref
+reference "cap:Frame-open-loop-analysis"
+
+\end_inset
 
+.
+ All other parameters are encoded at the sub-frame level.
 \end_layout
 
 \begin_layout Standard
-An LPC analysis is first performed on a (asymetric Hamming) window that
- spans all of the current frame and half a frame in advance.
- The LPC coefficients are then converted to Line Spectral Pair
-\begin_inset LatexCommand \index{line spectral pair}
+Linear prediction analysis is performed once per frame using an asymmetric
+ Hamming window centered on the fourth sub-frame.
+ Because linear prediction coefficients (LPC) are not robust to quantization,
+ they are first are converted to line spectral pairs (LSP)
+\begin_inset LatexCommand index
+name "line spectral pair"
 
 \end_inset
 
- (LSP), a representation that is more robust to quantization.
+.
  The LSP's are considered to be associated to the 
 \begin_inset Formula $4^{th}$
 \end_inset
 
  sub-frames and the LSP's associated to the first 3 sub-frames are linearly
- interpolated using the current and previous LSP's.
+ interpolated using the current and previous LSP coefficients.
+ The LSP coefficients and converted back to the LPC filter 
+\begin_inset Formula $\hat{A}(z)$
+\end_inset
+
+.
+ The non-quantized interpolated filter is denoted 
+\begin_inset Formula $A(z)$
+\end_inset
+
+ and can be used for the weighting filter 
+\begin_inset Formula $W(z)$
+\end_inset
+
+ because it does not need to be available to the decoder.
 \end_layout
 
 \begin_layout Standard
-The LSP's are encoded using 30 bits for higher quality modes and 18 bits
- for lower quality, through the use of a multi-stage split-vector quantizer.
- For the lower quality modes, the 10 coefficients are first quantized with
- 6 bits and the error is then divided in two 5-coefficient sub-vectors.
- Each of them is quantized with 6 bits, for a total of 18 bits.
- For the higher quality modes, the remaining error on both sub-vectors is
- further quantized with 6 bits each, for a total of 30 bits.
+To make Speex more robust to packet loss, no prediction is applied on the
+ LSP coefficients prior to quantization.
+ The LSPs are encoded using vector quantizatin (VQ) with 30 bits for higher
+ quality modes and 18 bits for lower quality.
 \end_layout
 
 \begin_layout Standard
-The perceptual weighting filter 
-\begin_inset Formula $W(z)$
+\begin_inset Float figure
+wide false
+sideways false
+status open
+
+\begin_layout Standard
+\begin_inset ERT
+status collapsed
+
+\begin_layout Standard
+
+
+\backslash
+begin{center}
+\end_layout
+
 \end_inset
 
- used by Speex is derived from the LPC filter 
-\begin_inset Formula $A(z)$
+
+\begin_inset Graphics
+       filename speex_analysis.eps
+       width 35page%
+
 \end_inset
 
- and corresponds to the one described by eq.
-\begin_inset LatexCommand \ref{eq:weighting_filter}
+
+\begin_inset ERT
+status collapsed
+
+\begin_layout Standard
+
+
+\backslash
+end{center}
+\end_layout
 
 \end_inset
 
- with 
-\begin_inset Formula $\gamma_{1}=0.9$
+
+\end_layout
+
+\begin_layout Standard
+\begin_inset Caption
+
+\begin_layout Standard
+Frame open-loop analysis
+\begin_inset LatexCommand label
+name "cap:Frame-open-loop-analysis"
+
 \end_inset
 
- and 
-\begin_inset Formula $\gamma_{2}=0.6$
+
+\end_layout
+
 \end_inset
 
-.
- We can use the unquantized 
-\begin_inset Formula $A(z)$
+
+\end_layout
+
 \end_inset
 
- filter since the weighting filter is only used in the encoder.
+
 \end_layout
 
-\begin_layout Subsection
-Pitch Prediction (adaptive codebook)
-\begin_inset LatexCommand \index{pitch}
+\begin_layout Section
+Sub-Frame Analysis-by-Synthesis
+\end_layout
+
+\begin_layout Standard
+\begin_inset Float figure
+wide false
+sideways false
+status open
+
+\begin_layout Standard
+\begin_inset ERT
+status collapsed
+
+\begin_layout Standard
+
+
+\backslash
+begin{center}
+\end_layout
+
+\end_inset
+
+
+\begin_inset Graphics
+       filename speex_abs.eps
+       lyxscale 75
+       width 40page%
+
+\end_inset
+
+
+\begin_inset ERT
+status collapsed
+
+\begin_layout Standard
+
+
+\backslash
+end{center}
+\end_layout
 
 \end_inset
 
@@ -4070,14 +5065,22 @@ Pitch Prediction (adaptive codebook)
 \end_layout
 
 \begin_layout Standard
-Speex uses a 3-tap prediction for pitch.
- That is, the pitch prediction signal 
-\begin_inset Formula $p[n]$
+\begin_inset Caption
+
+\begin_layout Standard
+Analysis-by-synthesis closed-loop optimization on a sub-frame.
+\begin_inset LatexCommand label
+name "cap:Sub-frame-AbS"
+
+\end_inset
+
+
+\end_layout
+
 \end_inset
 
- is obtained by the past of the excitation by:
-\begin_inset Formula \[
-p[n]=\beta_{0}e[n-T-1]+\beta_{1}e[n-T]+\beta_{2}e[n-T+1]\]
+
+\end_layout
 
 \end_inset
 
@@ -4085,15 +5088,46 @@ p[n]=\beta_{0}e[n-T-1]+\beta_{1}e[n-T]+\beta_{2}e[n-T+1]\]
 \end_layout
 
 \begin_layout Standard
+The analysis-by-synthesis (AbS) encoder loop is described in Fig.
+\begin_inset LatexCommand ref
+reference "cap:Sub-frame-AbS"
+
+\end_inset
+
+.
+ There are three main aspects where Speex significantly differs from most
+ other CELP codecs.
+ First, while most recent CELP codecs make use of fractional pitch estimation
+ with a single gain, Speex uses an integer to encode the pitch period, but
+ uses a 3-tap predictor (3 gains).
+ The adaptive codebook contribution 
+\begin_inset Formula $e_{a}[n]$
+\end_inset
+
+ can thus be expressed as:
+\begin_inset Formula \begin{equation}
+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}
+
+\end_inset
+
 where 
-\begin_inset Formula $T$
+\begin_inset Formula $g_{0}$
 \end_inset
 
- is the pitch period and the 
-\begin_inset Formula $\beta_{i}$
+, 
+\begin_inset Formula $g_{1}$
+\end_inset
+
+ and 
+\begin_inset Formula $g_{2}$
+\end_inset
+
+ are the jointly quantized pitch gains and 
+\begin_inset Formula $e[n]$
 \end_inset
 
are the prediction (filter) taps.
is the codec excitation memory.
  It is worth noting that when the pitch is smaller than the sub-frame size,
  we repeat the excitation at a period 
 \begin_inset Formula $T$
@@ -4101,7 +5135,7 @@ where
 
 .
  For example, when 
-\begin_inset Formula $n-T+1$
+\begin_inset Formula $n-T+1\geq0$
 \end_inset
 
 , we use 
@@ -4109,8 +5143,6 @@ where
 \end_inset
 
  instead.
- The period and quantized gains are determined in closed loop (analysis-by-synth
-esis).
  In most modes, the pitch period is encoded with 7 bits in the 
 \begin_inset Formula $\left[17,144\right]$
 \end_inset
@@ -4119,27 +5151,51 @@ esis).
 \begin_inset Formula $\beta_{i}$
 \end_inset
 
- coefficients are vector-quantized using 7 bits (15 kbps narrowband and
above) at higher bit-rates and 5 bits at lower bit-rates (11 kbps narrowband
+ coefficients are vector-quantized using 7 bits at higher bit-rates (15
kbps narrowband and above) and 5 bits at lower bit-rates (11 kbps narrowband
  and below).
 \end_layout
 
-\begin_layout Subsection
-Innovation Codebook
-\end_layout
-
 \begin_layout Standard
-In Speex, the innovation signal is quantized using sub-vector shape-only
- vector quantization (VQ).
- That means that the innovation signal is divided in sub-vectors (of size
- 5 to 20) and quantized using a codebook that represents both the shape
- and the gain at the same time.
- This saves many bits that would otherwise be allocated for a separate gain
- at the price of a slight increase in complexity.
+Many current CELP codecs use moving average (MA) prediction to encode the
+ fixed codebook gain.
+ This provides slightly better coding at the expense of introducing a dependency
+ on previously encoded frames.
+ A second difference is that Speex encodes the fixed codebook gain as the
+ product of the global excitation gain 
+\begin_inset Formula $g_{frame}$
+\end_inset
+
+ with a sub-frame gain corrections 
+\begin_inset Formula $g_{subf}$
+\end_inset
+
+.
+ This increases robustness to packet loss by eliminating the inter-frame
+ dependency.
+ The sub-frame gain correction is encoded before the fixed codebook is searched
+ (not closed-loop optimized) and uses between 0 and 3 bits per sub-frame,
+ depending on the bit-rate.
+\end_layout
+
+\begin_layout Standard
+The third difference is that Speex uses sub-vector quantization of the innovatio
+n (fixed codebook) signal instead of an algebraic codebook.
+ Each sub-frame is divided into sub-vectors of lengths ranging between 5
+ and 20 samples.
+ Each sub-vector is chosen from a bitrate-dependent codebook and all sub-vectors
+ are concatenated to form a sub-frame.
+ As an example, the 3.95 kbps mode uses a sub-vector size of 20 samples with
+ 32 entries in the codebook (5 bits).
+ This means that the innovation is encoded with 10 bits per sub-frame, or
+ 2000 bps.
+ On the other hand, the 18.2 kbps mode uses a sub-vector size of 5 samples
+ with 256 entries in the codebook (8 bits), so the innovation uses 64 bits
+ per sub-frame, or 12800 bps.
  
 \end_layout
 
-\begin_layout Subsection
+\begin_layout Section
 Bit allocation
 \end_layout
 
@@ -4148,7 +5204,8 @@ There are 7 different narrowband bit-rates defined for Speex, ranging from
  250 bps to 24.6 kbps, although the modes below 5.9 kbps should not be used
  for speech.
  The bit-allocation for each mode is detailed in table 
-\begin_inset LatexCommand \ref{cap:bits-narrowband}
+\begin_inset LatexCommand ref
+reference "cap:bits-narrowband"
 
 \end_inset
 
@@ -4180,6 +5237,19 @@ sideways false
 status open
 
 \begin_layout Standard
+\begin_inset ERT
+status collapsed
+
+\begin_layout Standard
+
+
+\backslash
+begin{center}
+\end_layout
+
+\end_inset
+
+
 \begin_inset Tabular
 <lyxtabular version="3" rows="12" columns="11">
 <features>
@@ -5411,11 +6481,33 @@ frame
 \end_inset
 
 
+\begin_inset ERT
+status collapsed
+
+\begin_layout Standard
+
+
+\backslash
+end{center}
+\end_layout
+
+\end_inset
+
+
 \end_layout
 
-\begin_layout Caption
+\begin_layout Standard
+\begin_inset Caption
+
+\begin_layout Standard
 Bit allocation for narrowband modes
-\begin_inset LatexCommand \label{cap:bits-narrowband}
+\begin_inset LatexCommand label
+name "cap:bits-narrowband"
+
+\end_inset
+
+
+\end_layout
 
 \end_inset
 
@@ -5429,13 +6521,15 @@ Bit allocation for narrowband modes
 
 \begin_layout Standard
 So far, no MOS (Mean Opinion Score
-\begin_inset LatexCommand \index{mean opinion score}
+\begin_inset LatexCommand index
+name "mean opinion score"
 
 \end_inset
 
 ) subjective evaluation has been performed for Speex.
- In order to give an idea of the quality achivable with it, table 
-\begin_inset LatexCommand \ref{cap:quality_vs_bps}
+ In order to give an idea of the quality achievable with it, table 
+\begin_inset LatexCommand ref
+reference "cap:quality_vs_bps"
 
 \end_inset
 
@@ -5448,7 +6542,8 @@ So far, no MOS (Mean Opinion Score
  Note that the complexity is only approximate (within 0.5 mflops and using
  the lowest complexity setting).
  Decoding requires approximately 0.5 mflops
-\begin_inset LatexCommand \index{complexity}
+\begin_inset LatexCommand index
+name "complexity"
 
 \end_inset
 
@@ -5463,16 +6558,30 @@ sideways false
 status open
 
 \begin_layout Standard
-\begin_inset Tabular
-<lyxtabular version="3" rows="17" columns="4">
-<features>
-<column alignment="center" valignment="top" leftline="true" width="0pt">
-<column alignment="center" valignment="top" leftline="true" width="0pt">
-<column alignment="center" valignment="top" leftline="true" width="0pt">
-<column alignment="center" valignment="top" leftline="true" rightline="true" width="0pt">
-<row topline="true" bottomline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
+\begin_inset ERT
+status collapsed
+
+\begin_layout Standard
+
+
+\backslash
+begin{center}
+\end_layout
+
+\end_inset
+
+
+\begin_inset Tabular
+<lyxtabular version="3" rows="17" columns="5">
+<features>
+<column alignment="center" valignment="top" leftline="true" width="0pt">
+<column alignment="center" valignment="top" leftline="true" width="0pt">
+<column alignment="center" valignment="top" leftline="true" width="0pt">
+<column alignment="center" valignment="top" leftline="true" width="0pt">
+<column alignment="center" valignment="top" leftline="true" rightline="true" width="0pt">
+<row topline="true" bottomline="true">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
 
 \begin_layout Standard
 Mode
@@ -5484,8 +6593,18 @@ Mode
 \begin_inset Text
 
 \begin_layout Standard
+Quality
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
 Bit-rate
-\begin_inset LatexCommand \index{bit-rate}
+\begin_inset LatexCommand index
+name "bit-rate"
 
 \end_inset
 
@@ -5499,7 +6618,8 @@ Bit-rate
 
 \begin_layout Standard
 mflops
-\begin_inset LatexCommand \index{complexity}
+\begin_inset LatexCommand index
+name "complexity"
 
 \end_inset
 
@@ -5532,6 +6652,15 @@ Quality/description
 \begin_inset Text
 
 \begin_layout Standard
+-
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
 250
 \end_layout
 
@@ -5541,7 +6670,7 @@ Quality/description
 \begin_inset Text
 
 \begin_layout Standard
-N/A
+0
 \end_layout
 
 \end_inset
@@ -5570,6 +6699,15 @@ No transmission (DTX)
 \begin_inset Text
 
 \begin_layout Standard
+0
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
 2,150
 \end_layout
 
@@ -5608,6 +6746,15 @@ Vocoder (mostly for comfort noise)
 \begin_inset Text
 
 \begin_layout Standard
+2
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
 5,950
 \end_layout
 
@@ -5646,6 +6793,15 @@ Very noticeable artifacts/noise, good intelligibility
 \begin_inset Text
 
 \begin_layout Standard
+3-4
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
 8,000
 \end_layout
 
@@ -5684,6 +6840,15 @@ Artifacts/noise sometimes noticeable
 \begin_inset Text
 
 \begin_layout Standard
+5-6
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
 11,000
 \end_layout
 
@@ -5722,6 +6887,15 @@ Artifacts usually noticeable only with headphones
 \begin_inset Text
 
 \begin_layout Standard
+7-8
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
 15,000
 \end_layout
 
@@ -5760,6 +6934,15 @@ Need good headphones to tell the difference
 \begin_inset Text
 
 \begin_layout Standard
+9
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
 18,200
 \end_layout
 
@@ -5798,6 +6981,15 @@ Hard to tell the difference even with good headphones
 \begin_inset Text
 
 \begin_layout Standard
+10
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
 24,600
 \end_layout
 
@@ -5836,6 +7028,15 @@ Completely transparent for voice, good quality music
 \begin_inset Text
 
 \begin_layout Standard
+1
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
 3,950
 \end_layout
 
@@ -5874,7 +7075,16 @@ Very noticeable artifacts/noise, good intelligibility
 \begin_inset Text
 
 \begin_layout Standard
-N/A
+-
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+-
 \end_layout
 
 \end_inset
@@ -5883,7 +7093,7 @@ N/A
 \begin_inset Text
 
 \begin_layout Standard
-N/A
+-
 \end_layout
 
 \end_inset
@@ -5912,7 +7122,16 @@ reserved
 \begin_inset Text
 
 \begin_layout Standard
-N/A
+-
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+-
 \end_layout
 
 \end_inset
@@ -5921,7 +7140,7 @@ N/A
 \begin_inset Text
 
 \begin_layout Standard
-N/A
+-
 \end_layout
 
 \end_inset
@@ -5950,7 +7169,16 @@ reserved
 \begin_inset Text
 
 \begin_layout Standard
-N/A
+-
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+-
 \end_layout
 
 \end_inset
@@ -5959,7 +7187,7 @@ N/A
 \begin_inset Text
 
 \begin_layout Standard
-N/A
+-
 \end_layout
 
 \end_inset
@@ -5988,7 +7216,16 @@ reserved
 \begin_inset Text
 
 \begin_layout Standard
-N/A
+-
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+-
 \end_layout
 
 \end_inset
@@ -5997,7 +7234,7 @@ N/A
 \begin_inset Text
 
 \begin_layout Standard
-N/A
+-
 \end_layout
 
 \end_inset
@@ -6026,7 +7263,16 @@ reserved
 \begin_inset Text
 
 \begin_layout Standard
-N/A
+-
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+-
 \end_layout
 
 \end_inset
@@ -6035,7 +7281,7 @@ N/A
 \begin_inset Text
 
 \begin_layout Standard
-N/A
+-
 \end_layout
 
 \end_inset
@@ -6064,7 +7310,16 @@ Application-defined, interpreted by callback or skipped
 \begin_inset Text
 
 \begin_layout Standard
-N/A
+-
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+-
 \end_layout
 
 \end_inset
@@ -6073,7 +7328,7 @@ N/A
 \begin_inset Text
 
 \begin_layout Standard
-N/A
+-
 \end_layout
 
 \end_inset
@@ -6102,7 +7357,16 @@ Speex in-band signaling
 \begin_inset Text
 
 \begin_layout Standard
-N/A
+-
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+-
 \end_layout
 
 \end_inset
@@ -6111,7 +7375,7 @@ N/A
 \begin_inset Text
 
 \begin_layout Standard
-N/A
+-
 \end_layout
 
 \end_inset
@@ -6131,11 +7395,28 @@ Terminator code
 \end_inset
 
 
+\begin_inset ERT
+status collapsed
+
+\begin_layout Standard
+
+
+\backslash
+end{center}
+\end_layout
+
+\end_inset
+
+
 \end_layout
 
-\begin_layout Caption
+\begin_layout Standard
+\begin_inset Caption
+
+\begin_layout Standard
 Quality versus bit-rate
-\begin_inset LatexCommand \label{cap:quality_vs_bps}
+\begin_inset LatexCommand label
+name "cap:quality_vs_bps"
 
 \end_inset
 
@@ -6147,9 +7428,15 @@ Quality versus bit-rate
 
 \end_layout
 
-\begin_layout Subsection
+\end_inset
+
+
+\end_layout
+
+\begin_layout Section
 Perceptual enhancement
-\begin_inset LatexCommand \index{perceptual enhancement}
+\begin_inset LatexCommand index
+name "perceptual enhancement"
 
 \end_inset
 
@@ -6157,6 +7444,14 @@ Perceptual enhancement
 \end_layout
 
 \begin_layout Standard
+
+\series bold
+This section was only valid for version 1.1.12 and earlier.
+ It does not apply to version 1.2-beta1 (and later), for which the new perceptual
+ enhancement is not yet documented.
+\end_layout
+
+\begin_layout Standard
 This part of the codec only applies to the decoder and can even be changed
  without affecting inter-operability.
  For that reason, the implementation provided and described here should
@@ -6166,7 +7461,7 @@ This part of the codec only applies to the decoder and can even be changed
 \begin_inset Formula $S(z)=1/A(z)$
 \end_inset
 
- is replaced by an enhanced filter
+ is replaced by an enhanced filter:
 \begin_inset Formula \[
 S'(z)=\frac{A\left(z/a_{2}\right)A\left(z/a_{3}\right)}{A\left(z\right)A\left(z/a_{1}\right)}\]
 
@@ -6200,14 +7495,16 @@ where
 
 \end_layout
 
-\begin_layout Section
+\begin_layout Chapter
 Speex wideband mode (sub-band CELP)
-\begin_inset LatexCommand \index{wideband}
+\begin_inset LatexCommand index
+name "wideband"
 
 \end_inset
 
 
-\begin_inset LatexCommand \label{sec:Speex-wideband-mode}
+\begin_inset LatexCommand label
+name "sec:Speex-wideband-mode"
 
 \end_inset
 
@@ -6228,7 +7525,8 @@ irror
 f
 \emph default
 ilter
-\begin_inset LatexCommand \index{quadrature mirror filter}
+\begin_inset LatexCommand index
+name "quadrature mirror filter"
 
 \end_inset
 
@@ -6236,7 +7534,8 @@ ilter
  The 16 kHz signal is thus divided into two 8 kHz signals, one representing
  the low band (0-4 kHz), the other the high band (4-8 kHz).
  The low band is encoded with the narrowband mode described in section 
-\begin_inset LatexCommand \ref{sec:Speex-narrowband-mode}
+\begin_inset LatexCommand ref
+reference "sec:Speex-narrowband-mode"
 
 \end_inset
 
@@ -6253,7 +7552,7 @@ embedded narrowband bit-stream
  encoding is described in this section.
 \end_layout
 
-\begin_layout Subsection
+\begin_layout Section
 Linear Prediction
 \end_layout
 
@@ -6266,7 +7565,7 @@ The linear prediction part used for the high-band is very similar to what
  is then quantized using 6 bits, too.
 \end_layout
 
-\begin_layout Subsection
+\begin_layout Section
 Pitch Prediction
 \end_layout
 
@@ -6281,7 +7580,7 @@ That part is easy: there's no pitch prediction for the high-band.
  (pitch).
 \end_layout
 
-\begin_layout Subsection
+\begin_layout Section
 Excitation Quantization
 \end_layout
 
@@ -6290,7 +7589,7 @@ The high-band excitation is coded in the same way as for narrowband.
  
 \end_layout
 
-\begin_layout Subsection
+\begin_layout Section
 Bit allocation
 \end_layout
 
@@ -6298,13 +7597,23 @@ Bit allocation
 For the wideband mode, the entire narrowband frame is packed before the
  high-band is encoded.
  The narrowband part of the bit-stream is as defined in table 
-\begin_inset LatexCommand \ref{cap:bits-narrowband}
+\begin_inset LatexCommand ref
+reference "cap:bits-narrowband"
 
 \end_inset
 
 .
  The high-band follows, as described in table 
-\begin_inset LatexCommand \ref{cap:bits-wideband}
+\begin_inset LatexCommand ref
+reference "cap:bits-wideband"
+
+\end_inset
+
+.
+ For wideband, the mode ID is the same as the Speex quality setting and
+ is defined in table 
+\begin_inset LatexCommand ref
+reference "tab:wideband-quality"
 
 \end_inset
 
@@ -6323,6 +7632,19 @@ sideways false
 status open
 
 \begin_layout Standard
+\begin_inset ERT
+status collapsed
+
+\begin_layout Standard
+
+
+\backslash
+begin{center}
+\end_layout
+
+\end_inset
+
+
 \begin_inset Tabular
 <lyxtabular version="3" rows="7" columns="7">
 <features>
@@ -6338,7 +7660,332 @@ status open
 \begin_inset Text
 
 \begin_layout Standard
-Parameter
+Parameter
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+Update rate
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+0
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+1
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+2
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+3
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+4
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row topline="true">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+Wideband bit
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+frame
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+1
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+1
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+1
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+1
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+1
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row topline="true">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+Mode ID
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+frame
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+3
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+3
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+3
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+3
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+3
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row topline="true">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+LSP
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+frame
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+0
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+12
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+12
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+12
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+12
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row topline="true">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+Excitation gain
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+sub-frame
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+0
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+5
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+4
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+4
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+4
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row topline="true" bottomline="true">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+Excitation VQ
 \end_layout
 
 \end_inset
@@ -6347,7 +7994,7 @@ Parameter
 \begin_inset Text
 
 \begin_layout Standard
-Update rate
+sub-frame
 \end_layout
 
 \end_inset
@@ -6365,7 +8012,7 @@ Update rate
 \begin_inset Text
 
 \begin_layout Standard
-1
+0
 \end_layout
 
 \end_inset
@@ -6374,7 +8021,7 @@ Update rate
 \begin_inset Text
 
 \begin_layout Standard
-2
+20
 \end_layout
 
 \end_inset
@@ -6383,7 +8030,7 @@ Update rate
 \begin_inset Text
 
 \begin_layout Standard
-3
+40
 \end_layout
 
 \end_inset
@@ -6392,18 +8039,18 @@ Update rate
 \begin_inset Text
 
 \begin_layout Standard
-4
+80
 \end_layout
 
 \end_inset
 </cell>
 </row>
-<row topline="true">
+<row topline="true" bottomline="true">
 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
 \begin_inset Text
 
 \begin_layout Standard
-Wideband bit
+Total
 \end_layout
 
 \end_inset
@@ -6421,7 +8068,7 @@ frame
 \begin_inset Text
 
 \begin_layout Standard
-1
+4
 \end_layout
 
 \end_inset
@@ -6430,7 +8077,7 @@ frame
 \begin_inset Text
 
 \begin_layout Standard
-1
+36
 \end_layout
 
 \end_inset
@@ -6439,7 +8086,7 @@ frame
 \begin_inset Text
 
 \begin_layout Standard
-1
+112
 \end_layout
 
 \end_inset
@@ -6448,7 +8095,7 @@ frame
 \begin_inset Text
 
 \begin_layout Standard
-1
+192
 \end_layout
 
 \end_inset
@@ -6457,27 +8104,88 @@ frame
 \begin_inset Text
 
 \begin_layout Standard
-1
+352
 \end_layout
 
 \end_inset
 </cell>
 </row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
+</lyxtabular>
+
+\end_inset
+
+
+\begin_inset ERT
+status collapsed
 
 \begin_layout Standard
-Mode ID
+
+
+\backslash
+end{center}
 \end_layout
 
 \end_inset
-</cell>
+
+
+\end_layout
+
+\begin_layout Standard
+\begin_inset Caption
+
+\begin_layout Standard
+Bit allocation for high-band in wideband mode
+\begin_inset LatexCommand label
+name "cap:bits-wideband"
+
+\end_inset
+
+
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Standard
+\begin_inset Float table
+placement h
+wide true
+sideways false
+status open
+
+\begin_layout Standard
+\begin_inset ERT
+status collapsed
+
+\begin_layout Standard
+
+
+\backslash
+begin{center}
+\end_layout
+
+\end_inset
+
+
+\begin_inset Tabular
+<lyxtabular version="3" rows="12" columns="3">
+<features>
+<column alignment="center" valignment="top" leftline="true" width="0pt">
+<column alignment="center" valignment="top" leftline="true" width="0pt">
+<column alignment="center" valignment="top" leftline="true" rightline="true" width="0pt">
+<row topline="true" bottomline="true">
 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
 \begin_inset Text
 
 \begin_layout Standard
-frame
+Mode/Quality
 \end_layout
 
 \end_inset
@@ -6486,25 +8194,33 @@ frame
 \begin_inset Text
 
 \begin_layout Standard
-3
+Bit-rate
+\begin_inset LatexCommand index
+name "bit-rate"
+
+\end_inset
+
+ (bps)
 \end_layout
 
 \end_inset
 </cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
 \begin_inset Text
 
 \begin_layout Standard
-3
+Quality/description
 \end_layout
 
 \end_inset
 </cell>
+</row>
+<row topline="true">
 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
 \begin_inset Text
 
 \begin_layout Standard
-3
+0
 \end_layout
 
 \end_inset
@@ -6513,16 +8229,16 @@ frame
 \begin_inset Text
 
 \begin_layout Standard
-3
+3,950
 \end_layout
 
 \end_inset
 </cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
 \begin_inset Text
 
 \begin_layout Standard
-3
+Barely intelligible (mostly for comfort noise)
 \end_layout
 
 \end_inset
@@ -6533,7 +8249,7 @@ frame
 \begin_inset Text
 
 \begin_layout Standard
-LSP
+1
 \end_layout
 
 \end_inset
@@ -6542,7 +8258,7 @@ LSP
 \begin_inset Text
 
 \begin_layout Standard
-frame
+5,750
 \end_layout
 
 \end_inset
@@ -6551,16 +8267,18 @@ frame
 \begin_inset Text
 
 \begin_layout Standard
-0
+Very noticeable artifacts/noise, poor intelligibility
 \end_layout
 
 \end_inset
 </cell>
+</row>
+<row topline="true">
 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
 \begin_inset Text
 
 \begin_layout Standard
-12
+2
 \end_layout
 
 \end_inset
@@ -6569,16 +8287,27 @@ frame
 \begin_inset Text
 
 \begin_layout Standard
-12
+7,750
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+Very noticeable artifacts/noise, good intelligibility
 \end_layout
 
 \end_inset
 </cell>
+</row>
+<row topline="true">
 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
 \begin_inset Text
 
 \begin_layout Standard
-12
+3
 \end_layout
 
 \end_inset
@@ -6587,7 +8316,16 @@ frame
 \begin_inset Text
 
 \begin_layout Standard
-12
+9,800
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+Artifacts/noise sometimes annoying
 \end_layout
 
 \end_inset
@@ -6598,7 +8336,7 @@ frame
 \begin_inset Text
 
 \begin_layout Standard
-Excitation gain
+4
 \end_layout
 
 \end_inset
@@ -6607,20 +8345,22 @@ Excitation gain
 \begin_inset Text
 
 \begin_layout Standard
-sub-frame
+12,800
 \end_layout
 
 \end_inset
 </cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
 \begin_inset Text
 
 \begin_layout Standard
-0
+Artifacts/noise usually noticeable
 \end_layout
 
 \end_inset
 </cell>
+</row>
+<row topline="true">
 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
 \begin_inset Text
 
@@ -6634,54 +8374,56 @@ sub-frame
 \begin_inset Text
 
 \begin_layout Standard
-4
+16,800
 \end_layout
 
 \end_inset
 </cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
 \begin_inset Text
 
 \begin_layout Standard
-4
+Artifacts/noise sometimes noticeable
 \end_layout
 
 \end_inset
 </cell>
+</row>
+<row topline="true">
 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
 \begin_inset Text
 
 \begin_layout Standard
-4
+6
 \end_layout
 
 \end_inset
 </cell>
-</row>
-<row topline="true" bottomline="true">
 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
 \begin_inset Text
 
 \begin_layout Standard
-Excitation VQ
+20,600
 \end_layout
 
 \end_inset
 </cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
 \begin_inset Text
 
 \begin_layout Standard
-sub-frame
+Need good headphones to tell the difference
 \end_layout
 
 \end_inset
 </cell>
+</row>
+<row topline="true">
 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
 \begin_inset Text
 
 \begin_layout Standard
-0
+7
 \end_layout
 
 \end_inset
@@ -6690,25 +8432,27 @@ sub-frame
 \begin_inset Text
 
 \begin_layout Standard
-0
+23,800
 \end_layout
 
 \end_inset
 </cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
 \begin_inset Text
 
 \begin_layout Standard
-20
+Need good headphones to tell the difference
 \end_layout
 
 \end_inset
 </cell>
+</row>
+<row topline="true">
 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
 \begin_inset Text
 
 \begin_layout Standard
-40
+8
 \end_layout
 
 \end_inset
@@ -6717,27 +8461,27 @@ sub-frame
 \begin_inset Text
 
 \begin_layout Standard
-80
+27,800
 \end_layout
 
 \end_inset
 </cell>
-</row>
-<row topline="true" bottomline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
 \begin_inset Text
 
 \begin_layout Standard
-Total
+Hard to tell the difference even with good headphones
 \end_layout
 
 \end_inset
 </cell>
+</row>
+<row topline="true">
 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
 \begin_inset Text
 
 \begin_layout Standard
-frame
+9
 \end_layout
 
 \end_inset
@@ -6746,25 +8490,27 @@ frame
 \begin_inset Text
 
 \begin_layout Standard
-4
+34,400
 \end_layout
 
 \end_inset
 </cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
 \begin_inset Text
 
 \begin_layout Standard
-36
+Hard to tell the difference even with good headphones
 \end_layout
 
 \end_inset
 </cell>
+</row>
+<row topline="true" bottomline="true">
 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
 \begin_inset Text
 
 \begin_layout Standard
-112
+10
 \end_layout
 
 \end_inset
@@ -6773,16 +8519,16 @@ frame
 \begin_inset Text
 
 \begin_layout Standard
-192
+42,400
 \end_layout
 
 \end_inset
 </cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
 \begin_inset Text
 
 \begin_layout Standard
-352
+Completely transparent for voice, good quality music
 \end_layout
 
 \end_inset
@@ -6793,11 +8539,33 @@ frame
 \end_inset
 
 
+\begin_inset ERT
+status collapsed
+
+\begin_layout Standard
+
+
+\backslash
+end{center}
 \end_layout
 
-\begin_layout Caption
-Bit allocation for high-band in wideband mode
-\begin_inset LatexCommand \label{cap:bits-wideband}
+\end_inset
+
+
+\end_layout
+
+\begin_layout Standard
+\begin_inset Caption
+
+\begin_layout Standard
+Quality versus bit-rate for the wideband encoder
+\begin_inset LatexCommand label
+name "tab:wideband-quality"
+
+\end_inset
+
+
+\end_layout
 
 \end_inset
 
@@ -6841,19 +8609,21 @@ clearpage
 
 \end_layout
 
-\begin_layout Section
+\begin_layout Chapter
 \start_of_appendix
 FAQ
 \end_layout
 
 \begin_layout Subsection*
 Vorbis is open-source
-\begin_inset LatexCommand \index{open-source}
+\begin_inset LatexCommand index
+name "open-source"
 
 \end_inset
 
  and patent-free
-\begin_inset LatexCommand \index{patent}
+\begin_inset LatexCommand index
+name "patent"
 
 \end_inset
 
@@ -6889,12 +8659,13 @@ Under what license is Speex released?
 \begin_layout Standard
 As of version 1.0 beta 1, Speex is released under Xiph's version of the (revised)
  BSD license (see Appendix 
-\begin_inset LatexCommand \ref{sec:Speex-License}
+\begin_inset LatexCommand ref
+reference "sec:Speex-License"
 
 \end_inset
 
 ).
- This license is the most permissive of the open-source licenses.
+ This license is one of the most permissive open-source licenses.
 \end_layout
 
 \begin_layout Subsection*
@@ -6907,7 +8678,8 @@ Yes.
  This basically means you have to keep the copyright notice and you can't
  use our name to promote your product without authorization.
  For more details, see license in Appendix 
-\begin_inset LatexCommand \ref{sec:Speex-License}
+\begin_inset LatexCommand ref
+reference "sec:Speex-License"
 
 \end_inset
 
@@ -6916,12 +8688,14 @@ Yes.
 
 \begin_layout Subsection*
 Ogg
-\begin_inset LatexCommand \index{Ogg}
+\begin_inset LatexCommand index
+name "Ogg"
 
 \end_inset
 
 , Speex, Vorbis
-\begin_inset LatexCommand \index{Vorbis}
+\begin_inset LatexCommand index
+name "Vorbis"
 
 \end_inset
 
@@ -6958,7 +8732,8 @@ Speex files have the .spx extension.
 
 \begin_layout Subsection*
 Can I use Speex for compressing music
-\begin_inset LatexCommand \index{music}
+\begin_inset LatexCommand index
+name "music"
 
 \end_inset
 
@@ -7088,7 +8863,8 @@ It's hard to give precise figures since no formal listening tests have been
 
 \begin_layout Subsection*
 Can Speex pass DTMF
-\begin_inset LatexCommand \index{DTMF}
+\begin_inset LatexCommand index
+name "DTMF"
 
 \end_inset
 
@@ -7098,7 +8874,7 @@ Can Speex pass DTMF
 \begin_layout Standard
 I guess it all depends on the bit-rate used.
  Though no formal testing has yet been performed, I'd say is correctly at
- 8 kbps and above (15 kbps for version < 1.1.1).
+ 8 kbps and above.
  Also, make sure you don't use the lowest complexity (see SPEEX_SET_COMPLEXITY
  or --comp option), as it causes significant noise.
 \end_layout
@@ -7118,14 +8894,15 @@ What is your (Jean-Marc) relationship with the University of Sherbrooke
 \end_layout
 
 \begin_layout Standard
-Currently (2005/05/11), I'm doing my 
+I have completed my 
 \emph on
 Ph.D.
 
 \emph default
- at the University of Sherbrooke in mobile robotics.
+ at the University of Sherbrooke in 2005 in mobile robotics.
  Although I did my master with the Sherbrooke speech coding group (in speech
- enhancement, not coding), I am not associated with them anymore.
+ enhancement, not coding), was no longer associated with them when developing
+ Speex.
  It should 
 \series bold
 not
@@ -7139,7 +8916,8 @@ not
 
 \begin_layout Subsection*
 CELP, ACELP
-\begin_inset LatexCommand \index{ACELP}
+\begin_inset LatexCommand index
+name "ACELP"
 
 \end_inset
 
@@ -7181,9 +8959,10 @@ d as a sum of unit pulses, thus making the codebook search much more efficient.
 
 \end_layout
 
-\begin_layout Section
+\begin_layout Chapter
 Sample code
-\begin_inset LatexCommand \label{sec:Sample-code}
+\begin_inset LatexCommand label
+name "sec:Sample-code"
 
 \end_inset
 
@@ -7205,7 +8984,7 @@ where both files are raw (no header) files encoded at 16 bits per sample
  (in the machine natural endianness).
 \end_layout
 
-\begin_layout Subsection
+\begin_layout Section
 sampleenc.c
 \end_layout
 
@@ -7224,7 +9003,7 @@ preview false
 
 \end_layout
 
-\begin_layout Subsection
+\begin_layout Section
 sampledec.c
 \end_layout
 
@@ -7249,9 +9028,10 @@ preview false
 
 \end_layout
 
-\begin_layout Section
+\begin_layout Chapter
 IETF RTP Profile
-\begin_inset LatexCommand \label{sec:IETF-draft}
+\begin_inset LatexCommand label
+name "sec:IETF-draft"
 
 \end_inset
 
@@ -7259,7 +9039,7 @@ IETF RTP Profile
 \end_layout
 
 \begin_layout Standard
-\begin_inset Include \verbatiminput{draft-herlein-speex-rtp-profile-02.txt}
+\begin_inset Include \verbatiminput{draft-ietf-avt-rtp-speex-01-tmp.txt}
 preview false
 
 \end_inset
@@ -7273,9 +9053,10 @@ preview false
 
 \end_layout
 
-\begin_layout Section
+\begin_layout Chapter
 Speex License
-\begin_inset LatexCommand \label{sec:Speex-License}
+\begin_inset LatexCommand label
+name "sec:Speex-License"
 
 \end_inset
 
@@ -7325,7 +9106,7 @@ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS
 
 \end_layout
 
-\begin_layout Section
+\begin_layout Chapter
 GNU Free Documentation License
 \end_layout
 
@@ -7341,7 +9122,7 @@ Copyright (C) 2000 Free Software Foundation, Inc.
  
 \end_layout
 
-\begin_layout Subsection*
+\begin_layout Section*
 0.
  PREAMBLE
 \end_layout
@@ -7375,7 +9156,7 @@ We have designed this License in order to use it for manuals for free software,
  
 \end_layout
 
-\begin_layout Subsection*
+\begin_layout Section*
 1.
  APPLICABILITY AND DEFINITIONS
 \end_layout
@@ -7453,7 +9234,7 @@ The "Title Page" means, for a printed book, the title page itself, plus
  preceding the beginning of the body of the text.
 \end_layout
 
-\begin_layout Subsection*
+\begin_layout Section*
 2.
  VERBATIM COPYING
 \end_layout
@@ -7476,7 +9257,7 @@ You may also lend copies, under the same conditions stated above, and you
  may publicly display copies.
 \end_layout
 
-\begin_layout Subsection*
+\begin_layout Section*
 3.
  COPYING IN QUANTITY
 \end_layout
@@ -7525,7 +9306,7 @@ It is requested, but not required, that you contact the authors of the Document
  
 \end_layout
 
-\begin_layout Subsection*
+\begin_layout Section*
 4.
  MODIFICATIONS
 \end_layout
@@ -7677,7 +9458,7 @@ nt of any Modified Version.
  
 \end_layout
 
-\begin_layout Subsection*
+\begin_layout Section*
 5.
  COMBINING DOCUMENTS
 \end_layout
@@ -7709,7 +9490,7 @@ In the combination, you must combine any sections entitled "History" in
  You must delete all sections entitled "Endorsements."
 \end_layout
 
-\begin_layout Subsection*
+\begin_layout Section*
 6.
  COLLECTIONS OF DOCUMENTS
 \end_layout
@@ -7730,7 +9511,7 @@ You may extract a single document from such a collection, and distribute
  
 \end_layout
 
-\begin_layout Subsection*
+\begin_layout Section*
 7.
  AGGREGATION WITH INDEPENDENT WORKS
 \end_layout
@@ -7754,7 +9535,7 @@ If the Cover Text requirement of section 3 is applicable to these copies
  Otherwise they must appear on covers around the whole aggregate.
 \end_layout
 
-\begin_layout Subsection*
+\begin_layout Section*
 8.
  TRANSLATION
 \end_layout
@@ -7772,7 +9553,7 @@ Translation is considered a kind of modification, so you may distribute
  version of this License, the original English version will prevail.
 \end_layout
 
-\begin_layout Subsection*
+\begin_layout Section*
 9.
  TERMINATION
 \end_layout
@@ -7788,7 +9569,7 @@ You may not copy, modify, sublicense, or distribute the Document except
  
 \end_layout
 
-\begin_layout Subsection*
+\begin_layout Section*
 10.
  FUTURE REVISIONS OF THIS LICENSE
 \end_layout
@@ -7814,7 +9595,7 @@ n.
 \end_layout
 
 \begin_layout Standard
-\begin_inset LatexCommand \printindex{}
+\begin_inset LatexCommand printindex
 
 \end_inset