lloyds

Оптимизируйте параметры квантования с помощью алгоритма Ллойда

Синтаксис

[partition,codebook] = lloyds(training_set,initcodebook)
[partition,codebook] = lloyds(training_set,len)
[partition,codebook] = lloyds(training_set,...,tol)
[partition,codebook,distor] = lloyds(...)
[partition,codebook,distor,reldistor] = lloyds(...)

Описание

[partition,codebook] = lloyds(training_set,initcodebook) оптимизирует скалярные параметры квантования partition и codebook для обучающих данных в векторе training_set. initcodebookвектор длины, по меньшей мере, 2, является исходным предположением значений кодовой книги. Область выхода codebook - вектор той же длины, что и initcodebook. Область выхода partition - вектор, длина которого на один меньше длины codebook.

См. «Представление разделов», «Представление кодовых книг» или страницу с описанием для quantiz в этой главе для описания форматов partition и codebook.

Примечание

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

[partition,codebook] = lloyds(training_set,len) совпадает с первым синтаксисом, за исключением того, что скалярный аргумент len указывает размер вектора codebook. Этот синтаксис не включает в себя начальное предположение о кодовой книге.

[partition,codebook] = lloyds(training_set,...,tol) является таким же, как и два синтаксиса выше, за исключением того, что tol заменяет 10-7 в условии 1 описания алгоритма ниже.

[partition,codebook,distor] = lloyds(...) возвращает окончательное среднее квадратное искажение переменной distor.

[partition,codebook,distor,reldistor] = lloyds(...) возвращает значение reldistor это связано с прекращением работы алгоритма. В условии 1 алгоритма ниже, reldistor - относительное изменение искажения между двумя последними итерациями. В состоянии 2, reldistor то же, что и distor.

Примеры

Приведенный ниже код оптимизирует параметры квантования для синусоидальной передачи через трехбитовый канал. Поскольку типичные данные синусоидальны, training_set - дискретизированная синусоида. Поскольку канал может передавать три бита за раз, lloyds подготавливает кодовую книгу длиной 23.

% Generate a complete period of a sinusoidal signal.
x = sin([0:1000]*pi/500);
[partition,codebook] = lloyds(x,2^3)

Ниже приведен выход.

partition =

  Columns 1 through 6 

   -0.8540   -0.5973   -0.3017    0.0031    0.3077    0.6023

  Column 7 

    0.8572


codebook =

  Columns 1 through 6 

   -0.9504   -0.7330   -0.4519   -0.1481    0.1558    0.4575

  Columns 7 through 8 

    0.7372    0.9515

Алгоритмы

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

  • Относительное изменение искажений между итерациями меньше 10-7.

  • Искажение меньше eps*max(training_set), где eps - относительная точность MATLAB с плавающей точкой.

Ссылки

[1] Lloyd, S.P., «Least Squares Quantization in PCM», IEEE Transactions on Information Theory, Vol. IT-28, March, 1982, pp. 129-137.

[2] Max, J., «Quantizing for Minimum Distortion», IRE Transactions on Information Theory, Vol. IT-6, March, 1960, pp. 7-12.

Представлено до R2006a