komm.ScalarQuantizer
General scalar quantizer. It is defined by a list of levels, $v_0, v_1, \ldots, v_{L-1}$, and a list of thresholds, $t_0, t_1, \ldots, t_L$, satisfying $$ -\infty = t_0 < v_0 < t_1 < v_1 < \cdots < t_{L - 1} < v_{L - 1} < t_L = +\infty. $$ Given an input $x \in \mathbb{R}$, the output of the quantizer is given by $y = v_i$ if and only if $t_i \leq x < t_{i+1}$, where $i \in [0:L)$. For more details, see Say06, Ch. 9.
To invoke the quantizer, call the object giving the input signal as parameter (see example below).
Attributes:
-
levels
(Array1D[float]
) –The quantizer levels $v_0, v_1, \ldots, v_{L-1}$. It should be a list floats of length $L$.
-
thresholds
(Array1D[float]
) –The quantizer finite thresholds $t_1, t_2, \ldots, t_{L-1}$. It should be a list of floats of length $L - 1$.
Examples:
The following example considers the $5$-level scalar quantizer whose characteristic (input × output) curve is depicted in the figure below.
The levels are $$ v_0 = -2, ~ v_1 = -1, ~ v_2 = 0, ~ v_3 = 1, ~ v_4 = 2, $$ and the thresholds are $$ t_0 = -\infty, ~ t_1 = -1.5, ~ t_2 = -0.3, ~ t_3 = 0.8, ~ t_4 = 1.4, ~ t_5 = \infty. $$
>>> quantizer = komm.ScalarQuantizer(levels=[-2.0, -1.0, 0.0, 1.0, 2.0], thresholds=[-1.5, -0.3, 0.8, 1.4])
>>> x = np.linspace(-2.5, 2.5, num=11)
>>> y = quantizer(x)
>>> np.vstack([x, y])
array([[-2.5, -2. , -1.5, -1. , -0.5, 0. , 0.5, 1. , 1.5, 2. , 2.5],
[-2. , -2. , -1. , -1. , -1. , 0. , 0. , 1. , 2. , 2. , 2. ]])
num_levels: int
property
The number of quantization levels $L$.