Квантование в разделе Quantizing a Signal не требует никакого априорного знания о переданном сигнале. На практике можно часто высказывать образованные предположения о существующем сигнале на основе прошлых передач сигнала. Используя такие образованные предположения, чтобы помочь квантовать сигнал известен как прогнозирующее квантование. Наиболее распространенный прогнозирующий метод квантования является дифференциальной импульсной модуляцией кода (DPCM).
Функции dpcmenco
, dpcmdeco
, и dpcmopt
может помочь вам реализовать прогнозирующий квантизатор 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 квантует различие между текущим значением сигнала и его значением на предыдущем шаге. Таким образом предиктором является только 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
Раздел Optimize Quantization Parameters описывает, как использовать обучающие данные с lloyds
функционируйте, чтобы помочь найти параметры квантования, которые минимизируют искажение сигнала.
В этом разделе описываются подобные процедуры для использования dpcmopt
функция в сочетании с двумя функциями dpcmenco
и dpcmdeco
, которые сначала появляются в предыдущем разделе.
Примечание
Обучающие данные вы используете с dpcmopt
должно быть типично для видов сигналов, с которыми вы будете на самом деле квантовать dpcmenco
.
Этот пример похож на тот в последнем разделе. Однако, где последний пример создал predictor
раздел
, и 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