Современные цифровые источники сигнала не поддерживают разрядность менее 16 бит, поэтому для формирования PCM-видеосигнала с 14-битными семплами данных необходимо понизить разрядность – провести повторное квантование. Простейший способ выполнения этой операции – это отбросить два младших бита. Разница между исходным и квантованным сигналом называется ошибкой квантования или шумом квантования. Для сигналов малой амплитуды ошибка квантования сильно коррелирует с сигналом, что приводит к нелинейным искажениям. Дизеринг заключается в подмешивании к сигналу x(t) шума d(t) перед выполнением операции квантования и позволяет сделать ошибку практически независимой от исходного сигнала (рис. 1).

Рис. 1. Схема дизеринга

Наиболее распространенным типом дизеринга является стандартный TPDF-дизеринг, когда к сигналу подмешивается шум с треугольным распределением и пиковой амплитудой ±1 LSB (шаг квантования). Данную операцию было решено реализовать на ПЛИС, т.к. они вполне позволяют получить как псевдослучайную шумовую последовательность бит на основе регистра сдвига с линейной обратной связью (РСЛОС, LFSR), так и истинно случайную последовательность при использовании генератора Галуа (GARO). Мы выбрали последний вариант.

При реализации PCM Format C в 14-битном режиме разрядность понижается на 2 бита и поэтому, чтобы затронуть младший бит, шум потребуется 3-битный. Шум с треугольным распределением можно получить сложив шум от двух источников с равномерным распределением. Прибавляя единицу к результату, мы получим шум, изменяющийся в нужном нам диапазоне от -3 до +3:

noise = n1 + n2 + 1;

где n1 и n2 – двухбитные сигналы шума с равномерным распределением.

Алгоритм дизеринга заключается в том, что очередной 16-разрядный семпл данных data суммируется с ошибкой предыдущего округления dither_err и шумом noise, учитывая возможные переполнения. Отбрасывая от получившейся суммы два младших бита, получаем результирующий 14-разрядный семпл out. Отброшенные биты – это ошибка округления.

dither = data + dither_err + noise
out = dither_L[15:2]
dither_err = dither[1:0]

Данный алгоритм по своей сути является нойз-шейпингом 1-го порядка.

Результаты проверки в программе RightMark Audio Analyzer представлены на графиках ниже (Рис. 2-4). Здесь показаны спектры тестовых сигналов – исходный 16-битный сигнал, 14-битный сигнал с усечением 2 младших битов без дизеринга, 14-битный сигнал с дизерингом Adobe Audition с 2 видами шума и 14 битный сигнал с реализованным в кодере дизерингом.

Noise level

Рис. 2. Уровень шума

Рис. 3. Динамический диапазон

Рис. 4. Коэффициент нелинейных искажений

Численные результаты проверки в программе RightMark Audio Analyzer:

Test 16 bit
Source file
14 bit
No dither
14 bit
Audition Triangular
14 bit
Audition Gaussian
14 bit
Coder Triangular
Noise level, dB (A) -97.8 -89.4 -82.7 -84.4 -84.7
Dynamic range, dB (A) 97.8 89.1 83.5 84.3 84.8
THD, % 0.00033 0.00169 0.00171 0.00155 0.00158
IMD + Noise, % 0.00354 0.00854 0.018 0.017 0.016

Ниже показаны примеры кадров с выключенным и включенным дизерингом.

Рис. 5. Кадр цифровой тишины без дизеринга (слева) и с дизерингом (справа)

Рис. 6. Кадр с сигналом меандра без дизеринга (слева) и с дизерингом (справа)