# Documentation

### This is machine translation

Translated by
Mouseover text to see original. Click the button below to return to the English verison of the page.

# Scalar Quantizer Encoder

Encode each input value by associating it with index value of quantization region

## Library

Quantizers

`dspquant2`

## Description

The Scalar Quantizer Encoder block maps each input value to a quantization region by comparing the input value to the quantizer boundary points defined in the Boundary points parameter. The block outputs the zero-based index of the associated region.

You can select how you want to enter the Boundary points using the Source of quantizer parameters. When you select `Specify via dialog`, type the boundary points into the block parameters dialog box. When you select `Input port`, port B appears on the block. The block uses the input to port B as the Boundary points parameter.

Use the Boundary points parameter to specify the boundary points for your quantizer. These values are used to break up the set of input numbers into regions. Each region is specified by an index number.

Let `N` be the number of quantization regions. When the codebook is defined as `[c1 c2 c3 ... cN]`, and the Boundary points parameter is defined as `[p0 p1 p2 p3 ... pN]`, then ```p0<c1<p1<c2 ... p(N-1)<cN<pN``` for a regular quantizer. When your quantizer is bounded, from the Partitioning list, select `Bounded`. You need to specify N+1 boundary points, or `[p0 p1 p2 p3 ... pN]`. When your quantizer is unbounded, from the Partitioning list, select `Unbounded`. You need to specify N-1 boundary points, or`[p1 p2 p3 ... p(N-1)]`; the block sets `p0` equal to -`inf` and `pN` equal to `inf`.

The block uses the Partitioning parameter to interpret the boundary points you enter. For instance, to create a bounded quantizer, from the Partitioning list, select `Bounded` and enter the following boundary points:

```[0 0.5 3.7 5.8 6.0 11] ```

The block assigns any input values between 0 and 0.5 to index 0, input values between 0.5 and 3.7 to index 1, and so on. The block assigns any values that are less than 0 to index 0, the lowest index value. The block assigns any values that are greater than 11 to index 4, the highest index value.

To create an unbounded quantizer, from the Partitioning list, select `Unbounded` and enter the following boundary points:

```[0 0.5 3.7 5.8 6.0 11] ```

The block assigns any input values between 0 and 0.5 to index 1, input values between 0.5 and 3.7 to index 2, and so on. The block assigns any input values less than 0 to index 0 and any values greater than 11 to index 6.

The Searching method parameter determines how the appropriate quantizer index is found. When you select `Linear`, the Scalar Quantizer Encoder block compares the input value to the first region defined by the first two boundary points. When the input value does not fall within this region, the block then compares the input value to the next region. This process continues until the input value is determined to be within a region and is associated with the appropriate index value. The computational cost of this process is of the order P, where P is the number of boundary points.

When you select `Binary` for the Searching method, the block compares the input value to the middle value of the boundary points vector. When the input value is larger than this boundary point, the block discards the boundary points that are lower than this middle value. The block then compares the input value to the middle boundary point of the new range, defined by the remaining boundary points. This process continues until the input value is associated with the appropriate index value. The computational cost of this process is of the order log2P, where P is the number of boundary points. In most cases, the `Binary` option is faster than the `Linear` option.

When an input value is the same as a boundary point, the Tie-breaking rule parameter determines the region to which the value is assigned. When you want the input value to be assigned to the lower indexed region, select `Choose the lower index`. To assign the input value with the higher indexed region, select ```Choose the higher index```.

Select the Output codeword check box to output the codeword values that correspond to each index value at port Q(U).

Select the Output the quantization error check box to output the quantization error for each input value from the Err port on this block. The quantization error is the difference between the input value and the quantized output value.

When you select either the Output codeword check box or the Output quantization error check box, you must also enter your codebook values. If, from the Source of quantizer parameters list, you choose ```Specify via dialog```, use the Codebook parameter to enter a vector of quantized output values that correspond to each region. If, from the Source of quantizer parameters list, you choose `Input port`, use input port C to specify your codebook values.

If, for the Partitioning parameter, you select `Bounded`, the Output clipping status check box and the Action for out of range input parameter appear. When you select the Output clipping status check box, port S appears on the block. Any time an input value is outside the range defined by the Boundary points parameter, the block outputs a 1 at the S port. When the value is inside the range, the blocks outputs a 0.

You can use the Action for out of range input parameter to determine the block's behavior when an input value is outside the range defined by the Boundary points parameter. Suppose the boundary points for a bounded quantizer are defined as ```[p0 p1 p2 p3 ... pN] ```and the possible index values are defined as `[i0 i1 i2 ... i(N-1)]`, where `i0=0` and `i0<i1<i2<...<i(N-1)`. When you want any input value less than `p0` to be assigned to index value `i0` and any input values greater than `pN` to be assigned to index value `i(N-1)`, select `Clip`. When you want to be warned when clipping occurs, select `Clip and warn`. When you want the simulation to stop and the block to display an error when the index values are out of range, select `Error`.

The Scalar Quantizer Encoder block accepts real floating-point and fixed-point inputs. For more information on the data types accepted by each port, see Data Type Support or Supported Data Types.

### Data Type Support

The input data values, boundary points, and codebook values can be input to the block at ports U, B, and C, respectively. The data type of the inputs can be `double`, `single`, or Fixed-point.

The outputs of the block can be the index values, the quantized output values, the quantization error, and the clipping status. Use the Index output data type parameter to specify the data type of the index output from the block at port I. You can choose `int8`, `uint8`, `int16`, `uint16`, `int32`, or `uint32`. The data type of the quantized output and the quantization error can be `double`, `single`, or Fixed-point. The clipping status values output at port S are Boolean values.

### Note

The input data, boundary points, codebook values, quantized output values, and the quantization error must have the same data type whenever they are present.

## Dialog Box

The Main pane of the Scalar Quantizer Encoder block dialog appears as follows.

Source of quantizer parameters

Choose `Specify via dialog` to enter the boundary points and codebook values using the block parameters dialog box. Select `Input port` to specify the parameters using the block's input ports. Input the boundary points and codebook values using ports B and C, respectively.

Partitioning

When your quantizer is bounded, select `Bounded`. When your quantizer is unbounded, select `Unbounded`.

Boundary points

Enter a vector of values that represent the boundary points of the quantizer regions. This parameter is visible when you select ```Specify via dialog``` from the Source of quantizer parameters list. Tunable (Simulink).

Searching method

When you select `Linear`, the block finds the region in which the input value is located using a linear search. When you select `Binary`, the block finds the region in which the input value is located using a binary search.

Tie-breaking rule

Set this parameter to determine the behavior of the block when the input value is the same as the boundary point. When you select ```Choose the lower index```, the input value is assigned to lower indexed region. When you select `Choose the higher index`, the value is assigned to the higher indexed region.

Output codeword

Select this check box to output the codeword values that correspond to each index value at port Q(U).

Output quantization error

Select this check box to output the quantization error for each input value at port Err.

Codebook

Enter a vector of quantized output values that correspond to each index value. If, for the Partitioning parameter, you select `Bounded` and your boundary points vector has length N, then you must specify a codebook of length N-1. If, for the Partitioning parameter, you select `Unbounded` and your boundary points vector has length N, then you must specify a codebook of length N+1.

This parameter is visible when you select ```Specify via dialog``` from the Source of quantizer parameters list and you select either the Output codeword or Output quantization error check box. Tunable (Simulink).

Output clipping status

When you select this check box, port S appears on the block. Any time an input value is outside the range defined by the Boundary points parameter, the block outputs a 1 at this port. When the value is inside the range, the block outputs a 0. This parameter is visible when you select `Bounded` from the Partitioning list.

Action for out of range input

Use this parameter to determine the behavior of the block when an input value is outside the range defined by the Boundary points parameter. Suppose the boundary points are defined as `[p0 p1 p2 p3 ... pN] `and the index values are defined as `[i0 i1 i2 ... i(N-1)]`. When you want any input value less than `p0` to be assigned to index value `i0` and any input values greater than `pN` to be assigned to index value `i(N-1)`, select `Clip`. When you want to be warned when clipping occurs, select ```Clip and warn```. When you want the simulation to stop and the block to display an error when the index values are out of range, select `Error`. This parameter is visible when you select `Bounded` from the Partitioning list.

Index output data type

Specify the data type of the index output from the block at port I. You can choose `int8`, `uint8`, `int16`, `uint16`, `int32`, or `uint32`.

The Data Types pane of the Scalar Quantizer Encoder block dialog appears as follows.

Rounding mode

Select the rounding mode for fixed-point operations.

Overflow mode

Select the overflow mode to be used when block inputs are fixed point.

## References

Gersho, A. and R. Gray. Vector Quantization and Signal Compression. Boston: Kluwer Academic Publishers, 1992.

## Supported Data Types

PortSupported Data Types

U

• Double-precision floating point

• Single-precision floating point

• Fixed point (signed only)

• 8-, 16-, and 32-bit signed integers

B

• Double-precision floating point

• Single-precision floating point

• Fixed point (signed only)

• 8-, 16-, and 32-bit signed integers

C

• Double-precision floating point

• Single-precision floating point

• Fixed point (signed only)

• 8-, 16-, and 32-bit signed integers

I

• 8-, 16-, and 32-bit signed integers

• 8-, 16-, and 32-bit unsigned integers

Q(U)

• Double-precision floating point

• Single-precision floating point

• Fixed point (signed only)

• 8-, 16-, and 32-bit signed integers

Err

• Double-precision floating point

• Single-precision floating point

• Fixed point (signed only)

• 8-, 16-, and 32-bit signed integers

S

• Boolean

For more information on what data types are supported for each quantizer mode, see Data Type Support.