Fix about link in the specification.
[platform/upstream/libvorbis.git] / doc / 06-floor0.tex
index 425a036..f3042a6 100644 (file)
@@ -1,6 +1,5 @@
 % -*- mode: latex; TeX-master: "Vorbis_I_spec"; -*-
 %!TEX root = Vorbis_I_spec.tex
 % -*- mode: latex; TeX-master: "Vorbis_I_spec"; -*-
 %!TEX root = Vorbis_I_spec.tex
-% $Id$
 \section{Floor type 0 setup and decode} \label{vorbis:spec:floor0}
 
 \subsection{Overview}
 \section{Floor type 0 setup and decode} \label{vorbis:spec:floor0}
 
 \subsection{Overview}
@@ -28,18 +27,18 @@ codec setup header (third packet).  configuration decode proceeds as
 follows:
 
 \begin{Verbatim}[commandchars=\\\{\}]
 follows:
 
 \begin{Verbatim}[commandchars=\\\{\}]
-  1) [floor0_order] = read an unsigned integer of 8 bits
-  2) [floor0_rate] = read an unsigned integer of 16 bits
-  3) [floor0_bark_map_size] = read an unsigned integer of 16 bits
-  4) [floor0_amplitude_bits] = read an unsigned integer of six bits
-  5) [floor0_amplitude_offset] = read an unsigned integer of eight bits
-  6) [floor0_number_of_books] = read an unsigned integer of four bits and add 1
-  7) array [floor0_book_list] = read a list of [floor0_number_of_books] unsigned integers of eight bits each;
+  1) [floor0\_order] = read an unsigned integer of 8 bits
+  2) [floor0\_rate] = read an unsigned integer of 16 bits
+  3) [floor0\_bark\_map\_size] = read an unsigned integer of 16 bits
+  4) [floor0\_amplitude\_bits] = read an unsigned integer of six bits
+  5) [floor0\_amplitude\_offset] = read an unsigned integer of eight bits
+  6) [floor0\_number\_of\_books] = read an unsigned integer of four bits and add 1
+  7) array [floor0\_book\_list] = read a list of [floor0\_number\_of\_books] unsigned integers of eight bits each;
 \end{Verbatim}
 
 An end-of-packet condition during any of these bitstream reads renders
 this stream undecodable.  In addition, any element of the array
 \end{Verbatim}
 
 An end-of-packet condition during any of these bitstream reads renders
 this stream undecodable.  In addition, any element of the array
-\varname{[floor0_book_list]} that is greater than the maximum codebook
+\varname{[floor0\_book\_list]} that is greater than the maximum codebook
 number for this bitstream is an error condition that also renders the
 stream undecodable.
 
 number for this bitstream is an error condition that also renders the
 stream undecodable.
 
@@ -48,24 +47,24 @@ stream undecodable.
 \subsubsection{packet decode} \label{vorbis:spec:floor0-decode}
 
 Extracting a floor0 curve from an audio packet consists of first
 \subsubsection{packet decode} \label{vorbis:spec:floor0-decode}
 
 Extracting a floor0 curve from an audio packet consists of first
-decoding the curve amplitude and \varname{[floor0_order]} LSP
+decoding the curve amplitude and \varname{[floor0\_order]} LSP
 coefficient values from the bitstream, and then computing the floor
 curve, which is defined as the frequency response of the decoded LSP
 filter.
 
 Packet decode proceeds as follows:
 \begin{Verbatim}[commandchars=\\\{\}]
 coefficient values from the bitstream, and then computing the floor
 curve, which is defined as the frequency response of the decoded LSP
 filter.
 
 Packet decode proceeds as follows:
 \begin{Verbatim}[commandchars=\\\{\}]
-  1) [amplitude] = read an unsigned integer of [floor0_amplitude_bits] bits
+  1) [amplitude] = read an unsigned integer of [floor0\_amplitude\_bits] bits
   2) if ( [amplitude] is greater than zero ) \{
        3) [coefficients] is an empty, zero length vector
   2) if ( [amplitude] is greater than zero ) \{
        3) [coefficients] is an empty, zero length vector
-       4) [booknumber] = read an unsigned integer of \link{vorbis:spec:ilog}{ilog}( [floor0_number_of_books] ) bits
+       4) [booknumber] = read an unsigned integer of \link{vorbis:spec:ilog}{ilog}( [floor0\_number\_of\_books] ) bits
        5) if ( [booknumber] is greater than the highest number decode codebook ) then packet is undecodable
        6) [last] = zero;
        5) if ( [booknumber] is greater than the highest number decode codebook ) then packet is undecodable
        6) [last] = zero;
-       7) vector [temp_vector] = read vector from bitstream using codebook number [floor0_book_list] element [booknumber] in VQ context.
-       8) add the scalar value [last] to each scalar in vector [temp_vector]
-       9) [last] = the value of the last scalar in vector [temp_vector]
-      10) concatenate [temp_vector] onto the end of the [coefficients] vector
-      11) if (length of vector [coefficients] is less than [floor0_order], continue at step 6
+       7) vector [temp\_vector] = read vector from bitstream using codebook number [floor0\_book\_list] element [booknumber] in VQ context.
+       8) add the scalar value [last] to each scalar in vector [temp\_vector]
+       9) [last] = the value of the last scalar in vector [temp\_vector]
+      10) concatenate [temp\_vector] onto the end of the [coefficients] vector
+      11) if (length of vector [coefficients] is less than [floor0\_order], continue at step 6
 
      \}
 
 
      \}
 
@@ -82,16 +81,16 @@ operation above, floor decode is to return 'unused' status as if the
 \varname{[amplitude]} value had read zero at the beginning of decode.
 
  \item The book number used for decode
 \varname{[amplitude]} value had read zero at the beginning of decode.
 
  \item The book number used for decode
-can, in fact, be stored in the bitstream in \link{vorbis:spec:ilog}{ilog}( \varname{[floor0_number_of_books]} -
+can, in fact, be stored in the bitstream in \link{vorbis:spec:ilog}{ilog}( \varname{[floor0\_number\_of\_books]} -
 1 ) bits.  Nevertheless, the above specification is correct and values
 greater than the maximum possible book value are reserved.
 
  \item The number of scalars read into the vector \varname{[coefficients]}
 1 ) bits.  Nevertheless, the above specification is correct and values
 greater than the maximum possible book value are reserved.
 
  \item The number of scalars read into the vector \varname{[coefficients]}
-may be greater than \varname{[floor0_order]}, the number actually
+may be greater than \varname{[floor0\_order]}, the number actually
 required for curve computation.  For example, if the VQ codebook used
 for the floor currently being decoded has a
 required for curve computation.  For example, if the VQ codebook used
 for the floor currently being decoded has a
-\varname{[codebook_dimensions]} value of three and
-\varname{[floor0_order]} is ten, the only way to fill all the needed
+\varname{[codebook\_dimensions]} value of three and
+\varname{[floor0\_order]} is ten, the only way to fill all the needed
 scalars in \varname{[coefficients]} is to to read a total of twelve
 scalars as four vectors of three scalars each.  This is not an error
 condition, and care must be taken not to allow a buffer overflow in
 scalars in \varname{[coefficients]} is to to read a total of twelve
 scalars as four vectors of three scalars each.  This is not an error
 condition, and care must be taken not to allow a buffer overflow in
@@ -104,9 +103,9 @@ decode. The extra values are not used and may be ignored or discarded.
 \subsubsection{curve computation} \label{vorbis:spec:floor0-synth}
 
 Given an \varname{[amplitude]} integer and \varname{[coefficients]}
 \subsubsection{curve computation} \label{vorbis:spec:floor0-synth}
 
 Given an \varname{[amplitude]} integer and \varname{[coefficients]}
-vector from packet decode as well as the [floor0_order],
-[floor0_rate], [floor0_bark_map_size], [floor0_amplitude_bits] and
-[floor0_amplitude_offset] values from floor setup, and an output
+vector from packet decode as well as the [floor0\_order],
+[floor0\_rate], [floor0\_bark\_map\_size], [floor0\_amplitude\_bits] and
+[floor0\_amplitude\_offset] values from floor setup, and an output
 vector size \varname{[n]} specified by the decode process, we compute a
 floor output vector.
 
 vector size \varname{[n]} specified by the decode process, we compute a
 floor output vector.
 
@@ -119,7 +118,7 @@ synthesized:
      \mathrm{map}_i = \left\{
        \begin{array}{ll}
           \min (
      \mathrm{map}_i = \left\{
        \begin{array}{ll}
           \min (
-            \mathtt{floor0\_bark\_map\_size} - 1,
+            \mathtt{floor0\texttt{\_}bark\texttt{\_}map\texttt{\_}size} - 1,
             foobar
           ) & \textrm{for } i \in [0,n-1] \\
           -1 & \textrm{for } i = n
             foobar
           ) & \textrm{for } i \in [0,n-1] \\
           -1 & \textrm{for } i = n
@@ -132,14 +131,14 @@ synthesized:
     \begin{displaymath}
     foobar =
       \left\lfloor
     \begin{displaymath}
     foobar =
       \left\lfloor
-        \mathrm{bark}\left(\frac{\mathtt{floor0\_rate} \cdot i}{2n}\right) \cdot \frac{\mathtt{floor0\_bark\_map\_size}} {\mathrm{bark}(.5 \cdot \mathtt{floor0\_rate})}
+        \mathrm{bark}\left(\frac{\mathtt{floor0\texttt{\_}rate} \cdot i}{2n}\right) \cdot \frac{\mathtt{floor0\texttt{\_}bark\texttt{\_}map\texttt{\_}size}} {\mathrm{bark}(.5 \cdot \mathtt{floor0\texttt{\_}rate})}
       \right\rfloor
     \end{displaymath}
 
     and
 
     \begin{displaymath}
       \right\rfloor
     \end{displaymath}
 
     and
 
     \begin{displaymath}
-      \mathrm{bark}(x) = 13.1 \arctan (.00074x) + 2.24 \arctan (.0000000185x^2 + .0001x)
+      \mathrm{bark}(x) = 13.1 \arctan (.00074x) + 2.24 \arctan (.0000000185x^2) + .0001x
     \end{displaymath}
 
 The above is used to synthesize the LSP curve on a Bark-scale frequency
     \end{displaymath}
 
 The above is used to synthesize the LSP curve on a Bark-scale frequency
@@ -149,58 +148,54 @@ Similarly, the below calculation synthesizes the output LSP curve \varname{[outp
 
 \begin{enumerate}
  \item  \varname{[i]} = 0
 
 \begin{enumerate}
  \item  \varname{[i]} = 0
- \item  \varname{[$\omega$]} = $\pi$ * map element \varname{[i]} / \varname{[floor0_bark_map_size]}
- \item if ( \varname{[floor0_order]} is odd ) {
+ \item  \varname{[$\omega$]} = $\pi$ * map element \varname{[i]} / \varname{[floor0\_bark\_map\_size]}
+ \item if ( \varname{[floor0\_order]} is odd ) {
   \begin{enumerate}
    \item calculate \varname{[p]} and \varname{[q]} according to:
   \begin{enumerate}
    \item calculate \varname{[p]} and \varname{[q]} according to:
-\TODO{the following is generated from the TeX code embedded into the DocBook files:}
-           \begin{eqnarray*}
-             p & = & (1 - \cos^2\omega)\prod_{j=0}^{(\mathtt{order}-3)/2} 4 (\cos c_{2j+1} - \cos \omega)^2 \\
-             q & = & \frac{1}{4} \prod_{j=0}^{(\mathtt{order}-1)/2} 4 (\cos c_{2j+1} - \cos \omega)^2
-           \end{eqnarray*}
-
-\TODO{the following is what oddlsp.png contains:}
            \begin{eqnarray*}
            \begin{eqnarray*}
-             p & = & (1 - \cos^2\omega)\prod_{j=0}^{\frac{\mathtt{floor0\_order}-3}{2}} 4 (\cos([\mathtt{coefficients}]_{2j+1}) - \cos \omega)^2 \\
-             q & = & \frac{1}{4} \prod_{j=0}^{\frac{\mathtt{floor0\_order}-1}{2}} 4 (\cos([\mathtt{coefficients}]_{2j}) - \cos \omega)^2
+             p & = & (1 - \cos^2\omega)\prod_{j=0}^{\frac{\mathtt{floor0\texttt{\_}order}-3}{2}} 4 (\cos([\mathtt{coefficients}]_{2j+1}) - \cos \omega)^2 \\
+             q & = & \frac{1}{4} \prod_{j=0}^{\frac{\mathtt{floor0\texttt{\_}order}-1}{2}} 4 (\cos([\mathtt{coefficients}]_{2j}) - \cos \omega)^2
            \end{eqnarray*}
 
   \end{enumerate}
            \end{eqnarray*}
 
   \end{enumerate}
-  } else \varname{[floor0_order]} is even {
-  \begin{enumerate}
+  } else \varname{[floor0\_order]} is even {
+  \begin{enumerate}[resume]
    \item calculate \varname{[p]} and \varname{[q]} according to:
    \item calculate \varname{[p]} and \varname{[q]} according to:
-\TODO{the following is generated from the TeX code embedded into the DocBook files:}
-           \begin{eqnarray*}
-             p & = & \frac{(1 - \cos^2\omega)}{2} \prod_{j=0}^{(\mathtt{order}-2)/2} 4 (\cos c_{2j} - \cos \omega)^2 \\
-             q & = & \frac{(1 + \cos^2\omega)}{2} \prod_{j=0}^{(\mathtt{order}-2)/2} 4 (\cos c_{2j} - \cos \omega)^2
-           \end{eqnarray*}
-
-\TODO{the following is what oddlsp.png contains:}
            \begin{eqnarray*}
            \begin{eqnarray*}
-             p & = & \frac{(1 - \cos^2\omega)}{2} \prod_{j=0}^{\frac{\mathtt{floor0\_order}-2}{2}} 4 (\cos([\mathtt{coefficients}]_{2j+1}) - \cos \omega)^2 \\
-             q & = & \frac{(1 + \cos^2\omega)}{2} \prod_{j=0}^{\frac{\mathtt{floor0\_order}-2}{2}} 4 (\cos([\mathtt{coefficients}]_{2j}) - \cos \omega)^2
+             p & = & \frac{(1 - \cos\omega)}{2} \prod_{j=0}^{\frac{\mathtt{floor0\texttt{\_}order}-2}{2}} 4 (\cos([\mathtt{coefficients}]_{2j+1}) - \cos \omega)^2 \\
+             q & = & \frac{(1 + \cos\omega)}{2} \prod_{j=0}^{\frac{\mathtt{floor0\texttt{\_}order}-2}{2}} 4 (\cos([\mathtt{coefficients}]_{2j}) - \cos \omega)^2
            \end{eqnarray*}
 
   \end{enumerate}
   }
 
            \end{eqnarray*}
 
   \end{enumerate}
   }
 
- \item calculate \varname{[linear_floor_value]} according to:
+ \item calculate \varname{[linear\_floor\_value]} according to:
          \begin{displaymath}
          \begin{displaymath}
-           \exp \left( .11512925 \left(\frac{\mathtt{amplitude} \cdot \mathtt{floor0\_amplitute\_offset}}{(2^{\mathtt{floor0\_amplitude\_bits}}-1)\sqrt{p+q}}
-                  - \mathtt{floor0\_amplitude\_offset} \right) \right)
+           \exp \left( .11512925 \left(\frac{\mathtt{amplitude} \cdot \mathtt{floor0\texttt{\_}amplitute\texttt{\_}offset}}{(2^{\mathtt{floor0\texttt{\_}amplitude\texttt{\_}bits}}-1)\sqrt{p+q}}
+                  - \mathtt{floor0\texttt{\_}amplitude\texttt{\_}offset} \right) \right)
          \end{displaymath}
 
          \end{displaymath}
 
- \item \varname{[iteration_condition]} = map element \varname{[i]}
- \item \varname{[output]} element \varname{[i]} = \varname{[linear_floor_value]}
+ \item \varname{[iteration\_condition]} = map element \varname{[i]}
+ \item \varname{[output]} element \varname{[i]} = \varname{[linear\_floor\_value]}
  \item increment \varname{[i]}
  \item increment \varname{[i]}
- \item if ( map element \varname{[i]} is equal to \varname{[iteration_condition]} ) continue at step 5
+ \item if ( map element \varname{[i]} is equal to \varname{[iteration\_condition]} ) continue at step 5
  \item if ( \varname{[i]} is less than \varname{[n]} ) continue at step 2
  \item done
 \end{enumerate}
 
  \item if ( \varname{[i]} is less than \varname{[n]} ) continue at step 2
  \item done
 \end{enumerate}
 
+\paragraph{Errata 20150227: Bark scale computation}
 
 
+Due to a typo when typesetting this version of the specification from the original HTML document, the Bark scale computation previously erroneously read:
 
 
+    \begin{displaymath}
+      \hbox{\sout{$
+      \mathrm{bark}(x) = 13.1 \arctan (.00074x) + 2.24 \arctan (.0000000185x^2 + .0001x)
+      $}}
+    \end{displaymath}
 
 
+Note that the last parenthesis is misplaced.  This document now uses the correct equation as it appeared in the original HTML spec document:
 
 
-
+    \begin{displaymath}
+      \mathrm{bark}(x) = 13.1 \arctan (.00074x) + 2.24 \arctan (.0000000185x^2) + .0001x
+    \end{displaymath}