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

Обзор разделов

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

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

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

Чтобы определить энкодер для такого квантователя, вы должны предоставить не только раздел и кодовую книгу, как описано в Represent Partitions и Represent Codooks, но и предиктор. Предиктор является функцией, которую 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 называется дельта-модуляцией.

Представление предикторов

Если догадка о kth значение сигнала 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)]

Примечание

Начальный нуль в векторе-предикторе имеет смысл, если вы рассматриваете вектор как полиномиальную передаточную функцию фильтра с конечной импульсной характеристикой (КИХ).

Пример: Кодирование и декодирование 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

Обзор разделов

В разделе Оптимизация параметров квантования описывается, как использовать обучающие данные с 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