Оптимизация параметров квантования с использованием алгоритма Ллойда
[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] Ллойд, С.П., «Квантование методом наименьших квадратов в ИКМ», IEEE Transactions on Information Theory, том IT-28, март 1982, стр. 129-137.
[2] Макс, Дж., «Квантование для минимального искажения», IRE Транзакции по теории информации, том IT-6, март, 1960, стр. 7-12.