Дифференциальная импульсная модуляция кода

Разделите обзор

Квантование в разделе Quantizing a Signal не требует никакого априорного знания о переданном сигнале. На практике можно часто высказывать образованные предположения о существующем сигнале на основе прошлых передач сигнала. Используя такие образованные предположения, чтобы помочь квантовать сигнал известен как прогнозирующее квантование. Наиболее распространенный прогнозирующий метод квантования является дифференциальной импульсной модуляцией кода (DPCM).

Функции dpcmenco, dpcmdeco и dpcmopt могут помочь вам реализовать прогнозирующий квантизатор DPCM с линейным предиктором.

Терминология DPCM

Чтобы определить энкодер для такого квантизатора, необходимо предоставить не, только раздел и книга шифров, как описано в Представляют Разделы и Представляют Книги шифров, но также и предиктор. Предиктор является функцией, что использование энкодера DPCM, чтобы произвести образованное предполагает каждый шаг. Линейный предиктор имеет форму

y(k) = p(1)x(k-1) + p(2)x(k-2) + ... + p(m-1)x(k-m+1) + p(m)x(k-m)

где x является исходным сигналом, y(k) пытается предсказать значение x(k), и p является m - кортеж вещественных чисел. Вместо того, чтобы квантовать сам x, энкодер DPCM квантует прогнозирующую ошибку, x-y. Целочисленный m выше называется прогнозирующим порядком. Особый случай, когда   m = 1 называется модуляцией дельты.

Представляйте предикторы

Если предположение для k th значение x сигнала, на основе более ранних значений x,

y(k) = p(1)x(k-1) + p(2)x(k-2) +...+ p(m-1)x(k-m+1) + p(m)x(k-m)

затем соответствующий вектор предиктора для функций тулбокса

predictor = [0, p(1), p(2), p(3),..., p(m-1), p(m)]

Примечание

Начальный нуль в векторе предиктора целесообразен, если вы просматриваете вектор как полиномиальную передаточную функцию фильтра конечного импульсного ответа (FIR).

Пример: DPCM кодирование и декодирование

Простой особый случай DPCM квантует различие между текущим значением сигнала и его значением на предыдущем шаге. Таким образом предиктором является только      y(k) = x (k - 1). Код ниже реализует эту схему. Это кодирует пилообразное сообщение, декодирует его и строит обоих исходные и декодируемые сигналы. Сплошная линия является исходным сигналом, в то время как пунктирная линия является восстановленными сигналами. Пример также вычисляет среднеквадратичную погрешность между исходными и декодируемыми сигналами.

predictor = [0 1]; % y(k)=x(k-1)
partition = [-1:.1:.9];
codebook = [-1:.1:1];
t = [0:pi/50:2*pi];
x = sawtooth(3*t); % Original signal
% Quantize x using DPCM.
encodedx = dpcmenco(x,codebook,partition,predictor);
% Try to recover x from the modulated signal.
decodedx = dpcmdeco(encodedx,codebook,predictor);
plot(t,x,t,decodedx,'--')
legend('Original signal','Decoded signal','Location','NorthOutside');
distor = sum((x-decodedx).^2)/length(x) % Mean square error

Вывод

distor =

    0.0327

Оптимизируйте параметры DPCM

Разделите обзор

Раздел Optimize Quantization Parameters описывает, как использовать данные тренировки с функцией lloyds, чтобы помочь найти параметры квантования, которые минимизируют искажение сигнала.

В этом разделе описываются подобные процедуры для использования функции dpcmopt в сочетании с двумя функциями dpcmenco и dpcmdeco, которые сначала появляются в предыдущем разделе.

Примечание

Данные тренировки, которые вы используете с dpcmopt, должны быть типичны для видов сигналов, которые вы будете на самом деле квантовать с dpcmenco.

Пример: сравнение оптимизированные и неоптимизированные параметры DPCM

Этот пример подобен тому в последнем разделе. Однако, где последний пример создал predictor, partition и codebook прямым, но случайным способом, этот пример использует ту же книгу шифров (теперь названный initcodebook) как исходное предположение для нового оптимизированного параметра книги шифров. Этот пример также использует прогнозирующий порядок, 1, как желаемый порядок нового оптимизированного предиктора. Функция dpcmopt создает эти оптимизированные параметры, с помощью пилообразного x сигнала в качестве данных тренировки. Пример продолжает квантовать данные тренировки сам; в теории оптимизированные параметры подходят для квантования других данных, которые подобны x. Заметьте, что среднеквадратическое искажение здесь намного меньше, чем искажение в предыдущем примере.

t = [0:pi/50:2*pi];
x = sawtooth(3*t); % Original signal
initcodebook = [-1:.1:1]; % Initial guess at codebook
% Optimize parameters, using initial codebook and order 1.
[predictor,codebook,partition] = dpcmopt(x,1,initcodebook);
% Quantize x using DPCM.
encodedx = dpcmenco(x,codebook,partition,predictor);
% Try to recover x from the modulated signal.
decodedx = dpcmdeco(encodedx,codebook,predictor);
distor = sum((x-decodedx).^2)/length(x) % Mean square error

Вывод

distor =

    0.0063