ugh a uniform quantizer, where it probably gets mapped to only one or two quantization levels. As a result, we have a large range of x getting mapped to only one or two levels, which creates a lot of quantization error (high error power). So, large inputs (high input power) create lots of quantization error (high error power). Similarly, looking at Figure 4.20, small inputs (low input power) get stretched out into a larger range of values by the function G(x); therefore, considering the overall compandor/quantizer when this large range of G(x) outputs goes through the uniform quantizer, it is mapped to a large number of levels, which results in only little quantization error (low error power); SO we get low input power creating low error power. This is perfect for creating constant SQNR. However, when telecommunications engineers took a close look at the G(x) of Figure 4.20, one of them had a troubling thought: "What happens when a negative input arrives at the G(x) function in the compandor?" Indeed, that was a very good point, for as you'll probably notice, the G(x) function of Figure 4.20 does not tell you what G(x) will output for negative inputs. But another of the engineers offered a simple solution: "We want big inputs (either positive or negative) to give big errors, and we want small inputs (either positive or negative) to give small errors. So what we'll do is simple: we'll use this!" and he pointed to a figure just like Figure 4.21. You see, in this figure, what G(x) does to the negative values is identical to what it does to positive values: big negative values are compressed by G(x) creating big errors in the uniform quantizer (that follows G(x)); small negative values are expanded by the G(x), creating small errors in the uniform quantizer (that follows G(x)). So, the problem of what to do with negative inputs was quickly solved. G(x) = logx Small values of -X mapped to large range of G(x) G(x) = -log(-x) Big values of -X mapped to smaller range of G(x) Large values Small values of -X of -x Figure 4