I'm studying MPEG compression on the book "Introduction to Data Compression" by Khalid Sayood. In the figure there is a paragraph piece about the subject.
I didn't understand a few things:
- use and how the scalefactor works
- use and how the 14 different quantizers work.
That are the parts highlighted in orange.
The scalefactor is a value that is used to decrease (or increase) the range of values, right?
I try to repeat what I understand:
- Input signal is PCM samples over time
- These samples are transformed into the frequency domain (I suppose with an FFT)
- Samples are subdivided into frames of 384 samples each
- Each frame is processed individually and subdivided into 32 equal frequency bands using a filter bank. Each subfield therefore contains 12 samples
- encoder processes each sub-band individually and through a psychoacoustic analysis determine the number of bits to allocate for each quantized sample and possible quantization levels (linear quantization)
- encode the samples and form the package
I know that point 5 is very superficial because I didn't understand the parts related to the scalefactor and the 14 different quantizers. Can anyone help me?
Somewhere I've read the quantization steps are the same for each sub-band and they are 2 dB each (linear quantization), so what's the scalefactor meaning? I think the scalefactor is a kind of exponent in the case of non linear and floating point quantization. So MPEG layer I use a linear or not lineare quantization?
I read (quickly) the book you've been advising me (Introduction to Digital Audio Coding and Standards from Bosi). This is a piece that treats the part I didn't understand.
For each sub-band, the scalefactor (stored on 6 bits) is calculated from the 63 available and a quantizer (on 4 bits) of the 14 available.
The scalefactor is the largest sample of a sub-band. Once I've calculated it I use to divide each sample, obtaining 12 samples whose value is in the range [0, 1].
The quantizer has a numeric value that expresses the number of bits I use to encode each sample.
This is my usual scheming:
Why do I need to normalized the samples?