Оптимизируйте параметры квантования с помощью алгоритма Ллойда
[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] Ллойд, S.P., “Квантование наименьших квадратов в PCM”, Транзакции IEEE на Теории информации, издании IT-28, март 1982, стр 129–137.
[2] Max, J., “Квантуя для Минимального Искажения”, Транзакции IRE на Теории информации, издании IT-6, март 1960, стр 7–12.