УПРОЩЕННАЯ ИНДЕКСАЦИЯ И ДЕИНДЕКСАЦИЯ ВЕКТОРОВ
SIMPLIFIED VECTOR INDEXING AND DEINDEXING

ОБЛАСТЬ ТЕХНИКИ
Это изобретение относится к индексации и деиндексации векторов.
УРОВЕНЬ ТЕХНИКИ
В обеспечении связи с помощью мобильного терминала существенную роль играют несложные алгоритмы речевого и аудиокодирования. Благодаря малому объему используемой памяти и простоте алгоритма наряду с эффективным кодированием, структурированные кодовые словари используют, например, для квантования в нескольких современных речевых и аудиокодеках, таких как адаптивный многоскоростной широкополосный (AMR-WB, Adaptive Multi Rate - WideBand) кодек или G.EV-VBR, стандарт которого в настоящее время разрабатывается в рамках ITU-T SG16/Q9.
Кодовые словари, используемые в способах квантования речевых и аудиокодеков, могут, например, основываться на решетчатых структурах, как это описано в статье S.Ragot, В.Bessette и R.Lefebvre "Low-complexity multi-rate lattice vector quantization with application to wideband TCX speech coding at 32 kbit/s" (Несложное многоскоростное решетчатое векторное квантование, применяемое для широкополосного речевого кодирования TCX на скорости 32 кбит/с), опубликованной в материалах конференции IEEE International Conference on Acoustics, Speech, and Signal Processing, 2004 (ICASSP '04, Международная конференция IEEE по акустике, обработке речи и сигналов), Монреаль, Канада, 17-21 мая 2004 года, том 1, стр.501-504, которая полностью включена в настоящее описание посредством ссылки. В этой статье также подробно описывается процесс квантования.
Если в качестве кодовых словарей используются решетчатые структуры, то требуются алгоритмы для индексации узлов решетки.
Кодовый словарь с решетчатой структурой можно определить как объединение лидер-классов (leader class), каждый из которых характеризуется лидер-вектором (leader vector). Лидер-вектор представляет собой n-мерный вектор с упорядоченными (например, в порядке убывания) компонентами. Лидер-класс, соответствующий лидер-вектору, включает в свой состав лидер-вектор и все векторы, получаемые путем всех перестановок лидер-вектора с учетом знаков (с некоторыми возможными ограничениями).
Типом алгоритма индексации узлов решетки, определенной как объединение лидер-классов, может, например, быть алгоритм индексации лидер-векторов. В этом контексте, помимо прочего, могут применяться лексикографические и биномиальные алгоритмы, описанные в статье А. Vasilache и I. Tabus "Robust indexing of lattices and permutation codes over binary symmetric channels" (Надежная индексация решеток и перестановочных кодов в двоичных симметричных каналах), опубликованной в издании Signal Processing (обработка сигналов), том 83, номер 7, стр.1467-1486, 2003 год, которая полностью включена в данное описание посредством ссылки.
Биномиальные алгоритмы обычно менее сложные, поскольку они одновременно учитывают несколько векторных компонентов.
СУЩНОСТЬ ИЗОБРЕТЕНИЯ
Существует возможность дальнейшего упрощения процесса индексации и/или деиндексации.
В соответствии с первым аспектом настоящего изобретения раскрывается способ, включающий индексацию входного вектора, содержащегося в наборе векторов, входящем в множество наборов векторов. Процедура индексации включает выполнение специфической обработки в том случае, когда входной вектор содержится в наборе векторов заранее заданной группы из одного или более наборов векторов, входящих в множество наборов векторов, при этом специфическая обработка адаптирована к свойству наборов векторов в заранее заданной группе наборов векторов и применима только в случае входных векторов, содержащихся в наборах векторов с определенным свойством. Кроме того, процедура индексации включает выполнение общей обработки в том случае, если входной вектор не содержится в наборе векторов заранее заданной группы наборов векторов.
В соответствии с первым аспектом настоящего изобретения также раскрывается компьютерная программа. Компьютерная программа содержит инструкции для выполнения процессором индексации входного вектора, содержащегося в наборе векторов, входящем в множество наборов векторов. Процедура индексации включает выполнение специфической обработки в том случае, когда входной вектор содержится в наборе векторов заранее заданной группы из одного или более наборов векторов, входящих в множество наборов векторов, при этом специфическая обработка адаптирована к свойству наборов векторов в заранее заданной группе наборов векторов и применима только в случае входных векторов, содержащихся в наборах векторов с определенным свойством. Кроме того, процедура индексации включает выполнение общей обработки в том случае, если входной вектор не содержится в наборе векторов заранее заданной группы наборов векторов.
В соответствии с первым аспектом настоящего изобретения также раскрывается машиночитаемый носитель, на котором хранится такая компьютерная программа. Машиночитаемым носителем может быть любой носитель, на котором могут храниться цифровые данные в электрическом, магнитном, электромагнитном или оптическом виде. Носитель может фиксированным образом устанавливаться в устройстве или может представлять собой сменный носитель.
В соответствии с первым аспектом настоящего изобретения также раскрывается устройство, содержащее компонент обработки, выполненный с возможностью индексации входного вектора, содержащегося в наборе векторов, входящем в множество наборов векторов. Кроме того, компонент обработки сконфигурирован для выполнения специфической обработки в том случае, когда входной вектор, подлежащий индексации, содержится в наборе векторов заранее заданной группы из одного или более наборов векторов, входящих в множество наборов векторов, при этом специфическая обработка адаптирована к свойству наборов векторов в заранее заданной группе наборов векторов и применима только в случае входных векторов, содержащихся в наборах векторов с определенным свойством. Компонент обработки также выполнен с возможностью осуществления общей обработки в том случае, если входной вектор, подлежащий индексации, не содержится в наборе векторов заранее заданной группы наборов векторов.
В соответствии с первым аспектом настоящего изобретения также раскрывается устройство, включающее в свой состав средства для индексации входного вектора, содержащегося в наборе векторов, входящем в множество наборов векторов. Средства индексации включают в свой состав средства для выполнения специфической обработки в том случае, когда входной вектор содержится в наборе векторов заранее заданной группы из одного или более наборов векторов, входящих в множество наборов векторов, при этом специфическая обработка адаптирована к свойству наборов векторов в заранее заданной группе наборов векторов и применима только в случае входных векторов, содержащихся в наборах векторов с определенным свойством. Кроме того, средства индексации содержат средства для выполнения общей обработки в том случае, если входной вектор не содержится в наборе векторов заранее заданной группы наборов векторов.
В соответствии с первым аспектом настоящего изобретения входной вектор представляет собой вектор, подлежащий индексации. Входной вектор содержится в наборе векторов, который, в свою очередь, содержится в множестве наборов векторов. Множество наборов векторов может, например, служить в качестве кодового словаря для процесса квантования. В ходе такого процесса квантования входной вектор может, например, идентифицироваться как наиболее точное соответствие всех векторов в множестве наборов векторов по отношению к вектору, подлежащему квантованию.
При индексации входному вектору назначается индекс. Индекс может, например, принимать форму сигнала. Между двумя объектами может осуществляться обмен этим сигналом для идентификации входного вектора. С помощью индекса входной вектор может по меньшей мере частично идентифицироваться в наборе векторов, в котором он содержится. Индекс может, например, идентифицировать входной вектор в множестве наборов векторов или только в наборе векторов, в котором содержится этот входной вектор. Кроме того, индекс может представлять или не представлять знаки компонентов входного вектора.
При индексации входного вектора может, например, по меньшей мере выдаваться индекс позиции, представляющий позиции значений во входном векторе. При индексации дополнительно может выдаваться индекс знака, который представляет знак компонентов входного вектора. Кроме того, при индексации может выдаваться окончательный индекс, который объединяет в себе индекс позиции и индекс знака и может дополнительно представлять лидер-класс, в котором содержится входной вектор.
В зависимости от набора векторов, в котором содержится входной вектор, выполняются различные процедуры обработки. Если входной вектор содержится в наборе векторов, который принадлежит заранее заданной группе наборов векторов, то применяется специфическая обработка. В противном случае применяется общая обработка. Оба вида обработки образуют по меньшей мере часть процедуры индексации входного вектора. Например, специфическая обработка и общая обработка могут относиться ко всему процессу индексации, а могут относиться только к частям этого процесса.
Специфическая обработка адаптирована к свойству набора векторов, в котором содержится входной вектор.
Специфическая обработка настраивается для набора векторов, в котором содержится входной вектор. Это позволяет повысить возможности обработки и уменьшить общий уровень сложности процесса индексации входного вектора.
Например, структура специфической обработки может быть упрощена по сравнению с общей обработкой путем, например, выполнения нескольких действий в одном цикле.
Таким же образом, введение специфической обработки может позволить снизить сложность общей обработки, например, за счет исключения процедуры обработки входных векторов конкретных наборов векторов из процесса общей обработки (и включения этой процедуры в процесс специфической обработки), благодаря чему общая обработка упрощается. Обе меры приводят к снижению общего уровня сложности индексации входного вектора.
Процесс настройки может ограничить область применения специфической обработки входными векторами, содержащимися в наборах векторов с определенным свойством, то есть специфическая обработка может быть неприменима, например, в том случае, если входные векторы содержатся в наборах векторов, которые не входят в заранее заданную группу наборов векторов.
Общая обработка может быть не ограничена применением только в том случае, если входные векторы содержатся в наборах векторов конкретной группы наборов векторов. Например, общая обработка может быть применима в том случае, если входные векторы содержатся в любом наборе векторов, входящем в множество наборов векторов, или в случае, когда входные векторы содержатся в любом наборе векторов, входящем в множество наборов векторов, за исключением наборов векторов, входящих в заранее заданную группу наборов векторов. В последнем случае возможна оптимизация общей обработки по отношению к входным векторам, содержащимся в наборах векторов, которые не входят в заранее заданную группу наборов векторов.
В соответствии с примером осуществления первого аспекта настоящего изобретения общая обработка в случае применения к входным векторам, содержащимся в наборах векторов с определенным свойством, была бы более сложной по сравнению со специфической обработкой, применяемой к тем же входным векторам. В данном случае сложность может, например, быть связана с вычислительной сложностью и/или с требованиями к объему памяти.
В соответствии с примером осуществления первого аспекта настоящего изобретения входные векторы, содержащиеся в наборе векторов заранее заданной группы наборов векторов, могут быть индексированы с большей вероятностью, чем входные векторы, содержащиеся в наборах векторов, не входящих в заранее заданную группу наборов векторов. С учетом общей сложности может быть особенно полезным то, что специфическая обработка является менее сложным процессом, чем общая обработка (если применяется к входным векторам, содержащимся в наборах векторов с определенным свойством). Вероятность может зависеть от приложения, в котором выполняется индексация. Вероятность может, например, определяться в автономном режиме.
В соответствии с примером осуществления первого аспекта настоящего изобретения наборы векторов представляют собой лидер-классы, а каждый лидер-класс содержит различный лидер-вектор и перестановки лидер-вектора. Объединение этих лидер-классов затем может определять решетку, которая может использоваться в виде структурированного кодового словаря для квантования, например, в речевом, аудио- или видеокодеке, при кодировании изображений, сжатии данных или в любой другой области, в которой используется квантование.
Лидер-классы могут иметь знак, и при индексации по меньшей мере может выдаваться индекс позиции, представляющий позиции значений во входном векторе, и индекс знака, представляющий знаки компонентов входного вектора. Далее в рамках специфической обработки индекс позиции и индекс знака могут совместно определяться в одном цикле. Этот цикл, например, может выполняться для каждого компонента входного вектора. С другой стороны, в рамках общей обработки индекс позиции и индекс знака могут определяться только друг за другом. При индексации может также выдаваться окончательный индекс, который объединяет в себе индекс позиции и индекс знака и может дополнительно представлять лидер-класс, в котором содержится входной вектор.
В альтернативном варианте лидер-классы могут быть без знака. В этом случае при индексации может выдаваться только индекс позиции, представляющий позиции значений во входном векторе. В зависимости от обстоятельств при индексации может также выдаваться окончательный индекс, который дополнительно представляет лидер-класс, в котором содержится входной вектор.
Свойство, к которому адаптирована специфическая обработка, может заключаться в том, что заранее заданная группа лидер-классов состоит только из лидер-классов с лидер-векторами, компоненты которых принимают только заранее заданное количество различных значений. Это заранее заданное количество может, например, равняться двум. Адаптация специфической обработки к этому свойству, в частности, может быть полезной в контексте биномиальной индексации, поскольку, помимо прочего, она позволяет совместно определить индекс позиции и индекс знака в одном цикле, а не по отдельности. Кроме того, адаптация специфической обработки к этому свойству может быть полезной в контексте биномиальной индексации, поскольку, помимо прочего, процедура индексации при этом должна только обрабатывать позицию одного значения (первого) без необходимости дальнейших подготовительных операций для проверки позиций второго значения (его позиция (позиции) зафиксирована путем фиксации позиции (позиций) первого значения).
Заранее заданная группа лидер-классов может содержать первую подгруппу лидер-классов с лидер-векторами, компоненты которых принимают только четные значения, и вторую подгруппу лидер-классов с лидер-векторами, компоненты которых принимают только нечетные значения. Согласно процессу специфической обработки действия, которые могут предприниматься в том случае, если входной вектор содержится в лидер-классе первой подгруппы лидер-классов, могут отличаться от действий, которые выполняются в том случае, когда входной вектор содержится в лидер-классе второй подгруппы лидер-классов.
В альтернативном варианте свойство, к которому адаптирована специфическая обработка, может заключаться в том, что заранее заданная группа лидер-классов состоит только из лидер-классов с лидер-векторами, компоненты которых принимают максимальное количество различных значений. Например, лидер-классы в заранее заданной группе лидер-классов могут содержать лидер-векторы с четырьмя значениями. Обработка таких лидер-классов в рамках процесса специфической обработки может упростить общую обработку, поскольку затем в процессе общей обработки могут учитываться только лидер-классы, в которые входят лидер-векторы с тремя или менее значениями. Это способствует снижению общего уровня сложности индексации входных векторов.
С целью оптимизации общая обработка может применяться в том случае, если входные векторы содержатся в любом наборе векторов, входящем в множество наборов векторов, за исключением наборов векторов, входящих в заранее заданную группу наборов векторов.
Индексация входного вектора может выполняться в процессе квантования, который основан на решетчатом кодовом словаре, определенном лидер-классами.
В соответствии с примером осуществления первого аспекта настоящего изобретения индексация является биномиальной индексацией. Такая процедура биномиальной индексации основана на количестве возможных распределений значений по позициям в векторе определенной размерности.
В соответствии со вторым аспектом настоящего изобретения раскрывается способ, включающий определение целевого вектора, содержащегося в наборе векторов, входящем в множество наборов векторов, на основе индекса, связанного с целевым вектором. Процедура определения включает выполнение специфической обработки в том случае, когда целевой вектор содержится в наборе векторов заранее заданной группы из одного или более наборов векторов, входящих в множество наборов векторов, при этом специфическая обработка адаптирована к свойству наборов векторов в заранее заданной группе наборов векторов и применима только в случае целевых векторов, содержащихся в наборах векторов с определенным свойством. Кроме того, процедура определения включает выполнение общей обработки в том случае, если целевой вектор не содержится в наборе векторов заранее заданной группы наборов векторов.
В соответствии со вторым аспектом настоящего изобретения также раскрывается компьютерная программа, включающая инструкции для выполнения процессором определения целевого вектора, содержащегося в наборе векторов, входящем в множество наборов векторов, на основе индекса, связанного с целевым вектором. Процедура определения включает выполнение специфической обработки в том случае, когда целевой вектор содержится в наборе векторов заранее заданной группы из одного или более наборов векторов, входящих в множество наборов векторов, при этом специфическая обработка адаптирована к свойству наборов векторов в заранее заданной группе наборов векторов и применима только в случае целевых векторов, содержащихся в наборах векторов с определенным свойством. Кроме того, процедура определения включает выполнение общей обработки в том случае, если целевой вектор не содержится в наборе векторов заранее заданной группы наборов векторов.
В соответствии со вторым аспектом настоящего изобретения также раскрывается машиночитаемый носитель, на котором хранится такая компьютерная программа. Машиночитаемым носителем может быть любой носитель, на котором могут храниться цифровые данные в электрическом, магнитном, электромагнитном или оптическом виде. Носитель может фиксированным образом устанавливаться в устройстве или может представлять собой сменный носитель.
В соответствии со вторым аспектом настоящего изобретения также раскрывается устройство, содержащее компонент обработки, выполненный с возможностью определения целевого вектора, содержащегося в наборе векторов, входящем в множество наборов векторов, на основе индекса, связанного с целевым вектором. Кроме того, компонент обработки сконфигурирован для выполнения специфической обработки в том случае, когда определяемый целевой вектор содержится в наборе векторов заранее заданной группы из одного или более наборов векторов, входящих в множество наборов векторов, при этом специфическая обработка адаптирована к свойству наборов векторов в заранее заданной группе наборов векторов и применима только в случае целевых векторов, содержащихся в наборах векторов с определенным свойством. Компонент обработки также выполнен с возможностью осуществления общей обработки в том случае, если определяемый целевой вектор не содержится в наборе векторов заранее заданной группы наборов векторов.
В соответствии со вторым аспектом настоящего изобретения также раскрывается устройство, содержащее средства для определения целевого вектора, содержащегося в наборе векторов, входящем в множество наборов векторов, на основе индекса, связанного с целевым вектором. Средства для определения включают в свой состав средства для выполнения специфической обработки в том случае, когда целевой вектор содержится в наборе векторов заранее заданной группы из одного или более наборов векторов, входящих в множество наборов векторов, при этом специфическая обработка адаптирована к свойству наборов векторов в заранее заданной группе наборов векторов и применима только в случае целевых векторов, содержащихся в наборах векторов с определенным свойством. Кроме того, средства для определения содержат средства для выполнения общей обработки в том случае, если целевой вектор не содержится в наборе векторов заранее заданной группы наборов векторов.
В соответствии со вторым аспектом настоящего изобретения целевой вектор представляет собой вектор, который должен определяться на основе индекса, связанного с целевым вектором. Целевой вектор содержится в наборе векторов, который, в свою очередь, содержится в множестве наборов векторов. Множество наборов векторов может, например, служить в качестве кодового словаря для процесса квантования. В ходе такого процесса квантования целевой вектор может, например, идентифицироваться как наиболее точное соответствие всех векторов в множестве наборов векторов по отношению к вектору, подлежащему квантованию, и ему может назначаться индекс (то есть он может быть индексирован) таким образом, как это, например, раскрыто выше со ссылкой на первый аспект настоящего изобретения. Этот индекс может, например, по меньшей мере частично идентифицировать целевой вектор в наборе векторов. Кроме того, этот индекс может, например, идентифицировать набор векторов, в котором содержится целевой вектор, и может также указывать знаки компонентов целевого вектора. Затем на основе этого индекса в соответствии со вторым аспектом настоящего изобретения восстанавливается целевой вектор. Это может потребовать передачи индекса из объекта, который выполняет индексацию целевого вектора, в объект, который выполняет определение целевого вектора на основе индекса. В этом отношении индекс можно рассматривать как сигнал, который передается между объектами. Индексация может, например, осуществляться во время квантования, а определение целевого вектора на основе индекса, которое может рассматриваться как "деиндексация", может затем выполняться в процессе деквантования.
В соответствии со вторым аспектом настоящего изобретения в зависимости от набора векторов, в котором содержится целевой вектор, выполняются различные процедуры обработки. Если целевой вектор содержится в наборе векторов, который принадлежит заранее заданной группе наборов векторов, то применяется специфическая обработка. В противном случае применяется общая обработка.
Специфическая обработка адаптирована к свойству набора векторов, в котором содержится целевой вектор.
Специфическая обработка настраивается для набора векторов, в котором содержится целевой вектор, в соответствии с использованием свойства этого набора. Это позволяет улучшить обработку и снизить общий уровень сложности процедуры определения целевого вектора. Например, структура специфической обработки может быть упрощена по сравнению с общей обработкой. Эта мера приводит к снижению общего уровня сложности. Однако процесс настройки может ограничить область применения специфической обработки случаями, когда целевые векторы содержатся в наборах векторов с определенным свойством, то есть специфическая обработка может быть, например, неприменима в тех случаях, когда целевые векторы содержатся в наборах векторов, которые не входят в заранее заданную группу наборов векторов.
Общая обработка может быть не ограничена применением в тех случаях, когда целевые векторы содержатся только в конкретной группе наборов векторов. Например, общая обработка может быть применима в том случае, если целевые векторы содержатся в любом наборе векторов, входящем в множество наборов векторов, или в случае, когда целевые векторы содержатся в любом наборе векторов, входящем в множество наборов векторов, за исключением наборов векторов, входящих в заранее заданную группу наборов векторов. В последнем случае существует возможность по меньшей мере некоторой оптимизации общей обработки.
В соответствии с примером осуществления второго аспекта настоящего изобретения общая обработка в случае применения к целевым векторам, содержащимся в наборах векторов с определенным свойством, была бы более сложной по сравнению со специфической обработкой, применяемой к тем же целевым векторам. В данном случае сложность может, например, быть связана с вычислительной сложностью и/или с требованиями к объему памяти.
В соответствии с примером осуществления второго аспекта настоящего изобретения целевые векторы, содержащиеся в наборе векторов заранее заданной группы наборов векторов, могут быть определены с большей вероятностью, чем целевые векторы, содержащиеся в наборе векторов, не входящем в заранее заданную группу наборов векторов. С учетом общей сложности может быть особенно полезным то, что специфическая обработка является менее сложным процессом, чем общая обработка (если применяется в случае целевых векторов, содержащихся в наборах векторов с определенным свойством). Вероятность может зависеть от приложения, в котором выполняется процедура определения целевого вектора (например, процесс деквантования). Вероятность может, например, определяться в автономном режиме (офлайн).
В соответствии с примером осуществления второго аспекта настоящего изобретения наборы векторов представляют собой лидер-классы, а каждый лидер-класс содержит различный лидер-вектор и перестановки лидер-вектора.
Свойство, к которому адаптирована специфическая обработка, может, например, заключаться в том, что заранее заданная группа лидер-классов состоит только из лидер-классов с лидер-векторами, компоненты которых принимают только заранее заданное количество различных значений. Это заранее заданное количество может, например, равняться двум. В данном случае одно из двух различных значений может, например, равняться нулю.
Определение целевого вектора может выполняться в процессе деквантования, который основан на решетчатом кодовом словаре, определенном лидер-классами.
Свойство, к которому адаптирована специфическая обработка, может также заключаться в том, что заранее заданная группа лидер-классов состоит только из лидер-классов с лидер-векторами, компоненты которых принимают максимальное количество различных значений. Например, лидер-классы в заранее заданной группе лидер-классов могут содержать лидер-векторы с четырьмя значениями. Обработка таких лидер-классов в рамках процесса специфической обработки может упростить общую обработку, поскольку затем в процессе общей обработки могут учитываться только лидер-классы, в которые входят лидер-векторы с тремя или менее значениями. Это способствует снижению общего уровня сложности деиндексации входных векторов.
С целью оптимизации общая обработка может применяться в том случае, если целевые векторы содержатся в любом наборе векторов, входящем в множество наборов векторов, за исключением наборов векторов, входящих в заранее заданную группу наборов векторов.
В соответствии с примером осуществления второго аспекта настоящего изобретения индекс связан с целевым вектором через биномиальную индексацию. Такая процедура биномиальной индексации основана на количестве возможностей распределения значений по позициям в векторе определенной размерности.
В соответствии с третьим аспектом настоящего изобретения раскрывается система. Система содержит первый компонент обработки, выполненный с возможностью индексации входного вектора, содержащегося в наборе векторов, входящем в множество наборов векторов, при этом первый компонент обработки сконфигурирован для выполнения специфической обработки в том случае, когда индексируемый входной вектор содержится в наборе векторов заранее заданной группы из одного или более наборов векторов, входящих в множество наборов векторов, причем специфическая обработка адаптирована к свойству наборов векторов в заранее заданной группе наборов векторов и применима только в случае входных векторов, содержащихся в наборах векторов с определенным свойством, и, кроме того, первый компонент обработки выполнен с возможностью осуществления общей обработки в том случае, если входной вектор, подлежащий индексации, не содержится в наборе векторов заранее заданной группы наборов векторов. Система также содержит второй компонент обработки, выполненный с возможностью определения целевого вектора, содержащегося в наборе векторов, входящем в множество наборов векторов, на основе индекса, связанного с целевым вектором, при этом второй компонент обработки также сконфигурирован для выполнения специфической обработки в том случае, когда определяемый целевой вектор содержится в наборе векторов заранее заданной группы из одного или более наборов векторов, входящих в множество наборов векторов, причем специфическая обработка адаптирована к свойству наборов векторов в заранее заданной группе наборов векторов и применима только в случае целевых векторов, содержащихся в наборах векторов с определенным свойством, и, кроме того, второй компонент обработки также выполнен с возможностью осуществления общей обработки в том случае, если целевой вектор, подлежащий определению, не содержится в наборе векторов заранее заданной группы наборов векторов.
Согласно третьему аспекту настоящего изобретения для системы соответственно применяется приведенное выше описание характеристик и преимуществ первого и второго аспектов настоящего изобретения.
Второй компонент обработки может, например, определять целевой вектор, который связан с индексом, назначенным входному вектору в процессе индексации входного вектора первым компонентом обработки, так чтобы соблюдалось равенство входного и целевого векторов. Первый и второй компоненты обработки могут, например, обмениваться индексом.
Первый и второй компоненты обработки могут, например, входить в состав двух различных устройств, при этом в устройстве, содержащем первый компонент обработки, выполняется индексация входного вектора, а в устройстве, содержащем второй компонент обработки, определяется целевой вектор, который связан с индексом, определенным первым компонентом обработки.
Кроме того, первый и второй компоненты обработки могут входить в состав одного и того же устройства и могут, например, соответственно использоваться для квантования и деквантования.
Эти и другие аспекты настоящего изобретения разъясняются в представленном ниже подробном описании. Представленные выше признаки настоящего изобретения и примеры его осуществления подразумеваются раскрытыми во всех возможных комбинациях друг с другом.
КРАТКОЕ ОПИСАНИЕ ЧЕРТЕЖЕЙ
К описанию прилагаются следующие чертежи:
фиг.1: схематическая блок-схема кодера G.EV-VBR;
фиг.2: алгоритм реализации способа для индексации входного вектора в соответствии с примером осуществления первого аспекта настоящего изобретения;
фиг.3: алгоритм реализации способа для определения целевого вектора на основе индекса, связанного с целевым вектором, в соответствии с примером осуществления второго аспекта настоящего изобретения;
фиг.4: схематическая блок-схема устройства, способного реализовать способы, соответствующие первому и второму аспектам настоящего изобретения.
ПОДРОБНОЕ ОПИСАНИЕ ОСУЩЕСТВЛЕНИЯ ИЗОБРЕТЕНИЯ
В приводимом ниже подробном описании настоящего изобретения примеры его осуществления приводятся в контексте индексации и деиндексации узлов решетки, связанных с решетчатым квантователем, предложенным для кодека G.EV-VBR или производных от него кодеков. Однако настоящее изобретение не ограничено этим кодеком, этим конкретным решетчатым квантователем или индексацией/деиндексаций решетчатых структур; оно также может применяться во всех иных сценариях, в которых требуется выполнение индексации и деиндексации векторов.
Процесс стандартизации кодека G.EV-VBR осуществляется в рамках документа ITU-T SG16/Q9. Этот кодек представляет собой речевой и встроенный масштабируемый аудиокодек для широкополосных сигналов с битовыми скоростями кодирования 8, 12, 16, 24 и 32 кбит/с.
На фиг.1 представлена схематическая блок-схема кодера 1 G.EV-VBR. Первые два уровня основаны на линейном предсказании с кодовым возбуждением (CELP; Code Excited Linear Prediction) и обозначаются как "базовый кодек" (см. блок 101 базового кодека). Оставшиеся уровни формируются посредством кодирования коэффициентов модифицированного дискретного косинусного преобразования (MDCT, Modified Discrete Cosine Transform) (см. блок 104 MDCT) разностного сигнала 103 между исходным сигналом 100 и синтезированным сигналом базового кодека, при этом разностный сигнал вырабатывается сумматором 102. Для квантования коэффициентов MDCT (для уровня, соответствующего битовой скорости 24 кбит/с) используется квантователь 105, функционирование которого основано на лидер-классах, полученных из лидер-классов решетки 2RE8, которая является повернутой версией решетки Е8, масштабированной с множителем 2. Первые два уровня затем объединяются с оставшимися уровнями в блоке 106 генерации битового потока.
Решетка, обычно используемая при квантовании, может быть представлена в виде объединения лидер-классов. В результате структуры квантования, основанные на решетках, могут быть описаны в виде объединения лидер-классов.
Лидер-вектор представляет собой n-мерный целый вектор с упорядоченными компонентами (например, в порядке убывания):
1
1
2
2
m
m
1
2
m
i
(ν,.…, ν, ν,.…, ν, ν,.…, ν), где ν>ν>…>ν, ν∈N.
i
i
Существует n значений v. Лидер-класс, соответствующий лидер-вектору, включает в свой состав векторы, получаемые путем всех знаковых перестановок лидер-класса (с некоторыми возможными ограничениями). Ограничения, если они применяются, относятся к количеству отрицательных компонентов вектора, которое может быть нечетным или четным. Количество векторов в лидер-классе вычисляется по формуле
где p определяет четность и может принимать значение 0 (отсутствие ограничений по знаку), +1 (четное количество отрицательных компонентов) или -1 (нечетное количество отрицательных компонентов).
В качестве примера биномиальной индексации рассмотрим 4-мерный лидер-вектор (2, 1, 1, 0). Предположим, что перестановки выполняются без учета знака.
Векторы, которые принадлежат лидер-классу (2, 1, 1, 0), приведены ниже в таблице 1, причем в ней представлены два варианта индексации.
Таблица 1
Лидер-класс для лидер-вектора (2, 1, 1, 0)
Индекс
Вариант 1
Вариант 2
0
2, 1, 1, 0
2, 1, 1, 0
1
1, 2, 1, 0
2, 1, 0, 1
2
1, 1, 2, 0
2, 0, 1, 1
3
1, 1, 0, 2
1, 2, 1, 0
4
2, 1, 0, 1
1, 2, 0, 1
5
1, 2, 0, 1
0, 2, 1, 1
6
1, 0, 2, 1
1, 1, 2, 0
7
1, 0, 1, 2
1, 0, 2, 1
8
2, 0, 1, 1
0, 1, 2, 1
9
0, 2, 1, 1
1, 1, 0, 2
10
0, 1, 2, 1
1, 0, 1, 2
11
0, 1, 1, 2
0, 1, 1, 2
Из первого варианта, представленного в таблице 1, видно, что в первой группе (с индексами 0-3, то есть первые четыре вектора, отделенные горизонтальной линией) относительная позиция значений 1 и 0 одинакова, однако позиция значения 2 изменяется от вектора к вектору. То же происходит и во второй группе (с индексами 4-7) и т.д. Различие между первой и второй группой заключается в том, как компоненты со значением 1 расположены в трех позициях, которые доступны после определения позиции для компонента со значением 2. Количество возможных размещений этих двух значений в трех позициях задается биномиальным коэффициентом
.
Таким образом, в первом варианте имеются три группы, причем в каждой группе изменяется только позиция значения 2, поэтому в каждой из трех групп содержатся  вектора.
Следовательно, можно заключить, что один из способов перечисления векторов в лидер-классе заключается в поочередном рассмотрении различных значений в векторе и отметки их возможных позиций. В рассматриваемом примере (вариант 1) вначале определяются возможные позиции значения 2, затем в оставшихся 3 позициях определяются позиции компонентов со значением 1. Позиции компонента со значением 0 зависят от позиции первых двух значений (поскольку это последнее значение), поэтому их не требуется рассматривать отдельно.
Подобный подход используется и в варианте 2, представленном в таблице 1. Однако позиция значения 2 не изменяется в одной конкретной группе, а изменяется в различных группах. Соответственно, в этом варианте появляются четыре группы (с индексами 0-2, 3-5, 6-8 и 9-11 соответственно). В каждой из этих групп три вектора различаются расположением двух значений 1 в трех доступных позициях, то есть
Ниже в таблице 2 воспроизводятся лидер-векторы, определенные для примера решетчатого квантователя, предложенного для кодека G.EV-VBR при стандартизации в ITU-T SG16/Q9 (эти лидер-векторы могут отличаться от стандартизованных лидер-векторов масштабным коэффициентом). Лидер-векторы (и, таким образом, решетка) имеют размерность, равную восьми, и всего имеется 36 лидер-векторов. В этом случае для лидер-векторов с компонентами с нечетными значениями вводится ограничение по знаку. В частности, если сумма абсолютных значений всех восьми компонентов кратна четырем, то количество отрицательных компонентов должно быть четным, в противном случае оно должно быть нечетным. Например, сумма значений лидер-вектора с индексом 0 (1, 1, 1, 1, 1, 1, 1, 1) равна 8, то есть кратна четырем, и, таким образом, в векторах из соответствующего ему лидер-класса должно быть четное количество значений -1. Сумма значений лидер-вектора с индексом 3 (3, 1, 1, 1, 1, 1, 1, 1) равна 10, то есть не кратна четырем, таким образом, количество отрицательных компонентов должно быть нечетным.
Процедура биномиальной индексации для вектора, принадлежащего лидер-классу, может быть описана следующим примером кода общей индексации, написанным на ANSI-C с использованием (для моделирования универсального цифрового сигнального процессора (DSP, Digital Signal Processor), например, функций sub(), add(), L_mult0(), move16()) библиотеки функций, работающих со значениями с фиксированной точкой, описанной в документе ITU G.191 ITU-T Software Tool Library 2005 User's Manual (руководство пользователя библиотеки программных средств ITU-T, 2005 год). В этом примере комментарии к коду приводятся после двух следующих друг за другом символов "косая черта" ("//") или между комбинацией символов "/*" и "*/". Этот код индексации является общим, то есть применим к входным векторам, содержащимся в любом лидер-классе, представленном в таблице 2.
В этом коде индексации переменные и функции/процедуры имеют следующие значения:
- DIM представляет собой размер решетки, то есть 8.
- В переменной int no_vals_[36] хранится количество различных значений для каждого лидер-вектора.
- В переменной int no_vals_ind_[36] [4] хранится количество каждых отдельных значений в каждом лидер-векторе.
- В переменной int vals_[36][4] хранятся значения, которые принадлежат каждому лидер-вектору.
- Переменная int idx_lead представляет индекс лидер-класса, которому принадлежит индексируемый входной вектор.
- В переменной int abs_cv[8] хранятся абсолютные значения входного вектора, подлежащего индексации.
- Функция find_pos_elim_fx(int *abs_cv, int dim, int val, int *p) находит позиции компонентов со значением val в векторе размерностью dim с абсолютными значениями abs_cv, размещает их в массиве p и удаляет их из вектора abs_cv для подготовки его к поиску следующего значения.
- Функция find_pos_fx(int *abs_cv, int dim, int val, int *p) аналогична функции find_pos_elim_fx, за исключением того, что она не удаляет компоненты. Эта функция вызывается для предпоследнего значения в лидер-векторе, поскольку последующий поиск последнего значения не производится, и, таким образом, не требуется удалять компонент с предпоследним значением.
- Функция int c2idx_fx(int dim, int *p, int no_vals) назначает индекс для позиционирования no_vals компонентов в общем количестве dim возможных компонентов. Например:
(x x 0 0), индекс 0
(x 0 x 0), индекс 1
(x 0 0 x), индекс 2
(0 x x 0), индекс 3
(0 x 0 x), индекс 4
(0 0 x x), индекс 5,
где no_vals=2, DIM=4, и индексируется позиция двух компонентов "X" в четырех возможных позициях.
m-|p|
- Функция int number_fx(int no_vals, int *no_vals_ind_, int dim) вычисляет количество векторов, получаемых с помощью беззнаковых перестановок вектора размерностью dim с no_vals значениями, количество появлений каждого из которых представлено в массиве no_vals_ind_. Она соответствует формуле (1) без учета множителя 2.
Функционирование представленного выше кода общей индексации станет понятным из следующего примера. Рассмотрим еще раз пример лидер-класса, соответствующего варианту 2 из таблицы 1. Значение лидер-вектора в этом примере равно (2, 1, 1, 0), и предполагается, что лидер-класс связан со значением idx_lead=5, хотя в данном примере это не существенно. Кроме того, предположим, что подлежащий индексации входной вектор имеет значение (1, 0, 2, 1), то есть его размерность в этом примере меньше, чем в приведенном в таблице 2 примере решетчатого квантователя, который использует 8-мерные векторы. Однако, поскольку выше представленный код индексации является общим, это не имеет значения.
Переменным в представленном выше коде индексации при инициализации присваиваются следующие значения:
В результате выполнения представленного выше кода индексации получаются следующие результаты (после выполнения всех операций цикла WHILE):
i
Р
abs_cv
idx
pi
q
index
0
{2}
{1, 0, 1}
2
3
3
6
1
{0, 2}
{0}
1
1
1
7
Таким образом, окончательно в результате индексации входного вектора (1, 0, 2, 1), который содержится в лидер-классе, определяемом переменной class idx_lead=5 и который показан выше в качестве варианта 2 в таблице 1, получается индекс (позиции) 7, который фактически соответствует вектору (1,0,2,1) в лидер-классе 5.
В представленном выше коде общей индексации помимо индекса позиции, который представляет позиции значений во входном векторе, должна быть закодирована информация, относящаяся к знаку в ненулевых значениях входного вектора. Индекс знака вычисляется следующим образом:
i
где S представляет собой количество ненулевых компонентов в подлежащем индексированию векторе, значение b равно 0, если i-й ненулевой компонент положителен, и 1 - в противном случае. Значение S одинаково для всех векторов в лидер-классе.
Окончательный индекс I (содержащий информацию об индексе позиции и знака, а также информацию, указывающую лидер-класс, в котором содержится входной вектор) вычисляется следующим образом:
В этом коде используемые переменные имеют следующие значения:
- int idx_sign_max_bit[36] является переменной, в которой хранится количество битов, в которых представлен индекс знака. Она фактически соответствует количеству ненулевых значений в векторе, если паритет нулевой, или количеству ненулевых значений без единицы, если паритет равен +/-1.
1
2
1
1
2
- uint offset_lead[36+1] представляет смещение лидер-вектора для каждого лидер-класса. Эта переменная фактически означает, что, если имеется n векторов в первом лидер-классе, n векторов во втором и т.д., то переменная offset_lead принимает следующие значения: 0, n, n+n,.…. Таким образом, информация, представляющая лидер-класс, в котором содержится входной вектор, может быть включена в окончательный индекс I.
- Окончательный индекс I фактически формируется путем размещения idx_sign в последних idx_sign_max_bits[] битах сдвинутого индекса, то есть путем конкатенации битов индекса позиции и битов idx_sign с учетом того, что переменная idx_sign может использовать максимум idx_sign_max_bit битов, и добавлением смещения для лидер-класса, которому принадлежит текущий индексируемый вектор.
Согласно первому аспекту настоящего изобретения для упрощения вышеописанной процедуры общей индексации предлагается применение специфической обработки, если подлежащий индексации входной вектор содержится в лидер-классе, который принадлежит заранее заданной группе лидер-классов, и в противном случае - применение общей обработки.
На фиг.2 представлен алгоритм 2, иллюстрирующий способ индексации входного вектора в соответствии с примером осуществления первого аспекта настоящего изобретения.
На первом шаге 200 принимается входной вектор. Входной вектор может, например, определяться в процессе квантования как наиболее точное соответствие всем векторам в решетке, которая является объединением лидер-классов. Идентификация лидер-класса, в котором содержится входной вектор, также принимается на шаге 200. В качестве нескольких примеров идентификации можно привести индекс лидер-класса или лидер-вектор лидер-класса, в котором содержится входной вектор.
Затем на шаге 201 определяется, содержится ли лидер-класс в заранее заданной группе, состоящей из одного или более лидер-классов. Если это так, то на шаге 202 применяется специфическая обработка. В противном случае на шаге 203 применяется общая обработка.
Далее более подробно рассматриваются примеры заранее заданной группы лидер-классов и специфической обработки, применяемой при индексировании входных векторов, содержащихся в лидер-классах такой заранее заданной группы.
В соответствии с первым примером осуществления первого аспекта настоящего изобретения специфическая обработка выполняется только для лидер-класса, который связан с лидер-вектором с индексом 20 (см. таблицу 2), то есть {6,4,2,0,0,0,0,0}. Таким образом, заранее заданная группа лидер-классов содержит только один лидер-класс, идентифицируемый индексом 20.
В частности, вызов функции number_fx() в рамках кода общей индексации, описанного выше, может быть заменен следующим кодом:
В данном случае в переменной C[DIM+1][DIM+1] хранятся биномиальные коэффициенты, размерность которых не превышает 8.
В этой реализации специфическая обработка представлена кодом, который выполняется в том случае, когда значение idx_lead равно 20, а общая обработка представлена кодом, который выполняется в том случае, когда значение idx_lead не равно 20.
В контексте этого осуществления настоящего изобретения его авторы обратили внимание на то, что лидер-класс с индексом 20 является единственным лидер-классом с четырьмя различными значениями. Поскольку лидер-вектор с индексом 20 является единственным вектором с четырьмя различными значениями, таблица no_vals_ind_ имеет размерность 36×4 (36 лидер-классов и максимальное количество различных значений, равное четырем, для одного лидер-класса), то есть значение no_vals_ind[idx_lead][i] отлично от нуля только для idx_lead=20 и i=3 (i находится в диапазоне от 0 до 3). Однако в представленном выше коде общей индексации единственная ссылка в функции number_fx() на это ненулевое значение no_vals_ind_ появляется для idx_lead=20. Таким образом, полезно разделить функцию number_fx() на специфическую обработку (для лидер-класса с индексом 20 лидер-вектора) и общую обработку (для оставшихся лидер-классов), в этом случае для выполнения общей обработки требуется только ссылка на таблицу no_vals_ind_ с размерами 36 х 3. Ввод специфической обработки позволяет, таким образом, оптимизировать общую обработку.
В контексте второго примера осуществления первого аспекта настоящего изобретения его авторы обратили внимание на то, что в некоторых случаях практического использования небольшое подмножество лидер-классов встречается гораздо чаще, чем другие подмножества. Например, для данных, квантование которых осуществляется с помощью решетчатого квантователя в кодеке G.EV-VBR с решетчатой структурой, которая основана на векторах, представленных в таблице 2, наиболее вероятно будет использоваться лидер-вектор с индексом 1, то есть (2,2,0,0,0,0,0,0), и обычно векторы, для которых лидер-вектор имеет два различных значения (например, лидер-векторы с индексами 1, 2, 3, 4, 5, 6, 9 и т.д.), наиболее вероятно будут использоваться чаще, чем другие векторы. Было решено, что целесообразно выработать способ индексации, который, в частности, был бы проще для этих векторов.
Для вычисления индекса для знака требуется цикл проверки знака каждого компонента вектора. Гораздо проще отдельно/специфически рассматривать лидер-векторы только с двумя различными значениями, поскольку процедура индексации обрабатывает позицию только одного значения (первого) без дальнейших подготовительных операций для проверки позиций последующих значений. Кроме того, большинство лидер-векторов только с двумя значениями имеют одно нулевое значение (см., например, лидер-векторы с индексами 1, 2, 4 и т.д. в таблице 2), поэтому создание индекса позиции может быть эффективно связано с созданием индекса знака в том же цикле.
Существуют два типа лидер-векторов с двумя значениями, один тип имеет только четные значения (см., например, лидер-векторы с индексами 1, 2, 4, 5 и т.д. в таблице 2), а другой - только нечетные значения (см. индексы 3, 6, 9 и т.д.). Большинство компонентов первого типа имеют значение 0, в то время как большинство компонентов второго типа имеют значение 1.
Следующая специфическая процедура может, например, использоваться для замены всего приведенного выше кода общей индексации с целью обработки двузначных векторов с четными компонентами.
Подобным же образом может отдельно обрабатываться второй тип (двузначные векторы с нечетными значениями) с использованием, например, следующей процедуры:
В этом втором примере осуществления первого аспекта настоящего изобретения заранее заданная группа лидер-классов содержит, таким образом, все лидер-классы, в которые входят только двузначные лидер-векторы (то есть лидер-классы с индексами лидер-векторов 1, 2, 3, 4, 5, 6, 9 и т.д.). Специфическая обработка представлена двумя кодовыми сегментами, определяющими соответственно обработку двузначных лидер-векторов с четными и нечетными компонентами, а общая обработка представлена кодом общей индексации, который применяется для всех других лидер-классов (например, лидер-классов с индексами лидер-векторов 0, 7, 8, 10 и т.д. в таблице 2). Здесь следует отметить, что заранее заданная группа разделена в данном случае на две подгруппы, первую подгруппу двузначных лидер-векторов с четными компонентами и вторую подгруппу двузначных лидер-векторов с нечетными компонентами, и что для каждой из этих подгрупп выполняются различные действия в рамках специфической обработки.
В виде первой модификации второго примера осуществления первого аспекта настоящего изобретение можно также отказаться от специфической обработки для двузначных лидер-векторов с нечетными компонентами (например, с индексами 3, 6, 9 и т.д.) и выполнять вместо этого код общей индексации. Заранее заданная группа лидер-классов в этом случае будет содержать только лидер-классы с двузначными лидер-векторами с четными компонентами. В альтернативном варианте можно отказаться от специфической обработки для двузначных лидер-векторов с четными компонентами.
В виде второй модификации второго примера осуществления первого аспекта настоящего изобретение можно также ограничить специфическую обработку только определением индекса позиции ("index") или индекса знака ("idx_sign"). Конечно, эта модификация может также применяться к первой модификации второго примера осуществления первого аспекта настоящего изобретения.
Первый аспект настоящего изобретения ориентирован на индексацию входного вектора, которая, например, требуется в процессе квантования. Описываемый далее второй аспект настоящего изобретения ориентирован на деиндексацию, то есть определение (или восстановление) целевого вектора на основе индекса, связанного с целевым вектором.
Процедура биномиальной деиндексации для целевого вектора, принадлежащего лидер-классу, представленному в таблице 2, может быть описана с помощью приведенного ниже примера кода общей деиндексации. Этот код является общим, то есть он применим к целевым векторам, содержащимся в любом лидер-классе таблицы 2. Переменные и функции, используемые в этом коде деиндексации, соответствуют переменным и функциям, используемым в коде общей индексации, представленном выше в контексте первого аспекта настоящего изобретения. В процедуру деиндексации в качестве входных параметров передаются переменная idx_lead, которая идентифицирует лидер-класс, и переменная index_loc, которая идентифицирует индекс позиции (который представляет позиции значений в целевом векторе), а в качестве выходного параметра определяется целевой вектор cv. Здесь не рассматривается знак целевого вектора, он может быть восстановлен в отдельной процедуре.
В данном случае функция idx2c_fx(int dim, int* р, int no_vals, int index_loc) комплементарна обсуждавшейся выше функции c2idx_fx и возвращает позицию р компонентов no_vals в векторе размерностью dim в соответствии с index_loc.
Кроме того, с помощью переменной int occ_pos[8] отслеживаются позиции, в которые были помещены компоненты уже декодированных значений. Переменная int offset[8] используется для обнаружения фактической позиции значений, поскольку, если, например, одно значение уже было размещено в 8-мерном векторе, индекс позиции для следующего значения относится только к семи позициям. Например, если для 4-мерного лидер-вектора (2 1 1 0) при декодировании позиции значения 2 получается результат (х 2 х х), и позиция индекса для значения 1 равна 0, это соответствует позициям (0, 1) для двух единичных значений, но единицы фактически помещаются в позициях (0, 2), поскольку первое значение 2 уже находится в позиции 1.
На фиг.3 показан алгоритм, иллюстрирующий способ определения целевого вектора на основе индекса, связанного с целевым вектором, в соответствии с примером осуществления второго аспекта настоящего изобретения. Этот способ может, например, выполняться во время процесса деквантования.
На шаге 300 принимается индекс, связанный с целевым вектором, подлежащим определению. Индекс может, например, являться индексом, который выбирает вектор из векторов лидер-класса, причем векторы в лидер-классе могут, например, индексироваться биномиально. Помимо индекса принимается идентификация лидер-класса, в котором содержится целевой вектор. Однако это не обязательная операция, поскольку идентификация лидер-класса, в котором содержится целевой вектор, может также включаться в индекс, связанный с целевым вектором. Индекс и идентификация лидер-класса, полученная на шаге 300, может, например, быть получена из индекса, который содержит всю следующую информацию: идентификация лидер-класса, информация о том, какой вектор в лидер-классе должен быть определен в качестве целевого вектора, и информация о знаке для целевого вектора.
Целевой вектор, подлежащий определению в ходе выполнения алгоритма, показанного на фиг.3, может, например, выбираться в процессе квантования как наиболее точное соответствие всем векторам в решетке.
Затем на шаге 301 определяется, содержится ли лидер-класс в заранее заданной группе, состоящей из одного или более лидер-классов. Если это так, то на шаге 302 применяется специфическая обработка. В противном случае на шаге 303 применяется общая обработка.
Далее более подробно рассматриваются примеры заранее заданной группы лидер-классов и специфической обработки, применяемой при деиндексации целевых векторов, содержащихся в лидер-классах такой заранее заданной группы.
В соответствии с первым примером осуществления второго аспекта настоящего изобретения специфическая обработка выполняется только для лидер-класса, который связан с лидер-вектором с индексом 20 (см. таблицу 2), то есть {6, 4, 2, 0, 0, 0, 0, 0}. Таким образом, заранее заданная группа лидер-классов содержит только один лидер-класс, идентифицируемый индексом 20.
В частности, первый цикл FOR (над горизонтальной пунктирной линией) представленного выше кода общей деиндексации может быть заменен следующим кодом:
Кроме того, вызов функции number_fx() в рамках кода общей деиндексации может быть заменен следующим кодом:
В данном случае, как уже объяснялось выше, в переменной C[DIM+1][DIM+1] хранятся биномиальные коэффициенты, размерность которых не превышает 8.
В этой реализации специфическая обработка представлена кодом, который выполняется в том случае, когда значение idx_lead равно 20, а общая обработка представлена кодом, который выполняется в том случае, когда значение idx_lead не равно 20.
В контексте этого осуществления настоящего изобретения его авторы обратили внимание на то, что лидер-класс с индексом 20 является единственным лидер-классом с четырьмя различными значениями. Поскольку лидер-вектор с индексом 20 является единственным вектором с четырьмя различными значениями, таблицы no_vals_ind_ и vals_ имеют размерность 36×4 (36 лидер-классов и максимальное количество различных значений, равное четырем, для одного лидер-класса), то есть значения no_vals_ind[idx lead][i] и vals_[idx_lead][i] существуют только для idx_lead=20 и i=3 (i находится в диапазоне от 0 до 3). Однако в представленном выше коде общей деиндексации единственная ссылка на соответствующие значения no_vals_indx_ и vals_ появляется для idx_lead=20 в части кода общей деиндексации, который был заменен специфическим кодом. Таким образом, теперь в оставшемся коде общей деиндексации требуется только ссылка на таблицы no_vals_ind_ и vals_ с размерностью 36×3. Ввод специфической обработки позволяет, таким образом, оптимизировать общую обработку.
В соответствии со вторым примером осуществления второго аспекта настоящего изобретения заранее заданная группа лидер-классов содержит только лидер-класс с вектором лидер-класса, имеющим индекс 1 (см. таблицу 2), то есть {2,2,0,0,0,0,0,0}. Вместо выполнения в любом случае общей деиндексации, то есть деиндексации, которая применима в случае целевых векторов, содержащихся в любом лидер-классе (и которая была представлена выше со ссылкой на код общей деиндексации), может, например, выполняться следующая специфическая обработка, если целевой вектор содержится в лидер-классе с вектором лидер-класса, имеющим индекс 1, а общая обработка может выполняться только в противном случае. Следует отметить, что, как и в представленном выше коде общей деиндексации, в результате следующей специфической обработки формируется только беззнаковый целевой вектор cv.
В кодеке G.EV.VBR (то есть для кодового словаря, основанного на лидер-векторах, определенных в таблице 2, и речевых и музыкальных данных с битовыми скоростями 16, 24 и 32 кбит/с) лидер-вектор (2,2,0,0,0,0,0,0) является наиболее вероятным, поэтому применение специфической обработки для его лидер-класса уменьшает общий уровень сложности процедуры деиндексации.
На фиг.4 показана схематическая блок-схема устройства 4, способного реализовать способы, соответствующие первому и второму аспектам настоящего изобретения. Этим устройством может, например, быть мобильный телефон, компьютер или другое электронное устройство. Устройство содержит центральный процессор (CPU, Central Processing Unit) 400, который имеет доступ к памяти 401 программ и к памяти 402. CPU 400 может, например, выполнять компьютерную программу, которая хранится в памяти 401 программ. В данном случае память 401 программ может фиксированным образом устанавливаться в устройстве 4 или быть съемной. Например, память 401 программ может быть реализована в виде машиночитаемого носителя, на котором хранится компьютерная программа. Память 402 может, например, быть реализована в виде оперативной памяти (RAM, Random Access Memory). Память 401 программ и память 402 также могут быть реализованы в виде единого компонента.
CPU 400 также управляет драйвером микрофона, который, в свою очередь, управляет микрофоном, драйвером 403 динамика, который, в свою очередь, управляет динамиком, и интерфейсом 405, через который данные могут обмениваться с другими устройствами. Интерфейс 405 может быть реализован, например, в виде радиоинтерфейса.
Таким образом, устройство 4 содержит все компоненты, требуемые для установления аудиосвязи с другим объектом. Аудиосигналы, принимаемые драйвером 404 микрофона, могут быть кодированы в CPU 400 и переданы через интерфейс 405 в другое устройство. Кроме того, аудиоданные из других устройств могут приниматься через интерфейс 405, декодироваться CPU 400 и воспроизводиться с помощью драйвера 403 динамика.
В этом случае для выполнения кодирования и декодирования CPU 400 устройства 4 запускает кодек, например кодек G.EV-VBR. Этот кодек может, например, быть выполнен в виде компьютерной программы, хранящейся в памяти 401 программ. Таким образом, устройство 4 может, например, реализовывать структурные блоки 101, 104, 105 и 106, показанные на фиг.1.
CPU 400 можно рассматривать как компонент обработки, который осуществляет индексацию входных векторов (в соответствии с алгоритмом, показанным на фиг.2) и/или определение целевого вектора на основе индекса, связанного с целевым вектором (в соответствии с алгоритмом, показанным на фиг.3), выполняя с этой целью специфическую и общую обработку согласно первому и второму аспектам настоящего изобретения. Кроме того, кодек (или его часть) может быть выполнен в виде специализированной аппаратуры 406 (например, в виде цифрового сигнального процессора (DSP, Digital Signal Processor), программируемой пользователем вентильной матрицы (FPGA, Field Programmable Gate Array), специализированной интегральной схемы (ASIC, Application Specific Integrated Circuit) или любой другой специализированной аппаратуры), и в этом случае специализированную аппаратуру 406 можно рассматривать как компонент обработки, который осуществляет индексацию входных векторов и/или определение целевого вектора на основе индекса, связанного с целевым вектором, выполняя с этой целью специфическую и общую обработку согласно первому и второму аспектам настоящего изобретения.
Программный код, выполняемый CPU 400, также можно рассматривать как содержащий такие компоненты обработки в форме функциональных модулей.
Настоящее изобретение было описано выше с помощью примеров его осуществления. Следует отметить, что существуют альтернативные способы и варианты, очевидные специалисту в этой области техники, которые могут быть осуществлены без нарушения объема и сути прилагаемой формулы изобретения.