exponenta event banner

Квантование

Представление разделов

Скалярное квантование - это процесс, который отображает все входы в заданном диапазоне на общее значение. Этот процесс сопоставляет входы в другом диапазоне значений с другим общим значением. В действительности скалярное квантование оцифровывает аналоговый сигнал. Квантование определяют два параметра: разбиение и кодовая книга.

Раздел квантования определяет несколько смежных неперекрывающихся диапазонов значений в наборе вещественных чисел. Чтобы указать раздел в среде MATLAB ®, перечислите отдельные конечные точки различных диапазонов в векторе.

Например, если раздел разделяет действительную числовую строку на четыре набора

  • {x: x ≤ 0}

  • {x: 0 < x ≤ 1}

  • {x: 1 < x ≤ 3}

  • {x: 3 < x}

затем можно представить раздел в виде трехэлементного вектора

partition = [0,1,3];

Длина вектора секционирования на единицу меньше числа интервалов секционирования.

Представлять кодовые книги

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

codebook = [-1, 0.5, 2, 3];

является одной возможной кодовой книгой для раздела [0,1,3].

Определение интервала, в котором находится каждый вход

quantiz функция также возвращает вектор, который сообщает, в каком интервале находится каждый вход. Например, вывод ниже говорит, что входные записи находятся в пределах интервалов, обозначенных 0, 6 и 5 соответственно. Здесь 0-й интервал состоит из вещественных чисел, меньших или равных 3; 6-й интервал состоит из действительных чисел больше 8, но меньше или равен 9; 5-й интервал состоит из действительных чисел больше 7, но меньше или равен 8.

partition = [3,4,5,6,7,8,9];
index = quantiz([2 9 8],partition)

Выходные данные:

index =

     0
     6
     5

Если продолжить этот пример путем определения вектора кодовой книги, например,

codebook = [3,3,4,5,6,7,8,9];

затем уравнение ниже соотносит вектор index к квантованному сигналу quants.

quants = codebook(index+1);

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

partition = [3,4,5,6,7,8,9];
codebook = [3,3,4,5,6,7,8,9];
[index,quants] = quantiz([2 9 8],partition,codebook);

Оптимизация параметров квантования

Обзор раздела

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

Примечание

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

Пример: Оптимизация параметров квантования

lloyds функция оптимизирует разбиение и кодовую книгу в соответствии с алгоритмом Ллойда. Код ниже оптимизирует разбиение и кодовую книгу для одного периода синусоидального сигнала, начиная с грубого начального предположения. Затем он использует эти параметры для квантования исходного сигнала, используя параметры начального приближения, а также оптимизированные параметры. Выходные данные показывают, что среднеквадратичное искажение после квантования значительно меньше для оптимизированных параметров. quantiz функция автоматически вычисляет среднеквадратичное искажение и возвращает его в качестве третьего выходного параметра.

% Start with the setup from 2nd example in "Quantizing a Signal."
t = [0:.1:2*pi];
sig = sin(t);
partition = [-1:.2:1];
codebook = [-1.2:.2:1];
% Now optimize, using codebook as an initial guess.
[partition2,codebook2] = lloyds(sig,codebook);
[index,quants,distor] = quantiz(sig,partition,codebook);
[index2,quant2,distor2] = quantiz(sig,partition2,codebook2);
% Compare mean square distortions from initial and optimized
[distor, distor2] % parameters.

Выходные данные:

ans =

    0.0148    0.0024

Квантование сигнала

Пример 1 скалярного квантования

Код ниже показывает, как quantiz функции использует partition и codebook для отображения реального вектора, samp, к новому вектору, quantized, записи которых имеют значения -1, 0,5, 2 или 3.

partition = [0,1,3];
codebook = [-1, 0.5, 2, 3];
samp = [-2.4, -1, -.2, 0, .2, 1, 1.2, 1.9, 2, 2.9, 3, 3.5, 5];
[index,quantized] = quantiz(samp,partition,codebook);
quantized

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

quantized =

  Columns 1 through 6

   -1.0000   -1.0000   -1.0000   -1.0000    0.5000    0.5000

  Columns 7 through 12

    2.0000    2.0000    2.0000    2.0000    2.0000    3.0000

  Column 13

    3.0000

Пример 2 скалярного квантования

Этот пример иллюстрирует характер скалярного квантования более ясно. После квантования дискретизированного синусоидального сигнала он строит график исходного и квантованного сигналов. Сюжет контрастирует xОни составляют синусоидальную кривую с точками, составляющими квантованный сигнал. Вертикальная координата каждой точки - это значение вектора codebook.

t = [0:.1:2*pi]; % Times at which to sample the sine function
sig = sin(t); % Original signal, a sine wave
partition = [-1:.2:1]; % Length 11, to represent 12 intervals
codebook = [-1.2:.2:1]; % Length 12, one entry for each interval
[index,quants] = quantiz(sig,partition,codebook); % Quantize.
plot(t,sig,'x',t,quants,'.')
legend('Original signal','Quantized signal');
axis([-.2 7 -1.2 1.2])

См. также

Функции