Оптимизируйте параметры квантования с помощью алгоритма Ллойда
[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.