paulencode implements Paul's 1982 AVQ algorithm for adaptive vector quantization (AVQ). The vectors of datfile (DAT format) are encoded using Paul's algorithm, with codebook (CBK format) being the initial codebook. paulencode outputs a channel of VQ indices, channelfile (CHN format), and side information, sideinfofile (SID format). codebook_coder gives the scalar quantizer used to produce the side information (see below). Note: paulencode implements the move-to-front variant of the Paul algorithm as described by Goodman et al.
pauldecode is used for the corresponding decoding of channelfile and sideinfofile; avqrate calculates the bit rate for the Paul algorithm as represented by this channel and the side information. See pauldecode(1) and avqrate(1) for more details.
If option -fc is specified, paulencode outputs the final state of the codebook, taking into account all codebook updates performed during coding, to final_codebook.
The side information output by paulencode consists of a series of flags indicating whether or not the codebook is updated at a given time, as well as the vectors added to the codebook during a codebook update. The side-information file, sideinfofile, consists of a sequence of symbols of the following form:
<symbol type> <symbol value>
where <symbol type> is 1 for a flag, and 3 for an update vector. If <symbol type> = 1, then the current symbol is a flag, and, in this case, <symbol value> can be either 0 or 1. If <symbol value> = 1, then the symbol indicates that a codebook update is to be performed, and the next symbol will be the new codeword. <symbol value> = 0 for no update. If <symbol type> = 3, then the current symbol is a vector. In this case, <symbol value> = v[1] v[2] ... v[dim]. The scalar quantizer codebook_coder (SQ format) is used to quantize each component of the vector that updates the codebook. Thus, each v[i] is an index output from this scalar quantizer. Note: dim is the vector dimension specified in the header of sideinfofile (see QccPack(1) ). Note: in all instances, <symbol value> and <symbol type> are stored in ASCII characters. The value of N (see QccPack(1) ) specified in the header of sideinfofile gives the number of symbols with <symbol type> = 1, i.e. the number of flags stored in sideinfofile.
D. B. Paul, "A 500-800 bps Adaptive Vector Quantization Vocoder Using a Perceptually Motivated Distance Measure," in Conference Record, IEEE Globecom, pp. 1079-1082, 1982.
R. M. Goodman, B. Gupta, and M. Sayano, "Neural Network Implementation of Adaptive Vector Quantization for Image Compression," tech. rep., Department of Electrical Engineering, California Institute of Technology, Pasadena, CA, 1991.