Jump to content

Пирамидальное векторное квантование

Пирамидально-векторное квантование ( PVQ ) — это метод, используемый в аудио- и видеокодеках для квантования и передачи единичных векторов , то есть векторов, величины которых известны декодеру, но направления которых неизвестны. PVQ также может использоваться как часть схемы квантования усиления/формы , при которой величина и направление вектора квантоваются отдельно друг от друга. Первоначально PVQ был описан в 1986 году в статье Томаса Р. Фишера «Пирамидальный векторный квантователь». [1]

Улучшение равномерности распределения точек PVQ за счет или координатная мощность вектора перед проекцией. [2] На диаграмме представлены созвездия для размеры и написанное Л1-норма .

Единственное предостережение PVQ заключается в том, что он работает на расстоянии, соответствующем такси (норма L1). Преобразование в/из более знакомого евклидова расстояния (L2-норма) возможно посредством векторной проекции , хотя это приводит к менее равномерному распределению точек квантования (полюса евклидовой n -сферы становятся более плотными, чем неполюсы). [3] эффективный алгоритм идеального (то есть равномерного) векторного квантования евклидовой n -сферы неизвестен. По состоянию на 2010 год [4] Эту неравномерность можно уменьшить, применяя перед проецированием деформацию, такую ​​​​как мощность по координатам, что снижает среднеквадратическую ошибку квантования на ~ 10%. [2]

PVQ используется в аудиокодеке CELT (унаследованном от Opus ) и Daala видеокодеке .

В качестве формы векторного квантования PVQ определяет кодовую книгу из M точек квантования, каждой из которых присваивается целочисленное кодовое слово от 0 до M -1. Цель кодера — найти кодовое слово ближайшего вектора, которое декодер должен декодировать обратно в вектор.

Кодовая книга PVQ состоит из всех N -мерных точек. с целочисленными координатами, сумма абсолютных значений которых равна константе K (т. е. чья L1-норма равна K ). В обозначениях построителя множеств :

где обозначает L1-норму .

В нынешнем виде множество S замощает поверхность N -мерной пирамиды. При желании мы можем преобразовать его в сферу, «проецируя» точки на сферу, то есть нормализовав их :

где обозначает L2- норму .

Увеличение параметра K приводит к увеличению количества точек квантования и, следовательно, обычно дает более «точное» приближение исходного единичного вектора. за счет более крупных целочисленных кодовых слов, для передачи которых требуется больше битов.

Предположим, мы хотим квантовать трехмерные единичные векторы, используя параметр K =2. Наша кодовая книга становится:

Кодовое слово Точка Нормализованная точка
0 <−2, 0, 0> <−1,000, 0,000, 0,000>
1 <−1, −1, 0> <−0,707, −0,707, 0,000>
2 <−1, 0, −1> <−0,707, 0,000, −0,707>
3 <−1, 0, 1> <−0,707, 0,000, 0,707>
4 <−1, 1, 0> <−0,707, 0,707, 0,000>
5 <0, −2, 0> <0,000, −1,000, 0,000>
6 <0, −1, −1> <0,000, -0,707, -0,707>
7 <0, −1, 1> <0,000, -0,707, 0,707>
8 <0, 0, −2> <0,000, 0,000, −1,000>
Кодовое слово Точка Нормализованная точка
9 <0, 0, 2> <0,000, 0,000, 1,000>
10 <0, 1, −1> <0,000, 0,707, -0,707>
11 <0, 1, 1> <0,000, 0,707, 0,707>
12 <0, 2, 0> <0,000, 1,000, 0,000>
13 <1, −1, 0> <0,707, -0,707, 0,000>
14 <1, 0, −1> <0,707, 0,000, -0,707>
15 <1, 0, 1> <0,707, 0,000, 0,707>
16 <1, 1, 0> <0,707, 0,707, 0,000>
17 <2, 0, 0> <1.000, 0.000, 0.000>

(0.707 = округляется до трех десятичных знаков.)

Теперь предположим, что мы хотим передать единичный вектор <0,592, -0,720, 0,362> (округленный здесь до 3 десятичных знаков, для ясности). Согласно нашей кодовой книге, ближайшей точкой, которую мы можем выбрать, является кодовое слово 13 (<0,707, -0,707, 0,000>), расположенное примерно на 0,381 единицы дальше от нашей исходной точки.

Увеличение параметра K приводит к увеличению кодовой книги, что обычно увеличивает точность реконструкции. Например, на основе приведенного ниже кода Python K =5 (размер кодовой книги: 102) дает ошибку всего 0,097 единиц, а K =20 (размер кодовой книги: 1602) дает ошибку всего 0,042 единицы.

import itertools
import math
from typing import List, NamedTuple, Tuple


class PVQEntry(NamedTuple):
    codeword: int
    point: Tuple[int, ...]
    normalizedPoint: Tuple[float, ...]


def create_pvq_codebook(n: int, k: int) -> List[PVQEntry]:
    """
    Naive algorithm to generate an n-dimensional PVQ codebook
    with k pulses.
    Runtime complexity: O(k**n)
    """
    ret = []
    for p in itertools.product(range(-k, k + 1), repeat=n):
        if sum(abs(x) for x in p) == k:
            norm = math.sqrt(sum(x ** 2 for x in p))
            q = tuple(x / norm for x in p)
            ret.append(PVQEntry(len(ret), p, q))

    return ret


def search_pvq_codebook(
    codebook: List[PVQEntry], p: Tuple[float, ...]
) -> Tuple[PVQEntry, float]:
    """
    Naive algorithm to search the PVQ codebook. Returns the point in the
    codebook that's "closest" to p, according to the Euclidean distance.)
    """
    ret = None
    min_dist = None
    for entry in codebook:
        q = entry.normalizedPoint
        dist = math.sqrt(sum((q[j] - p[j]) ** 2 for j in range(len(p))))
        if min_dist is None or dist < min_dist:
            ret = entry
            min_dist = dist

    return ret, min_dist


def example(p: Tuple[float, ...], k: int) -> None:
    n = len(p)
    codebook = create_pvq_codebook(n, k)
    print("Number of codebook entries: " + str(len(codebook)))
    entry, dist = search_pvq_codebook(codebook, p)
    print("Best entry: " + str(entry))
    print("Distance: " + str(dist))


phi = 1.2
theta = 5.4
x = math.sin(phi) * math.cos(theta)
y = math.sin(phi) * math.sin(theta)
z = math.cos(phi)
p = (x, y, z)
example(p, 2)
example(p, 5)
example(p, 20)

Сложность

[ редактировать ]

Кодовую книгу PVQ можно найти в . [4] Кодирование и декодирование также могут выполняться в с использованием память. [5]

Размер кодовой книги подчиняется повторяемости [4]

с для всех и для всех .

Решение в замкнутой форме имеет вид [6]

где гипергеометрическая функция .

См. также

[ редактировать ]
  1. ^ Фишер, Томас Р. (июль 1986 г.). «Пирамидальный векторный квантователь». Транзакции IEEE по теории информации . 32 (4): 568–583. дои : 10.1109/TIT.1986.1057198 .
  2. ^ Перейти обратно: а б Дуда, Ярек (2017). «Улучшение пирамидального векторного квантователя с помощью проекции мощности». arXiv : 1705.05285 [ math.OC ].
  3. ^ Вален, Жан-Марк (сентябрь 2013 г.). «Пирамидное векторное квантование для кодирования видео» (PDF) . Фонд Xiph.Org . Проверено 4 апреля 2021 г.
  4. ^ Перейти обратно: а б с Вален, Жан-Марк; Терриберри, Тимоти Б.; Монтгомери, Кристофер; Максвелл, Грегори (январь 2010 г.). «Высококачественный речевой и аудиокодек с задержкой менее 10 мс». Транзакции IEEE по обработке звука, речи и языка . 18 (1): 58–67. arXiv : 1602.05526 . дои : 10.1109/TASL.2009.2023186 . S2CID   11516136 .
  5. ^ Терриберри, Тимоти Б. (2009). "cwrs.c" . Опус . Фонд Xiph.Org . Проверено 6 апреля 2021 г.
  6. ^ Терриберри, Тимоти Б. (декабрь 2007 г.). «Импульсно-векторное кодирование» . Фонд Xiph.Org . Архивировано из оригинала 30 сентября 2019 года . Проверено 4 апреля 2021 г.
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 49e43551dec4f30f07debbb3807a394c__1692063360
URL1:https://arc.ask3.ru/arc/aa/49/4c/49e43551dec4f30f07debbb3807a394c.html
Заголовок, (Title) документа по адресу, URL1:
Pyramid vector quantization - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)