huffmandict

Сгенерируйте словарь Кода Хаффмана для источника с известной вероятностной моделью

Синтаксис

[dict,avglen] = huffmandict(symbols,p)
[dict,avglen] = huffmandict(symbols,p,N)
[dict,avglen] = huffmandict(symbols,p,N,variance)

Описание

Для всех синтаксисов

huffmandict функция генерирует словарь Кода Хаффмана, соответствующий источнику с известной вероятностной моделью. Необходимые входные параметры

  • symbols, который перечисляет отличные значения сигналов, которые производит источник. Это может иметь форму числового вектора, числового массива ячеек или алфавитно-цифрового массива ячеек. Если это - массив ячеек, это должна быть или строка или столбец.

  • p, вектор вероятности, k-й элемент которого является вероятностью, с которой источник производит k-й элемент symbols. Длина p должен равняться длине symbols.

Выходные параметры huffmandict

  • dict, массив 2D ячейки столбца, в который первые списки столбцов отличные значения сигналов от symbols и вторые списки столбцов соответствующие кодовые комбинации Хафмана. Во втором столбце каждая кодовая комбинация Хафмана представлена как числовой вектор-строка.

  • avglen, средняя длина среди всех кодовых комбинаций в словаре, взвешенном согласно вероятностям в векторном p.

Для определенных синтаксисов

[dict,avglen] = huffmandict(symbols,p) генерирует бинарный словарь Кода Хаффмана с помощью максимального алгоритма отклонения.

[dict,avglen] = huffmandict(symbols,p,N) генерирует N- словарь Кода Хаффмана ary с помощью максимального алгоритма отклонения. N целое число между 2 и 10, который не должен превышать количество исходных символов, вероятности которых появляются в векторном p.

[dict,avglen] = huffmandict(symbols,p,N,variance) генерирует словарь Кода Хаффмана Не с минимальным отклонением если variance 'min' и максимальное отклонение, если variance 'max'N целое число между 2 и 10, который не должен превышать длину векторного p.

Примеры

свернуть все

Сгенерируйте бинарный словарь Кода Хаффмана. Присвойте второй выход, чтобы возвратить среднюю разрядность кода.

Задайте алфавит символа и векторы вероятности.

symbols = (1:5); % Alphabet vector
prob = [.3 .3 .2 .1 .1]; % Symbol probability vector

Сгенерируйте бинарный Код Хаффмана. Просмотрите среднюю разрядность кода и массив ячеек, содержащий словарь кодовой комбинации.

[dict, avglen] = huffmandict(symbols,prob);
avglen
avglen = 2.2000
dict
dict=5×2 cell
    {[1]}    {1x2 double}
    {[2]}    {1x2 double}
    {[3]}    {1x2 double}
    {[4]}    {1x3 double}
    {[5]}    {1x3 double}

Просмотрите пятую кодовую комбинацию из словаря.

samplecode = dict{5,2} % Codeword for fifth signal value
samplecode = 1×3

     1     1     0

Используйте генератор словаря кода в функции кодера Хафмана, чтобы сгенерировать бинарные и троичные Коды Хаффмана.

Задайте алфавит символа и векторы вероятности

symbols = (1:5); % Alphabet vector
prob = [.3 .3 .2 .1 .1]; % Symbol probability vector

Сгенерируйте бинарный Код Хаффмана.

[dict, avglen] = huffmandict(symbols, prob);
dict(:, 2) = cellfun(@num2str, dict(:, 2), 'UniformOutput', false)
dict=5×2 cell
    {[1]}    {'0  1'   }
    {[2]}    {'0  0'   }
    {[3]}    {'1  0'   }
    {[4]}    {'1  1  1'}
    {[5]}    {'1  1  0'}

Сгенерируйте троичный Код Хаффмана

[dict,avglen] = huffmandict(symbols,prob, 3);
dict(:, 2) = cellfun(@num2str, dict(:, 2), 'UniformOutput', false)
dict=5×2 cell
    {[1]}    {'2'   }
    {[2]}    {'1'   }
    {[3]}    {'0  0'}
    {[4]}    {'0  2'}
    {[5]}    {'0  1'}

Ссылки

[1] Sayood, Халид, введение в сжатие данных, Сан-Франциско, Моргана Кофманна, 2000.

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