| #LyX 1.2 created this file. For more info see http://www.lyx.org/ |
| \lyxformat 220 |
| \textclass article |
| \language english |
| \inputencoding auto |
| \fontscheme default |
| \graphics default |
| \float_placement h |
| \paperfontsize default |
| \spacing single |
| \papersize Default |
| \paperpackage a4 |
| \use_geometry 0 |
| \use_amsmath 0 |
| \use_natbib 0 |
| \use_numerical_citations 0 |
| \paperorientation portrait |
| \secnumdepth 3 |
| \tocdepth 3 |
| \paragraph_separation indent |
| \defskip medskip |
| \quotes_language english |
| \quotes_times 2 |
| \papercolumns 1 |
| \papersides 1 |
| \paperpagestyle headings |
| |
| \layout Title |
| |
| The Speex Codec Manual |
| \newline |
| (draft for Speex 1.0beta4) |
| \layout Author |
| |
| Jean-Marc Valin |
| \layout Standard |
| \pagebreak_top |
| Copyright (c) 2002 Jean-Marc Valin. |
| \layout Standard |
| |
| Permission is granted to copy, distribute and/or modify this document under |
| the terms of the GNU Free Documentation License, Version 1.1 or any later |
| version published by the Free Software Foundation; with no Invariant Section, |
| with no Front-Cover Texts, and with no Back-Cover. |
| A copy of the license is included in the section entitled "GNU Free Documentati |
| on License". |
| |
| \layout Section* |
| |
| Disclaimer |
| \layout Standard |
| |
| This document is meant to provide useful information on the Speex codec |
| but there is absolutely no warranty regarding usefulness or correctness |
| of the information provided. |
| Also, some techniques used in Speex are said to be |
| \begin_inset Quotes eld |
| \end_inset |
| |
| similar |
| \begin_inset Quotes erd |
| \end_inset |
| |
| to techniques used in known codecs. |
| This should not be understood as an acknowledgment that Speex is using |
| any patented algorithm used in these codecs, but merely that comprehension |
| of Speex can be facilitated by thinking that the principles of operation |
| are the same or similar. |
| Of course, there's also the obligatory |
| \begin_inset Quotes eld |
| \end_inset |
| |
| all trademarks are property of their respective owner |
| \begin_inset Quotes erd |
| \end_inset |
| |
| . |
| \layout Standard |
| \pagebreak_top \pagebreak_bottom |
| |
| \begin_inset LatexCommand \tableofcontents{} |
| |
| \end_inset |
| |
| |
| \layout Standard |
| \pagebreak_bottom |
| |
| \begin_inset FloatList table |
| |
| \end_inset |
| |
| |
| \layout Section |
| |
| Introduction to Speex |
| \layout Standard |
| |
| The Speex project ( |
| \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 voice over IP |
| (VoIP) and file-based compression. |
| |
| \layout Standard |
| |
| As design goals, we wanted to have a codec that would allowed 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). |
| \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 reasonnable complexity and memory requirement |
| without compromising too much on the efficiency of the codec. |
| \layout Standard |
| |
| All this led us to the choice of CELP |
| \begin_inset LatexCommand \index{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). |
| |
| \layout Standard |
| |
| The main characteristics can be summerized as follows: |
| \layout Itemize |
| |
| Free software/open-source |
| \begin_inset LatexCommand \index{open-source} |
| |
| \end_inset |
| |
| , patent |
| \begin_inset LatexCommand \index{patent} |
| |
| \end_inset |
| |
| and royalty-free |
| \layout Itemize |
| |
| Integration of wideband |
| \begin_inset LatexCommand \index{wideband} |
| |
| \end_inset |
| |
| and narrowband |
| \begin_inset LatexCommand \index{narrowband} |
| |
| \end_inset |
| |
| in the same bit-stream |
| \layout Itemize |
| |
| Wide range of bit-rates available |
| \layout Itemize |
| |
| Dynamic bit-rate switching and Variable Bit-Rate |
| \begin_inset LatexCommand \index{variable bit-rate} |
| |
| \end_inset |
| |
| (VBR) |
| \layout Itemize |
| |
| Voice Activity Detection |
| \begin_inset LatexCommand \index{voice activity detection} |
| |
| \end_inset |
| |
| (VAD, integrated with VBR) |
| \layout Itemize |
| |
| Variable complexity |
| \begin_inset LatexCommand \index{complexity} |
| |
| \end_inset |
| |
| |
| \layout Itemize |
| |
| Ultra-wideband mode at 32 kHz (up to 48 kHz) |
| \layout Itemize |
| |
| Intensity stereo encoding option |
| \layout Section |
| \pagebreak_top |
| Introduction to CELP Coding |
| \begin_inset LatexCommand \index{CELP} |
| |
| \end_inset |
| |
| |
| \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} |
| |
| \end_inset |
| |
| . |
| The CELP technique is based on three ideas: |
| \layout Enumerate |
| |
| The use of a linear prediction (LP) model to model the vocal tract |
| \layout Enumerate |
| |
| The use of (adaptive and fixed) codebook entries as input (excitation) of |
| the LP model |
| \layout Enumerate |
| |
| The search performed in closed-loop in a |
| \begin_inset Quotes eld |
| \end_inset |
| |
| perceptually weighted domain |
| \begin_inset Quotes erd |
| \end_inset |
| |
| |
| \layout Subsection |
| |
| Linear Prediction (LPC) |
| \begin_inset LatexCommand \index{linear prediction} |
| |
| \end_inset |
| |
| |
| \layout Standard |
| |
| Linear prediction is at the base of may speech coding techniques, including |
| CELP. |
| The idea behind it is to predict the signal |
| \begin_inset Formula $x(n)$ |
| \end_inset |
| |
| using a linear combination of its past samples: |
| \layout Standard |
| |
| |
| \begin_inset Formula \[ |
| y[n]=\sum _{i=1}^{N}a_{i}x[n-i]\] |
| |
| \end_inset |
| |
| where |
| \begin_inset Formula $y[n]$ |
| \end_inset |
| |
| is the linear prediction of |
| \begin_inset Formula $x[n]$ |
| \end_inset |
| |
| . |
| The prediction error is thus given by: |
| \begin_inset Formula \[ |
| e[n]=x[n]-y[n]=x[n]-\sum _{i=1}^{N}a_{i}x[n-i]\] |
| |
| \end_inset |
| |
| |
| \layout Standard |
| |
| The goal of the LPC analysis is to find the best prediction coefficients |
| |
| \begin_inset Formula $a_{i}$ |
| \end_inset |
| |
| which minimize the quadratic error function: |
| \begin_inset Formula \[ |
| E=\sum _{n=0}^{L-1}\left[e[n]\right]^{2}=\sum _{n=0}^{L-1}\left[x[n]-\sum _{i=1}^{N}a_{i}x[n-i]\right]^{2}\] |
| |
| \end_inset |
| |
| That can be done by making all derivatives |
| \begin_inset Formula $\frac{\partial E}{\partial a_{i}}$ |
| \end_inset |
| |
| equal to zero: |
| \begin_inset Formula \[ |
| \frac{\partial E}{\partial a_{i}}=\frac{\partial }{\partial a_{i}}\sum _{n=0}^{L-1}\left[x[n]-\sum _{i=1}^{N}a_{i}x[n-i]\right]^{2}=0\] |
| |
| \end_inset |
| |
| |
| \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)$ |
| \end_inset |
| |
| of the signal |
| \begin_inset Formula $x[n]$ |
| \end_inset |
| |
| . |
| \layout Standard |
| |
| |
| \begin_inset Formula \[ |
| R(m)=\sum _{i=0}^{N-1}x[i]x[i-m]\] |
| |
| \end_inset |
| |
| |
| \layout Standard |
| |
| For an order |
| \begin_inset Formula $N$ |
| \end_inset |
| |
| filter, we have: |
| \begin_inset Formula \[ |
| \mathbf{R}=\left[\begin{array}{cccc} |
| R(0) & R(1) & \cdots & R(N-1)\\ |
| R(1) & R(0) & \cdots & R(N-2)\\ |
| \vdots & \vdots & \ddots & \vdots \\ |
| R(N-1) & R(N-2) & \cdots & R(0)\end{array} |
| \right]\] |
| |
| \end_inset |
| |
| |
| \begin_inset Formula \[ |
| \mathbf{r}=\left[\begin{array}{c} |
| R(1)\\ |
| R(2)\\ |
| \vdots \\ |
| R(N)\end{array} |
| \right]\] |
| |
| \end_inset |
| |
| |
| \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}$ |
| \end_inset |
| |
| is toeplitz hermitian. |
| Also, it can be proved that all the roots of |
| \begin_inset Formula $A(z)$ |
| \end_inset |
| |
| are withing 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)$ |
| \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 the the auto-correlation, which is equivalent |
| to filtering in the frequency domain, reducing sharp resonances. |
| \layout Standard |
| |
| The linear prediction model represents each speech sample as linear combination |
| 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]\] |
| |
| \end_inset |
| |
| |
| \layout Standard |
| |
| In the |
| \emph on |
| z |
| \emph default |
| -domain, this can be expressed as |
| \layout Standard |
| |
| |
| \begin_inset Formula \[ |
| x(z)=\frac{1}{A(z)}\: e(z)\] |
| |
| \end_inset |
| |
| |
| \layout Standard |
| |
| where |
| \begin_inset Formula $A(z)$ |
| \end_inset |
| |
| is defined as |
| \layout Standard |
| |
| |
| \begin_inset Formula \[ |
| A(z)=1-\sum _{i=1}^{N}a_{i}z^{-i}\] |
| |
| \end_inset |
| |
| |
| \layout Standard |
| |
| We usually refer to |
| \begin_inset Formula $A(z)$ |
| \end_inset |
| |
| as the analysis filter and |
| \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. |
| \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. |
| |
| \layout Subsection |
| |
| Pitch Prediction |
| \begin_inset LatexCommand \index{pitch} |
| |
| \end_inset |
| |
| |
| \layout Standard |
| |
| During voiced segments, the speech signal is periodic, so it is possible |
| to take advantage of that property by approximating the excitation signal |
| |
| \begin_inset Formula $e[n]$ |
| \end_inset |
| |
| by a gain times the past of the excitation: |
| \layout Standard |
| |
| |
| \begin_inset Formula \[ |
| e[n]\simeq p[n]=\beta e[n-T]\] |
| |
| \end_inset |
| |
| |
| \layout Standard |
| |
| where |
| \begin_inset Formula $T$ |
| \end_inset |
| |
| is the pitch period, |
| \begin_inset Formula $\beta $ |
| \end_inset |
| |
| is the pitch gain and |
| \begin_inset Formula $c(n)$ |
| \end_inset |
| |
| is taken from the |
| \emph on |
| innovation codebook |
| \emph default |
| . |
| We call that long-term prediction since the excitation is predicted from |
| |
| \begin_inset Formula $e[n-T]$ |
| \end_inset |
| |
| with |
| \begin_inset Formula $T\gg N$ |
| \end_inset |
| |
| . |
| \layout Subsection |
| |
| Innovation Codebook |
| \layout Standard |
| |
| The final excitation |
| \begin_inset Formula $e[n]$ |
| \end_inset |
| |
| will be the sum of the pitch prediction and an |
| \emph on |
| innovation |
| \emph default |
| signal |
| \begin_inset Formula $c[n]$ |
| \end_inset |
| |
| taken from a fixed codebook. |
| \layout Standard |
| |
| |
| \begin_inset Formula \[ |
| e[n]=p[n]+c[n]=\beta e[n-T]+c[n]\] |
| |
| \end_inset |
| |
| This is where most of the bits in a CELP codec are allocated. |
| It represents the information that couldn't be obtained either from linear |
| prediction or pitch prediction. |
| In the |
| \emph on |
| z |
| \emph default |
| -domain we can represent the final signal |
| \begin_inset Formula $X(z)$ |
| \end_inset |
| |
| as |
| \begin_inset Formula \[ |
| X(z)=\frac{C(z)}{A(z)\left(1-\beta z^{-T}\right)}\] |
| |
| \end_inset |
| |
| |
| \layout Subsection |
| |
| Analysis-by-Synthesis and Error Weighting |
| \begin_inset LatexCommand \index{error weighting} |
| |
| \end_inset |
| |
| |
| \begin_inset LatexCommand \index{analysis-by-synthesis} |
| |
| \end_inset |
| |
| |
| \layout Standard |
| |
| Most (if not all) modern audio codecs attempt to |
| \begin_inset Quotes eld |
| \end_inset |
| |
| shape |
| \begin_inset Quotes erd |
| \end_inset |
| |
| the noise so that it appears mostly in the frequency regions where the |
| ear cannot detect it. |
| For example, the ear is more tolerant to noise in parts of the spectrum |
| that are louder and |
| \emph on |
| 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)\] |
| |
| \end_inset |
| |
| where |
| \begin_inset Formula $W(z)$ |
| \end_inset |
| |
| is the weighting filter, usually of the form |
| \layout Standard |
| |
| |
| \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} |
| |
| \end_inset |
| |
| |
| \layout Standard |
| |
| with control parameters |
| \begin_inset Formula $\gamma _{1}>\gamma _{2}$ |
| \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)}\] |
| |
| \end_inset |
| |
| |
| \layout Standard |
| |
| If a filter |
| \begin_inset Formula $A(z)$ |
| \end_inset |
| |
| has (complex) poles at |
| \begin_inset Formula $p_{i}$ |
| \end_inset |
| |
| in the |
| \begin_inset Formula $z$ |
| \end_inset |
| |
| -plane, the filter |
| \begin_inset Formula $A(z/\gamma )$ |
| \end_inset |
| |
| filter will have its poles at |
| \begin_inset Formula $p_{i}^{'}=\gamma p_{i}$ |
| \end_inset |
| |
| , making it a flatter version of |
| \begin_inset Formula $A(z)$ |
| \end_inset |
| |
| . |
| \layout Section |
| \pagebreak_top |
| Speex narrowband mode |
| \begin_inset LatexCommand \label{sec:Speex-narrowband-mode} |
| |
| \end_inset |
| |
| |
| \begin_inset LatexCommand \index{narrowband} |
| |
| \end_inset |
| |
| |
| \layout Standard |
| |
| This section looks at how Speex works for narrowband ( |
| \begin_inset Formula $8\: \mathrm{kHz}$ |
| \end_inset |
| |
| sampling rate) operation. |
| The frame size for this mode is |
| \begin_inset Formula $20\: \mathrm{ms}$ |
| \end_inset |
| |
| , corresponding to 160 samples. |
| Each frame is also subdivided into 4 sub-frames of 40 samples each. |
| \layout Standard |
| |
| Also many design decisions were based on the original goals and assumptions: |
| \layout Itemize |
| |
| Minimizing the amount of information extracted from past frames (for robustness |
| to packet loss) |
| \layout Itemize |
| |
| Dynamically-selectable codebooks (LSP, pitch and innovation) |
| \layout Itemize |
| |
| G.728-like fixed codebooks (without backward-adaptive gains because of patent |
| issues) |
| \layout Subsection |
| |
| LPC Analysis |
| \begin_inset LatexCommand \index{linear prediction} |
| |
| \end_inset |
| |
| |
| \layout Standard |
| |
| An LPC analysis is first performed on a (asymetric Hamming) window that |
| spans all 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} |
| |
| \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. |
| \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. |
| \layout Standard |
| |
| The perceptual weighting filter |
| \begin_inset Formula $W(z)$ |
| \end_inset |
| |
| used by Speex is derived from the LPC filter |
| \begin_inset Formula $A(z)$ |
| \end_inset |
| |
| and corresponds to the one described by eq. |
| |
| \begin_inset LatexCommand \ref{eq:weighting_filter} |
| |
| \end_inset |
| |
| with |
| \begin_inset Formula $\gamma _{1}=0.9$ |
| \end_inset |
| |
| and |
| \begin_inset Formula $\gamma _{2}=0.6$ |
| \end_inset |
| |
| . |
| We can use the unquantized |
| \begin_inset Formula $A(z)$ |
| \end_inset |
| |
| filter since the weighting filter is only used in the encoder. |
| \layout Subsection |
| |
| Pitch Prediction (adaptive codebook) |
| \begin_inset LatexCommand \index{pitch} |
| |
| \end_inset |
| |
| |
| \layout Standard |
| |
| Speex uses a 3-tap prediction for pitch. |
| That is, the pitch prediction signal |
| \begin_inset Formula $p[n]$ |
| \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_inset |
| |
| |
| \layout Standard |
| |
| where |
| \begin_inset Formula $T$ |
| \end_inset |
| |
| is the pitch period and the |
| \begin_inset Formula $\beta _{i}$ |
| \end_inset |
| |
| are the prediction (filter) taps. |
| 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$ |
| \end_inset |
| |
| . |
| For example, when |
| \begin_inset Formula $n-T+1$ |
| \end_inset |
| |
| , we use |
| \begin_inset Formula $n-2T+1$ |
| \end_inset |
| |
| instead. |
| The period and quantized gains are determined in closed loop. |
| In most modes, the pitch period is encoded with 7 bits in the |
| \begin_inset Formula $\left[17,144\right]$ |
| \end_inset |
| |
| range and the |
| \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 |
| and below). |
| \layout Subsection |
| |
| Innovation Codebook |
| \layout Standard |
| |
| In Speex, the innovation signal is quantized using shape-only vector quantizatio |
| n (VQ). |
| That means that the codebooks that are used represent both the shape and |
| the gain at the same time. |
| This save many bits that would otherwise be allocated for a separate gain |
| at the price of a slight increase in complexity. |
| Except for the absence of (backward-adaptive) gain, the technique used |
| in Speex is similar to G.728 (LD-CELP). |
| However since we do not have a low-delay constraint, the search can be |
| made more |
| \begin_inset Quotes eld |
| \end_inset |
| |
| global |
| \begin_inset Quotes erd |
| \end_inset |
| |
| and make use of the whole information available for a sub-frame. |
| \layout Subsection |
| |
| Bit allocation |
| \layout Standard |
| |
| There are 7 different narrowband bit-rates defined for Speex, ranging from |
| 200 bps to 18.15 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} |
| |
| \end_inset |
| |
| . |
| Each frame starts with the mode ID encoded with 4 bits which allows a range |
| from 0 to 15, though only the first 7 values are used (the others are reserved). |
| The parameters are listed in the table in the order they are packed in |
| the bit-stream. |
| All frame-based parameters are packed before sub-frame parameters. |
| The parameters for a certain sub-frame are all packed before the following |
| sub-frame is packed. |
| Note that the |
| \begin_inset Quotes eld |
| \end_inset |
| |
| OL |
| \begin_inset Quotes erd |
| \end_inset |
| |
| in the parameter description means the the parameter is an open loop estimation |
| based on the whole frame. |
| \layout Standard |
| |
| |
| \begin_inset Float table |
| placement h |
| wide true |
| collapsed false |
| |
| \layout Standard |
| |
| |
| \begin_inset Tabular |
| <lyxtabular version="3" rows="12" columns="10"> |
| <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" 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" 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 |
| |
| \layout Standard |
| |
| Parameter |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| Update rate |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 0 |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 1 |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 2 |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 3 |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 4 |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 5 |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 6 |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 7 |
| \end_inset |
| </cell> |
| </row> |
| <row topline="true"> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| Wideband bit |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| frame |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 1 |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 1 |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 1 |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 1 |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 1 |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 1 |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 1 |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 1 |
| \end_inset |
| </cell> |
| </row> |
| <row topline="true"> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| Mode ID |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| frame |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 4 |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 4 |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 4 |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 4 |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 4 |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 4 |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 4 |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 4 |
| \end_inset |
| </cell> |
| </row> |
| <row topline="true"> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| LSP |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| frame |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 0 |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 18 |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 18 |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 18 |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 18 |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 30 |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 30 |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 30 |
| \end_inset |
| </cell> |
| </row> |
| <row topline="true"> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| OL pitch |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| frame |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 0 |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 7 |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 7 |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 0 |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 0 |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 0 |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 0 |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 0 |
| \end_inset |
| </cell> |
| </row> |
| <row topline="true"> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| OL pitch gain |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| frame |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 0 |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 4 |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 0 |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 0 |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 0 |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 0 |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 0 |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 0 |
| \end_inset |
| </cell> |
| </row> |
| <row topline="true"> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| OL Exc gain |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| frame |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 0 |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 5 |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 5 |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 5 |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 5 |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 5 |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 5 |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 5 |
| \end_inset |
| </cell> |
| </row> |
| <row topline="true"> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| Fine pitch |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| sub-frame |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 0 |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 0 |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 0 |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 7 |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 7 |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 7 |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 7 |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 7 |
| \end_inset |
| </cell> |
| </row> |
| <row topline="true"> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| Pitch gain |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| sub-frame |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 0 |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 0 |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 5 |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 5 |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 5 |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 7 |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 7 |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 7 |
| \end_inset |
| </cell> |
| </row> |
| <row topline="true"> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| Innovation gain |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| sub-frame |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 0 |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 1 |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 0 |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 1 |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 1 |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 3 |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 3 |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 3 |
| \end_inset |
| </cell> |
| </row> |
| <row topline="true" bottomline="true"> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| Innovation VQ |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| sub-frame |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 0 |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 0 |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 16 |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 20 |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 35 |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 48 |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 64 |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 96 |
| \end_inset |
| </cell> |
| </row> |
| <row topline="true" bottomline="true"> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| Total |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| frame |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 5 |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 43 |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 119 |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 160 |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 220 |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 300 |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 364 |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 492 |
| \end_inset |
| </cell> |
| </row> |
| </lyxtabular> |
| |
| \end_inset |
| |
| |
| \layout Caption |
| |
| Bit allocation for narrowband modes |
| \begin_inset LatexCommand \label{cap:bits-narrowband} |
| |
| \end_inset |
| |
| |
| \end_inset |
| |
| |
| \layout Standard |
| |
| So far, no MOS (Mean Opinion Score |
| \begin_inset LatexCommand \index{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} |
| |
| \end_inset |
| |
| presents my own subjective opinion on it. |
| It sould be noted that different people will perceive the quality differently |
| and that the person that designed the codec often has a bias (one way or |
| another) when it comes to subjective evaluation. |
| Last thing, it should be noted that for most codecs (including Speex) encoding |
| quality sometimes varies depending on the input. |
| Note that the complexity is only approximate (withing 0.5 mflops and using |
| the lowers complexity setting). |
| Decoding requires approximately 0.5 mflops |
| \begin_inset LatexCommand \index{complexity} |
| |
| \end_inset |
| |
| in most modes (1 mflops with perceptual enhancement). |
| \layout Standard |
| |
| |
| \begin_inset Float table |
| placement h |
| wide true |
| collapsed false |
| |
| \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 |
| |
| \layout Standard |
| |
| Mode |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| Bit-rate |
| \begin_inset LatexCommand \index{bit-rate} |
| |
| \end_inset |
| |
| (bps) |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| mflops |
| \begin_inset LatexCommand \index{complexity} |
| |
| \end_inset |
| |
| |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| Quality/description |
| \end_inset |
| </cell> |
| </row> |
| <row topline="true"> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 0 |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 250 |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| N/A |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| No sound (VBR only) |
| \end_inset |
| </cell> |
| </row> |
| <row topline="true"> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 1 |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 2,150 |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 6 |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| Vocoder (mostly for comfort noise) |
| \end_inset |
| </cell> |
| </row> |
| <row topline="true"> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 2 |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 5,950 |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 9 |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| Very noticeable artifacts/noise, good intelligibility |
| \end_inset |
| </cell> |
| </row> |
| <row topline="true"> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 3 |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 8,000 |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 10 |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| Artifacts/noise sometimes noticeable |
| \end_inset |
| </cell> |
| </row> |
| <row topline="true"> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 4 |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 11,000 |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 14 |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| Artifacts usually noticeable only with headphones |
| \end_inset |
| </cell> |
| </row> |
| <row topline="true"> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 5 |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 15,000 |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 11 |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| Need good headphones to tell the difference |
| \end_inset |
| </cell> |
| </row> |
| <row topline="true"> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 6 |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 18,200 |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 17.5 |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| Hard to tell the difference even with good headphones |
| \end_inset |
| </cell> |
| </row> |
| <row topline="true"> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 7 |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 24,600 |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 14.5 |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| Completely transparent for voice, good quality music |
| \end_inset |
| </cell> |
| </row> |
| <row topline="true"> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 8 |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| N/A |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| N/A |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| reserved |
| \end_inset |
| </cell> |
| </row> |
| <row topline="true"> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 9 |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| N/A |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| N/A |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| reserved |
| \end_inset |
| </cell> |
| </row> |
| <row topline="true"> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 10 |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| N/A |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| N/A |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| reserved |
| \end_inset |
| </cell> |
| </row> |
| <row topline="true"> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 11 |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| N/A |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| N/A |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| reserved |
| \end_inset |
| </cell> |
| </row> |
| <row topline="true"> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 12 |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| N/A |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| N/A |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| reserved |
| \end_inset |
| </cell> |
| </row> |
| <row topline="true"> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 13 |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| N/A |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| N/A |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| Application-defined, interpreted by callback or skipped |
| \end_inset |
| </cell> |
| </row> |
| <row topline="true"> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 14 |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| N/A |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| N/A |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| Speex in-band signaling |
| \end_inset |
| </cell> |
| </row> |
| <row topline="true" bottomline="true"> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 15 |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| N/A |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| N/A |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| Terminator code |
| \end_inset |
| </cell> |
| </row> |
| </lyxtabular> |
| |
| \end_inset |
| |
| |
| \layout Caption |
| |
| Quality versus bit-rate |
| \begin_inset LatexCommand \label{cap:quality_vs_bps} |
| |
| \end_inset |
| |
| |
| \end_inset |
| |
| |
| \layout Subsection |
| |
| Perceptual enhancement |
| \begin_inset LatexCommand \index{perceptual enhancement} |
| |
| \end_inset |
| |
| |
| \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 |
| only be considered as a reference implementation. |
| The enhancement system is devided in two parts. |
| First, the synthesis filter |
| \begin_inset Formula $S(z)=1/A(z)$ |
| \end_inset |
| |
| 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)}\] |
| |
| \end_inset |
| |
| where |
| \begin_inset Formula $a_{1}$ |
| \end_inset |
| |
| and |
| \begin_inset Formula $a_{2}$ |
| \end_inset |
| |
| depend on the mode in use and |
| \begin_inset Formula $a_{3}=\frac{1}{r}\left(1-\frac{1-ra_{1}}{1-ra_{2}}\right)$ |
| \end_inset |
| |
| with |
| \begin_inset Formula $r=.9$ |
| \end_inset |
| |
| . |
| The second part of the enhancement consists of using a comb filter to enhance |
| the pitch in the excitation domain. |
| |
| \layout Section |
| \pagebreak_top |
| Speex wideband mode (sub-band CELP) |
| \begin_inset LatexCommand \index{wideband} |
| |
| \end_inset |
| |
| |
| \layout Standard |
| |
| For wideband, the Speex approach uses a |
| \emph on |
| q |
| \emph default |
| uadrature |
| \emph on |
| m |
| \emph default |
| irror |
| \emph on |
| f |
| \emph default |
| ilter |
| \begin_inset LatexCommand \index{quadrature mirror filter} |
| |
| \end_inset |
| |
| (QMF) to split the band in two. |
| 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} |
| |
| \end_inset |
| |
| in such a way that the resulting |
| \begin_inset Quotes eld |
| \end_inset |
| |
| embedded narrowband bit-stream |
| \begin_inset Quotes erd |
| \end_inset |
| |
| can also be decoded with the narrowband decoder. |
| Since the low band encoding has already been described only the high band |
| encoding is described in this section. |
| \layout Subsection |
| |
| Linear Prediction |
| \layout Standard |
| |
| The linear prediction part used for the high-band is very similar to what |
| is done for narrowband. |
| The only difference is that we use only 12 bits to encode the high-band |
| LSP's using a multi-stage vector quantizer (MSVQ). |
| The first level quantizes the 10 coefficients with 6 bits and the error |
| is then quantized using 6 bits too. |
| \layout Subsection |
| |
| Pitch Prediction |
| \layout Standard |
| |
| That part is easy: there's no pitch prediction for the high-band. |
| There are two reasons for that. |
| First, there is usually little harmonic structure in this band (above 4 |
| kHz). |
| Second, it would be very hard to implement since the QMF folds the 4-8 |
| kHz band into 4-0 kHz (reversing the frequency axis), which means that |
| the location of the harmonics are no longer at multiples of the fundamental |
| (pitch). |
| \layout Subsection |
| |
| Excitation Quantization |
| \layout Standard |
| |
| The high-band excitation is coded in the same way as for narrowband. |
| |
| \layout Subsection |
| |
| Bit allocation |
| \layout Standard |
| |
| For the wideband mode, all the 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} |
| |
| \end_inset |
| |
| . |
| The high-band follows, as described in table |
| \begin_inset LatexCommand \ref{cap:bits-wideband} |
| |
| \end_inset |
| |
| . |
| This also means that a wideband frame may be correctly decoded by a narrowband |
| decoder with the only caveat that if more than one frame is packed in the |
| same packet, the decoder will need to skip the high-band parts in order |
| to sync with the bit-stream. |
| \layout Standard |
| |
| |
| \begin_inset Float table |
| placement h |
| wide true |
| collapsed false |
| |
| \layout Standard |
| |
| |
| \begin_inset Tabular |
| <lyxtabular version="3" rows="7" columns="7"> |
| <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" 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 |
| |
| \layout Standard |
| |
| Parameter |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| Update rate |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 0 |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 1 |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 2 |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 3 |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 4 |
| \end_inset |
| </cell> |
| </row> |
| <row topline="true"> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| Wideband bit |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| frame |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 1 |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 1 |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 1 |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 1 |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 1 |
| \end_inset |
| </cell> |
| </row> |
| <row topline="true"> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| Mode ID |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| frame |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 3 |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 3 |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 3 |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 3 |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 3 |
| \end_inset |
| </cell> |
| </row> |
| <row topline="true"> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| LSP |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| frame |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 0 |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 12 |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 12 |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 12 |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 12 |
| \end_inset |
| </cell> |
| </row> |
| <row topline="true"> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| Excitation gain |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| sub-frame |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 0 |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 5 |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 4 |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 4 |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 4 |
| \end_inset |
| </cell> |
| </row> |
| <row topline="true" bottomline="true"> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| Excitation VQ |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| sub-frame |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 0 |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 0 |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 20 |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 40 |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 80 |
| \end_inset |
| </cell> |
| </row> |
| <row topline="true" bottomline="true"> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| Total |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| frame |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 4 |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 36 |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 112 |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 192 |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 352 |
| \end_inset |
| </cell> |
| </row> |
| </lyxtabular> |
| |
| \end_inset |
| |
| |
| \layout Caption |
| |
| Bit allocation for high-band in wideband mode |
| \begin_inset LatexCommand \label{cap:bits-wideband} |
| |
| \end_inset |
| |
| |
| \end_inset |
| |
| |
| \layout Standard |
| |
| |
| \begin_inset ERT |
| status Open |
| |
| \layout Standard |
| |
| \backslash |
| clearpage |
| \end_inset |
| |
| |
| \layout Section |
| \pagebreak_top |
| Command-line encoder/decoder |
| \layout Standard |
| |
| The base Speex distribution includes a command-line encoder ( |
| \emph on |
| speexenc |
| \emph default |
| ) and decoder ( |
| \emph on |
| speexdec |
| \emph default |
| ). |
| \layout Subsection |
| |
| |
| \emph on |
| speexenc |
| \begin_inset LatexCommand \index{speexenc} |
| |
| \end_inset |
| |
| |
| \layout Standard |
| |
| The encoder takes the following options: |
| \layout Description |
| |
| --narrowband\SpecialChar ~ |
| (-n) Tell Speex to treat the input as narrowband (8 kHz). |
| This is the default |
| \layout Description |
| |
| --wideband\SpecialChar ~ |
| (-w) Tell Speex to treat the input as wideband (16 kHz) |
| \layout Description |
| |
| --ultra-wideband\SpecialChar ~ |
| (-u) Tell Speex to treat the input as |
| \begin_inset Quotes eld |
| \end_inset |
| |
| ultra-wideband |
| \begin_inset Quotes erd |
| \end_inset |
| |
| (32 kHz) |
| \layout Description |
| |
| --quality\SpecialChar ~ |
| n Set the encoding quality (0-10), default is 3 |
| \layout Description |
| |
| --bitrate\SpecialChar ~ |
| n Encoding bit-rate (use bit-rate n or lower) |
| \layout Description |
| |
| --vbr Enable VBR (Variable Bit-Rate), disabled by default |
| \layout Description |
| |
| --nframes\SpecialChar ~ |
| n Pack n frames in each Ogg packet (this saves space at low bit-rates) |
| \layout Description |
| |
| --comp\SpecialChar ~ |
| n Set encoding speed/quality tradeoff. |
| The higher the value of n, the slower the encoding (default is 3) |
| \layout Description |
| |
| -V Verbose operation, print bit-rate currently in use |
| \layout Description |
| |
| --help\SpecialChar ~ |
| (-h) Print the help |
| \layout Description |
| |
| --version\SpecialChar ~ |
| (-v) Print version information |
| \layout Subsubsection* |
| |
| Speex comments |
| \layout Description |
| |
| --comment Add the given string as an extra comment. |
| This may be used multiple times. |
| |
| \layout Description |
| |
| --author Author of this track. |
| |
| \layout Description |
| |
| --title Title for this track. |
| |
| \layout Subsubsection* |
| |
| Raw input options |
| \layout Description |
| |
| --rate\SpecialChar ~ |
| n Sampling rate for raw input |
| \layout Description |
| |
| --stereo Consider raw input as stereo |
| \layout Description |
| |
| --le Raw input is little-endian |
| \layout Description |
| |
| --be Raw input is big-endian |
| \layout Description |
| |
| --8bit Raw input is 8-bit unsigned |
| \layout Description |
| |
| --16bit Raw input is 16-bit signed |
| \layout Subsection |
| |
| |
| \emph on |
| speexdec |
| \begin_inset LatexCommand \index{speexdec} |
| |
| \end_inset |
| |
| |
| \layout Standard |
| |
| The decoder takes the following options: |
| \layout Description |
| |
| --enh enable post-filter |
| \layout Description |
| |
| --no-enh disable post-filter (default) |
| \layout Description |
| |
| --force-nb Force decoding in narrowband |
| \layout Description |
| |
| --force-wb Force decoding in wideband |
| \layout Description |
| |
| --force-uwb Force decoding in ultra-wideband |
| \layout Description |
| |
| --mono Force decoding in mono |
| \layout Description |
| |
| --stereo Force decoding in stereo |
| \layout Description |
| |
| --rate\SpecialChar ~ |
| n For decoding at n Hz sampling rate |
| \layout Description |
| |
| --packet-loss\SpecialChar ~ |
| n Simulate n % rando m packet loss |
| \layout Description |
| |
| -V Verbose operation, print bit-rate currently in use |
| \layout Description |
| |
| --help\SpecialChar ~ |
| (-h) Print the help |
| \layout Description |
| |
| --version\SpecialChar ~ |
| (-v) Print version information |
| \layout Section |
| \pagebreak_top |
| Programming with Speex (the libspeex |
| \begin_inset LatexCommand \index{libspeex} |
| |
| \end_inset |
| |
| API |
| \begin_inset LatexCommand \index{API} |
| |
| \end_inset |
| |
| ) |
| \layout Subsection |
| |
| Encoding |
| \layout Standard |
| |
| In order to encode speech using Speex, you first need to: |
| \layout LyX-Code |
| |
| #include <speex.h> |
| \layout Standard |
| |
| You then need to declare a Speex bit-packing struct |
| \layout LyX-Code |
| |
| SpeexBits bits; |
| \layout Standard |
| |
| and a Speex encoder state |
| \layout LyX-Code |
| |
| void *enc_state; |
| \layout Standard |
| |
| The two are initialized by: |
| \layout LyX-Code |
| |
| speex_bits_init(&bits); |
| \layout LyX-Code |
| |
| enc_state = speex_encoder_init(&speex_nb_mode); |
| \layout Standard |
| |
| For wideband coding, |
| \emph on |
| speex_nb_mode |
| \emph default |
| will be replaced by |
| \emph on |
| speex_wb_mode |
| \emph default |
| . |
| In most cases, you will need to know the frame size used by the mode you |
| are using. |
| You can get that value in the |
| \emph on |
| frame_size |
| \emph default |
| variable with: |
| \layout LyX-Code |
| |
| speex_encoder_ctl(enc_state,SPEEX_GET_FRAME_SIZE,&frame_size); |
| \layout Standard |
| |
| Once the initialization is done, for every input frame: |
| \layout LyX-Code |
| |
| speex_bits_reset(&bits); |
| \layout LyX-Code |
| |
| speex_encode(enc_state, input_frame, &bits); |
| \layout LyX-Code |
| |
| nbBytes = speex_bits_write(&bits, byte_ptr, MAX_NB_BYTES); |
| \layout Standard |
| |
| where |
| \emph on |
| input_frame |
| \emph default |
| is a |
| \emph on |
| (float *) |
| \emph default |
| pointing to the beginning of a speech frame, |
| \emph on |
| byte_ptr |
| \emph default |
| is a |
| \emph on |
| (char *) |
| \emph default |
| where the encoded frame will be written, |
| \emph on |
| MAX_NB_BYTES |
| \emph default |
| is the maximum number of bytes that can be written to |
| \emph on |
| byte_ptr |
| \emph default |
| without causing an overflow and |
| \emph on |
| nbBytes |
| \emph default |
| is the number of bytes actually written to |
| \emph on |
| byte_ptr |
| \emph default |
| (the encoded size in bytes). |
| Before calling speex_bits_write, it is possible to find the number of bytes |
| that need to be written by calling |
| \family typewriter |
| speex_bits_nbytes(&bits) |
| \family default |
| , which returns a number of bytes. |
| |
| \layout Standard |
| |
| After you're done with the encoding, free all resources with: |
| \layout LyX-Code |
| |
| speex_bits_destroy(&bits); |
| \layout LyX-Code |
| |
| speex_encoder_destroy(enc_state); |
| \layout Standard |
| |
| That's about it for the encoder. |
| |
| \layout Subsection |
| |
| Decoding |
| \layout Standard |
| |
| In order to encode speech using Speex, you first need to: |
| \layout LyX-Code |
| |
| #include <speex.h> |
| \layout Standard |
| |
| You then need to declare a Speex bit-packing struct |
| \layout LyX-Code |
| |
| SpeexBits bits; |
| \layout Standard |
| |
| and a Speex encoder state |
| \layout LyX-Code |
| |
| void *dec_state; |
| \layout Standard |
| |
| The two are initialized by: |
| \layout LyX-Code |
| |
| speex_bits_init(&bits); |
| \layout LyX-Code |
| |
| dec_state = speex_decoder_init(&speex_nb_mode); |
| \layout Standard |
| |
| For wideband decoding, |
| \emph on |
| speex_nb_mode |
| \emph default |
| will be replaced by |
| \emph on |
| speex_wb_mode |
| \emph default |
| . |
| You can get that value in the |
| \emph on |
| frame_size |
| \emph default |
| variable with: |
| \layout LyX-Code |
| |
| speex_decoder_ctl(dec_state, SPEEX_GET_FRAME_SIZE, &frame_size); |
| \layout Standard |
| |
| There is also a parameter that can be set for the decoder: whether or not |
| to use a perceptual post-filter. |
| This can be set by: |
| \layout LyX-Code |
| |
| speex_decoder_ctl(dec_state, SPEEX_SET_PF, &pf); |
| \layout Standard |
| |
| where pf is an int that with value 0 to have the post-filter disabled and |
| 1 to have it enabled. |
| \layout Standard |
| |
| Again, once the decoder initialization is done, for every input frame: |
| \layout LyX-Code |
| |
| speex_bits_read_from(&bits, input_bytes, nbBytes); |
| \layout LyX-Code |
| |
| speex_decode(st, &bits, output_frame); |
| \layout Standard |
| |
| where input_bytes is a |
| \emph on |
| (char *) |
| \emph default |
| containing the bit-stream data received for a frame, |
| \emph on |
| nbBytes |
| \emph default |
| is the size (in bytes) of that bit-stream, and |
| \emph on |
| output_frame |
| \emph default |
| is a |
| \emph on |
| (float *) |
| \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 |
| for the current frame. |
| When a frame is lost, the Speex decoder will do its best to "guess" the |
| correct signal. |
| \layout Standard |
| |
| After you're done with the decoding, free all resources with: |
| \layout LyX-Code |
| |
| speex_bits_destroy(&bits); |
| \layout LyX-Code |
| |
| speex_decoder_destroy(dec_state); |
| \layout Subsection |
| |
| Codec Options (speex_*_ctl) |
| \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 the the |
| \emph on |
| ioctl |
| \emph default |
| system call and their prototypes are: |
| \layout LyX-Code |
| |
| void speex_encoder_ctl(void *encoder, int request, void *ptr); |
| \layout LyX-Code |
| |
| void speex_decoder_ctl(void *encoder, int request, void *ptr); |
| \layout Standard |
| |
| The different values of request allowed are (note that some only apply to |
| the encoder or the decoder): |
| \layout Description |
| |
| SPEEX_SET_ENH** Set perceptual enhancer to on (1) or off (0) (integer) |
| \layout Description |
| |
| SPEEX_GET_ENH** Get perceptual enhancer status (integer) |
| \layout Description |
| |
| SPEEX_GET_FRAME_SIZE Get the frame size used for the current mode (integer) |
| \layout Description |
| |
| SPEEX_SET_QUALITY* Set the encoder speech quality (integer 0 to 10) |
| \layout Description |
| |
| SPEEX_GET_QUALITY* Get the current encoder speech quality (integer 0 to |
| 10) |
| \layout Description |
| |
| SPEEX_SET_MODE* |
| \begin_inset Formula $\dagger $ |
| \end_inset |
| |
| |
| \layout Description |
| |
| SPEEX_GET_MODE* |
| \begin_inset Formula $\dagger $ |
| \end_inset |
| |
| |
| \layout Description |
| |
| SPEEX_SET_LOW_MODE* |
| \begin_inset Formula $\dagger $ |
| \end_inset |
| |
| |
| \layout Description |
| |
| SPEEX_GET_LOW_MODE* |
| \begin_inset Formula $\dagger $ |
| \end_inset |
| |
| |
| \layout Description |
| |
| SPEEX_SET_HIGH_MODE* |
| \begin_inset Formula $\dagger $ |
| \end_inset |
| |
| |
| \layout Description |
| |
| SPEEX_GET_HIGH_MODE* |
| \begin_inset Formula $\dagger $ |
| \end_inset |
| |
| |
| \layout Description |
| |
| SPEEX_SET_VBR* Set variable bit-rate (VBR) to on (1) or off (0) (integer) |
| \layout Description |
| |
| SPEEX_GET_VBR* Get variable bit-rate (VBR) status (integer) |
| \layout Description |
| |
| SPEEX_SET_VBR_QUALITY* Set the encoder VBR speech quality (integer 0 to |
| 10) |
| \layout Description |
| |
| SPEEX_GET_VBR_QUALITY* Get the current encoder VBR speech quality (integer |
| 0 to 10) |
| \layout Description |
| |
| SPEEX_SET_COMPLEXITY* Set the CPU resources allowed for the encoder |
| \layout Description |
| |
| SPEEX_GET_COMPLEXITY* Get the CPU resources allowed for the encoder |
| \layout Description |
| |
| SPEEX_SET_BITRATE* Set the bit-rate to use to the closest value not exceeding |
| the parameter (integer in bps) |
| \layout Description |
| |
| SPEEX_GET_BITRATE Get the current bit-rate in use (integer in bps) |
| \layout Description |
| |
| SPEEX_SET_SAMPLING_RATE Set real sampling rate (is used to determine real |
| bit-rate) |
| \layout Description |
| |
| SPEEX_GET_SAMPLING_RATE Get real sampling rate (is used to determine real |
| bit-rate) |
| \layout Description |
| |
| * applies only to the encoder |
| \layout Description |
| |
| ** applies only to the decoder |
| \layout Description |
| |
| |
| \begin_inset Formula $\dagger $ |
| \end_inset |
| |
| normally only used internally |
| \layout Subsection |
| |
| Mode queries |
| \layout Standard |
| |
| Speex modes have a querry system similar to the speex_encoder_ctl and speex_deco |
| der_ctl calls. |
| Since modes are read-only, it is only possible to get information about |
| a particular mode. |
| The function used to do that is: |
| \layout LyX-Code |
| |
| void speex_mode_query(SpeexMode *mode, int request, void *ptr); |
| \layout Standard |
| |
| The admissible values for request are (unless otherwise note, the values |
| are returned through |
| \emph on |
| ptr |
| \emph default |
| ): |
| \layout Description |
| |
| SPEEX_MODE_FRAME_SIZE Get the frame size (in samples) for the mode |
| \layout Description |
| |
| SPEEX_SUBMODE_BITRATE Get the bit-rate for a submode number specified throught |
| |
| \emph on |
| ptr |
| \emph default |
| . |
| \layout Subsection |
| |
| Packing and in-band signalling |
| \begin_inset LatexCommand \index{in-band signalling} |
| |
| \end_inset |
| |
| |
| \layout Standard |
| |
| Sometimes it is desirable to pack more than one frame per packet (or other |
| basic unit of storage). |
| The proper way to do it is to call speex_encode |
| \begin_inset Formula $N$ |
| \end_inset |
| |
| times before writing the stream with speex_bits_write. |
| In cases where the number of frames is not determined by an out-of-band |
| mechanism, it is possible to include a terminator code. |
| That terminator consists of the code 15 (decimal) encoded with 5 bits, |
| as shown in figure |
| \begin_inset LatexCommand \ref{cap:quality_vs_bps} |
| |
| \end_inset |
| |
| . |
| |
| \layout Standard |
| |
| It is also possible to send in-band |
| \begin_inset Quotes eld |
| \end_inset |
| |
| messages |
| \begin_inset Quotes erd |
| \end_inset |
| |
| to the other side. |
| All these messages are encoded as a |
| \begin_inset Quotes eld |
| \end_inset |
| |
| pseudo-frame |
| \begin_inset Quotes erd |
| \end_inset |
| |
| 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} |
| |
| \end_inset |
| |
| lists the available codes, their meaning and the size of the message that |
| follow. |
| Most of these messages are requests that are sent to the encoder or decoder |
| on the other end, which is free to comply or ignore them. |
| By default, all in-band messages are ignored. |
| \layout Standard |
| |
| |
| \begin_inset Float table |
| placement htbp |
| wide false |
| collapsed false |
| |
| \layout Standard |
| |
| |
| \begin_inset Tabular |
| <lyxtabular version="3" rows="17" 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 |
| |
| \layout Standard |
| |
| code |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| Size (bits) |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| Content |
| \end_inset |
| </cell> |
| </row> |
| <row topline="true"> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 0 |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 1 |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| Asks decoder to set perceptual enhancement on (1) or off(1) |
| \end_inset |
| </cell> |
| </row> |
| <row topline="true"> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 1 |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 1 |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| Asks encoder to set VBR on (1) or off(1) |
| \end_inset |
| </cell> |
| </row> |
| <row topline="true"> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 2 |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 4 |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| Asks encoder to switch to mode N |
| \end_inset |
| </cell> |
| </row> |
| <row topline="true"> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 3 |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 4 |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| Asks encoder to switch to mode N for low-band |
| \end_inset |
| </cell> |
| </row> |
| <row topline="true"> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 4 |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 4 |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| Asks encoder to switch to mode N for high-band |
| \end_inset |
| </cell> |
| </row> |
| <row topline="true"> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 5 |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 4 |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| Asks encoder to switch to quality N for VBR |
| \end_inset |
| </cell> |
| </row> |
| <row topline="true"> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 6 |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 4 |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| Request acknowloedge (0=no, 1=all, 2=only for in-band data) |
| \end_inset |
| </cell> |
| </row> |
| <row topline="true"> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 7 |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 4 |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| reserved |
| \end_inset |
| </cell> |
| </row> |
| <row topline="true"> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 8 |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 8 |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| Transmit (8-bit) character to the other end |
| \end_inset |
| </cell> |
| </row> |
| <row topline="true"> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 9 |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 8 |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| Intensity stereo information |
| \end_inset |
| </cell> |
| </row> |
| <row topline="true"> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 10 |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 16 |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| Announce maximum bit-rate acceptable (N in bytes/second) |
| \end_inset |
| </cell> |
| </row> |
| <row topline="true"> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 11 |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 16 |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| reserved |
| \end_inset |
| </cell> |
| </row> |
| <row topline="true"> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 12 |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 32 |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| Acknowledge receiving packet N |
| \end_inset |
| </cell> |
| </row> |
| <row topline="true"> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 13 |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 32 |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| reserved |
| \end_inset |
| </cell> |
| </row> |
| <row topline="true"> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 14 |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 64 |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| reserved |
| \end_inset |
| </cell> |
| </row> |
| <row topline="true" bottomline="true"> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 15 |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 64 |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| reserved |
| \end_inset |
| </cell> |
| </row> |
| </lyxtabular> |
| |
| \end_inset |
| |
| |
| \layout Caption |
| |
| In-band signalling codes |
| \begin_inset LatexCommand \label{cap:In-band-signalling-codes} |
| |
| \end_inset |
| |
| |
| \end_inset |
| |
| |
| \layout Standard |
| |
| Finally, applications may define custom in-band messages using mode 13. |
| The size of the message in bytes is encoded with 5 bits, so that the decoder |
| can skip it if it doesn't know how to interpret it. |
| \layout Section |
| \pagebreak_top |
| Formats and standards |
| \begin_inset LatexCommand \index{standards} |
| |
| \end_inset |
| |
| |
| \layout Standard |
| |
| Speex can encode speech in both narrowband and wideband and provides different |
| bit-rates. |
| However not all features must be supported by a certain implementation |
| or device. |
| In order to be said |
| \begin_inset Quotes eld |
| \end_inset |
| |
| Speex compatible |
| \begin_inset Quotes erd |
| \end_inset |
| |
| (whatever that means), an implementation must implement at least a basic |
| set of features. |
| \layout Standard |
| |
| At the minimum, all narrowband modes of operation MUST be supported at the |
| decoder. |
| This includes the decoding of a wideband bit-stream by the narrowband decoder |
| \begin_inset Foot |
| collapsed true |
| |
| \layout Standard |
| |
| The wideband bit-stream contains an embedded narrowband bit-stream which |
| can be decoded alone |
| \end_inset |
| |
| . |
| If present, a wideband decoder MUST be able to decode a narrowband stream, |
| and MAY either be able to decode all wideband modes or be able to decode |
| the embedded narrowband part of all modes (which includes ignoring the |
| high-band bits). |
| \layout Standard |
| |
| For encoders, at least one narrowband or wideband mode MUST be supported. |
| The main reason why all encoding modes do not have to be supported is that |
| some platforms may not be able to handle the complexity of encoding in |
| some modes. |
| \layout Subsection |
| |
| RTP |
| \begin_inset LatexCommand \index{RTP} |
| |
| \end_inset |
| |
| Payload Format |
| \layout Standard |
| |
| The latest RTP payload draft can be found at |
| \begin_inset LatexCommand \url{http://www.speex.org/drafts/latest} |
| |
| \end_inset |
| |
| . |
| We are (2002/11/11) about to send the latest draft to the IETF for comments. |
| |
| \layout Comment |
| |
| Since Speex encoded frames already contain mode information, they can be |
| sent without any other information in an RTP packet. |
| If more than one frame is transmitted, no byte padding is performed at |
| the end of frames, except the last one. |
| The number of frames contained in each packet MUST be transmitted out-of-band. |
| |
| \layout Subsection |
| |
| MIME Type |
| \layout Standard |
| |
| Speex will use the MIME type |
| \family typewriter |
| audio/speex |
| \family default |
| . |
| We will apply for that type in the near future. |
| \layout Subsection |
| |
| Ogg |
| \begin_inset LatexCommand \index{Ogg} |
| |
| \end_inset |
| |
| file format |
| \layout Standard |
| |
| 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} |
| |
| \end_inset |
| |
| . |
| All integer fields in the headers are stored as little-endian. |
| The |
| \family typewriter |
| speex_string |
| \family default |
| field must contain the |
| \begin_inset Quotes eld |
| \end_inset |
| |
| |
| \family typewriter |
| Speex |
| \family default |
| \SpecialChar ~ |
| \SpecialChar ~ |
| \SpecialChar ~ |
| |
| \begin_inset Quotes eld |
| \end_inset |
| |
| (with 3 training spaces), which identifies the bit-stream. |
| The next field, |
| \family typewriter |
| speex_version |
| \family default |
| contains the version of Speex that encoded the file. |
| For now, refer to speex_header.[ch] for more info. |
| The |
| \emph on |
| beginning of stream |
| \emph default |
| ( |
| \family typewriter |
| b_o_s |
| \family default |
| ) flag is set to 1 for the header. |
| The header packet has |
| \family typewriter |
| packetno=0 |
| \family default |
| and |
| \family typewriter |
| granulepos=0 |
| \family default |
| . |
| \layout Standard |
| |
| The second packet contains the Speex comment header. |
| The format used is the Vorbis comment format described here: http://www.xiph.org/ |
| ogg/vorbis/doc/v-comment.html . |
| This packet has |
| \family typewriter |
| packetno=1 |
| \family default |
| and |
| \family typewriter |
| granulepos=0 |
| \family default |
| . |
| \layout Standard |
| |
| The third and subsequant packets each contain one or more (number found |
| in header) Speex frames. |
| These are identified with |
| \family typewriter |
| packetno |
| \family default |
| starting from 2 and the |
| \family typewriter |
| granulepos |
| \family default |
| is the number of the last sample encoded in that packet. |
| Le last of these packets has the |
| \emph on |
| end of stream |
| \emph default |
| ( |
| \family typewriter |
| e_o_s |
| \family default |
| ) flag is set to 1. |
| \layout Standard |
| |
| |
| \begin_inset Float table |
| placement htbp |
| wide true |
| collapsed false |
| |
| \layout Standard |
| |
| |
| \begin_inset Tabular |
| <lyxtabular version="3" rows="16" 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 |
| |
| \layout Standard |
| |
| Field |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| Type |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| Size |
| \end_inset |
| </cell> |
| </row> |
| <row topline="true"> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| speex_string |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| char[] |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 8 |
| \end_inset |
| </cell> |
| </row> |
| <row topline="true"> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| speex_version |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| char[] |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 20 |
| \end_inset |
| </cell> |
| </row> |
| <row topline="true"> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| speex_header_version |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| int |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 4 |
| \end_inset |
| </cell> |
| </row> |
| <row topline="true"> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| header_size |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| int |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 4 |
| \end_inset |
| </cell> |
| </row> |
| <row topline="true"> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| rate |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| int |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 4 |
| \end_inset |
| </cell> |
| </row> |
| <row topline="true"> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| mode |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| int |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 4 |
| \end_inset |
| </cell> |
| </row> |
| <row topline="true"> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| mode_bitstream_version |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| int |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 4 |
| \end_inset |
| </cell> |
| </row> |
| <row topline="true"> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| nb_channels |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| int |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 4 |
| \end_inset |
| </cell> |
| </row> |
| <row topline="true"> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| bitrate |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| int |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 4 |
| \end_inset |
| </cell> |
| </row> |
| <row topline="true"> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| frame_size |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| int |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 4 |
| \end_inset |
| </cell> |
| </row> |
| <row topline="true"> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| vbr |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| int |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 4 |
| \end_inset |
| </cell> |
| </row> |
| <row topline="true"> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| frames_per_packet |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| int |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 4 |
| \end_inset |
| </cell> |
| </row> |
| <row topline="true"> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| reserved1 |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| int |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 4 |
| \end_inset |
| </cell> |
| </row> |
| <row topline="true"> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| reserved2 |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| int |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 4 |
| \end_inset |
| </cell> |
| </row> |
| <row topline="true" bottomline="true"> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| reserved3 |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| int |
| \end_inset |
| </cell> |
| <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> |
| \begin_inset Text |
| |
| \layout Standard |
| |
| 4 |
| \end_inset |
| </cell> |
| </row> |
| </lyxtabular> |
| |
| \end_inset |
| |
| |
| \layout Caption |
| |
| Ogg/Speex header packet |
| \begin_inset LatexCommand \label{cap:ogg_speex_header} |
| |
| \end_inset |
| |
| |
| \end_inset |
| |
| |
| \layout Standard |
| |
| |
| \begin_inset ERT |
| status Collapsed |
| |
| \layout Standard |
| |
| \backslash |
| clearpage |
| \end_inset |
| |
| |
| \layout Section |
| \start_of_appendix |
| FAQ |
| \layout Subsection* |
| |
| Vorbis is open-source |
| \begin_inset LatexCommand \index{open-source} |
| |
| \end_inset |
| |
| and patent-free |
| \begin_inset LatexCommand \index{patent} |
| |
| \end_inset |
| |
| , why do we need Speex? |
| \layout Standard |
| |
| Vorbis is a great project but its goals are not the same as Speex. |
| Vorbis is mostly aimed at compressing music and audio in general, while |
| Speex targets speech only. |
| For that reason Speex can achieve much better results than Vorbis on speech, |
| typically 2-4 times higher compression at equal quality. |
| \layout Subsection* |
| |
| Ogg |
| \begin_inset LatexCommand \index{Ogg} |
| |
| \end_inset |
| |
| , Speex, Vorbis |
| \begin_inset LatexCommand \index{Vorbis} |
| |
| \end_inset |
| |
| , what's the difference? |
| \layout Standard |
| |
| Ogg is a |
| \begin_inset Quotes eld |
| \end_inset |
| |
| file format |
| \begin_inset Quotes erd |
| \end_inset |
| |
| for holding multimedia data. |
| Vorbis is an audio codec that uses Ogg to store its bit-streams as files, |
| hence the name Ogg Vorbis. |
| Speex also uses the Ogg format to store its bit-streams as files, so technicall |
| y they would be |
| \begin_inset Quotes eld |
| \end_inset |
| |
| Ogg Speex |
| \begin_inset Quotes erd |
| \end_inset |
| |
| files (I prefer to call them just Speex files). |
| One difference with Vorbis however, is that Speex is less tied with Ogg. |
| Actually, if what you do is Voice of IP (VoIP), you don't need Ogg at all. |
| \layout Subsection* |
| |
| Can I use Speex for compressing music |
| \begin_inset LatexCommand \index{music} |
| |
| \end_inset |
| |
| ? |
| \layout Standard |
| |
| Just like Vorbis is not really adapted to speech, Speex is really not adapted |
| for music. |
| In most cases, you'll be better of with Vorbis when it comes to music. |
| \layout Subsection* |
| |
| I converted some MP3's to Speex and the quality is bad. |
| What's wrong? |
| \layout Standard |
| |
| This is called transcoding and it will always result in much poorer quality |
| than the original MP3. |
| Unless you have a really good (size) reason to do so, never transcode speech. |
| This is even valid for self transcoding (tandeming), i.e. |
| If you decode a Speex file and re-encode it again at the same bit-rate, |
| you will lose quality. |
| \layout Subsection* |
| |
| Does Speex run on Windows? |
| \layout Standard |
| |
| As of 0.8.0, Speex can now compile on Windows, though limited testing has |
| been done so far. |
| \layout Subsection* |
| |
| Why is encoding so slow compared to decoding? |
| \layout Standard |
| |
| For most kinds of compression, encoding is inherently slower than decoding. |
| In the case of Speex, encoding consists of finding, for each vector of |
| 5 to 10 samples, the entry that matches the best within a codebook consisting |
| of 16 to 256 entries. |
| On the other hand, at decoding all that needs to be done is lookup the |
| right entry in the codebook using the encoded index. |
| Since a lookup is much faster than a search, the decoder works much faster |
| than the encoder. |
| \layout Subsection* |
| |
| Why is Speex so slow on my iPaq (or insert any platform without an FPU)? |
| \layout Standard |
| |
| Well the parenthesis provides the answer: no FPU (floating-point unit). |
| The Speex code makes heavy use of floating-point operations. |
| On devices with no FPU, all floating-point instructions need to be emulated. |
| This is a very time consuming operation. |
| \layout Subsection* |
| |
| I'm getting unusual background noise (hiss) when using libspeex in my applicatio |
| n. |
| How do I fix that? |
| \layout Standard |
| |
| One of the cause could be scaling of the input speech. |
| Speex expects signals to have a |
| \begin_inset Formula $\pm 2^{15}$ |
| \end_inset |
| |
| (signed short) dynamic range. |
| If the dynamic range of your signals is too small (e.g. |
| |
| \begin_inset Formula $\pm 1.0$ |
| \end_inset |
| |
| ), you will suffer important quantization noise. |
| A good target is to have a dynamic range around |
| \begin_inset Formula $\pm 8000$ |
| \end_inset |
| |
| which is large enough, but small enough to make sure there's no clipping |
| when converting back to signed short. |
| \layout Subsection* |
| |
| I get very distorted speech when using libspeex in my application. |
| What's wrong? |
| \layout Standard |
| |
| There are many possible causes for that. |
| One of them is errors in the way the bits are manipulated. |
| Another possible cause is the use of the same encoder or decoder state |
| for more than one audio stream (channel), which produces strange effects |
| with the filter memories. |
| If the input speech has an amplitude close to |
| \begin_inset Formula $\pm 2^{15}$ |
| \end_inset |
| |
| , it is possible that at decoding, the amplitude be a bit higher than that, |
| causing clipping when saving as 16-bit PCM. |
| \layout Subsection* |
| |
| Can Speex pass DTMF |
| \begin_inset LatexCommand \index{DTMF} |
| |
| \end_inset |
| |
| ? |
| \layout Standard |
| |
| I guess it all depends on the bit-rate used. |
| Though no formal testing has yet been performed, I'd say don't go below |
| the 15 kbps mode if you want DTMF to be transmitted correctly. |
| Also, make sure you don't use the lowest complexity (see SPEEX_SET_COMPLEXITY |
| or --comp option), as it causes important noise. |
| \layout Subsection* |
| |
| Can Speex pass V.9x modem signals correctly? |
| \layout Standard |
| |
| If I could to that I'd be very rich by now :-) |
| \layout Subsection* |
| |
| What is your (Jean-Marc) relationship with the University of Sherbrooke |
| and how does Speex fit into that? |
| \layout Standard |
| |
| I am currently (2002/08/13) doing a Ph.D. |
| at the University of Sherbrooke 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. |
| It should |
| \series bold |
| not |
| \series default |
| be understood that they or the University of Sherbrooke endorse the Speex |
| project in any way. |
| Furthermore, Speex does not make use of any code or proprietary technology |
| developed in the Sherbrooke speech coding group. |
| |
| \layout Subsection* |
| |
| CELP, ACELP |
| \begin_inset LatexCommand \index{ACELP} |
| |
| \end_inset |
| |
| , what's the difference? |
| \layout Standard |
| |
| CELP stands for |
| \begin_inset Quotes eld |
| \end_inset |
| |
| Code Excited Linear Prediction |
| \begin_inset Quotes erd |
| \end_inset |
| |
| , while ACELP stands for |
| \begin_inset Quotes eld |
| \end_inset |
| |
| |
| \emph on |
| Algebraic |
| \emph default |
| Code Excited Linear Prediction |
| \begin_inset Quotes erd |
| \end_inset |
| |
| . |
| That means ACELP is a CELP technique that uses an algebraic codebook represente |
| d as a sum of unit pulses, thus making the codebook search much more efficient. |
| This technique was invented at the University of Sherbrooke and is now |
| one of the most widely used form of CELP. |
| Unfortunately, since it is patented, it cannot be used in Speex. |
| \layout Section |
| \pagebreak_top |
| GNU Free Documentation License |
| \layout Standard |
| |
| Version 1.1, March 2000 |
| \layout Standard |
| |
| Copyright (C) 2000 Free Software Foundation, Inc. |
| 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Everyone is permitted |
| to copy and distribute verbatim copies of this license document, but changing |
| it is not allowed. |
| |
| \layout Subsection* |
| |
| 0. |
| PREAMBLE |
| \layout Standard |
| |
| The purpose of this License is to make a manual, textbook, or other written |
| document "free" in the sense of freedom: to assure everyone the effective |
| freedom to copy and redistribute it, with or without modifying it, either |
| commercially or noncommercially. |
| Secondarily, this License preserves for the author and publisher a way |
| to get credit for their work, while not being considered responsible for |
| modifications made by others. |
| \layout Standard |
| |
| This License is a kind of "copyleft", which means that derivative works |
| of the document must themselves be free in the same sense. |
| It complements the GNU General Public License, which is a copyleft license |
| designed for free software. |
| \layout Standard |
| |
| We have designed this License in order to use it for manuals for free software, |
| because free software needs free documentation: a free program should come |
| with manuals providing the same freedoms that the software does. |
| But this License is not limited to software manuals; it can be used for |
| any textual work, regardless of subject matter or whether it is published |
| as a printed book. |
| We recommend this License principally for works whose purpose is instruction |
| or reference. |
| |
| \layout Subsection* |
| |
| 1. |
| APPLICABILITY AND DEFINITIONS |
| \layout Standard |
| |
| This License applies to any manual or other work that contains a notice |
| placed by the copyright holder saying it can be distributed under the terms |
| of this License. |
| The "Document", below, refers to any such manual or work. |
| Any member of the public is a licensee, and is addressed as "you". |
| \layout Standard |
| |
| A "Modified Version" of the Document means any work containing the Document |
| or a portion of it, either copied verbatim, or with modifications and/or |
| translated into another language. |
| \layout Standard |
| |
| A "Secondary Section" is a named appendix or a front-matter section of the |
| Document that deals exclusively with the relationship of the publishers |
| or authors of the Document to the Document's overall subject (or to related |
| matters) and contains nothing that could fall directly within that overall |
| subject. |
| (For example, if the Document is in part a textbook of mathematics, a Secondary |
| Section may not explain any mathematics.) The relationship could be a matter |
| of historical connection with the subject or with related matters, or of |
| legal, commercial, philosophical, ethical or political position regarding |
| them. |
| \layout Standard |
| |
| The "Invariant Sections" are certain Secondary Sections whose titles are |
| designated, as being those of Invariant Sections, in the notice that says |
| that the Document is released under this License. |
| \layout Standard |
| |
| The "Cover Texts" are certain short passages of text that are listed, as |
| Front-Cover Texts or Back-Cover Texts, in the notice that says that the |
| Document is released under this License. |
| \layout Standard |
| |
| A "Transparent" copy of the Document means a machine-readable copy, represented |
| in a format whose specification is available to the general public, whose |
| contents can be viewed and edited directly and straightforwardly with generic |
| text editors or (for images composed of pixels) generic paint programs |
| or (for drawings) some widely available drawing editor, and that is suitable |
| for input to text formatters or for automatic translation to a variety |
| of formats suitable for input to text formatters. |
| A copy made in an otherwise Transparent file format whose markup has been |
| designed to thwart or discourage subsequent modification by readers is |
| not Transparent. |
| A copy that is not "Transparent" is called "Opaque". |
| \layout Standard |
| |
| Examples of suitable formats for Transparent copies include plain ASCII |
| without markup, Texinfo input format, LaTeX input format, SGML or XML using |
| a publicly available DTD, and standard-conforming simple HTML designed |
| for human modification. |
| Opaque formats include PostScript, PDF, proprietary formats that can be |
| read and edited only by proprietary word processors, SGML or XML for which |
| the DTD and/or processing tools are not generally available, and the machine-ge |
| nerated HTML produced by some word processors for output purposes only. |
| \layout Standard |
| |
| The "Title Page" means, for a printed book, the title page itself, plus |
| such following pages as are needed to hold, legibly, the material this |
| License requires to appear in the title page. |
| For works in formats which do not have any title page as such, "Title Page" |
| means the text near the most prominent appearance of the work's title, |
| preceding the beginning of the body of the text. |
| \layout Subsection* |
| |
| 2. |
| VERBATIM COPYING |
| \layout Standard |
| |
| You may copy and distribute the Document in any medium, either commercially |
| or noncommercially, provided that this License, the copyright notices, |
| and the license notice saying this License applies to the Document are |
| reproduced in all copies, and that you add no other conditions whatsoever |
| to those of this License. |
| You may not use technical measures to obstruct or control the reading or |
| further copying of the copies you make or distribute. |
| However, you may accept compensation in exchange for copies. |
| If you distribute a large enough number of copies you must also follow |
| the conditions in section 3. |
| \layout Standard |
| |
| You may also lend copies, under the same conditions stated above, and you |
| may publicly display copies. |
| \layout Subsection* |
| |
| 3. |
| COPYING IN QUANTITY |
| \layout Standard |
| |
| If you publish printed copies of the Document numbering more than 100, and |
| the Document's license notice requires Cover Texts, you must enclose the |
| copies in covers that carry, clearly and legibly, all these Cover Texts: |
| Front-Cover Texts on the front cover, and Back-Cover Texts on the back |
| cover. |
| Both covers must also clearly and legibly identify you as the publisher |
| of these copies. |
| The front cover must present the full title with all words of the title |
| equally prominent and visible. |
| You may add other material on the covers in addition. |
| Copying with changes limited to the covers, as long as they preserve the |
| title of the Document and satisfy these conditions, can be treated as verbatim |
| copying in other respects. |
| \layout Standard |
| |
| If the required texts for either cover are too voluminous to fit legibly, |
| you should put the first ones listed (as many as fit reasonably) on the |
| actual cover, and continue the rest onto adjacent pages. |
| \layout Standard |
| |
| If you publish or distribute Opaque copies of the Document numbering more |
| than 100, you must either include a machine-readable Transparent copy along |
| with each Opaque copy, or state in or with each Opaque copy a publicly-accessib |
| le computer-network location containing a complete Transparent copy of the |
| Document, free of added material, which the general network-using public |
| has access to download anonymously at no charge using public-standard network |
| protocols. |
| If you use the latter option, you must take reasonably prudent steps, when |
| you begin distribution of Opaque copies in quantity, to ensure that this |
| Transparent copy will remain thus accessible at the stated location until |
| at least one year after the last time you distribute an Opaque copy (directly |
| or through your agents or retailers) of that edition to the public. |
| \layout Standard |
| |
| It is requested, but not required, that you contact the authors of the Document |
| well before redistributing any large number of copies, to give them a chance |
| to provide you with an updated version of the Document. |
| |
| \layout Subsection* |
| |
| 4. |
| MODIFICATIONS |
| \layout Standard |
| |
| You may copy and distribute a Modified Version of the Document under the |
| conditions of sections 2 and 3 above, provided that you release the Modified |
| Version under precisely this License, with the Modified Version filling |
| the role of the Document, thus licensing distribution and modification |
| of the Modified Version to whoever possesses a copy of it. |
| In addition, you must do these things in the Modified Version: |
| \layout Itemize |
| |
| A. |
| Use in the Title Page (and on the covers, if any) a title distinct from |
| that of the Document, and from those of previous versions (which should, |
| if there were any, be listed in the History section of the Document). |
| You may use the same title as a previous version if the original publisher |
| of that version gives permission. |
| \layout Itemize |
| |
| B. |
| List on the Title Page, as authors, one or more persons or entities responsible |
| for authorship of the modifications in the Modified Version, together with |
| at least five of the principal authors of the Document (all of its principal |
| authors, if it has less than five). |
| \layout Itemize |
| |
| C. |
| State on the Title page the name of the publisher of the Modified Version, |
| as the publisher. |
| \layout Itemize |
| |
| D. |
| Preserve all the copyright notices of the Document. |
| \layout Itemize |
| |
| E. |
| Add an appropriate copyright notice for your modifications adjacent to |
| the other copyright notices. |
| \layout Itemize |
| |
| F. |
| Include, immediately after the copyright notices, a license notice giving |
| the public permission to use the Modified Version under the terms of this |
| License, in the form shown in the Addendum below. |
| \layout Itemize |
| |
| G. |
| Preserve in that license notice the full lists of Invariant Sections and |
| required Cover Texts given in the Document's license notice. |
| \layout Itemize |
| |
| H. |
| Include an unaltered copy of this License. |
| \layout Itemize |
| |
| I. |
| Preserve the section entitled "History", and its title, and add to it an |
| item stating at least the title, year, new authors, and publisher of the |
| Modified Version as given on the Title Page. |
| If there is no section entitled "History" in the Document, create one stating |
| the title, year, authors, and publisher of the Document as given on its |
| Title Page, then add an item describing the Modified Version as stated |
| in the previous sentence. |
| \layout Itemize |
| |
| J. |
| Preserve the network location, if any, given in the Document for public |
| access to a Transparent copy of the Document, and likewise the network |
| locations given in the Document for previous versions it was based on. |
| These may be placed in the "History" section. |
| You may omit a network location for a work that was published at least |
| four years before the Document itself, or if the original publisher of |
| the version it refers to gives permission. |
| \layout Itemize |
| |
| K. |
| In any section entitled "Acknowledgements" or "Dedications", preserve the |
| section's title, and preserve in the section all the substance and tone |
| of each of the contributor acknowledgements and/or dedications given therein. |
| \layout Itemize |
| |
| L. |
| Preserve all the Invariant Sections of the Document, unaltered in their |
| text and in their titles. |
| Section numbers or the equivalent are not considered part of the section |
| titles. |
| \layout Itemize |
| |
| M. |
| Delete any section entitled "Endorsements". |
| Such a section may not be included in the Modified Version. |
| \layout Itemize |
| |
| N. |
| Do not retitle any existing section as "Endorsements" or to conflict in |
| title with any Invariant Section. |
| |
| \layout Standard |
| |
| If the Modified Version includes new front-matter sections or appendices |
| that qualify as Secondary Sections and contain no material copied from |
| the Document, you may at your option designate some or all of these sections |
| as invariant. |
| To do this, add their titles to the list of Invariant Sections in the Modified |
| Version's license notice. |
| These titles must be distinct from any other section titles. |
| \layout Standard |
| |
| You may add a section entitled "Endorsements", provided it contains nothing |
| but endorsements of your Modified Version by various parties--for example, |
| statements of peer review or that the text has been approved by an organization |
| as the authoritative definition of a standard. |
| \layout Standard |
| |
| You may add a passage of up to five words as a Front-Cover Text, and a passage |
| of up to 25 words as a Back-Cover Text, to the end of the list of Cover |
| Texts in the Modified Version. |
| Only one passage of Front-Cover Text and one of Back-Cover Text may be |
| added by (or through arrangements made by) any one entity. |
| If the Document already includes a cover text for the same cover, previously |
| added by you or by arrangement made by the same entity you are acting on |
| behalf of, you may not add another; but you may replace the old one, on |
| explicit permission from the previous publisher that added the old one. |
| \layout Standard |
| |
| The author(s) and publisher(s) of the Document do not by this License give |
| permission to use their names for publicity for or to assert or imply endorseme |
| nt of any Modified Version. |
| |
| \layout Subsection* |
| |
| 5. |
| COMBINING DOCUMENTS |
| \layout Standard |
| |
| You may combine the Document with other documents released under this License, |
| under the terms defined in section 4 above for modified versions, provided |
| that you include in the combination all of the Invariant Sections of all |
| of the original documents, unmodified, and list them all as Invariant Sections |
| of your combined work in its license notice. |
| \layout Standard |
| |
| The combined work need only contain one copy of this License, and multiple |
| identical Invariant Sections may be replaced with a single copy. |
| If there are multiple Invariant Sections with the same name but different |
| contents, make the title of each such section unique by adding at the end |
| of it, in parentheses, the name of the original author or publisher of |
| that section if known, or else a unique number. |
| Make the same adjustment to the section titles in the list of Invariant |
| Sections in the license notice of the combined work. |
| \layout Standard |
| |
| In the combination, you must combine any sections entitled "History" in |
| the various original documents, forming one section entitled "History"; |
| likewise combine any sections entitled "Acknowledgements", and any sections |
| entitled "Dedications". |
| You must delete all sections entitled "Endorsements." |
| \layout Subsection* |
| |
| 6. |
| COLLECTIONS OF DOCUMENTS |
| \layout Standard |
| |
| You may make a collection consisting of the Document and other documents |
| released under this License, and replace the individual copies of this |
| License in the various documents with a single copy that is included in |
| the collection, provided that you follow the rules of this License for |
| verbatim copying of each of the documents in all other respects. |
| \layout Standard |
| |
| You may extract a single document from such a collection, and distribute |
| it individually under this License, provided you insert a copy of this |
| License into the extracted document, and follow this License in all other |
| respects regarding verbatim copying of that document. |
| |
| \layout Subsection* |
| |
| 7. |
| AGGREGATION WITH INDEPENDENT WORKS |
| \layout Standard |
| |
| A compilation of the Document or its derivatives with other separate and |
| independent documents or works, in or on a volume of a storage or distribution |
| medium, does not as a whole count as a Modified Version of the Document, |
| provided no compilation copyright is claimed for the compilation. |
| Such a compilation is called an "aggregate", and this License does not |
| apply to the other self-contained works thus compiled with the Document, |
| on account of their being thus compiled, if they are not themselves derivative |
| works of the Document. |
| \layout Standard |
| |
| If the Cover Text requirement of section 3 is applicable to these copies |
| of the Document, then if the Document is less than one quarter of the entire |
| aggregate, the Document's Cover Texts may be placed on covers that surround |
| only the Document within the aggregate. |
| Otherwise they must appear on covers around the whole aggregate. |
| \layout Subsection* |
| |
| 8. |
| TRANSLATION |
| \layout Standard |
| |
| Translation is considered a kind of modification, so you may distribute |
| translations of the Document under the terms of section 4. |
| Replacing Invariant Sections with translations requires special permission |
| from their copyright holders, but you may include translations of some |
| or all Invariant Sections in addition to the original versions of these |
| Invariant Sections. |
| You may include a translation of this License provided that you also include |
| the original English version of this License. |
| In case of a disagreement between the translation and the original English |
| version of this License, the original English version will prevail. |
| \layout Subsection* |
| |
| 9. |
| TERMINATION |
| \layout Standard |
| |
| You may not copy, modify, sublicense, or distribute the Document except |
| as expressly provided for under this License. |
| Any other attempt to copy, modify, sublicense or distribute the Document |
| is void, and will automatically terminate your rights under this License. |
| However, parties who have received copies, or rights, from you under this |
| License will not have their licenses terminated so long as such parties |
| remain in full compliance. |
| |
| \layout Subsection* |
| |
| 10. |
| FUTURE REVISIONS OF THIS LICENSE |
| \layout Standard |
| |
| The Free Software Foundation may publish new, revised versions of the GNU |
| Free Documentation License from time to time. |
| Such new versions will be similar in spirit to the present version, but |
| may differ in detail to address new problems or concerns. |
| See http://www.gnu.org/copyleft/. |
| \layout Standard |
| |
| Each version of the License is given a distinguishing version number. |
| If the Document specifies that a particular numbered version of this License |
| "or any later version" applies to it, you have the option of following |
| the terms and conditions either of that specified version or of any later |
| version that has been published (not as a draft) by the Free Software Foundatio |
| n. |
| If the Document does not specify a version number of this License, you |
| may choose any version ever published (not as a draft) by the Free Software |
| Foundation. |
| \layout Standard |
| |
| |
| \begin_inset LatexCommand \printindex{} |
| |
| \end_inset |
| |
| |
| \the_end |