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

Изобретение относится к векторному квантованию (VQ), выполняемому кодером. Технический результат изобретения заключается в возможности кодера удерживать сложность поиска на разумном уровне, обеспечивая возможность кодеру применять цикл увеличенной точности только, когда это может быть необходимо, посредством анализа того, потребуется ли в наступающем внутреннем цикле внутренний цикл с более высокой точностью, нежели точность, используемая в текущее время. Способ для поиска формы пирамидального векторного квантователя, PVQ, при этом PVQ берет целевой вектор x в качестве ввода и выводит вектор y посредством итеративного добавления единичных импульсов во внутреннем цикле поиска по размерности. Определение текущего вектора y, до входа в следующий внутренний цикл поиска по размерности для добавления единичного импульса, на основе максимальной амплитуды импульса, , необходима ли большая, чем текущая битовая длина слова, чтобы представлять , способом без потерь в наступающем внутреннем цикле по размерности. Переменная относится к накопленной энергии вектора y. 3 н. и 15 з.п. ф-лы, 12 ил., 3 табл.

 

ОБЛАСТЬ ТЕХНИКИ, К КОТОРОЙ ОТНОСИТСЯ ИЗОБРЕТЕНИЕ

Раскрытие данной заявки, в общем, относится к векторному квантованию (VQ), выполняемому кодером.

УРОВЕНЬ ТЕХНИКИ

Является известным, что неограниченное векторное квантование является оптимальным способом квантования для сгруппированных отсчетов, то есть, векторов, некоторой длины. Однако осуществление неограниченного векторного квантования имеет следствием высокие требования с точки зрения сложности и емкости памяти. Желание обеспечить возможность осуществления векторного квантования также в ситуациях с ограничениями на память и сложность поиска, привело к разработке так называемых структурированных векторных квантователей. Разные структуры дают разные компромиссные соотношения с точки зрения сложности поиска и требований к памяти. Один такой способ является так называемым векторным квантованием усиления-формы, где целевой вектор t представляется с использованием вектора формы x и значения усиления G:

(Уравнение 0)

Концепция векторного квантования усиления-формы состоит в том, чтобы квантовать пару {x, G} вместо непосредственного квантования целевого вектора t. Компоненты усиления (G) и формы (x) кодируются с использованием квантователя формы, который настроен для нормализованного ввода формы, и квантователя усиления, который управляет динамикой сигнала. Эта структура усиления-формы часто используется в кодировании аудио, так как разделение на динамику и форму, также упоминаемое как тонкая структура, хорошо соответствует перцепционной слуховой модели. Концепция усиления-формы также может применяться к коэффициентам дискретного косинусного преобразования или другим коэффициентам, используемым в кодировании видео.

Много кодеков речи и аудио, таких как ITU-T G.718 и IETF Opus (RFC 6716), используют VQ усиления-формы на основе структурированного PVQ, чтобы кодировать спектральные коэффициенты целевого сигнала речи/аудио.

Концепция кодирования PVQ была введена Р. Фишером (R. Fischer) во временном промежутке 1983-1986 и с того времени развилась до практического использования с появлением более эффективных цифровых сигнальных процессоров, DSP. Концепция кодирования PVQ включает в себя поиск, определение местоположения и затем кодирование точки на N-мерной гиперпирамиде с целочисленной L1-нормой K единичных импульсов. Так называемая L1-норма является суммой абсолютных значений вектора, то есть, абсолютная сумма вектора PVQ из целых чисел со знаком ограничивается, чтобы быть в точности K, где единичный импульс представляется посредством целочисленного значения, равного "1". Целое число со знаком обеспечивает возможность представления отрицательных целых чисел, по отношению к беззнаковому, которое может представлять только неотрицательные целые числа.

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

Одна проблема с квантованием формы структурированного PVQ состоит в том, чтобы находить наилучший возможный квантованный вектор с использованием разумной величины сложности. Для кодирования речи и аудио более высокой скорости, когда количество разрешенных единичных импульсов K, может становиться очень большим и размерность N также может быть большой, имеются даже более сильные потребности, чтобы иметь эффективный поиск PVQ при поддержании качества, например, с точки зрения отношения сигнала к шуму, SNR, восстановленной речи/аудио.

Дополнительно, использование концепции PVQ не ограничено областью кодирования речи и аудио. В текущее время, так называемый Инженерный совет Интернета, IETF, занимается разработкой видеокодека, где коэффициенты дискретного косинусного преобразования, DCT, кодируются с использованием основанного на PVQ алгоритма. В кодировании видео является даже более важным, чем в кодировании аудио, иметь процедуру эффективного поиска, так как количество коэффициентов может становиться очень большим с большими устройствами отображения.

СУЩНОСТЬ ИЗОБРЕТЕНИЯ

Для структурированного PVQ является желательным обеспечить возможность вычислительно эффективного поиска формы, который все еще обеспечивает высокое отношение сигнала к шуму. Особенно для осуществлений, включающих в себя DSP с фиксированной точностью. Решение, обеспеченное здесь, обеспечивает возможность вычислительно эффективного поиска формы PVQ, посредством обеспечения улучшенного точного поиска PVQ.

Согласно первому аспекту, обеспечивается способ для поиска формы PVQ, подлежащий выполнению посредством кодера. Предполагается, что PVQ включает в себя взятие целевого вектора x в качестве ввода, вывод вектора y посредством итеративного добавления единичных импульсов во внутреннем цикле поиска по размерности. Обеспеченный способ содержит, до входа в следующий внутренний цикл поиска по размерности для добавления единичного импульса: определение, на основе максимальной амплитуды импульса, maxampy, текущего вектора y, того, необходима ли большая, чем текущая битовая длина слова, чтобы представлять, способом без потерь, переменную, enloopy. Переменная enloopy относится к накопленной энергии y, в наступающем внутреннем цикле по размерности.

Согласно второму аспекту, обеспечивается кодер, для поиска формы PVQ. Предполагается, что PVQ включает в себя взятие целевого вектора x в качестве ввода, вывод вектора y посредством итеративного добавления единичных импульсов во внутреннем цикле поиска по размерности. Обеспеченный кодер сконфигурирован с возможностью, до входа в следующий внутренний цикл поиска по размерности для добавления единичного импульса: определять, на основе максимальной амплитуды импульса, maxampy, текущего вектора y, то, необходима ли большая, чем текущая битовая длина слова, чтобы представлять, способом без потерь, переменную, enloopy. Переменная enloopy относится к накопленной энергии y, в наступающем внутреннем цикле по размерности.

Способ может содержать и кодер может быть сконфигурирован с возможностью, до входа в следующий внутренний цикл по размерности для добавления единичного импульса: определение, на основе максимального абсолютного значения, xabsmax, входного вектора, x, возможного сдвига вверх, в битовом слове, накопленного значения корреляции внутри цикла следующего цикла, corrxy, между x и вектором y.

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

Способ может содержать и кодер может быть сконфигурирован с возможностью, когда необходима большая, чем текущая битовая длина слова, чтобы представлять enloopy, выполнять вычисления внутреннего цикла с использованием более длинной битовой длины слова, чтобы представлять возведенное в квадрат накопленное значение корреляции внутри цикла, corrxy2, между x и вектором y, во внутреннем цикле.

Способ может дополнительно содержать и кодер может быть сконфигурирован с возможностью, когда отсутствует необходимость большей, чем текущая битовая длина слова, чтобы представлять enloopy:

- выполнение вычислений внутреннего цикла посредством использования первого цикла добавления единичного импульса с использованием первой битовой длины слова, чтобы представлять enloopy, и:

когда необходима большая, чем текущая битовая длина слова, чтобы представлять enloopy:

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

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

Способ может дополнительно содержать и кодер может быть сконфигурирован с возможностью, во внутреннем цикле поиска по размерности для добавления единичного импульса:

- определение положения, nbest, в y для добавления единичного импульса посредством расчета перекрестного умножения, для каждого положения n в y, корреляции и значения энергии для текущего n; и возведенной в квадрат корреляции, BestCorrSq и значения энергии, bestEn, сохраненных из предыдущих значений n, как:

corrxy2 * bestEn > BestCorrSq * enloopy,

где

, когда corrxy2 * bestEn > BestCorrSq * enloopy

Способ также может содержать и кодер быть сконфигурирован с возможностью отслеживать maxampy, когда окончательное значение K, ассоциированное с целевым вектором x, превосходит пороговое значение. Здесь способ может содержать и кодер может быть сконфигурирован с возможностью вычислять запас по энергии, en_margin, только если текущее значение K превосходит пороговое значение, которое может быть пороговым значением, упомянутым в предшествующем предложении.

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

Согласно четвертому аспекту, обеспечивается компьютерная программа, которая содержит инструкции, которые, когда исполняются на, по меньшей мере, одном процессоре, таком как DSP, предписывают упомянутому, по меньшей мере, одному процессору выполнять способ согласно первому аспекту.

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

Согласно шестому аспекту, и обеспечивается кодер, который сконфигурирован с возможностью для поиска формы PVQ; PVQ берет целевой вектор x в качестве ввода и выводит вектор y посредством итеративного добавления единичных импульсов во внутреннем цикле поиска по размерности. Обеспеченный кодер содержит первый блок определения для, до входа в следующий внутренний цикл поиска по размерности для добавления единичного импульса, определения, на основе максимальной амплитуды импульса, maxampy, текущего вектора y, того, необходима ли большая, чем текущая битовая длина слова, чтобы представлять, способом без потерь, переменную, enloopy, относящуюся к накопленной энергии y, в наступающем внутреннем цикле по размерности.

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

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

Кодер согласно шестому аспекту может содержать блок точного поиска для:

- выполнения вычислений внутреннего цикла посредством использования первого цикла добавления единичного импульса с использованием первой битовой длины слова, когда отсутствует необходимость большей, чем текущая битовая длина слова, чтобы представлять enloopy, и:

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

Кодер согласно шестому аспекту может содержать блок точного поиска для

- выполнения вычислений внутреннего цикла посредством использования первого цикла добавления единичного импульса, имеющего некоторую точность, когда отсутствует необходимость большей, чем текущая битовая длина слова, чтобы представлять enloopy; и

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

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

Кодер согласно шестому аспекту может содержать блок точного поиска для, во внутреннем цикле поиска по размерности для добавления единичного импульса:

- определения положения, nbest, в y для добавления единичного импульса посредством расчета перекрестного умножения, для каждого положения n в y, корреляции и значения энергии для текущего n; и корреляции, BestCorrSq, и значения энергии, bestEn, сохраненных из предыдущих значений n, как:

corrxy2 * bestEn > BestCorrSq * enloopy,

где

, когда corrxy2 * bestEn > BestCorrSq * enloopy

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

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

КРАТКОЕ ОПИСАНИЕ ЧЕРТЕЖЕЙ

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

Фиг. 1-4 иллюстрируют способ для поиска формы PVQ (точного поиска), согласно разным иллюстративным вариантам осуществления.

Фиг. 5 показывает этапы одного варианта осуществления поиска формы PVQ (точного поиска), согласно одному иллюстративному варианту осуществления.

Фиг. 6 показывает этапы поиска формы PVQ (точного поиска) из фиг. 5 более подробно, согласно одному иллюстративному варианту осуществления.

Фиг. 7 иллюстрирует варианты осуществления поиска формы PVQ.

Фиг. 8 показывает один вариант осуществления устройства связи, оснащенного кодером EVS.

Фиг. 9 показывает один вариант осуществления устройства связи, и

Фиг. 10 также показывает один вариант осуществления устройства связи.

Фиг. 11a-c показывают кодер согласно иллюстративным вариантам осуществления.

Фиг. 12 показывает пример системы кодирования аудио PVQ, где, по меньшей мере, одна часть системы содержится в кодере и/или кодеке, который в свою очередь содержится в устройстве связи, таком как мобильный телефон.

ПОДРОБНОЕ ОПИСАНИЕ

В арифметике с плавающей точкой не имеется никакой большой проблемы, относящейся к установке динамики параметров итераций поиска формы PVQ внутреннего цикла, однако, в процессорах DSP с фиксированной точностью с, например, ограниченными 16/32 битами накапливающими сумматорами (регистром, в котором сохраняются промежуточные арифметические и/или логические результаты) и переменными, является очень важным использовать способы эффективного поиска, где максимизируется ограниченный динамический диапазон переменных DSP и максимизируется точность, наряду с тем, что имеется возможность использовать столько из доступных быстрых операций процессора DSP ограниченного динамического диапазона, сколько возможно.

Признак "точность" выше указывает на возможность представлять настолько малые числа, насколько возможно, то есть, количество бит после десятичной точки для конкретной длины слова. Другой способ сформулировать это состоит в том, что точность соответствует разрешению представления, что снова определяется посредством количества десятичных или двоичных цифр. Причина для того, что может говориться, что точность в вариантах осуществления, описанных ниже, коррелирует с количеством бит после десятичной точки и не обязательно с самой длиной слова, состоит в том, что в арифметике с фиксированной точкой, могут иметься разные точности для одной и той же длины слова. Например, форматы данных 1Q15 и 2Q14 оба имеют длину слова 16, но первый формат имеет 15 бит после десятичной точки и другой 14 бит. Наименьшее представимое число будет тогда 2^-15 и 2^-14 соответственно.

Способ выполнения пирамидального векторного квантования формы раскрыт в разделе 3.2 в Valin и др., "A full-bandwidth audio codec with low complexity and very low delay", EUSIPCO, 2009. В этом документе представлен кодек MDCT, где подробности, то есть, форма, в каждом диапазоне квантуются алгебраически с использованием сферической кодовой книги и где назначение битов выводится из информации, совместно используемой между кодером и декодером. Аспекты и варианты осуществления раскрытия этой заявки, по меньшей мере, в широком смысле относятся к тому, как осуществлять поиск согласно уравнениям 4-7 в Valin и др., эффективным способом в арифметике с фиксированной точкой, ограниченной, например, 16/32 битами, вместо плавающих значений как в Valin и др.

В некоторых аспектах и вариантах осуществления, раскрытых в дальнейшем, при заданном целевом векторе x(n) (t в Уравнении 0) некоторой размерности N, и заданном некотором количестве единичных импульсов K, форма анализируется и определяется подходящий вектор восстановления xq(n)=func(y(n)), который минимизирует ошибку квантования формы, и, таким образом, максимизирует воспринимаемое качество, например, в случае кодирования аудио. По меньшей мере, некоторые из аспектов и вариантов осуществления осуществляются, как имеющие целью нахождение оптимальной совокупности K единичных импульсов, в векторе y(n), который должен подчиняться L1 норме, при удержании сложности под управлением, то есть, настолько низкой, насколько практически возможно.

Вместо использования способов разомкнутого контура предшествующего уровня техники, чтобы определять приблизительные значения для динамического диапазона внутреннего цикла и точности накапливающего сумматора, некоторые из аспектов и вариантов осуществления конструируются, чтобы использовать низкую стоимость, с точки зрения необходимых процессорных циклов DSP и с точки зрения дополнительной необходимой программной постоянной памяти (ROM), "почти оптимальный" предварительный анализ числителя наихудшего случая и/или знаменателя наихудшего случая до начала дорогостоящих расчетов отношения искажения формы PVQ в самом внутреннем цикле поиска. "Почти оптимальный" предварительный анализ не нацелен на то, чтобы масштабировать значения на точный оптимальный максимальный динамический диапазон, но вместо этого предварительный анализ определяет почти оптимальный коэффициент масштаба степени 2, так как масштабирование степени 2 может осуществляться как сдвиги двоичного числа и такие сдвиги имеют низкую стоимость в процессорных циклах DSP и в DSP ROM.

Выбор точности знаменателя является перцепционно мотивированным, так как спектрально пиковым областям будет назначаться большая точность, чем более плоским областям.

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

ВВЕДЕНИЕ В ОБЩУЮ ОПТИМИЗАЦИЮ ПОИСКА PVQ

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

Третья оптимизация состоит в том, чтобы итеративно обновлять члены отношения QPVQ corrxy2 и energyy, вместо повторного вычисления Уравнения 4 (ниже) над всем векторным пространством N, для каждого изменения кандидата для вектора y(n) в поиске достижения L1-нормы K, что требуется для последующего этапа индексирования.

Вышеуказанные три главные этапа оптимизации являются оптимизациями, которые, в общем, могут существовать в прошлых вариантах реализации PVQ, таких как CELT и IETF-Opus, и частично в G.718, однако, для полноты описания аспектов и вариантов осуществления, эти этапы также кратко очерчиваются ниже.

ЭФФЕКТИВНЫЙ ПОИСК ФОРМЫ ВЕКТОРА PVQ

Обзор системы кодирования и декодирования аудио, применяющей один вариант осуществления здесь предложенного поиска формы PVQ, можно видеть на фиг. 12. Общий поиск формы с использованием пирамидальной проекции, за которой следует последовательность операций точного поиска (формы), можно видеть, например, на фиг. 5. Другой вариант осуществления части точного поиска в поиске формы изображен на фиг. 6. Поиск формы PVQ может содержать пирамидальную проекцию и точный поиск. Когда никакая пирамидальная проекция не применяется, поиск формы содержит только точный поиск. Поэтому, "точный поиск" и "поиск формы" могут иногда использоваться здесь взаимозаменяемо, так как точный поиск является частью поиска формы, и, когда не имеется никакого начального грубого поиска, посредством пирамидальной проекции, выполнение поиска формы является даже таким же, что и выполнение точного поиска. Другими словами, точный поиск может иногда быть или составлять поиск формы, и когда применяется пирамидальная проекция, точный поиск является частью поиска формы.

ВВЕДЕНИЕ В ПОИСК PVQ

Цель процедуры поиска PVQ(N,K) состоит в том, чтобы найти наилучший масштабированный и нормализованный выходной вектор xq(n). xq(n) определяется как:

(Уравнение 1)

Где y=yN,K является точкой на поверхности N-мерной гиперпирамиды и L1 норма yN,K равняется K. Другими словами, yN,K является выбранным целочисленным вектором кода формы размера N, также упоминаемого как размерность N, согласно:

(Уравнение 2)

То есть, вектор xq является нормализованным целочисленным подвектором единичной энергии . Наилучший вектор y является вектором, минимизирующим среднеквадратическую ошибку формы между целевым вектором x(n) и масштабированным нормализованным квантованным выходным вектором xq. Это достигается посредством минимизации следующего искажения поиска:

(Уравнение 3)

Или эквивалентно, посредством возведения в квадрат числителя и знаменателя, максимизируя отношение QPVQ:

(Уравнение 4)

где corrxy является корреляцией между x и y. В поиске оптимальной формы вектора PVQ y(n) с L1-нормой K, осуществляются итеративные обновления переменных QPVQ во всем положительном "квадранте" в N-мерном пространстве согласно:

(Уравнение 5)

(Уравнение 6)

где corrxy(k-1) обозначает корреляцию, достигнутую до сих пор посредством помещения предыдущих k-1 единичных импульсов, и energyy(k-1) обозначает накопленную энергию, достигнутую до сих пор посредством помещения предыдущих k-1 единичных импульсов, и y(k-1, n) обозначает амплитуду y в положении n от предыдущего помещения k-1 единичных импульсов. Чтобы дополнительно ускорять итеративную обработку внутри цикла для члена энергии energyy(k) уменьшается масштаб посредством 2, таким образом, устраняя одно умножение во внутреннем цикле.

(Уравнение 7)

где enloopy(k,n) является предпочтительной переменной энергии, используемой и накапливаемой внутри самого внутреннего цикла поиска единичного импульса, так как ее итеративное обновление требует на одно умножение меньше, чем energyy(k,n).

(Уравнение 8)

Наилучшее положение nbest для k-ого единичного импульса, итеративно обновляется посредством увеличения n от 0 до N-1:

, если (Уравнение 9)

Чтобы избегать дорогостоящих делений, что является особенно важным в арифметике с фиксированной точкой, решение обновления максимизации QPVQ выполняется с использованием перекрестного умножения числителя сохраненной наилучшей возведенной в квадрат корреляции bestCorrSq и знаменателя сохраненной наилучшей энергии bestEn до сих пор, что может быть выражено как:

, если (Уравнение 10)

Итеративная максимизация для QPVQ(k, n) может начинаться с нулевого количества помещенных единичных импульсов или с некоторого адаптивного количества единичных импульсов предварительного помещения более низкой стоимости, на основе целочисленной проекции в точку ниже поверхности K-ой пирамиды, с гарантированным недоходом единичных импульсов в целевой L1 норме K.

АНАЛИЗ ПОДГОТОВКИ ПОИСКА PVQ

Вследствие структурированной природы целочисленного вектора PVQ yN,K, где разрешены все возможные комбинации знака и является возможным кодировать все комбинации знака, при условии, что результирующий вектор подчиняется L1 норме K единичных импульсов, поиск выполняется во всем положительном первом "квадранте" (причина использования кавычек для "квадранта" состоит в том, что истинный квадрант существует, только когда N=2, и N может здесь быть больше, чем 2). Дополнительно, как понимается изобретателем, чтобы достигать настолько высокой точности насколько возможно для осуществления ограниченной точности, максимальное абсолютное значение xabsmax входного сигнала x(n) может предварительно анализироваться для будущего использования в настройке процедуры накопления корреляции внутреннего цикла.

для (Уравнение 11)

(Уравнение 12)

УПРАВЛЕНИЕ ЦЕЛЯМИ ОЧЕНЬ НИЗКОЙ ЭНЕРГИИ И ПОДВЕКТОРАМИ ОЧЕНЬ НИЗКОЙ ЭНЕРГИИ

В случае, когда входной целевой вектор (x в Уравнении 3 или t в Уравнении 0) является вектором из всех нулей и/или усиление вектора (например, G в Уравнении 0) является очень низким, поиск PVQ может пропускаться, и действительный вектор PVQ y может детерминированно создаваться посредством назначения половины K единичных импульсов первому положению

и оставшихся единичных импульсов последнему положению ().

Признак "цели очень низкой энергии" и "очень низкое усиление вектора" является в одном варианте осуществления настолько низким, как ноль, как проиллюстрировано в иллюстративном коде ANSI C, раскрытом ниже, где соответствующий код является:

IF(L_xsum == 0 || neg_gain == 0)

{ /* случай нулевого ввода или нулевого усиления */

Однако оно также может быть меньше, чем или равно эпсилон, или EPS, где EPS является наименьшим значением, которое больше, чем ноль и которое рассматривается, что может его представлять в выбранной точности. Например, при точности Q15 в 16-битном слове со знаком, усиление подвектора становится меньшим или равным EPS 1/2^15= 1/32768 (например, усиление вектора меньше или равно 0.000030517578125), и в случае точности Q12 в 16-битном слове со знаком для целевого вектора x(n), тогда "очень низкое" значение становится EPS=(1/2^12), например, сумма (abs(x(n))) меньше или равна 0.000244140625. В одном варианте осуществления арифметики DSP с фиксированной точкой с 16-битным словом, беззнаковый целочисленный формат может принимать любое целочисленное значение от 0 до 65546, тогда как целое число со знаком может принимать значение от -32768 до +32767. С использованием беззнакового дробного формата, 565536 уровней распределены равномерно между 0 и +1, тогда как в осуществлении дробного формата со знаком уровни будут, равным образом расположены между -1 и +1.

Посредством применения этого необязательного этапа, относящегося к нулевым векторам и низким значениям усиления, сложность поиска PVQ уменьшается и сложность индексирования распределяется/разделяется между индексированием кодера и деиндексированием декодера, то есть, никакая обработка не "тратится впустую" для поиска нулевого целевого вектора или очень низкого целевого вектора, для которого в любом случае осуществлялось бы масштабирование к нулю.

НЕОБЯЗАТЕЛЬНАЯ ПРОЕКЦИЯ ПРЕДВАРИТЕЛЬНОГО ПОИСКА PVQ

Если отношение плотности импульсов K/N больше, чем 0.5 единичных импульсов в расчете на коэффициент, например, коэффициент модифицированного дискретного косинусного преобразования, делается проекция низкой стоимости на K-1 подпирамиду и используется в качестве начальной точки для y. С другой стороны, если отношение плотности импульсов меньше, чем 0.5 единичных импульсов в расчете на коэффициент, итеративный поиск PVQ начинается с 0 предварительно помещенных единичных импульсов. Проекция низкой стоимости на "K-1" обычно является менее вычислительно дорогостоящей в процессорных циклах DSP, чем повторение поиска внутреннего цикла для единичного импульса K-1 раз. Однако недостаток проекции низкой стоимости состоит в том, что она вырабатывает неточный результат вследствие применения N-мерной функции floor. Результирующая L1-норма проекции низкой стоимости с использованием функции floor может обычно быть всем, чем угодно между "K-1" до грубо "K-5", то есть, для результата после проекции должен осуществляться точный поиск, чтобы достигать целевой нормы K.

Проекция низкой стоимости выполняется как:

(Уравнение 13)

для n=0,.., N-1 (Уравнение 14)

Если никакая проекция не делается, начальная точка является вектором y(n) со всеми нулями. Стоимость DSP проекции в процессорных циклах DSP находится в окрестности N(абсолютная сумма)+25(деление)+2N(умножение и функция floor) процессорных циклов.

В подготовке для точного поиска, чтобы достигать поверхности K-ой пирамиды, накопленное количество единичных импульсов pulsetot, накопленная корреляция corrxy(pulsetot) и накопленная энергия energyy(pulsetot) для начальной точки вычисляется как:

(Уравнение 15)

(Уравнение 16)

(Уравнение 17)

(Уравнение 18)

ТОЧНЫЙ ПОИСК PVQ

Решение, здесь раскрытое, относится к точному поиску PVQ (который составляет или является частью поиска формы PVQ, как описано ранее). То, что было описано в предшествующих разделах, является главным образом PVQ предшествующего уровня техники, за исключением предварительного определения xabsmax, которое дополнительно описывается ниже. Окончательный целочисленный вектор формы y(n) размерности N должен подчиняться L1 норме K импульсов. Предполагается, что точный поиск сконфигурирован с возможностью начинаться с более низкой точки в пирамиде, то есть, ниже K-ой пирамиды, и итеративно находить свой путь к поверхности N-мерной K-ой гиперпирамиды. K-значение в точном поиске может обычно находится в диапазоне от 1 до 512 единичных импульсов.

Изобретатель понял, что чтобы удерживать сложность поиска и индексирования PVQ на разумном уровне, поиск может разделяться на две основные ветви, где одна ветвь используется, когда является известным, что представление энергии внутри цикла для y(n) будет оставаться в пределах 16-битного слова со знаком, или без знака, во время следующей итерации внутреннего цикла поиска, и другая ветвь используется, когда энергия внутри цикла может превосходить динамический диапазон 16-битного слова во время следующей итерации внутреннего цикла поиска.

ТОЧНЫЙ ПОИСК С ФИКСИРОВАННОЙ ТОЧНОСТЬЮ ДЛЯ МАЛОГО КОЛИЧЕСТВА ЕДИНИЧНЫХ ИМПУЛЬСОВ

Когда окончательное K является более низким, чем или равно порогу tp=127 единичных импульсов, динамика energyy(K) будет всегда оставаться в пределах 14 бит, и динамика сдвинутой вверх на 1 бит enloopy(K) будет всегда оставаться в пределах 15 бит. Это обеспечивает возможность использования 16-битного слова со знаком для представления каждой enloopy(k) внутри всех итераций внутреннего цикла точного поиска импульсов вплоть до k=K. Другими словами, не будет необходимости в битовой длине слова, превосходящей 16 бит, для представления energyy(K) или enloopy(K) в любой итерации внутреннего цикла точного поиска импульсов, когда K<127.

В случае доступности эффективных операторов DSP Multiply, MultiplyAdd (умножение с добавлением) и MultiplySubtract (умножение с вычитанием) для беззнаковых 16-битных переменных, порог может увеличиваться до tp=255, так как тогда enloopy(K) будет всегда оставаться в пределах беззнакового 16-битного слова. MultiplyAdd является здесь в одном варианте осуществления инструкциями умножения с добавлением или эквивалентными операциями, чтобы умножать значения данных, представляющих аудио и видео сигналы, на значения фильтра или преобразования и накапливать произведения, чтобы формировать результат. Операции MultiplySubtract являются такими же, как операции MultiplyAdd, за исключением того, что добавления заменены на вычитания.

В подготовке для следующего добавления единичного импульса, почти оптимальный максимально возможный сдвиг вверх накопленного значения корреляции внутри цикла следующего цикла, corrxy, в 32-битном слове со знаком предварительно анализируется с использованием ранее вычисленного максимального абсолютного входного значения xabsmax как:

(Уравнение 19)

Этот сдвиг вверх, вычисленный в Уравнении 19 представляет "наихудший случай", и охватывает максимально возможный сдвиг вверх, который может делаться в следующем внутреннем цикле, и, таким образом, обеспечивает, что наиболее значимая информация, относящаяся к корреляции, не будет потеряна, или сдвинута вовне, во время итерации внутреннего цикла, даже для сценария наихудшего случая.

Этот предварительный динамический анализ внутреннего цикла для наихудшего случая может выполняться в 2-3 процессорных циклах в большинстве архитектур DSP с использованием MultiplyAdd и инструкций Norm (нормализации), и анализ всегда является одним и тем же независимо от размерности N. В ITU-T G.191 виртуальном 16/32-битном DSP операции в Уравнении 19 становятся:

"corr_upshift=norm_l(L_mac(*L_corrxy,1, xabs_max))"; со стоимостью 2 процессорных цикла.

Следует отметить, что norm_l(x) здесь соответствует "31-ceil(log2(x))", и может альтернативно обозначаться 31-ceil(log2(x)), где ceil(x) является так называемой функцией потолка, отображающей вещественное число в наименьшее следующее целое число. Более точно, ceiling(x)= является наименьшим целым числом не меньше, чем x. Для , член внутри скобок с верхней горизонтальной чертой всегда является положительным числом. может альтернативно вычисляться с использованием функции floor как:

где floor(x)= является наибольшим целым числом не больше, чем x.

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

Чтобы делать итеративное обновление из Уравнения 10 настолько эффективным насколько возможно, числитель corrxy(k,n)2 может представляться посредством 16-битного слова со знаком, даже когда содержит больше информации, чем умещается в 16-битном слове, посредством следующего подхода.

(Уравнение 20)

, если (Уравнение 21)

где функция "Round16" извлекает верхние 16 бит 32-битной переменной со знаком с округлением. Этот почти оптимальный сдвиг вверх (Уравнение 10) и использование 16-битного представления возведенной в квадрат корреляции bestCorrSq16 обеспечивает возможность очень быстрого поиска внутреннего цикла с использованием только ~9 процессорных циклов для выполнения проверки из Уравнения 21 и трех обновлений переменных, при использовании оптимизированных функций процессоров DSP Multiply, MultiplyAdd, MultiplySubtract.

Местоположение следующего единичного импульса в векторе y теперь определяется посредством осуществления итерации по возможным положениям n=0,..., N-1 в векторе y, при использовании уравнений Уравнения 20, Уравнения 6 и Уравнения 21.

Когда определяется наилучшее положение nbest для единичного импульса (в векторе y, достигнутом до сих пор), накопленная корреляция corrxy(k), накопленная энергия внутри цикла enloopy(k) и количество накопленных единичных импульсов pulsetot обновляются. Если имеются дополнительные единичные импульсы для добавления, то есть, когда pulsetot<K, новый внутренний цикл начинается с новым почти оптимальным анализом (Уравнение 19) corrupshift для добавления следующего единичного импульса.

В целом, этот предложенный подход имеет сложность наихудшего случая для каждого единичного импульса, добавляемого к y(n), равную грубо 5/N+15 процессорных циклов в расчете на квантованный коэффициент. Другими словами, цикл по вектору размера N для добавления единичного импульса имеет сложность наихудшего случая около N*(5/N+15) процессорных циклов, то есть, 5+15*N процессорных циклов.

ТОЧНЫЙ ПОИСК С ФИКСИРОВАННОЙ ТОЧНОСТЬЮ ДЛЯ БОЛЬШОГО КОЛИЧЕСТВА ЕДИНИЧНЫХ ИМПУЛЬСОВ

Когда K больше, чем порог tp, который в этом иллюстративном варианте осуществления, при предположении ограниченного 16/32 битами DSP, равняется tp=127 единичных импульсов, динамика параметра energyy(K) может превосходить 14 бит, и динамика сдвинутой вверх на 1 бит enloopy(K) может превосходить 15 бит. Таким образом, чтобы не использовать ненужную высокую точность, точный поиск сконфигурирован с возможностью адаптивно выбирать между 16-битным представлением и 32-битным представлением пары { corrxy(k,n)2, enloopy(k,n) } когда K больше, чем tp. Когда заранее известно, что K для вектора y(n) оказывается в окончательном значении, более высоким, чем 127, точный поиск будет отслеживать максимальную амплитуду импульса maxampy в y, достигнутом до сих пор. Это также может упоминаться как то, что определяется maxampy. Эта информация максимальной амплитуды импульса используется на этапе предварительного анализа до входа в оптимизированный внутренний цикл по размерности. Предварительный анализ содержит определение того, какая точность должна использоваться для наступающего внутреннего цикла добавления единичного импульса. Как показано на фиг. 12 посредством ввода N, K в поиск формы PVQ, назначение битов является известным/определяется до того, как поиск PVQ инициируется. Назначение битов может использовать формулы или сохраненные таблицы для получения, определения и/или вычисления K для ввода в поиск формы PVQ, например, K=функция(биты(диапазон), N) для некоторого диапазона с размерностью N и некоторым количеством биты(диапазон).

Биты, требуемые для PVQ(N,K) N=8 N=16 N=32
K=4 11.4594 15.4263 19.4179
K=5 13.2021 18.1210 23.1001
K=6 14.7211 20.5637 26.5222
K=7 16.0631 22.7972 29.7253

Например, может использоваться сохраненная таблица как таблица, показанная выше, чтобы определять или выбирать значение K. Если размерность N равняется 8 и доступные биты для диапазона биты(диапазон) это 14.0, то K будет выбираться, чтобы быть 5, так как PVQ(N=8,K=6) требует 14.7211 бит, что больше, чем количество доступных бит 14.0.

Если предварительный анализ указывает, что необходимо большее, чем 16-битное слово со знаком, чтобы представлять энергию внутри цикла без потери какой-либо информации энергии, используется более высокая точность и вычислительно более интенсивный цикл добавления единичного импульса высокой точности, где оба член сохраненной наилучшей возведенной в квадрат корреляции и член сохраненной наилучшей накопленной энергии представляются посредством 32-битных слов.

(Уравнение 22)

если

если

(Уравнение 23)

Предварительный динамический анализ внутреннего цикла наихудшего случая может выполняться в 5-6 дополнительных процессорных циклах в большинстве процессоров DSP, и стоимость анализа является одной и той же для всех размерностей. В ITU-T G.191 STL 2009 виртуальном 16/32-битном DSP операции в Уравнении 22 и Уравнении 23 становятся:

"L_energy_y=L_add(L_energy_y, 1); /* добавляется 0.5 */

en_margin=norm_l(L_mac(L_energy_y, 1, maxamp_y));

highprecision_active= 1; move16();

if(sub(16,en_margin <= 0){

highprecision_active=0; move16();

}",

со стоимостью максимум 6 процессорных циклов.

Соответствующий код в примере кода ANSI-C ниже является:

L_yy=L_add(L_yy,1); /* добавляется.5 */

en_margin=norm_l(L_mac(L_yy,1, max_amp_y)); /* нахождение максимального "добавления", запаса, ~2 операции */

en_dn_shift=sub(16, en_margin); /* вычисление сдвига в нижнее слово */

high_prec_active=1; move16();

if(en_dn_shift <= 0){ /* использование 32-битной энергии, только если фактически необходимо */

high_prec_active=0; move16();

}

Альтернативно запас по энергии en_margin в Уравнении (22) может в строке с операцией G.191 STL функции norm_l() вычисляться с использованием функции floor как:

Если highprecisionactive равняется FALSE, то есть, =0, используется внутренний цикл поиска более низкой точности в Уравнении 20, Уравнении 6 и Уравнении 21, с другой стороны, когда highprecisionactive равняется TRUE, то есть, =1, определение местоположения следующего единичного импульса выполняется с использованием внутреннего цикла более высокой точности, представляющего enloopy и corrxy2 с помощью 32-битных слов в этом примере. То есть, когда highprecisionactive равняется TRUE, местоположение следующего единичного импульса в y(n) определяется посредством осуществления итерации по n=0,..., N-1 возможным положениям, с использованием уравнений Уравнения 24, Уравнения 6 и Уравнения 25.

(Уравнение 24)

, если (Уравнение 25)

Другими словами, en_margin указывает количество сдвигов вверх, которые могут использоваться, чтобы нормализовать энергию в следующем цикле. Если могут использоваться 16 или более сдвигов вверх, то энергия остается в более низкой длине слова, при предположении 16/32-битных длин слова, и не имеется необходимости в цикле высокой точности (32-битного представления), таким образом, highprecisionactive устанавливается на FALSE. Одна причина осуществления для того, чтобы делать это таким способом (позволяя информации энергии оставаться в нижней части L_energy 32-битного слова), состоит в том, что это является вычислительно более дешевым: это стоит только 1 процессорный цикл, чтобы вычислить extract_l(L_energy), тогда как альтернатива round_fx(L_shl(L_energy,en_margin)) захватывает два процессорных цикла.

Когда наилучшее положение nbest единичного импульса определяется, накопленная корреляция corrxy(k), накопленная энергия внутри цикла enloopy(k) и количество накопленных единичных импульсов pulsetot обновляются. Дополнительно, максимальная амплитуда в наилучшем целочисленном векторе y до сих пор, поддерживается в текущем состоянии, то есть, определяется, для следующего цикла добавления единичного импульса.

(Уравнение 26)

Если имеются дополнительные единичные импульсы для добавления, то есть, когда pulsetot<K, новый внутренний цикл начинается с новым почти оптимальным анализом corrupshift из Уравнения 19 и новым анализом точности энергии из Уравнения 22 и Уравнения 23, и затем начинается следующий цикл для единичного импульса с уравнениями Уравнением 24, Уравнением 6 и Уравнением 26.

Сложность наихудшего случая подхода высокой точности (в этом примере 32-битных слов) для каждого единичного импульса, добавляемого к y(n), равняется грубо 7/N+31 процессорных циклов в расчете на квантованный коэффициент.

Эффект выбора точности внутреннего цикла на основе накопленной энергии внутри цикла состоит в том, что целевые подвекторы, которые имеют высокую пиковость, или имеют очень точную гранулярность, то есть, окончательное K является большим, будут использовать цикл более высокой точности и больше циклов более часто, в то время как непиковые или малого импульса подвекторы гранулярности будут более часто использовать цикл более низкой точности и меньше процессорных циклов.

Следует отметить, что анализ, описанный в вышеизложенном разделе может выполняться также, когда K<tp. Однако один вариант осуществления может осуществляться более эффективно посредством введения порога tp для применения вышеизложенного анализа.

ФИНАЛИЗАЦИЯ И НОРМАЛИЗАЦИЯ ВЕКТОРОВ PVQ

После поиска формы, каждому ненулевому элементу вектора PVQ назначается свой должный знак и вектор L2-нормализуется (что известно также как евклидова нормализация) к единичной энергии. Дополнительно, если диапазон был разделен, он дополнительно масштабируется с помощью усиления подвектора.

если , для (Уравнение 27)

(Уравнение 28)

, для (Уравнение 29)

Выше, две методологии точности были представлены и определены:

"En16 x CorrSq16", как определено в разделе выше, (уравнения 19 по 21) и "En32 x CorrSq32", (уравнения 22 по 26). Ниже описываются два дополнительных способа средней сложности, где точность возведенного в квадрат члена корреляции числителя и члена энергии изменяются.

СПОСОБЫ "En16 x CorrSq32" И "En32 x CorrSq16"

Способ "En16 x CorrSq32" является аналогичным "En32 x CorrSq32", но с тем отличием, что обновление и сравнение для наилучшего найденного единичного импульса внутреннего цикла использует 16-битное представление наилучшей энергии bestEn16 до сих пор, согласно:

, если (Уравнение 30)

Приблизительная стоимость способа "En16 x CorrSq32" в расчете на единичный импульс равняется 5/N+21 процессорных циклов.

Способ "En32 x CorrSq16" является аналогичным "En32 x CorrSq32", но с тем отличием, что обновление и сравнение для наилучшего найденного единичного импульса внутреннего цикла использует 16-битное представление наилучшей возведенной в квадрат корреляции bestCorrSq16 до сих пор, согласно:

, если (Уравнение 31)

Приблизительная стоимость способа "En32 x CorrSq16" в расчете на добавление единичного импульса равняется 6/N+20 процессорных циклов в расчете на коэффициент.

АСПЕКТЫ И ИЛЛЮСТРАТИВНЫЕ ВАРИАНТЫ ОСУЩЕСТВЛЕНИЯ

Ниже, некоторые иллюстративные варианты осуществления решения, здесь раскрытого, будут описываться со ссылкой на фиг. 1-4.

Фиг. 1 является блок-схемой последовательности операций, иллюстрирующей способ, касающийся точного поиска для поиска формы PVQ. Предполагается, что способ выполняется посредством кодера, такого как мультимедийный кодер для аудио и/или видео сигналов. PVQ берет целевой вектор формы x в качестве ввода, и получает вектор y посредством итеративного добавления единичных импульсов во внутреннем цикле поиска по размерности. Способ связан с предварительным анализом, который осуществляется до входа во внутренний цикл. Выходной вектор xq затем получается на основе вектора y, как описано ранее. Однако формирование xq не является центральным для решения, здесь описанного, и, поэтому, не будет дополнительно здесь описываться.

В способе, проиллюстрированном на фиг. 1, можно предполагать, что кодер отслеживает значение текущего вектора y. Под "текущим вектором y" здесь предполагается вектор y, скомпонованный, найденный или сконструированный до сих пор, то есть, для k<K. Как описано ранее, начальная точка для вектора y может быть проекцией на поверхность ниже K-ой пирамиды, или пустым вектором из всех нулей. Способ, проиллюстрированный на фиг. 1, содержит, до входа в следующий внутренний цикл поиска по размерности для добавления единичного импульса, определение 101, на основе максимальной амплитуды импульса, , текущего вектора y, того, необходима ли большая, чем текущая битовая длина слова, чтобы представлять , способом без потерь в наступающем внутреннем цикле по размерности. Переменная относится к накопленной энергии вектора y. Выполнение этого способа обеспечивает возможность кодеру удерживать сложность поиска на разумном уровне. Например, он обеспечивает возможность кодеру применять цикл увеличенной точности (что имеет следствием более высокую сложность), только когда это может быть необходимо, посредством анализа того, потребует ли "сценарий наихудшего случая" в наступающем внутреннем цикле внутренний цикл с более высокой точностью, нежели в текущее время используется.

Предварительный анализ, описанный выше, выполняется до каждого входа 102 во внутренний цикл, то есть, до каждого добавления единичного импульса к вектору y. В иллюстративном варианте осуществления, где только два разных битовых представления, то есть, битовых длин слова, как, например, 16 и 32 бит, являются доступными, внутренний цикл будет выполняться с использованием 16-битного представления для enloopy до тех пор, когда определяется, что необходимо более длинное битовое слово, чтобы представлять enloopy, после чего будет применяться большая битовая длина слова, то есть, 32-битное представление, для вычислений внутреннего цикла. Цикл с использованием 16-битного представления может упоминаться как "цикл низкой точности", и цикл с использованием 32-битного представления может упоминаться как "цикл высокой точности".

Определение 102 в отношении того, необходима ли большая, чем начальная или текущая битовая длина слова, может альтернативно выражаться как то, что определяется то, какая битовая длина слова, из, по меньшей мере, двух разных, альтернативных, битовых длин слова, будет требоваться для представления "наихудшего случая" (самого большого возможного увеличения) во время следующего внутреннего цикла. Упомянутые, по меньшей мере, две разные битовые длины слова могут содержать, по меньшей мере, например, 16 и 32-битные длины слова.

Другими словами, когда определяется 102, что необходима большая, чем текущая битовая длина слова, чтобы представлять в следующем внутреннем цикле, вычисления внутреннего цикла выполняются 103 с более длинной битовой длиной слова, чем начальная или текущая битовая длина слова, для представления во внутреннем цикле. С другой стороны, когда определяется, что не необходима большая, чем текущая битовая длина слова, чтобы представлять enloopy, вычисления внутреннего цикла могут выполняться посредством использования первого цикла добавления единичного импульса с использованием первой или текущей битовой длины слова, чтобы представлять enloopy, то есть текущая битовая длина слова может продолжать использоваться. Это также проиллюстрировано, например, на фиг. 4, как использование двух разных циклов. Фиг. 4 показывает один, внутренний цикл низкой точности, который исполняется 405, когда определяется 403, что он является достаточным с текущей (более низкой) битовой длиной слова; и один внутренний цикл высокой точности, который исполняется, когда определяется 403, что большая битовая длина слова необходима, чтобы представлять энергию во внутреннем цикле, чтобы не терять информацию.

Способ строится на понимании того, что максимально возможное увеличение переменной энергии, такой как в следующем внутреннем цикле будет происходить, когда единичный импульс добавляется к положению в y, ассоциированному с текущим Осознав это, является возможным определять, до входа во внутренний цикл, имеется ли риск для превышения емкости представления в текущее время используемой битовой длины слова, например, 16 бит, во время следующего внутреннего цикла, или нет. Другими словами, определение того, необходима ли большая, чем текущая битовая длина слова, чтобы представлять enloopy, содержит определение характеристик случая, когда, в наступающем внутреннем цикле поиска, единичный импульс добавляется к положению в y, которое ассоциировано с maxampy. Например, может определяться количество бит, необходимое, чтобы представлять enloopy в наступающем внутреннем цикле, или, альтернативно, оставшийся запас в битовом слове, представляющем enloopy в наступающем внутреннем цикле.

Для целевых векторов формы, которые ассоциированы с низким K, является возможным говорить заранее, что не будет необходимости в более длинной битовой длине слова, чем длина, предложенная посредством начальной и в текущее время используемой битовой длины слова. Поэтому, будет являться возможным применять пороговое значение Tk, так что некоторые операции выполняются только для целевых векторов формы, которые ассоциированы с K, которое превосходит пороговое значение Tk. Для таких целевых векторов, кодер будет отслеживать , посредством обновления этого значения после каждого добавления импульса. Для целевых векторов, ассоциированных с K, которое является более низким, чем пороговое значение, не является необходимым отслеживать Для примера с 16 и 32-битными словами, возможное Tk будет 127, как описано ранее. Другими словами, отслеживание и определение, того, необходима ли большая, чем текущая битовая длина слова, выполняется, например, только когда окончательное значение K, ассоциированное с входным целевым вектором формы, превосходит пороговое значение Tk.

Один вариант осуществления, проиллюстрированный на фиг. 2, содержит отслеживание или определение 201 maxampy, и определение 202 xabsmax. Значение maxampy может изменяться при добавлении нового единичного импульса во внутреннем цикле и, поэтому, maxampy должно обновляться, чтобы поддерживаться в текущем состоянии после каждого цикла. Например, действие 201 может содержать отслеживание maxampy до тех пор, когда значение k достигнет порогового значения, где начальная или текущая битовая длина слова, используемая для представления enloopy, может более не быть достаточной, и анализ, представленный, например, посредством действия 204, начинается. Обновление maxampy после внутреннего цикла, следующего за анализом, например, действия 204, проиллюстрировано как действие 206 на фиг. 2. Следует отметить, однако, что xabsmax не изменяется в обработке, и, поэтому, должно определяться 202 только однократно. Как проиллюстрировано на фиг. 2, один вариант осуществления способа также может содержать, до входа в 205 следующий внутренний цикл по размерности для добавления единичного импульса, определение 203, на основе максимального абсолютного значения, xabsmax, входного вектора формы, x, возможного сдвига вверх, в битовом слове, накопленного значения корреляции внутри цикла следующего цикла, corrxy, между x и вектором y. Сдвиг вверх также может упоминаться как повышение масштаба. Уравнение 19 выше иллюстрирует определение максимально возможного сдвига вверх. Посредством выполнения этого, может обеспечиваться, что столько бит информации корреляции, сколько возможно поддерживаются во время вычисления внутреннего цикла, особенно наиболее значимые биты. Здесь следует отметить, что значение корреляции corrxy, в форме corrxy2, не должно обязательно представляться способом без потерь. Определение максимального сдвига вверх может выполняться в "более длинном" битовом слове, независимо от текущей битовой длины слова, используемой во внутреннем цикле. То есть, максимально возможный сдвиг вверх может определяться для 32-битного слова, даже когда 16-битное слово будет использоваться во внутреннем цикле. Когда более короткое битовое слово должно использоваться во внутреннем цикле, определенный сдвиг вверх тогда "округляется" до более короткого битового слова, как проиллюстрировано посредством Уравнения 20. Отметим, что значение корреляции, corrxy, всегда меньше, чем или равно единице (1.0) в применяемой точности DSP для значения корреляции, то есть, corrxy≤1.0, и, поэтому, максимальный сдвиг вверх, определенный для corrxy, является также действительным для corrxy2.

Когда определяется, что необходима большая, чем текущая битовая длина слова, чтобы представлять enloopy, вычисления внутреннего цикла могут выполняться с использованием более длинной битовой длины слова (нежели текущая битовая длина слова, например, 32 вместо 16 бит), чтобы представлять enloopy.

В одном варианте осуществления, когда определяется, что необходима большая, чем текущая битовая длина слова, чтобы представлять , вычисления внутреннего цикла выполняются с более длинной битовой длиной слова (нежели текущая битовая длина слова), представляющей также накопленное значение корреляции внутри цикла, corrxy2, во внутреннем цикле. Это проиллюстрировано, например, на фиг. 3, в действии 305. То есть, битовая длина слова, определенная для значения энергии enloopy, также может применяться для corrxy2.

Как упомянуто ранее, является предпочтительным избегать выполнение деления из Уравнения 8 во внутреннем цикле поиска по размерности для добавления единичного импульса. Поэтому, может выполняться перекрестное умножение, как проиллюстрировано в Уравнении 10. То есть, положение, nbest, в y для добавления единичного импульса, может определяться посредством расчета перекрестного умножения, для каждого положения n в y, корреляции и значения энергии для текущего n; и "наилучшей до сих пор" корреляции, BestCorrSq, и "наилучшего до сих пор" значения энергии bestEn, сохраненных из предыдущих значений n, как:

corrxy2 * bestEn > BestCorrSq * enloopy,

где

, когда corrxy2 * bestEn > BestCorrSq * enloopy

Положение nbest может упоминаться как "наилучшее" положение в y для добавления единичного импульса. Следует отметить, что в выражениях выше может использоваться "≥" вместо ">". Однако ">", то есть, "больше, чем" может быть предпочтительным при попытке удерживать вычислительную стоимость настолько низкой, насколько возможно, например, в отношении количества процессорных циклов. Выполнение способа согласно любому из вариантов осуществления, описанных выше, обеспечивает возможность выполнять это перекрестное умножение эффективным способом (например, посредством того, что не используется более высокая точность, нежели фактически необходима).

ВАРИАНТЫ РЕАЛИЗАЦИИ

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

КОДЕР, ФИГ. 11A-11C

Иллюстративный вариант осуществления кодера проиллюстрирован общим способом на фиг. 11a. Кодер может быть мультимедийным кодером, сконфигурированным с возможностью для кодирования, например, аудио и/или видео сигналов. Кодер 1100 сконфигурирован с возможностью выполнять, по меньшей мере, один из вариантов осуществления, относящихся к способу, описанному выше со ссылкой на любую из фиг. 1-5. Кодер 1100 связан с такими же техническими признаками, целями и преимуществами, что и описанные ранее варианты осуществления, относящиеся к способу. В некоторых вариантах реализации, кодер связан с ограничениями в отношении памяти и/или сложности, такими как, например, когда кодер сконфигурирован с DSP с фиксированной точностью. Кодер будет описываться кратко, чтобы избегать излишнего повторения.

Кодер может осуществляться и/или описываться следующим образом:

Кодер 1100 сконфигурирован для пирамидального векторного квантования, включающего в себя так называемый точный поиск или точный поиск формы, где пирамидальный векторный квантователь, PVQ, сконфигурирован с возможностью брать целевой вектор x в качестве ввода и получает вектор y посредством итеративного добавления единичных импульсов во внутреннем цикле поиска по размерности. Входной вектор x имеет размерность N и L1-норму K. Кодер 1100 содержит схему обработки, или средство 1101 обработки и интерфейс 1102 связи. Схема 1101 обработки сконфигурирована с возможностью предписывать кодеру 1100, до входа в следующий внутренний цикл поиска по размерности для добавления единичного импульса: определять, на основе максимальной амплитуды импульса, maxampy, текущего вектора y, то, необходима ли большая, чем текущая битовая длина слова, чтобы представлять, способом без потерь, переменную, enloopy, относящуюся к накопленной энергии y, в наступающем внутреннем цикле по размерности. Интерфейс 1102 связи, который также может упоминаться как, например, интерфейс ввода/вывода (I/O), включает в себя интерфейс для отправки данных в и приема данных от других сущностей или модулей.

Схема 1101 обработки, как проиллюстрировано на фиг. 11b, может содержать средство обработки, такое как процессор 1103, например, CPU, и память 1104 для хранения или содержания инструкций. Память тогда содержит инструкции, например, в форме компьютерной программы 1105, которая, когда исполняются посредством средства 1103 обработки, предписывает кодеру 1100 выполнять действия, описанные выше.

Альтернативный вариант реализации схемы 1101 обработки показан на фиг. 11c. Схема обработки здесь содержит блок 1106 определения, сконфигурированный с возможностью предписывать кодеру 1100, до входа в следующий внутренний цикл поиска по размерности для добавления единичного импульса: определять, на основе максимальной амплитуды импульса, maxampy, текущего вектора y, необходима ли более высокая точность, нежели разрешенная с текущей битовой длиной слова, чтобы представлять, способом без потерь, переменную, enloopy, относящуюся к накопленной энергии y, в наступающем внутреннем цикле по размерности. Схема 1101 обработки может содержать больше блоков, как, например, блок 1107 точного поиска, сконфигурированный с возможностью предписывать кодеру исполнять внутренний цикл по размерности с некоторой битовой длиной слова и/или некоторой точностью.

Кодеры, описанные выше, могут быть сконфигурированы для разных вариантов осуществления, относящихся к способу, здесь описанных, таких как, например, чтобы выполнять вычисления внутреннего цикла с использованием более длинного битового слова, представляющего enloopy и возможно corrxy2, когда определяется, что необходима большая, чем текущая битовая длина слова, чтобы представлять enloopy. "Более длинное", здесь указывает на более длинную, чем текущая или начальная битовая длина слова.

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

Кодер, описанный выше, может содержаться в устройстве, таком как устройство связи. Устройство связи может быть пользовательским оборудованием (UE) в форме мобильного телефона, видеокамеры, модуля записи звука, планшета, настольного компьютера, портативного компьютера, TV приставки к телевизору или домашнего сервера/домашнего шлюза/домашней точки доступа/домашнего маршрутизатора. Устройство связи может в некоторых вариантах осуществления быть сетевым устройством связи, выполненным с возможностью для кодирования и/или транскодирования. Примерами таких сетевых устройств связи являются серверы, такие как серверы мультимедиа, серверы приложений, маршрутизаторы, шлюзы и базовые станции радиосвязи. Устройство связи также может быть выполнено с возможностью располагаться в, то есть, быть встроенным в, судне, таком как корабль, беспилотном летательном аппарате, самолете и дорожном транспортном средстве, таком как автомобиль, автобус или грузовик. Такое встроенное устройство обычно принадлежит к телематическому блоку транспортного средства или информационно-развлекательной системе транспортного средства.

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

Конкретные примеры включают в себя один или более подходящим образом сконфигурированных цифровых сигнальных процессоров и другие известные электронные схемы, например, дискретные логические элементы, взаимосвязанные, чтобы выполнять специализированную функцию, или специализированные интегральные схемы (ASIC).

Альтернативно, по меньшей мере, некоторые из этапов, функций, процедур, модулей, блоков и/или узлов, описанных выше, могут осуществляться в программном обеспечении, таком как компьютерная программа, для исполнения посредством подходящей схемы обработки, включающей в себя один или более блоков обработки. Программное обеспечение может переноситься посредством носителя, такого как электронный сигнал, оптический сигнал, радиосигнал, или считываемый компьютером запоминающий носитель до и/или во время использования компьютерной программы в устройстве связи.

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

Примеры схемы обработки включают в себя, но не ограничены этим, один или более микропроцессоров, один или более цифровых сигнальных процессоров, DSP, один или более центральных блоков обработки, CPU, и/или любую подходящую программируемую логическую схему, такую как одна или более программируемых пользователем вентильных матриц, FPGA, или один или более программируемых логических контроллеров, PLC. То есть, блоки или модули в компоновках в разных устройствах, описанных выше, могут осуществляться посредством комбинации аналоговых и цифровых схем, и/или одного или более процессоров, сконфигурированных с помощью программного обеспечения и/или встроенного программного обеспечения, например, сохраненного в памяти. Один или более из этих процессоров, также как другое цифровое аппаратное обеспечение, могут включаться в одиночную связанную с конкретным приложением интегрированную схему, ASIC, или несколько процессоров и различное цифровое аппаратное обеспечение могут распространяться среди нескольких отдельных компонентов, индивидуально ли упакованных или скомпонованных в систему на кристалле, SoC.

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

ДОПОЛНИТЕЛЬНЫЕ ИЛЛЮСТРАТИВНЫЕ ВАРИАНТЫ ОСУЩЕСТВЛЕНИЯ

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

Одним из аспектов является кодер/кодек, при этом кодер/кодек сконфигурирован с возможностью выполнять один, более, чем один или даже все из следующих этапов, проиллюстрированных, например, на фиг. 5-6:

- определение, вычисление или получение максимального абсолютного значения (xabsmax) входного целевого вектора (x(n)), например, согласно уравнениям 11 и 12 выше и как проиллюстрировано, например, с помощью этапа S1 на фиг. 5 в одном варианте осуществления,

- определение, вычисление или получение возможного сдвига вверх значения корреляции на основе, по меньшей мере, максимального абсолютного значения (xabsmax), например, посредством вычисления возможного сдвига вверх накопленного значения корреляции внутри цикла следующего цикла в 32-битном слове со знаком посредством уравнения 19 ниже и как проиллюстрировано с помощью этапа S2 на фиг. 5 в одном варианте осуществления,

- если количество окончательных единичных импульсов (K) оказывается более высоким, чем порог (tp), который, например, может быть 127 единичных импульсов, определять, например, отслеживать/сохранять, значение/информацию максимальной амплитуды импульса (maxampy), вычисленное, например, согласно уравнению 26 выше, вектора (y(n)), который может определяться согласно уравнениям 13 и 14 выше, и

-- определение/вычисление/принятие решения/выбор на основе сохраненной максимальной амплитуды импульса, например, посредством вычисления в соответствии с уравнениями 22 и 23 ниже и как проиллюстрировано посредством этапа S3 на фиг. 6, того, необходима ли или должна использоваться большая, чем некоторая длина слова, например, большая, чем 16-битное слово со знаком или большая, чем 32-битное слово со знаком, чтобы представлять энергию внутри цикла без потери, или, по существу, потери, какой-либо информации энергии,

-- представление члена/параметра/значения наилучшей возведенной в квадрат корреляции и члена/параметра/значения наилучшей накопленной энергии посредством большей, чем некоторая длина слова, например, 32-битных слов или 64-битных слов, если необходима большая, чем некоторая длина слова, и

-- если необходима меньше, чем некоторая длина слова, исполнение первого цикла,

-- если необходима большая, чем некоторая длина слова, исполнение второго, альтернативного цикла с "наилучшим до сих пор" (почти оптимальным) членом накопленной энергии и членом наилучшей возведенной в квадрат корреляции, представленными посредством слов большей, чем некоторая длина слова.

Второй цикл может быть более высокой точности и вычислительно более интенсивным циклом для единичного импульса высокой точности, чем первый цикл более низкой точности (то есть, по отношению ко второму циклу). Основанный на накопленной энергии внутри цикла выбор точности внутреннего цикла имеет тот эффект, что целевые подвекторы, которые имеют высокую пиковость, или имеют очень точную гранулярность (окончательное K является большим), будут или могут использовать цикл более высокой точности и больше процессорных циклов более часто, в то время как непиковые или малого импульса подвекторы гранулярности будут или могут более часто использовать цикл более низкой точности и меньше процессорных циклов.

Один аспект относится к устройству 1 связи, проиллюстрированному на фиг. 9, которое содержит кодер или кодек 2 для кодирования видео или аудио, например, кодер EVS.

Кодер или кодек может полностью или частично осуществляться как DSP, расположенный в устройстве связи. В одном первом варианте осуществления кодер/кодек сконфигурирован с возможностью осуществлять поиск формы PVQ на основе целевого подвектора (x(n)), количества конечных единичных импульсов (K), значения размерности подвектора (N) целевого подвектора и необязательно также одного или более значений усиления (gsub). Кодер или кодек также может быть сконфигурирован с возможностью осуществлять разделение диапазона PVQ, и в таком случае поиск формы PVQ также основывается на количестве/значении подвекторов диапазона (NS) и наибольшем усилении вектора усиления G, (gmax=max(G)=max(go... g(Ns-1)). Кодер или кодек дополнительно сконфигурирован с возможностью выводить из поиска формы PVQ целочисленный вектор (y) и/или подвектор формы xq(n), подлежащий использованию кодером для индексирования PVQ. Целочисленный вектор (y) содержит значения элементов и имеет такую же длину, что и значение размерности подвектора (N), и абсолютная сумма всех значений элементов равняется количеству единичных импульсов (K).

Кодер/кодек/устройство связи сконфигурирован с возможностью выполнять поиск формы PVQ, при этом кодер/кодек/устройство связи сконфигурирован с возможностью:

- определять, вычислять или получать (S1, S23) максимальное абсолютное значение (xabsmax) входного (целевого) вектора (x(n)), например, согласно уравнениям 11 и 12 выше,

- определять, вычислять или получать (S2,S28) возможный сдвиг вверх значения корреляции на основе, по меньшей мере, максимального абсолютного значения (xabsmax), например, посредством вычисления возможного сдвига вверх накопленного значения корреляции внутри цикла следующего цикла в 32-битном слове со знаком посредством уравнения 19 выше,

- если количество окончательных единичных импульсов (K) оказывается более высоким, чем порог (tp), который, например, может быть 127 единичных импульсов, отслеживать/сохранять (S30) значение/информацию максимальной амплитуды импульса (maxampy), вычисленное, например, согласно уравнению 26 выше, вектора (y(n)), который может определяться согласно уравнениям 13 и 14 выше, и

-- определять/вычислять/принимать решение/выбирать (S3, S32) на основе сохраненной максимальной амплитуды импульса, например, посредством вычисления в соответствии с уравнениями 22 и 23 выше, необходима ли или должна использоваться большая, чем некоторая длина слова, например, большая, чем 16-битное слово со знаком или большая, чем 32-битное слово со знаком, чтобы представлять энергию внутри цикла,

-- представлять (S34) член/параметр/значение наилучшей возведенной в квадрат корреляции и член/параметр/значение наилучшей накопленной энергии посредством большей, чем некоторая длина слова, например, 32-битных слов или 64-битных слов, если необходима большая, чем некоторая длина слова, и

-- если определяется меньше, чем некоторая длина слова, исполнять (S33) первый цикл,

-- если определяется большая, чем некоторая длина слова, исполнять (S35) второй, альтернативный цикл с членом наилучшей накопленной энергии и членом наилучшей возведенной в квадрат корреляции, представленными посредством слов большей, чем некоторая длина слова.

Вышеизложенный поиск формы PVQ, который может быть поиском формы PVQ ограниченной точности, в одном варианте осуществления выполняется посредством векторного квантователя, который является частью кодера/кодека и может осуществляться, по меньшей мере, частично, но также полностью, как блок DSP, который может располагаться в или быть выполнен с возможностью располагаться в устройстве связи. Таким образом, кодер/кодек может полностью или частично осуществляться как блок аппаратного обеспечения, например, DSP или программируемая вентильная матрица (FPGA). Однако он может в альтернативных вариантах осуществления осуществляться с помощью процессора общего назначения и компьютерной программы кодека, которая, когда исполняется на процессоре общего назначения, предписывает устройству связи выполнять один или более из этапов, упомянутых в абзаце выше. Процессор также может быть процессором вычислений с сокращенным набором команд (RISC).

Другим аспектом раскрытия здесь является, как указано в абзаце выше, компьютерная программа 6, проиллюстрированная на фиг. 10, и где один вариант осуществления полностью раскрыт посредством примера кода ANSI-C в приложении 1 ниже, такого как компьютерная программа кодера или компьютерная программа кодека, содержащая считываемый компьютером код, который, когда исполняется на процессоре/процессорном блоке 4 устройства 1 связи, предписывает устройству связи выполнять один или более из этапов, упомянутых в связи со способом в абзаце ниже, или любые из этапов, упомянутых в связи с фиг. 7.

Еще другим аспектом является способ поиска формы PVQ, выполняемый устройством связи/кодеком/кодером, при этом способ содержит один или более из следующих этапов:

- определение, вычисление или получение (S1) максимального абсолютного значения (xabsmax) входного (целевого) вектора (x(n)), например, согласно уравнениям 11 и 12 выше,

- определение, вычисление или получение (S2, S28) возможного сдвига вверх значения корреляции на основе, по меньшей мере, максимального абсолютного значения (xabsmax), например, посредством вычисления возможного сдвига вверх накопленного значения корреляции внутри цикла следующего цикла в 32-битном слове со знаком посредством уравнения 19 выше,

- если количество окончательных единичных импульсов (K) оказывается более высоким, чем порог (tp), который, например, может быть 127 единичных импульсов, отслеживание/сохранение значения/информации максимальной амплитуды импульса (maxampy), вычисленного, например, согласно уравнению 26 выше, вектора (y(n)), который может определяться согласно уравнениям 13 и 14 выше, и

-- определение/вычисление/принятие решения/выбор (S3) на основе сохраненной максимальной амплитуды импульса, например, посредством вычисления в соответствии с уравнениями 22 и 23 выше, того, необходима ли или должна использоваться большая, чем некоторая длина слова, например, большая, чем 16-битное слово со знаком или большая, чем 32-битное слово со знаком, чтобы представлять энергию внутри цикла,

-- представление члена/параметра/значения наилучшей возведенной в квадрат корреляции и члена/параметра/значения наилучшей накопленной энергии посредством большей, чем некоторая длина слова, например, 32-битных слов или 64-битных слов, если необходима большая, чем некоторая длина слова, и

-- если определяется меньше, чем некоторая длина слова, исполнение первого цикла,

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

Устройство связи может быть пользовательским оборудованием (UE) в форме мобильного телефона, видеокамеры, модуля записи звука, планшета, настольного компьютера, портативного компьютера, TV приставки к телевизору или домашнего сервера/домашнего шлюза/домашней точки доступа/домашнего маршрутизатора, и т.д., как определено выше.

Еще другим аспектом является считываемый компьютером запоминающий носитель 5 (см. фиг. 10), на котором хранится любой из вышеописанных вариантов осуществления компьютерной программы. Считываемый компьютером запоминающий носитель может быть в форме энергозависимой или энергонезависимой памяти, например, EEPROM (электрически стираемой PROM), FPGA, флэш-памяти (включающей в себя твердотельный накопитель), и накопителя на жестких дисках.

Один вариант осуществления устройства 1 связи проиллюстрирован на фиг. 9. Устройство связи содержит, для выполнения поиска формы PVQ, один, более, чем один или все из следующих блоков:

- первый блок определения, U1, для определения, вычисления или получения максимального абсолютного значения (xabsmax) входного (целевого) вектора (x(n)), например, согласно уравнениям 11 и 12 выше,

- второй блок определения, U2, для определения, вычисления или получения возможного сдвига вверх значения корреляции на основе, по меньшей мере, максимального абсолютного значения (xabsmax), например, посредством вычисления возможного сдвига вверх накопленного значения корреляции внутри цикла следующего цикла в 32-битном слове со знаком посредством уравнения 19 выше,

- блок хранения, U3, для отслеживания/сохранения значения/информации максимальной амплитуды импульса (maxampy), вычисленного, например, согласно уравнению 26 выше, вектора (y(n)), который может определяться согласно уравнениям 13 и 14 выше, если количество окончательных единичных импульсов (K) оказывается более высоким, чем порог (tp),

- блок выбора, U4 для определения/вычисления/принятия решения/выбора на основе сохраненной максимальной амплитуды импульса, например, посредством вычисления в соответствии с уравнениями 22 и 23 выше, того, необходима ли или должна использоваться большая, чем некоторая длина слова, например, большая, чем 16-битное слово со знаком или большая, чем 32-битное слово со знаком, чтобы представлять энергию внутри цикла,

- блок представления, U5, для генерирования члена/параметра/значения наилучшей возведенной в квадрат корреляции и члена/параметра/значения наилучшей накопленной энергии с длиной слова, например, 32-битными словами или 64-битными словами, которая является большей, чем некоторая длина слова, если большая, чем некоторая длина слова выбирается блоком выбора, и

- блок обработки внутреннего цикла, U6, для

-- исполнения первого цикла, если меньше, чем некоторая длина слова выбирается блоком выбора, и

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

Блоки, упомянутые в абзаце выше, могут содержаться в кодеке/кодере 2 в форме процессора DSP в блоке передачи данных и могут дополнительно содержаться в аппаратном векторном квантователе процессора DSP. В альтернативном варианте осуществления, все блоки в абзаце выше осуществляются в устройстве связи как программное обеспечение.

Как дополнительно проиллюстрировано на фиг. 9, устройство 1 связи также может содержать дополнительные блоки, относящиеся к кодеру/кодеку, и, в частности, блоки, относящиеся к векторному квантованию и поиску формы PVQ. Такие блоки сконфигурированы с возможностью обеспечивать возможность поисков формы согласно описанию и фигурам, содержащимся в этой заявке. Иллюстративные блоки, проиллюстрированные на фиг. 9, являются:

- блоком U7 разделения диапазона PVQ для выполнения необязательного этапа S21, описанного совместно с фиг. 7,

- блоком U8 сравнения для выполнения этапа S24, описанного совместно с фиг. 7 ниже,

- блоком U9 генерирования вектора PVQ для выполнения этапа S25, описанного ниже,

- блоком U10 генерирования начальных точек для выполнения этапа S26, описанного ниже,

- блоком U11 вычисления параметров для выполнения этапа S27, описанного ниже,

- блоком U12 назначения битов для, например, обеспечения K и N для поиска формы, и

- блоком U13 индексирования PVQ, который может рассматриваться как приемник вывода из поиска формы PVQ, здесь раскрытого,

- блоком U14 нормализации для выполнения этапа S36, описанного ниже, и

- блоком U15 вывода для выполнения этапа S37, описанного ниже.

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

- определять, вычислять или получать максимальное абсолютное значение (xabsmax) входного (целевого) вектора (x(n)), например, согласно уравнениям 11 и 12 выше,

- определять, вычислять или получать возможный сдвиг вверх значения корреляции на основе, по меньшей мере, максимального абсолютного значения (xabsmax), например, посредством вычисления возможного сдвига вверх накопленного значения корреляции внутри цикла следующего цикла в 32-битном слове со знаком посредством уравнения 19 выше,

- если количество окончательных единичных импульсов (K) оказывается более высоким, чем порог (tp), который, например, может быть 127 единичных импульсов, отслеживать/сохранять значение/информацию максимальной амплитуды импульса (maxampy), вычисленное, например, согласно уравнению 26 выше, вектора (y(n)), который может определяться согласно уравнениям 13 и 14 выше, и

-- определять/вычислять/принимать решение/выбирать на основе сохраненной максимальной амплитуды импульса, например, посредством вычисления в соответствии с уравнениями 22 и 23 выше, то, необходима ли или должна использоваться большая, чем некоторая длина слова, например, большая, чем 16-битное слово со знаком или большая, чем 32-битное слово со знаком, чтобы представлять энергию внутри цикла,

-- представлять член/параметр/значение наилучшей возведенной в квадрат корреляции и член/параметр/значение наилучшей накопленной энергии посредством большей, чем некоторая длина слова, например, 32-битных слов или 64-битных слов, если необходима большая, чем некоторая длина слова, и

-- если определяется меньше, чем некоторая длина слова, исполнять первый цикл,

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

Чтобы дополнительно проиллюстрировать аспекты и варианты осуществления, некоторые из них в последующем будут описываться совместно с фиг. 7-8.

Фиг. 8 обеспечивает общий вид стороны передачи развивающегося 3GPP EVS, включающего в себя кодер 3 EVS, который здесь содержится в устройстве 1 связи.

Фиг. 7 иллюстрирует некоторые этапы способа альтернативным способом, описывая некоторые варианты осуществления по отношению к вариантам осуществления, проиллюстрированным на фиг. 5-6. Даже хотя может говориться, что некоторые из этапов, упомянутых по отношению к фиг. 7, выполняются совместно с поиском формы PVQ, также следует понимать, что также может говориться, что некоторые из этапов выполняются до поиска формы PVQ. На необязательном первом этапе S21, выполняется разделение диапазона PVQ.

Целевые подвекторы формы, необязательно из этапа S21, принимаются на втором этапе S22, при этом, в зависимости от варианта осуществления, также могут приниматься gsub, gmax и Ns.

На третьем этапе S23, который соответствует этапу S1 на фиг. 5, определяется максимальное абсолютное значение целевого вектора, например, посредством сначала вычисления абсолютного значения подвектора x(n) целевого вектора и затем выбора наибольшего абсолютного значения подвектора.

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

Если на четвертом этапе S24 определяется, что целевой вектор равняется или ниже первого порога и/или усиление подвектора ниже или равняется второму порогу, то вектор PVQ создается на необязательном пятом этапе S25. Создание в одном варианте осуществления детерминированно создается посредством назначения половины K единичных импульсов первому положению (), и оставшихся единичных импульсов последнему положению (). Этот этап может совместно с четвертым этапом S24 рассматриваться как обход всего фактического поиска формы PVQ, но также может рассматриваться как подпрограмма в пределах контекста общей процедуры поиска формы PVQ.

На необязательном шестом этапе S26, начальное значение (начальная точка) для y, y_start, устанавливается для поиска формы PVQ для дальнейших вычислений, при этом начальное значение зависит от отношения между K и N. Если отношение является более большим, чем третье пороговое значение, которое может быть 0.5 единичных импульсов в расчете на коэффициент, первая проекция на K-1 подпирамиду используется в качестве начального vector_y_start на последующем этапе. Первая проекция может вычисляться как в уравнениях 13 и 14 выше. Если более низкое, чем третий порог, то начальный вектор y_start выбирается, чтобы начинать с 0 предварительно помещенных единичных импульсов.

В подготовке для последующих этапов поиска формы PVQ, все значения начального вектора в y_start устанавливаются на ноль на седьмом этапе S27. На этом этапе вычисляются первый параметр, здесь называемый накопленное количество единичных импульсов, pulsetot, и второй параметр, здесь накопленная корреляция, corrxy(pulsetot), и третий параметр, здесь называемый накопленная энергия energyy(pulsetot) для начальной точки, например, согласно уравнениям 15-17 соответственно. Четвертый параметр, здесь называемый enloopy(pulsetot) также может вычисляться на этом этапе согласно уравнению 18 выше.

На восьмом этапе S28, начинается поиск формы PVQ, или рассматривая это альтернативным способом, начинается вторая, часть точного поиска для поиска формы PVQ для оставшихся единичных импульсов вплоть до K с помощью ранее полученных, определенных или вычисленных K, N, X_abs, max_xabs, и y, и в некоторых вариантах осуществления также gsub, gmax и NS. Подробные этапы некоторых вариантов осуществления этого точного поиска подробно проиллюстрированы посредством, например, фиг. 6, но можно акцентировать, что в некоторых вариантах осуществления точный поиск содержит определение пятого параметра/значения, здесь называемый сдвиг вверх значения корреляции, corrupshift, вычисляется для, по меньшей мере, некоторых, и в некоторых вариантах осуществления всех, единичных импульсов, для которых осуществляется точный поиск или внутренний цикл. В некоторых вариантах осуществления возможный сдвиг вверх накопленного значения корреляции внутри цикла следующего цикла в 32-битном слове со знаком вычисляется на основе уравнения 19 выше и corrupshift затем используется в качестве ввода в вычисление значения корреляции corrxy в уравнении 20.

На девятом этапе S29, про который можно говорить, что он является частью точного поиска формы PVQ, определяется, оказывается ли, что количество окончательных единичных импульсов K больше, чем третий порог, tp, для количества окончательных единичных импульсов. Если это имеет место, то на десятом этапе S30, максимальная амплитуда импульса maxampy сохраняется.

На одиннадцатом этапе S31, вычисляется шестой параметр, enmargin, согласно, например, уравнению 22.

На двенадцатом этапе S32, шестой параметр сравнивается с четвертым пороговым значением, которое соответствует некоторой длине слова.

Если ответом является Да (на S32 из фиг. 7) или Ложь (в примере кода Ansi в Приложении 1), то есть, enmargin в иллюстративном уравнении/решении 23 равняется или больше, чем четвертый порог "16", то на этапе S33, исполняется первый, более быстрый и "более грубый" цикл, чем во втором цикле точного поиска. Варианты осуществления первого цикла показаны, например, на фиг. 6.

Если ответом является "Нет" (на S32 из фиг. 7) или Истина (в примере кода Ansi в Приложении 1), то есть, enmargin в иллюстративном уравнении/решении 23 меньше, чем "16", то на четырнадцатом этапе S34, седьмой параметр, член/параметр/значение наилучшей возведенной в квадрат корреляции, и восьмой параметр, член/параметр/значение наилучшей накопленной энергии, генерируются/преобразуются, чтобы стать больше, чем некоторая длина слова, которые затем на пятнадцатом этапе S35 используются во втором, более подробном внутреннем цикле точного поиска. Варианты осуществления второго цикла показаны более подробно, например, на фиг. 6.

На шестнадцатом этапе S36, по меньшей мере, каждому ненулевому элементу подвектора PVQ назначается свой должный знак и вектор L2-нормализуется к единичной энергии. Если, в некоторых вариантах осуществления, диапазон был разделен, то он масштабируется с помощью усиления подвектора gsub. Нормализованный xq также может определяться на основе уравнения 28. Иллюстративная процедура для этого этапа более подробно описана выше.

На семнадцатом этапе S37, нормализованный xq и y выводятся из обработки поиска формы PVQ и пересылаются в обработку индексирования PVQ, включенную, например, в кодек.

НЕКОТОРЫЕ ПРЕИМУЩЕСТВА ВАРИАНТОВ ОСУЩЕСТВЛЕНИЯ И АСПЕКТОВ

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

Предложенный способ/алгоритм масштабирования корреляции, использующий предварительный анализ текущей накопленной максимальной корреляции, улучшает эффективность для (минимального) SNR наихудшего случая при осуществлении поиска квантования формы PVQ с ограниченной точностью. Адаптивный критерий для предварительного анализа запаса по корреляции требует очень незначительной дополнительной сложности. Дополнительно никакая дорогостоящая предварительная нормализация целевого вектора x к, например, единичной энергии не требуется.

Адаптивный критерий, использующий отслеживание максимальной амплитуды импульса в предварительном результате, за которым следует предварительный анализ накопленной энергии наихудшего случая, для, например, принятия мягкого решения в отношении 16/32-битной точности для внутреннего цикла требует очень мало дополнительной вычислительной сложности и обеспечивает хорошее компромиссное соотношение, где сложность может удерживаться низкой, в то время как метрики корреляции высокой точности и энергии высокой точности все еще используются для релевантных входных сигналов, и дополнительно субъективно важным пиковым сигналам будет назначаться большая точность. Другими словами, по меньшей мере, некоторые из вариантов осуществления и аспектов улучшают функционирование самого компьютера/процессора.

В Таблицах 2/3 выше в приложении 2 ниже, можно обнаружить, что стоимость для иллюстративной основанной на PVQ системы, использующей адаптивную логику точности, будет 6.843 WMOPS, если использовать 32-битную точность энергии и возведенной в квадрат корреляции во всех (для любого K) внутренних циклах поиска стоимость поднимается к 10.474 WMOPS.

ЗАКЛЮЧИТЕЛЬНЫЕ ЗАМЕЧАНИЯ

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

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

Также следует отметить, что в некоторых альтернативных вариантах осуществления, функции/действия, отмеченные в блоках, могут происходить вне порядка, отмеченного в блок-схемах последовательности операций. Например, два блока, показанные в последовательности, могут фактически исполняться, по существу, параллельно, или блоки могут иногда исполняться в обратном порядке, в зависимости от вовлеченных функциональных возможностей/действий. Более того, функциональные возможности заданного блока из блок-схем и/или диаграмм последовательности операций могут разделяться на множество блоков, и/или функциональные возможности двух или более блоков блок-схем и/или диаграмм последовательности операций могут, по меньшей мере, частично объединяться. В заключение, могут добавляться/вставляться другие блоки между блоками, которые проиллюстрированы, и/или блоки/операции могут пропускаться без отхода от объема новых понятий.

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

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

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

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

АББРЕВИАТУРЫ

N размерность вектора

Ns размерность подвектора

x целевой вектор

xq квантованный вектор формы

yfinal целочисленный вектор, подчиненный L1-норме K

K количество окончательных единичных импульсов

k индекс количества накопленных единичных импульсов

n коэффициент или индекс отсчета

i индекс подвектора

MDCT Модифицированное дискретное косинусное преобразование

PVQ Пирамидальный векторный квантователь (квантование)

WC Наихудший случай

WMOPS Взвешенный миллион операций в секунду

AccEn Накопленная энергия

ROM Постоянная память

PROM Программная ROM

SNR Отношение сигнала к шуму

EVS Усовершенствованная услуга передачи речи

3GPP Проект партнерства 3-его поколения

DSP Цифровой сигнальный процессор

CELT ограниченное по энергии преобразование с перекрытием

IETF Инженерный совет Интернета

MAC Умножение с накоплением

ACELP алгебраическое линейное предсказание с кодовым возбуждением

EPS Машинное эпсилон

ПРИЛОЖЕНИЕ 1: ИЛЛЮСТРАТИВНАЯ РЕАЛИЗАЦИЯ ВАРИАНТА ОСУЩЕСТВЛЕНИЯ В КОДЕ ANSI-C

Ниже приводится пример одного варианта реализации одного иллюстративного варианта осуществления в коде ANSI C с использованием STL 2009 G.191 виртуального 16/32-битного процессора (моделирования процессора DSP).

static

Word16 max_val_fx(/* выход: максимальное значение во входном векторе */

const Word16 *vec, /* вход: входной вектор */

const Word16 lvec /* вход: длина входного вектора */

)

{

Word16 j,tmp;

tmp=vec[0]; move16();

FOR (j=1; j<lvec; j++)

{

tmp=s_max(vec[j],tmp);

}

return tmp;

}

/* Внутренний цикл поиска для одного одиночного дополнительного единичного импульса, начиная с pulse_tot, с информацией о требуемой точности энергии/понижении масштаба для цикла по размерности в en_dn_shift, и текущим абсолютным значением max_xabs, подлежащим использованию для почти оптимального повышения масштаба корреляции. Возвращает индекс наилучшего расположенного единичного импульса в imax

*/

static

Word16 one_pulse_search(const Word16 dim, /* размерность вектора */

const Word16* x_abs, /* абсолютные значения вектора */

Word16* y, /* выходной вектор */

Word16 *pulse_tot_ptr,

Word32* L_xy_ptr, /* накопленная корреляция */

Word32* L_yy_ptr, /* накопленная энергия */

Word16 high_prec_active,

Word16 en_dn_shift,

Word16 max_xabs) /* текущая накопленная максимальная амплитуда для импульсов */

{

Word16 i, corr_up_shift, corr_tmp, imax, corr_sq_tmp, en_max_den, cmax_num, en_tmp;

Word32 L_tmp_en_lc, L_tmp_corr;

Word32 L_tmp_en, L_en_max_den, L_corr_sq_max, L_tmp_corr_sq;

Word32 L_left_h, L_right_h;

UWord32 UL_left_l, UL_right_l, UL_dummy;

#ifndef NONBE_PVQ_SEARCH_FIX

Word16 corr_margin;

#endif

#ifdef BE_CLEAN_PVQ_SEARCH

Word32 L_tmp;

UWord32 UL_tmp;

UWord16 u_sgn;

#endif

/* максимизация точности корреляции, до каждого добавления единичного импульса в векторе */

corr_up_shift=norm_l(L_mac(*L_xy_ptr, 1, max_xabs));

/* предварительный анализ обновления L_xy наихудшего случая в цикле по размерности, 2 операции */

/* чистый код BE, с разделенными циклами низкой/высокой точности */

/* активация секции поиска en/corr низкой сложности при условии, если результирующая энергия находится внутри пределов */

/* обычный случай для более высоких размерностей */

IF(high_prec_active == 0)

{

en_max_den=0; /*move16()*/; /* OPT: перемещение сохраненного посредством использования high_prec_active как

en_max_den */

cmax_num=-1; move16(); /* требуется принудительное 1-ое обновление для n==0 */

FOR(i=0; i < dim; i++) /* FOR 3 операции */

{

L_tmp_corr=L_shl(L_mac(*L_xy_ptr,1,x_abs[i]), corr_up_shift); /* фактическая цель внутри цикла */

corr_tmp=round_fx(L_tmp_corr);

corr_sq_tmp=mult(corr_tmp, corr_tmp); /* CorrSq, является 16-битным для перекрестного умножения низкой сложности */

L_tmp_en_lc=L_mac(*L_yy_ptr, 1,y[i]);

/*Q1 результат, энергия может охватывать вплоть до ~14+1(Q1)+1(знак)=16 бит, 1 операция */

/* extract_l без сдвига может всегда использоваться для этой секции, так как энергия гарантированно остается в нижнем слове, 1 операция */

en_tmp=extract_l(L_tmp_en_lc);

/* L_shl+round_fx также может использоваться также, но тогда добавляет стоимость сдвига вверх (2-3 операции)*/

/* 16/32-битное сравнение WC (4+1+1+(1+1+1)=9 */

/* corr_sq_tmp/en_tmp_den > cmax_num/en_max_den */

/* corr_sq_tmp * en_max_den > cmax_num * en_tmp */ /* IF 4 операции */

IF(L_msu(L_mult(corr_sq_tmp, en_max_den),cmax_num, en_tmp) > 0) /* 2 операции */

{

cmax_num=corr_sq_tmp; move16(); /* 1 операция */

en_max_den=en_tmp; move16(); /* 1 операция */

imax=i; move16(); /* 1 операция */

}

} /* размерность */

}

ELSE

{ /* Секция высокого разрешения, активируемая, когда энергия вектора становится высокой (пиковый или много импульсов)

*/

/* BASOP оператор Mpy32_32_ss используется, чтобы обеспечивать возможность более высокого разрешения для обоих членов CorrSq и Energy */

/* Эффективность: близка к ссылке для числа с плавающей точкой */

L_en_max_den=L_deposit_l(0); /* 1 операция */

L_corr_sq_max=L_deposit_l(-1); /* требуется принудительное 1-ое обновление */ /* 1 операция */

FOR(i=0; i < dim; i++) /* FOR 3 операции */

{

L_tmp_corr=L_shl(L_mac(*L_xy_ptr,1,x_abs[i]), corr_up_shift);/* фактическое значение WC внутри цикла */

Mpy_32_32_ss(L_tmp_corr,L_tmp_corr, &L_tmp_corr_sq, &UL_dummy);

/* CorrSq 32 бита, 4 операции */

L_tmp_en=L_mac(*L_yy_ptr, 1, y[i]); /* Q1, энергия может охватывать вплоть до знак+19 бит, 1 операция */

/* Для наивысшей точности используются пары максимально сдвинутых вверх значений со знаком 32×32 бит */

/* (L_tmp_corr_sq/L_tmp_en) > (L_corr_sq_max/L_en_max_den) */

/* (L_tmp_corr_sq * L_en_max_den) > (L_corr_sq_max * L_tmp_en) */

Mpy_32_32_ss(L_en_max_den, L_tmp_corr_sq, &L_left_h, &UL_left_l); /* 4 операции */

Mpy_32_32_ss(L_tmp_en, L_corr_sq_max, &L_right_h, &UL_right_l); /* 4 операции */

/* 32/64-битное сравнение WC (1+1+2×2+4+(2+2+1)=15 */

L_tmp=L_sub(L_left_h, L_right_h); /* проверка для высокого слова со знаком, 1 операция */

UL_tmp=UL_subNs(UL_right_l, UL_left_l, &u_sgn);

/* проверка для нижнего беззнакового слова, отметим переключение вследствие ">=" в UL_subNs, 1 операция */

IF((L_tmp > 0) || ((L_tmp == 0) && (u_sgn != 0))) /* IF 4 операции */

{

L_corr_sq_max=L_tmp_corr_sq; move32(); /* 2 операции */

L_en_max_den=L_tmp_en; move32(); /* 2 операции */

imax=i; move16(); /* 1 операция */

}

} /* цикл по размерности */

}

/* в заключение добавление вклада найденного единичного импульса к последним L_xy, Lyy, для следующего цикла для импульса */

*L_xy_ptr=L_mac(*L_xy_ptr, x_abs[imax], 1); /* xy_flt += xabs[imax]; Q12+1 */

*L_yy_ptr=L_mac(*L_yy_ptr, 1, y[imax]); /* yy_flt += y[imax]; */

y[imax]=add(y[imax],1); move16(); /* Q0 добавленный импульс */

(*pulse_tot_ptr)=add((*pulse_tot_ptr),1); /* увеличение полной суммы импульсов */

return imax;

}

/*-----------------------------------------------------------------------*

* Функция pvq_encode_fx() *

* *

* Базовый алгоритм поиска PVQ: *

* Избирательная проекция в L1-норме на более низкую ~(K-1) пирамиду *

* за которой следует ACELP-подобный точный поиск добавления единичного импульса *

*-----------------------------------------------------------------------*/

void pvq_encode_fx(

Encoder_State_fx *st_fx,

const Word16 *x, /* вход: вектор для квантования Q15-3=>Q12 */

Word16 *y, /* выход: исходные импульсы (немасштабированное короткое) Q0 */

Word16 *xq, /* выход: квантованный вектор Q15 */

const short pulses, /* вход: количество назначенных импульсов */

const short dim, /* вход: Длина вектора == N */

const Word16 neg_gain /* вход: -усиление подвектора мы используем -отрицательное усиление в Q15 0..1 */

)

{

Word16 i;

Word16 pulse_tot;

Word16 xabs[PVQ_MAX_BAND_SIZE];

Word16 max_xabs;

Word32 L_xsum;

Word32 L_proj_fac;

Word32 L_yy, L_xy;

Word16 max_amp_y, imax;

Word16 k, en_margin, en_dn_shift, high_prec_active;

Word32 L_num, L_tmp;

Word16 proj_fac, tmp, shift_den,shift_num,shift_delta, num,den;

UWord16 u16_tmp;

Word16 dim_m1;

Word32 L_isqrt;

Word16 neg_gain_norm, shift_tot;

Word16 high_pulse_density_flag;

PvqEntry_fx entry;

/* Создание абсолютного вектора и вычисление суммы абсолютного вектора */

L_xsum=L_deposit_h(0);

max_xabs=-1; move16();

FOR(i=0; i < dim; i++)

{

xabs[i]=abs_s(x[i]); move16(); /* Q12 */

max_xabs=s_max(max_xabs, xabs[i]); /* для эффективного масштабирования корреляции поиска */

L_xsum=L_mac0(L_xsum, 1, xabs[i]); /* остается в Q12 */

y[i]=0; move16(); /* инициализация */

}

test();

IF(L_xsum == 0 || neg_gain == 0)

{ /* случай нулевого ввода или нулевого усиления */

/* поместить "половину" суммы импульсов в первое и последнее, или все импульсы в положение 0 */

pulse_tot=pulses; move16();

dim_m1=sub(dim,1);

y[dim_m1]=0; move16();

y[0]=shr(pulses,1); move16();

y[dim_m1]=add(y[dim_m1], sub(pulses, y[0])); move16();

L_yy=L_mult(y[0],y[0]); /* L_yy необходимо для нормализации */

if(dim_m1 != 0) {

L_yy=L_mac(L_yy, y[dim_m1],y[dim_m1]); /* (одиночный базовый оператор (basop)) */

}

}

ELSE

{ /* обычный поиск */

/* proj_fac_flt=(pulses - 1)/xsum_flt; */ /* нормализация к L1 норме=абсолютная k-1 пирамида */

num=sub(pulses,1);

high_pulse_density_flag=0; move16();

if (sub(pulses, shr(dim, 1)) > 0)

{

high_pulse_density_flag=1; move16();

}

test();

IF((num > 0) && (high_pulse_density_flag != 0))

{

shift_den=norm_l(L_xsum); /* ввод x_sum Q12 */

den=extract_h(L_shl(L_xsum, shift_den)); /* теперь в Q12+shift_den */

L_num=L_deposit_l(num);

shift_num=sub(norm_l(L_num),1);

L_num=L_shl(L_num, shift_num); /* теперь в Q0+shift_num-1 */

proj_fac=div_l(L_num, den); /* L_num всегда должно быть меньше, чем den<<16 */

shift_delta=sub(shift_num,shift_den);

L_proj_fac=L_shl(L_deposit_l(proj_fac), sub(9, shift_delta)); /* приведение к фиксированному Q12 */

}

pulse_tot=0; move16();

L_yy=L_deposit_l(0);

L_xy=L_deposit_l(0);

/* Нахождение начального положения на более низкой подпирамиде, если плотность импульсов больше, чем 0.5 */

IF((num > 0) && (high_pulse_density_flag != 0))

{

FOR(i=0; i < dim; i++) /* max 64 */

{

/* y_flt[i]=(short)floor(xabs_flt[i] * proj_fac_flt); */ /* FLOAT усечение пирамиды */

/* y[i]=shr(xabs[i]*L_proj_fac); */ /* BASOP усечение пирамиды */

Mpy_32_16_ss(L_proj_fac,xabs[i],&L_tmp,&u16_tmp); /*Q12*Q12+1 */

y[i]=extract_l(L_shr(L_tmp, 12+12-16+1)); move16(); /* "усечение" пирамиды */

/* Q12*Q12 -> Q0 */

pulse_tot=add(pulse_tot, y[i]); /* Q0 */

L_yy=L_mac(L_yy, y[i], y[i]); /* Энергия, результат будет масштабирован вверх посредством 2 посредством L_mac */

L_xy=L_mac(L_xy, xabs[i], y[i]); /* Корреляция, Q0*Q12+1 --> Q13 */

}

}

/* Описание цикла точного поиска PVQ */

/* Исполнение ACELP-подобного полного поиска CorrSq/Energy */

/* базовая логика поиска состоит в том, чтобы итеративно тестировать добавление одного единичного импульса в каждое положение n в выходном векторе y

и обновлять члены корреляции и энергии.

Rxy(k,n)=Rxy(k-1)+1*abs(x(k,n)) % добавление цели, умноженной на единичную корреляцию

Ryy(k,n)=Ryy(k-1)+2*y(k-1,n)+1^2 % добавление вклада единичной энергии

RxySq(k,n)=Rxy(k,n)*Rxy(k,n)

минимизация (-Rxy(k,n)/Sqrt(Ryy(k,n))), по n и k

(или эквивалентно, максимизация (RxySq(k,n)/Ryy(k,n)), по n и k)

RxySq(k,n) bestRxySq

--------- > --------- ? обновление наилучшего кандидата

Ryy(k,n) bestRyy

bestRyy * RxySq(k,n) > bestRxySq * Ryy(k,n) ? обновление наилучшего кандидата

Разное:

1^2 в Ryy(k,n) может добавляться до цикла по размерности

Ryy(k,n) может необязательно предварительно масштабироваться с понижением посредством 2.0, чтобы избегать одного умножения/сдвига

Rxy(k,n) может динамически масштабироваться для каждого цикла для единичного импульса, чтобы оптимизировать RxySq.

CorrSqTerm=(Rxy(k,n))^2, должен иметь максимальную точность в переменной Word16/Word32

Член энергии:Ryy(k, n)

должен не становиться нулем, то есть, наиболее часто иметь достаточную точность, чтобы не становиться усеченным

то есть, предпочтительно использовать 32-битную переменную, если больше, чем 127 импульсов накоплены в Q1.

k=127=>log2(127^2)=13.9774 бит, умещается в Q1 со знаком, с Q1 предварительное деление на 2 работает

k=255=>log2(255^2)=15.9887 бит, то есть, масштабирование 1 бит, умещается в Q1 беззнаковом 16-битном значении

Аспекты размерности:

размерность 6 и более всегда является безопасной по отношению к 16-битной энергии, так как максимум импульсов равняется 96

(для коротких кодовых слов 1+31 бит)

размерностям 5, 4, 3, 2 может назначаться больше, чем 127 импульсов (или меньше)

для размерности 1 в действительности нет необходимости в поиске, только знак является релевантным.

В текущее время мы имеем KMAX=512, или более точно для DIM 5 kmax равняется 238

DIM 4,3,2,1 kmax равняется 512

Беззнаковая арифметика DSP также может использоваться,

но тогда случай "запуска"/ теперь отрицательная сигнальная метка должна обрабатываться специальным способом

и дополнительно в текущее время UL_mac,UL_mac0,UL_msu,UL_msu0 является не доступным, как STL беззнаковые базовые операторы (basop)

Чтобы обеспечивать, чтобы код поиска PVQ работал эффективно, мы делаем:

1. Всегда используем почти оптимальное основанное на norm_l динамическое повышение масштаба члена корреляции,

посредством анализа накопленной корреляции до сих пор. (Rxy для k-1 импульсов)

и использования предварительно проанализированного максимально возможного целевого значения max_xabs.

2. Избирательно используем 16 или 32-битное представление члена энергии,

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

Дополнительно, если члену энергии Ryy нужно более, чем 16 бит, мы переключаемся на 32-битное представление энергии

и также более высокую 32-битную точность для корреляции Rxy и

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

*/

/* Rxy_max=(k,*)=max(L_xy+1*max_x_abs)

анализ, необходимый для почти оптимальной нормализации L_xy (corr, corrSq) */

/* Ryy_max(k,*)=max(L_yy(k-1)+.5+1*max_amp_y(k-1))

анализ, необходимый для выбора точности энергии (L_yy), когда импульсы > 127, ((127^2)*2 умещается в Signed Word16) */

L_yy=L_shr(L_yy,1); /* уменьшение масштаба посредством 2 для области цикла поиска */

IF (sub(pulses,127)<=0)

{ /* LC внутренний цикл, входит здесь всегда для размерностей 6 и более высоких, и также иногда для размерностей 1.. 5 */

/* (если высокая точность энергии является неактивной, max_amp_y не необходимо, нет обновления max_amp_y(k-1)) */

FOR (k=pulse_tot; k<pulses;k++){

L_yy=L_add(L_yy,1); /* добавление.5 к энергии для pulse_tot+1 */

imax=one_pulse_search(dim, xabs,y,&pulse_tot,&L_xy,&L_yy,0, 0,max_xabs);

}

}

ELSE

{ /* внутренние циклы HC или LC+HC */

max_amp_y=max_val_fx(y, dim); /* это осуществляет цикл по максимум 5 значениям */

/* max_amp_y из спроецированного y необходимо, когда pulses_sum превосходит 127 */

/* Первая секция с 32-битной энергией неактивна, тем не менее выполняется обновление max_amp_y */

FOR(k=pulse_tot; k<128; k++){

L_yy=L_add(L_yy,1); /* добавление.5 */

imax=one_pulse_search(dim, xabs,y,&pulse_tot,&L_xy,&L_yy,0,0,max_xabs);

max_amp_y=s_max(max_amp_y, y[imax]);

}

/* Вторая секция с более большим количеством импульсов, адаптивно выбирается 32-битная точность энергии, выполняется обновление max_amp_y */

FOR(k=pulse_tot; k<pulses; k++){

L_yy=L_add(L_yy,1); /* добавление.5 */

en_margin=norm_l(L_mac(L_yy,1, max_amp_y)); /* нахождение максимального "добавления", запаса, ~2 операции */

en_dn_shift=sub(16, en_margin); /* вычисление сдвига в нижнее слово */

high_prec_active=1; move16();

if(en_dn_shift <= 0){ /* использование 32-битной энергии, только если фактически необходимо */

high_prec_active=0; move16();

}

/* 32-битная энергия и корреляция адаптивно активны, выполняется обновление max_amp_y */

imax=one_pulse_search(dim,xabs,y,&pulse_tot,&L_xy,&L_yy,high_prec_active, en_dn_shift, max_xabs);

max_amp_y=s_max(max_amp_y, y[imax]);

}

}

L_yy=L_shl(L_yy,1); /* yy= yy*2.0 */ /* компенсация сдвига вниз энергии анализа цикла поиска посредством 1, чтобы делать энергию правильной для вычисления единичного/обратного усиления */

}

/* Применение масштабирования (L2) нормализации единичной энергии, всегда, по меньшей мере, один импульс, таким образом, проверка деления на ноль не нужна */

L_isqrt=L_deposit_l(0);

IF(neg_gain != 0){

L_isqrt=Isqrt(L_shr(L_yy,1)); /* Замечание: один одиночный коэффициент усиления, который подходит, не вычисляется */

}

shift_num=norm_s(pulse_tot); /* учет максимальной возможной амплитуды импульса в y, может использоваться, даже когда max_amp_y не доступно. */

shift_den=norm_s(neg_gain); /* учет сдвига понижающего масштабирования усиления */

neg_gain_norm=shl(neg_gain, shift_den); /* вплоть до 10 дБ потеря без этой нормы */

shift_tot=sub(add(shift_num, shift_den), 15);

/* DSP OPT: чтобы сохранять среднюю сложность, специальный цикл может осуществляться для случая общего усиления==1.0 */

/* DSP OPT PROM: повторное использование общего цикла нормализации декодера */

L_isqrt=L_negate(L_isqrt);

FOR(i=0; i < dim; i++)

{

tmp=shl(y[i],shift_num); /* сдвинутое вверх abs(y[i]) используется в масштабировании */

if(x[i] < 0)

{

tmp=negate(tmp); /* применение знака */

}

if(y[i] != 0)

{

y[i]=shr(tmp, shift_num); move16(); /* обновляет знак y[i}, ~диапазон -/+512), перемещение массива */

}

Mpy_32_16_ss(L_isqrt, tmp, &L_tmp, &u16_tmp); /* Q31*Q(0+x)+1 */

Mpy_32_16_ss(L_tmp, neg_gain_norm, &L_tmp, &u16_tmp); /* Q31*Q(0+x) *Q15+1 */

L_tmp=L_shr(L_tmp, shift_tot); /* Q31+x */

xq[i]=round_fx(L_tmp); move16(); /* Q15, перемещение массива */

L_xq[i]=L_tmp; /* Q31 в текущее время не используется */

}

/* индексирование найденного вектора PVQ в короткие кодовые слова */

entry=mpvq_encode_vec_fx(y, dim, pulses);

/* отправка короткого кодового слова (слов) в кодер диапазона */

rc_enc_bits_fx(st_fx, UL_deposit_l(entry.lead_sign_ind), 1); /* 0 или 1 */

IF( sub( dim, 1) != 0 )

{

rc_enc_uniform_fx(st_fx, entry.index, entry.size);

}

return;

Вышеизложенный код должен быть легким для чтения для всех специалистов в данной области техники и не должен необходимо объясняться более подробно. Однако для не специалиста следует упомянуть, что реляционный оператор "==" является оператором, который в примере "A==B" возвращает логическое значение, установленное на логическую 1 (истина), когда значения A и B являются равными; и в противном случае возвращает логический 0 (ложь). L_mac является умножением с накоплением, что означает, что L_mac (L_v3, v1, v2)=L_v3+v1*v2.

ПРИЛОЖЕНИЕ 2: ТАБЛИЧНЫЕ РЕЗУЛЬТАТЫ МОДЕЛИРОВАНИЯ

ПРЕДПОСЫЛКИ МОДЕЛИРОВАНИЯ

Варианты осуществления раскрытия отсюда были смоделированы. Для всех проведенных моделирований поиска формы PVQ, используемый битрейт был 64000 бит/с, и кодек управлялся в режиме MDCT, с начальными размерами поддиапазонов коэффициентов MDCT, равными [8, 12, 16, 24, 32] коэффициентов. Эти диапазоны могут очень хорошо разделяться на более малые части диапазонов, при этом каждая представляется посредством подвектора, посредством алгоритма разделения диапазонов PVQ. Например, диапазон размера 8 может разделяться на более малую подчасть, например, "4, 4" или "3,3,2", если ему назначено достаточно бит. Обычно, каждый диапазон разделяется таким образом, что максимум 32 бита могут использоваться для кодирования формы каждого окончательного подвектора.

В этом осуществлении индексирования PVQ диапазон размера 8 может иметь вплоть до 36 единичных импульсов, подчасть размера 7 может иметь вплоть до 53 единичных импульсов, часть размера 6 может иметь вплоть до 95 единичных импульсов, часть размера 5 может иметь вплоть до 238 единичных импульсов, часть размера 4,3,2,1 может иметь вплоть до 512 единичных импульсов. Так как более короткие части с большим количеством импульсов создаются динамически посредством разделения диапазонов, они являются более редкими, чем более длинные размеры подвекторов. Цифры WMOPS в таблицах результатов ниже включают в себя: (предварительный поиск PVQ, точный поиск PVQ, нормализацию PVQ и индексирование PVQ). Цифры "% идентичных" в таблицах результатов ниже, являются количеством идентичных векторов, найденных в вычисленном алгоритме поиска формы ограниченной точности, по сравнению с неограниченным поиском формы PVQ с плавающей точкой.

Таблицы результатов

Импульсы <= 127,
Алгоритм
En{биты для энергии} x CorrSq{биты для corrSq}
Минимальное SNR (дБ) Сегментное SNR (дБ) % идентичных векторов WMOPS наихудшего случая Среднее WMOPS Замечание
Смешанный
"En16 x CorrSq16"/"En32 x CorrSq32",
предварительный анализ max(x_abs)
4,771 188,803 99,3 6,843 5,496 Всегда используется 16×16, WC (наихудший случай) в 16×16
Фиксированный "En16 x CorrSq16"
предварительный анализ max(x_abs)
4,771 188,803 99,3 6,843 Никакого изменения, так как энергия никогда не превосходит 16 бит
"En16 x CorrsSq16" с использованием известного из уровня техники способа масштабирования корреляции "OPUS", с использованием накопленного количества единичных импульсов. -6,021 180,556 94,6 6,826 5,476 Алгоритм является более плохим в отношении битов (меньше минимальное SNR, меньше идентичных попаданий), при очень похожей сложности
Фиксированный "En32 x CorrSq16",
предварительный анализ max(x_abs)
4,771 188,803 99,3 8,970 6,961 Излишне использовать En32 для импульсов <=127, так как энергия никогда не превосходит динамику 16 бит
Фиксированный "En16 x CorrSq32",
предварительный анализ входного max(x_abs)
190,0 190,0 100 9,386 7,248 требуется дополнительно 2.5 WMOPS для последних 0.7% попаданий
Фиксированный "En32 x CorrSq32",
предварительный анализ max(x_abs)
190,0 190,0 100 10,474 7,999 Излишнее 0.9 WMOPS увеличение по сравнению с фиксированным
"En16 x CorrSq32"

Таблица 1 Результаты для окончательного K <= 127

Импульсы > 127
Алгоритм
En{биты для энергии} x CorrSq{биты для corrSq}
Минимальное SNR
(дБ)
Сегментное SNR
(дБ)
% идентичных векторов WMOPS наихудшего случая Среднее WMOPS Замечание
Смешанный "En16 x CorrSq16"/
"En32 x CorrSq32" , управляемый посредством AccEn,
предварительный анализ ввода,
управляемая точность накопленной энергии
32,686 160,316 80,4% 6,843
(WC все еще от секций 16×16)
5,496 Достаточно хорошее решение
WC все еще для 16×16, WC не увеличивается
Смешанный "En16 x CorrSq16"/
"En16 x CorrSq32" , управляемый посредством AccEn,
предварительный анализ ввода,
управляемая точность накопленной энергии
32,686 130,258 59,3% не применимо не применимо Информация энергии иногда усекается, вызывая низкое SNR
Смешанный "En16 x CorrSq16"/
"En32 x CorrSq16" , управляемый посредством AccEn,
предварительный анализ ввода,
управляемая точность накопленной энергии
32,686 117,634 50,6% не применимо не применимо Информация корреляции имеет низкую точность, вызывая низкое SNR
Фиксированный "En16 x CorrSq16", предварительный анализ
ввода
32,686 113,629 47,8% не применимо не применимо Информация энергии иногда усекается и корреляция в информации имеет низкую точность, вызывая низкое SNR
Фиксированный "En32x CorrSq16",
предварительный анализ ввода
32,686 117,634 50,6% не применимо не применимо Информация корреляции имеет низкую точность, вызывая низкое SNR
Фиксированный "En16 x CorrSq32",
предварительный анализ ввода
40,994 159,714 78,8% не применимо не применимо Информация энергии иногда усекается, вызывая низкое SNR
Фиксированный "En32x CorrSq32",
предварительный анализ ввода
49,697 189,773 99,8% 7,1 5,7 WC теперь в секции 32×32, WC более высокой сложности

Таблица 2 Результаты для K > 127

1. Способ поиска формы пирамидального векторного квантователя (PVQ), выполняемый кодером, при этом PVQ берет целевой вектор x в качестве ввода и выводит вектор y посредством итеративного добавления единичных импульсов в выполняемом при поиске формы PVQ внутреннем цикле поиска по размерности, при этом способ содержит этап, на котором:

до входа в следующий внутренний цикл поиска по размерности для добавления единичного импульса, определяют (102, 204), на основе максимальной амплитуды импульса, maxampy, текущего вектора y, необходима ли большая, чем текущая битовая длина слова, чтобы представлять в следующем внутреннем цикле поиска по размерности переменную enloopy, относящуюся к накопленной энергии y, без потери информации об этой энергии.

2. Способ по п. 1, дополнительно содержащий этап, на котором:

до входа в следующий внутренний цикл по размерности для добавления единичного импульса, определяют (203), на основе максимального абсолютного значения, xabsmax, входного вектора x, возможный сдвиг вверх, в битовом слове, накопленного значения корреляции внутри цикла, corrxy, между x и вектором y для упомянутого следующего цикла.

3. Способ по п. 1, дополнительно содержащий этап, на котором:

когда необходима большая, чем текущая битовая длина слова (102, 204, 304, 403), чтобы представлять enloopy, выполняют (103, 205, 305, 404) вычисления внутреннего цикла с использованием более длинной битовой длины слова, чтобы представлять enloopy.

4. Способ по п. 1, дополнительно содержащий этап, на котором:

когда необходима большая, чем текущая битовая длина слова, чтобы представлять enloopy, выполняют (305) вычисления внутреннего цикла с использованием более длинной битовой длины слова, чтобы представлять возведенное в квадрат накопленное значение корреляции внутри цикла, corrxy2, между x и вектором y, во внутреннем цикле.

5. Способ по п. 1, дополнительно содержащий этапы, на которых:

когда отсутствует необходимость большей, чем текущая битовая длина слова, чтобы представлять enloopy, выполняют (405) вычисления внутреннего цикла посредством использования первого цикла добавления единичного импульса с использованием первой битовой длины слова, чтобы представлять enloopy, и

когда необходима большая, чем текущая битовая длина слова, чтобы представлять enloopy, выполняют (404) вычисления внутреннего цикла посредством использования второго цикла добавления единичного импульса с использованием более длинной битовой длины слова, чтобы представлять enloopy, чем для первого цикла добавления единичного импульса.

6. Способ по п. 1, дополнительно содержащий этапы, на которых:

когда отсутствует необходимость большей, чем текущая битовая длина слова, чтобы представлять enloopy, выполняют (405) вычисления внутреннего цикла посредством использования первого цикла добавления единичного импульса, имеющего некоторую точность; и

когда необходима большая, чем текущая битовая длина слова, чтобы представлять enloopy, выполняют (404) вычисления внутреннего цикла посредством использования второго цикла добавления единичного импульса, имеющего более высокую точность, чем у первого цикла добавления единичного импульса.

7. Способ по п. 1, в котором упомянутое определение, на основе maxampy, того, необходима ли большая, чем текущая битовая длина слова, чтобы представлять enloopy, содержит этап, на котором определяют характеристики случая, когда в следующем внутреннем цикле поиска единичный импульс добавляется в положение в y, которое ассоциировано с maxampy.

8. Способ по п. 1, дополнительно содержащий этап, на котором:

во внутреннем цикле поиска по размерности для добавления единичного импульса, определяют положение, nbest, в y для добавления единичного импульса посредством расчета перекрестного умножения, для каждого положения n в y, корреляции и значения энергии для текущего n и возведенной в квадрат корреляции, BestCorrSq, и значения энергии, bestEn, сохраненных из предыдущих значений n, как:

corrxy 2 * bestEn > BestCorrSq * enloopy,

где

, когда corrxy2 * bestEn > BestCorrSq * enloopy.

9. Способ по п. 1, дополнительно содержащий этап, на котором отслеживают maxampy, когда окончательное значение K, ассоциированное с целевым вектором x, превосходит пороговое значение.

10. Кодер (1100, 2), сконфигурированный для поиска формы пирамидального векторного квантования (PVQ), причем PVQ берет целевой вектор x в качестве ввода и выводит вектор y посредством итеративного добавления единичных импульсов в выполняемом при поиске формы PVQ внутреннем цикле поиска по размерности, при этом кодер содержит первый блок (1106, U4) определения для того, чтобы:

до входа в следующий внутренний цикл поиска по размерности для добавления единичного импульса, определять, на основе максимальной амплитуды импульса, maxampy, текущего вектора y, необходима ли большая, чем текущая битовая длина слова, чтобы представлять в следующем внутреннем цикле поиска по размерности переменную enloopy, относящуюся к накопленной энергии y, без потери информации об этой энергии.

11. Кодер по п. 10, дополнительно содержащий второй блок (U2) определения для того, чтобы, до входа в следующий внутренний цикл поиска по размерности для добавления единичного импульса, определять, на основе максимального абсолютного значения, xabsmax, входного вектора x, возможный сдвиг вверх, в битовом слове, накопленного значения корреляции внутри цикла, corrxy, между x и вектором y для следующего внутреннего цикла поиска по размерности.

12. Кодер по п. 10, дополнительно содержащий блок (1107, U6) точного поиска для выполнения вычислений внутреннего цикла с использованием более длинной битовой длины слова, чтобы представлять enloopy, когда необходима большая, чем текущая битовая длина слова, чтобы представлять enloopy.

13. Кодер по п. 10, содержащий блок (1107, U6) точного поиска для:

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

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

14. Кодер по п. 10, содержащий блок (1107, U6) точного поиска для:

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

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

15. Кодер по п. 10, который сконфигурирован выполнять упомянутое определение, на основе maxampy, того, необходима ли большая, чем текущая битовая длина слова, чтобы представлять enloopy, посредством определения характеристик случая, когда в следующем внутреннем цикле поиска единичный импульс добавляется в положение в y, которое ассоциировано с maxampy.

16. Кодер по п. 10, содержащий блок (1107, U6) точного поиска для того, чтобы, во внутреннем цикле поиска по размерности для добавления единичного импульса, определять положение, nbest, в y для добавления единичного импульса посредством вычисления перекрестного умножения, для каждого положения n в y, корреляции и значения энергии для текущего n и корреляции, BestCorrSq, и значения энергии, bestEn, сохраненных из предыдущих значений n, как:

corrxy 2 * bestEn > BestCorrSq * enloopy,

где

, когда corrxy2 * bestEn > BestCorrSq * enloopy.

17. Кодер по п. 10, дополнительно содержащий блок (U3) хранения для отслеживания maxampy, когда количество окончательных единичных импульсов, K, ассоциированное с целевым вектором x, превосходит пороговое значение.

18. Устройство связи, содержащее кодер по любому из пп. 10-17.



 

Похожие патенты:

Изобретение относится к способам и устройствам обработки данных в широкополосной радиосвязи и радионавигации. Технический результат заключается в расширении функциональных возможностей устройства для формирования элементов мультипликативных групп полей Галуа GF(p) по выполнению функции раскрытия структуры нелинейных рекуррентных последовательностей (НЛРП) в виде кодов квадратичных вычетов (ККВ).

Изобретение относится к средствам кодирования и преобразования двоичных данных в вероятностную форму. Технический результат заключается в повышении быстродействия и точности преобразования.

Изобретение относится к вычислительной технике. Технический результат заключается в повышении эффективности энтропийного кодирования разностей векторов движения.

Изобретение относится к способу преобразования (кодирования), декодирования и записи цифровой информации для формирования матричного ультрасжатого двухмерного кода (нанобар-кода), а также к оптически считываемым двухмерным кодам, представляющим двоично-кодированные данные, размещенные на двухмерной матрице и формирующие, таким образом, шаблон для размещения информации.

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

Изобретение относится к области радиосвязи, а именно к системам защиты узкополосных каналов передачи данных в ДКВМ диапазоне в условиях многолучевого распространения радиосигналов.

Изобретение относится к области кодирования и декодирования аудиосигнала. Техническим результатом является повышение эффективности кодирования.

Группа изобретений относится к области кодирования и может быть использована для кодирования коэффициентов преобразования. Техническим результатом является снижение сложности и повышение эффективности кодирования.

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

Группа изобретений относится к области кодирования. Техническим результатом является повышение эффективности сжатия данных.

Изобретение относится к средствам для маскирования ошибок при кодировании/декодировании аудио. Технический результат заключается в восстановлении качества звучания без увеличения алгоритмической задержки, когда происходит потеря пакета при кодировании аудио.

Изобретение относится к обработке аудиосигнала, включающего аудиокадры. Технический результат – удаление разрывов между отфильтрованными аудиокадрами без потенциальных искажений в отфильтрованном аудиосигнале.

Изобретение относится к кодированию и декодированию звуковых сигналов. Технический результат – повышение точности восстановления звуковых сигналов.

Изобретение относится к кодированию и декодированию и предназначено для осуществления высокочастотной реконструкции аудиосигнала. Технический результат – обеспечение улучшенной реконструкции переходных процессов и тональных компонентов в высокочастотных полосах.

Изобретение относится к кодированию и декодированию огибающей аудиосигнала. Технический результат – улучшение кодирования и декодирования огибающей аудиосигналов.

Изобретение относится к технологиям кодирования аудио. Технический результат – уменьшение объема служебной информации при кодировании аудио сигналов.

Изобретение относится к кодированию аудио/речи. Технический результат - обеспечение эффективного формата полезной нагрузки RTR для многорежимного кодека речи/аудио.

Изобретение относится к области вычислительной техники и предназначено для использования в системах обработки информации. Техническим результатом изобретения является расширение функциональных возможностей в части возможности восстановления сжатых данных и простота реализации.

Изобретение относится к области радиосвязи, а именно к системам защиты узкополосных каналов передачи данных в ДКВМ диапазоне в условиях многолучевого распространения радиосигналов.

Изобретение относится к области радиосвязи, а именно к системам защиты узкополосных каналов передачи данных в ДКВМ диапазоне в условиях многолучевого распространения радиосигналов.

Изобретение относится к декодированию аудио и более конкретно к выбору процедуры маскирования потери пакета при декодировании аудио. Технический результат – обеспечение высокого качества восстановленного звукового сигнала после потери пакета.

Изобретение относится к векторному квантованию, выполняемому кодером. Технический результат изобретения заключается в возможности кодера удерживать сложность поиска на разумном уровне, обеспечивая возможность кодеру применять цикл увеличенной точности только, когда это может быть необходимо, посредством анализа того, потребуется ли в наступающем внутреннем цикле внутренний цикл с более высокой точностью, нежели точность, используемая в текущее время. Способ для поиска формы пирамидального векторного квантователя, PVQ, при этом PVQ берет целевой вектор x в качестве ввода и выводит вектор y посредством итеративного добавления единичных импульсов во внутреннем цикле поиска по размерности. Определение текущего вектора y, до входа в следующий внутренний цикл поиска по размерности для добавления единичного импульса, на основе максимальной амплитуды импульса,, необходима ли большая, чем текущая битовая длина слова, чтобы представлять, способом без потерь в наступающем внутреннем цикле по размерности. Переменная относится к накопленной энергии вектора y. 3 н. и 15 з.п. ф-лы, 12 ил., 3 табл.

Наверх