УСТРОЙСТВО И СПОСОБ КОМБИНАТОРНОГО КОДИРОВАНИЯ СИГНАЛОВ С НИЗКОЙ СЛОЖНОСТЬЮ
APPARATUS AND METHOD FOR LOW-COMPLEXITY COMBINATORIAL CODING OF SIGNALS

Область техники
Настоящее изобретение относится, в общем, к кодированию векторов и, в частности, к комбинаторному Факторному Импульсному Кодированию векторов с низкой сложностью.
Уровень техники
x
M
i
Способы кодирования векторных или матричных величин для речи, аудио, изображений, видео и других сигналов хорошо известны. Один такой способ, описанный в патенте США № 6236960 (автор Пенг и др.), который включен в данный документ посредством ссылки, известен как Факторное Импульсное Кодирование (или FPC). FPC может кодировать вектор  с использованием общего количества  битов, при условии, что
, (1)
x
m ≤ x
≤ m
m
n
M
N
i
i
и все величины вектора  вместе имеют такие целые значения, что -, где  является полным количеством импульсов единичной амплитуды, а  является длиной вектора. Общее количество  битов используется, чтобы закодировать  комбинаций максимально эффективным способом так, чтобы следующее выражение, которое описывает теоретически минимальное количество комбинаций, оставалось истинным:
(2)
d
n
В этом неравенстве  является количеством комбинаций  ненулевых элементов вектора в  положениях и задается как
, (3)
d
m
является количеством комбинаций  ненулевых элементов вектора при  полных единичных импульсах и задается как
, (4)
d
min(m,n)
n
n=
m=
M=
и  представляет комбинации, требуемые для описания полярности (знака)  ненулевых элементов вектора. Выражение  позволяет учесть случай, когда количество импульсов единичной магнитуды превышает длину  вектора. Способ и устройство кодирования и декодирования векторов такой формы полностью были описаны в предшествующем уровне техники. Более того, практическая реализация этого способа кодирования была описана в стандарте 3GPP2 C.S0014-B, где длина вектора 54 и количество импульсов единичной магнитуды 7 производят 35-битное кодовое слово.
n
m
n=
m=
Несмотря на то, что эти значения  и  не причиняют никакой чрезмерной нагрузки сложности, более высокие значения могут быстро причинить проблемы, особенно в мобильных переносных устройствах, которым нужно сохранять память и вычислительную сложность как можно меньшими. Например, использование этого способа кодирования для некоторых применений (таких как кодирование аудио) могут требовать 144,28, или выше. В таких обстоятельствах затраты, связанные с вычислением комбинаторного выражения  с использованием способов из предшествующего уровня техники, могут быть слишком высоки для практической реализации.
Рассматривая эти затраты более подробно, мы можем переписать Ур.3 как
(5)
k
k
Непосредственная реализация проблематична, поскольку  потребует 197 бит точности в числителе и 98 точности в делителе для получения 99-битного частного. Поскольку большинство цифровых сигнальных процессоров (DSP), используемых в сегодняшних переносных устройствах, обычно поддерживают только операции перемножения 16 бит × 16 бит, необходимо будет использовать специальные процедуры умножения/деления с многократной точностью. Такие процедуры требуют последовательности вложенных операций перемножения/накопления, которые обычно требуют порядка  операций перемножения/накопления (MAC), где  является количеством 16-битных сегментов в операнде. Так, исполнение одного 197×16-битного перемножения потребует минимум 13 операций MAC плюс операции сдвига и хранения. Выражение делителя вычисляется похожим способом для получения 98-битного результата. Дополнительно требуется 197/98-битное деление, которое является чрезвычайно сложной операцией, таким образом, вычисление всего отношения факториалов в Ур.5 потребует значительных ресурсов.
Для попытки снижения сложности Ур.5 можно переписать для распределения операций деления, чтобы получить следующее:
(6)
m
n
В этом выражении динамический диапазон операций деления уменьшен, но, к сожалению, нужна повышенная разрядность частного для точного представления деления на 3, 7, 9 и т.д. Чтобы разместить такую структуру, также требуется операция округления для гарантии целого результата. При большом количестве операций деления с высокой точностью такая реализация не решает адекватно проблему сложности для больших  и , и более того, потенциально может произвести неправильный результат из-за накопленных погрешностей точности.
В еще одной реализации, Ур.5 может быть реорганизовано следующим образом:
(7)
m
n
Если это выражение оценивать слева направо, результат всегда производить целое значение. Несмотря на то, что этот способ контролирует вопрос точности и динамического диапазона в какой-то степени, большие значения  и  также требуют широкого использования операций перемножения и деления многократной точности.
n
m
n
m
Наконец, для того чтобы минимизировать вычислительную сложность, возможно предварительно вычислять и сохранять все комбинации факториалов в таблице поиска. Так, все значения  могут быть просто сохранены в матрице  ×  и подходящим образом извлечены из памяти с использованием нескольких тактов процессора. Проблема этого подхода, однако, состоит в том, что по мере того, как  и  становятся больше, также растут и требования связанной памяти. Используя предыдущий пример,  потребует 144×28×=52,416 байт для хранения, что неприемлемо для большинства мобильных переносных устройств. Поэтому существует необходимость в способе и устройстве комбинаторного Факторного Импульсного Кодирования векторов с низкой сложностью.
Краткое описание чертежей
Фиг.1 - блок-схема кодера.
Фиг.2 иллюстрирует генерацию кодового слова.
Фиг.3 - блок-схема декодера.
Фиг.4 - блок-схема последовательности операций, показывающая работу Генератора Комбинаторной Функции с Фиг.1 и Фиг.3.
Фиг.5 - блок-схема последовательности операций, показывающая работу кодера с Фиг.1.
Фиг.6 - блок-схема последовательности операций, показывающая работу декодера с Фиг.3.
Фиг.7 - блок-схема последовательности операций, показывающая работу схемы комбинаторного кодирования с Фиг.1.
Фиг.8 - блок-схема последовательности операций, показывающая работу схемы комбинаторного декодирования с Фиг.3.
Подробное описание
x
Для того чтобы удовлетворить вышеупомянутую необходимость, в данном документе представлены способ и устройство комбинаторного Факторного Импульсного Кодирования векторов с низкой сложностью. Во время работы кодера принимается сигнальный вектор (). Первый операнд () многократной точности будет сгенерирован на основании сигнального вектора, который должен быть закодирован. Генерируются операнд мантиссы и операнд экспоненты. Как операнд мантиссы, так и операнд экспоненты представляют второй операнд многократной точности, который основан на сигнальном векторе, который должен быть закодирован. Выбирается часть , которая должна быть модифицирована на основании операнда экспоненты. Часть  модифицируется на основании операнда мантиссы для получения модифицированного операнда (). Наконец, генерируется кодовое слово многократной точности для использования в соответствующем декодере.
x
x
x
h
Настоящее изобретение охватывает способ работы кодера, который кодирует кодовое слово (C) из вектора (). Способ содержит этапы приема вектора  который должен быть закодирован, генерирования первого операнда () многократной точности на основании , и генерирования операнда (M) мантиссы и операнда () экспоненты. Операнд мантиссы и операнд экспоненты представляют второй операнд () многократной точности, который основывается на сигнальном векторе, который должен быть закодирован. Затем выбирается часть , которая должна быть модифицирована, на основании операнда экспоненты, и часть  модифицируется на основании операнда мантиссы и указателя положения для получения модифицированного операнда (). Наконец, генерируется кодовое слово (C) на основании .
x
x
h
Настоящее изобретение дополнительно охватывает кодер, содержащий схему комбинаторного кодирования, выполняющую этапы приема вектора , который должен быть закодирован, генерирования первого операнда () многократной точности на основании  и генерирования операнда (M) мантиссы и операнда () экспоненты. Операнд мантиссы и операнд экспоненты представляют второй операнд () многократной точности, который основан на сигнальном векторе, который должен быть закодирован. Затем выбирается часть , которая должна быть модифицирована, на основании операнда экспоненты, и часть  модифицируется на основании операнда мантиссы и указателя положения для получения модифицированного операнда (). Наконец, генерируется кодовое слово (C) на основании .
x
h
k-1
x
x
Настоящее изобретение дополнительно охватывает способ работы декодера, который генерирует вектор () из кодового слова (C). Способ содержит этапы приема кодового слова (), генерирования первого операнда () многократной точности на основании  и генерирования операнда (M) мантиссы и операнда () экспоненты. Операнд мантиссы и операнд экспоненты представляют второй операнд () многократной точности, который основан на кодовом слове. Выбирается часть , которая должна быть модифицирована, на основании операнда экспоненты, и часть  модифицируется на основании операнда мантиссы и указателя положения для получения модифицированного операнда (). Положение  ()-ого ненулевого элемента вектора  декодируется, и вектор () генерируется на основании положения .
h
k-1
x
x
Настоящее изобретение дополнительно охватывает декодер, содержащий схему комбинаторного декодирования, выполняющую этапы приема кодового слова (), генерирования первого операнда () многократной точности на основании  и генерирования операнда (M) мантиссы и операнда () экспоненты. Операнд мантиссы и операнд экспоненты представляют второй операнд () многократной точности, который основан на кодовом слове. Выбирается часть , которая должна быть модифицирована, на основании операнда экспоненты, и часть  модифицируется на основании операнда мантиссы и указателя положения для получения модифицированного операнда (). Положение  ()-ого ненулевого элемента вектора  декодируется, и вектор () генерируется на основании положения .
Обращаясь теперь к чертежам, на которых подобные ссылочные позиции обозначают подобные компоненты, Фиг.1 является блок-схемой кодера 100. Кодер 100 содержит генератор 102 вектора, схему 106 комбинаторного кодирования, генератор 108 комбинаторных функций и другую схему 104 кодирования. Во время работы входной сигнал, который должен быть закодирован, принимается генератором 102 вектора. Как известно из уровня техники, входной сигнал может содержать речь, аудио, изображение, видео, и другие сигналы.
x
i.
Генератор 102 вектора принимает входной сигнал и создает вектор Генератор 102 вектора может содержать любое количество парадигм кодирования, включая, но не в качестве ограничения, кодирование речи с помощью Линейного Предсказания с Мультикодовым Управлением (CELP), как описано Пенгом и др., кодирование областей преобразования для аудио, изображений и видео, включая способы, основанные на Дискретном Преобразовании Фурье (DFT), Дискретном Косинусном Преобразовании (DCT) и Модифицированном Дискретном Косинусном Преобразовании (MDCT), кодирование вейвлет-преобразований, прямую временную импульсно-кодовую модуляцию (PCM), дифференциальную PCM, адаптивную дифференциальную PCM (ADPCM) или любую из семейства методик кодирования поддиапазонов, которые хорошо известны в уровне техники. Фактически любой сигнальный вектор, имеющий форму, обозначенную выше, может быть эффективно обработан согласно настоящему изобретению.
x
x
M
x
m ≤ x
≤ m
m
n
n
m
i
i
i
i
Схема 106 комбинаторного кодирования принимает вектор и использует Факторное Импульсное Кодирование для получения кодового слова C. Как обсуждалось выше, Факторное Импульсное Кодирование может кодировать вектор  с использованием общего количества  бит, при условии, что , и все величины вектора  вместе имеют такие значения, что -, где  является полным количеством импульсов единичной амплитуды, а  является длиной вектора. Как обсуждалось выше, более высокие значения  и  могут быстро причинить проблемы, особенно в мобильных переносных устройствах, которым нужно сохранять память и вычислительную сложность как можно меньшими.
a
a
Чтобы решить этот вопрос, генератор 108 комбинаторных функций использует методику с низкой сложностью для получения . Схема 106 комбинаторного кодирования затем использует  для получения кодового слова C. Схема 106 использует приближения (биты точности) с относительно низкой разрядностью комбинаций факториалов,  которые обеспечивают достаточную точность только для того, чтобы сгенерировать правильное кодовое слово. То есть, пока сохраняются конкретные свойства, подходящее приближение функции  является достаточным для гарантии того, что результирующее кодовое слово однозначно декодируемо. Чтобы описать генерацию функции , сначала выведем функцию  которая является подходящим приближением  Первым этапом возьмем логарифм с произвольным основанием  от Ур.5 и выполним обратное преобразование к логарифму по основанию  от реорганизованных членов
, (8)
где функция . Далее, определим функции  и заменим в Ур.8 таким образом
(9)
где , , и .
Однако, согласно предпочтительному варианту настоящего изобретения, нет необходимости в том, чтобы  и  были эквивалентны для получения однозначно декодируемого кодового слова. Существует только два условия, которые с достаточностью должны выполняться
≥ (10)
и
≥ (11)
n, d
n
d
Для первого условия ограничение просто говорит о том, что, если <, тогда буду пересекаться кодовые пространства, и следовательно, будет более одного входа, способного генерировать конкретное кодовое слово, таким образом, кодовое слово не будет однозначно декодируемым. Второе условие утверждает, что для заданных  «погрешность» должна быть больше или равна, чем сумма членов погрешности, связанной с предыдущим элементом рекурсивной последовательности, описанной Пенгом и др. в патенте США № 6236960. Можно показать, что = истинно только, если комбинаторное выражение в точности является следующим: . Однако, несмотря на то, что неравенство Ур.11 является достаточным, нет необходимости в его истинности для всех и. Для таких величин  может удовлетворять другому неравенству, выводимому из Ур.31 документа Пенга и др. и определяемому как
(12)
m,k
m≤n
k≤d
В этом случае Ур.11 должно выполняться в строгом смысле для конкретных (),(),(), то есть
m≤n, k≤d
>, (13)
Возвращаясь к Ур.9, нам требуется сгенерировать  путем создания функций  с приближениями низкой сложности для исходных функций так, чтобы
(14)
a=2
и где удовлетворяются условия Ур.10 и 11. Рассматривая , мы можем аппроксимировать эту функцию так, чтобы ≥, . Если мы выберем  и затем ограничим  32-мя битами точности, получившиеся операции можно легко реализовать в переносных мобильных устройствах, поскольку большинство DSP поддерживает однотактовые 32-битные сложения. Поэтому зададим
,  (15)
l(i)
i
где  - коэффициент сдвига, который может изменяться в зависимости от . В предпочтительном варианте l(i)=l=21, но многие другие варианты значений также возможны. В этом примере коэффициент  эквивалентен сдвигу на l бит влево, а функция  отсекает дробные биты, округляя до следующего наибольшего целого, и, наконец, коэффициент  сдвигает результат обратно вправо на l бит. Используя такую методику, функция ≥ для всех i≥1, а также обеспечивает достаточный динамический диапазон и точность с использованием только 32 бит, поскольку 9 бит положительной разрядности в области определения  могут представлять 512-битное число. Для того чтобы избежать сложности с вычислением этих величин в реальном времени, их можно вычислить предварительно и хранить в таблице с использованием только 144 × 4 байт памяти для примера с . Используя похожую методику аппроксимации , получаем
(16)
l(j)
m
n
l(j)=l=
k
где функция  используется из-за вычитания величины из общего количества. Это гарантирует, что≤, так что вклад  будет гарантировать ≥. Несмотря на то, что  предполагает многие значения в зависимости от и, в предпочтительном варианте используется значение 14 для переменного коэффициента сдвига. Как и ,  может быть предварительно вычислена и сохранена в таблице с использованием только 28 × 4 байт памяти для примера с . Для определения  нам необходимо сначала определить  как
(17)
k
l
При определенных выше и  предпочтительно является 32-битным числом с 8-битным беззнаковым целым компонентом  и 24-битным дробным компонентом . Используя это, мы можем вывести ≥, полагая , и взяв обратное преобразование от логарифма по основанию 2, чтобы получить . Затем мы можем использовать разложение в ряд Тейлора для оценки дробного компонента с нужной точностью, представленной как , округляя результат с использованием функции округления до наименьшего ближайшего, и затем подходящим образом сдвигая результат для формирования результата с многократной точностью (имеющий только  значащих бит), так что
(18)
l
l
где  - коэффициент целочисленного сдвига, применяемый к результату разложения в ряд Тейлора. Здесь  является коэффициентом сдвига, используемый аналогично как в Ур.15 и 16 для обеспечения ≥. Однако поскольку  не может быть практически предварительно вычислена для эффективной работы в реальном времени, нужна высокая осторожность при задании точных операций, необходимых как в кодере, так и в декодере для гарантии того, что реконструированный сигнальный вектор в точности совпадает с входным сигнальным вектором. Стоит отметить, что  может быть получена левым сдвигом , который может быть точно представлен посредством  бит.
k
В обсуждении выше функции ,  и  были выбраны так, чтобы отдельная оценка гарантировала, что  Однако необходимо только, чтобы общий результат удовлетворял этому условию. Например,  и  могут быть как описано выше, а  может быть более близкой к  функцией, которая может отбрасывать или округлять наименее значащие биты так, чтобы  могла быть меньше  для некоторых значений . Это приемлемо, пока такой эффект мал относительно эффекта  и , так что свойства Ур.10 и Ур.11 все еще оставались бы истинными.
m
n
Также любые функции ,  и  могут быть использованы без потери общности, пока свойства Ур.10 и Ур.11 сохраняются. Осторожность должна быть проявлена, однако, в том, что может случиться увеличение битовой скорости, если используется слишком малая точность. Стоит также отметить, что существует характерное соотношение между битовой скоростью и сложностью, и для больших значений и увеличение в 1 или 2 бита может быть приемлемым компромиссом за значительное увеличение точности.
C
x
Далее будет описано формулирование частичного кодового слова  для положений и магнитуд в схеме 106 комбинаторного кодирования. Пусть - положения ненулевых импульсов (в возрастающем порядке), а  - магнитуды в соответствующих положениях в векторе . Код для положений импульсов задается как
, (19)
а код для магнитуд импульсов задается как:
(20)
m
n
n=280
k
p
n, m
p
Таким образом, формулирование этого кодового слова требует сложения чисел ν и  многократной точности. Подобные операции вычитания нужны в декодере. Эти операции также добавляют сложности способу FPC, когда и велики. Рассмотрим кодирование/декодирование аудиосигнала в многоуровневой системе кодирования. Эта методика используется для кодирования преобразования остаточного сигнала погрешности на трех уровнях многоуровневой системы. Пусть размер 20мс блока равен  и одинаков для всех уровней. Количество импульсов для кодирования зависит от битовой скорости каждого уровня. Если скорости уровней 8 Кбит/с, 16 Кбит/с или 32 Кбит/с, то им понадобится 160 бит, 320 бит и 640 бит для кодирования 20 мс блока, соответственно. С использованием способа FPC блок длины 280 может быть закодирован с помощью 28, 74, и 230 импульсов для 160 бит, 320 бит и 640 бит на уровень, соответственно. Операции с многократной точностью в уравнениях (19) и (20) выполняются на цифровом сигнальном процессоре, который обычно оперирует 16-битными словами. Таким образом, для формирования 160-битного кодового слова необходимо выполнить операции сложения с 10 словами, а для 640-битного кодового слова операции сложения должны быть выполнены для более чем 40 слов. Каждая операция сложения занимает 4 блока (генерирование переноса разряда, перемещение в массив, сложение с переносом разряда). Следовательно, кодирование/декодирование -битного кодового слова на  уровнях многоуровневой системы требует  операций/сек. Для разных значений и  сложность операций сложения/вычитания с многократной точностью показана в Таблице 1. В этой таблице WMOPs обозначает взвешенное значение миллионов операций в секунду (Weighted Millions of Operation Per Second).
Таблица 1Сложность сложения/вычитания в кодировании/декодировании FPC с помощью известного из уровня техники способа
Количество уровней (<i>p</i>)
Размер блока (<i>n</i>)
Битовая скорость уровня/Бит на 20 мс блок (<i>k</i>)
Количество импульсов (<i>m</i>)
Сложность сложения/вычитания с многократной точностью
333
280280280
8 Кбит/с/16016 Кбит/с/32032 Кбит/с/640
2874230
0,64 WMOPs3,48 WMOPs22,0 WMOPs
Из Таблицы 1 видно, что, когда битовая скорость удваивается, сложность сложения с многократной точностью возрастает в шесть раз.
Как упоминалось выше, комбинаторная функция заменяется приближенной функцией , которая задается как
, (21)
где
(22)
и  является приближением функции , задаваемая как:
(23)
k
k
где  разбито на целый и дробный компоненты , а  - остаточный член малого порядка разложения в ряд Тейлора дробного компонента . На основании вышеопределенных функций  и  сначала получается  таким образом, что неравенство однозначной декодируемости
> (24)
n
d
удовлетворяется для всех и.
F
Возвращаясь к Ур. 19 и 20, замена приближенными функциями  действительных функций  приводит к следующему:
, (25)
(26)
h
h
M
h
M
Двоичное представление , полученное из Ур. 23, имеет  нулей окончания, если .  была получена как число с многократной точностью путем сдвига влево ( сдвигов) -битного числа. Поскольку замыкающие  бит  являются нулями, эти замыкающие  бит кодового слова не будут модифицированы, когда мы прибавим  к существующей частичной сумме в Ур.25. Чтобы эффективно использовать это свойство,  вычисляется в псевдоформате с плавающей запятой, т.е. функция  выводит -битную мантиссу () и соответствующую неотрицательную экспоненту (). -битная мантисса () определяется как
, (27)
h
а экспонента  определяется как
. (28)
Теперь суммирование в Ур.25 и 26 может легко использовать тот факт, что  слова не модифицируются, когда  прибавляется к частичной сумме.
Вышеприведенный способ на самом деле снижает в некоторой степени сложность. Однако перенос разряда, сгенерированный во время операции, возможно придется сохранять до конца кодового слова. Впоследствии мы покажем, что, если  удовлетворяет конкретным условиям, то перенос разряда придется сохранять до намного меньшей части всего кодового слова.
k
Сначала раскроем, что перенос разряда сохранится на одно дополнительное кодовое слово, если будут складываться (как в Ур.19) в точности комбинаторные функции , и суммирование проводится в возрастающим порядком
, (29)
т.е. частичная сумма , к которой прибавляется , задается как
. (30)
k
k
n
m
Можно показать, что операнд  с многократной точностью меньше, чем . Максимальное отношение  к  меньше, чем . Это отношение является бесконечностью при , которое также является максимально возможным значением . Поскольку , перенос разряда придется сохранить в этом конкретном случае. Для других значений  это отношение не больше, чем меньшее из  и . Таким образом
+<, (31)
Поскольку  меньше 32768, то вышеприведенное суммирование не приведет к сохранению переноса разряда более, чем на одно дополнительное кодовое слово. Это предполагает, что, если мы используем в точности комбинаторные функции в упорядоченном суммировании (29), то мы получим преимущество сохранения переноса разряда только на одно дополнительное кодовое слово, однако, в точности комбинаторные функции не имеют преимущества замыкающих нулей, и поэтому сложение выполняется по длине .
Ясно, что нам нужно создать приближенные функции  так, чтобы в дополнение к однозначной декодируемости и замыкающим нулям упорядоченное сложение  в Ур.29 не требовало сохранения переноса разряда. Можно показать, что частичная сумма (первое кодовое слово с многократной точностью), к которой прибавляется , задается как
, (32)
которая меньше, чем . Поэтому неравенство
<, (33)
является достаточным, чтобы при добавлении  к  для генерации  (модифицированное кодовое слово с многократной точностью),
, (34)
перенос разряда сохранился только на одно дополнительное кодовое слово. Это было эмпирически определено для , заданной уравнениями 21, 22 и 23. Кроме неравенства однозначной декодируемости нам нужно, чтобы выполнялось неравенство частичных сумм, т.е.
< (35)
Можно показать, что, если неравенство однозначной декодируемости сохраняется для , тогда
< (36)
Таким образом, достаточно сгенерировать , которая удовлетворяет следующему:
> (37)
Теперь приближенные комбинаторные функции удовлетворяют:
1. неравенству однозначной декодируемости;
2. свойству замыкающих нулей;
3. неравенству частичных сумм.
Поэтому эти функции могут быть использованы в построении факторного упаковывания кодового слова путем модифицирования только очень малого подмножества (только 3 слова из 10, 20 или 30 слов) полного кодового слова многократной точности. Малое подмножество представляется указателем положения, определяемого целыми числами  и , которые определяют слова в кодовом слове многократной точности, которые будут модифицированы. Указатель положения вычисляется следующим образом:
(38)
M
где 16 является длиной слова, а =16 выбирается как длина мантиссы. Слова от  до  кодового слова () многократной точности модифицируются на основании мантиссы . Заметим, что кодовое слово многократной точности
=. (39)
Декодер использует вычитание  из . Используя те же аргументы, как и для суммирования, можно показать, что, если функции  удовлетворяют трем вышеприведенным свойствам, то во время декодирования также только очень малому подмножеству всего кодового слова понадобится модифицирование. В декодере  получается как
(40)
Сложность кодирования/декодирования положений и магнитуд с использованием способа, известного из уровня техники, была показана в Таблице 1. (Сложность была показана только для части суммирования и вычитания. Сложность не включает в себя сложность генерирования ). Использование предлагаемого способа для кодирования/декодирования на трех уровнях многоуровневой системы приводит к значительному снижению сложности в сложении/вычитании многократной точности. Соответствующие числа сложности при использовании настоящего изобретения показаны в Таблице 2. Заметим, что улучшение сложности увеличивается, когда используется больше импульсов (более длинный размер кодового слова) в кодировании.
Таблица 2Сложность сложения/вычитания в кодировании/декодировании FPC с помощью настоящего изобретения
Количество уровней (<i>p</i>)
Размер блока (<i>n</i>)
Битовая скорость уровня/Бит на 20 мс блок (<i>k</i>)
Количество импульсов (<i>m</i>)
Сложность сложения/вычитания с многократной точностью
333
280280280
8 Кбит/с/16016 Кбит/с/32032 Кбит/с/640
2874230
0,21 WMOPs0,53 WMOPs1,65 WMOPs
Кодирование количества ненулевых положений:
Формат представления -битной мантиссы и экспоненты также имеет преимущества в кодировании количества ненулевых положений. Кодирование количества ненулевых положений ν задается как
(41)
Можно легко заметить, что умножение двух приближенных функций может быть более легким в формате мантиссы и экспоненты, чем в формате многократной точности. Основным преимуществом, однако, является то, что когда нам нужно уменьшить сложность, используя представления -битной мантиссы и экспоненты, каждая из функций  и  может быть заранее сохранена с использованием только двух слов (произведение их -битных мантисс и сумма их экспонент также могут быть заранее сохранены). Это позволяет более быстрое кодирование ν без каких-либо значительных требований к ROM.
x
x
Во время работы кодера 100 схема 106 комбинаторного кодирования будет принимать сигнальный вектор (), который должен быть закодирован. Первый операнд () многократной точности будет сгенерирован на основании сигнального вектора, который должен быть закодирован. Более конкретно, , где  являются положениями ненулевых элементов вектора . Генерируются операнд мантиссы () и операнд экспоненты (). Как операнд мантиссы, так и операнд экспоненты представляют второй операнд () многократной точности, который основывается на сигнальном векторе, который должен быть закодирован. Схема 106 затем выбирает часть , чтобы модифицировать на основании операнда экспоненты. Как обсуждалось выше, эта часть представляется указателем положения, определяемым целыми числами  и , которые определяют слова в кодовом слове многократной точности, которые будут модифицированы. Указатель положения вычисляется как в Ур(38). Еще часть  затем модифицируется на основании операнда мантиссы и указателя положения для получения модифицированного операнда () многократной точности как в Ур.(34), и генерируется кодовое слово многократной точности для использования в соответствующем декодере, на основании модифицированного операнда многократной точности, как показано в Ур.39.
π
h=50
Фиг.2 иллюстрирует один пример генерации кодового слова с помощью вышеприведенной методики. Как описано выше, . Как показано на Фиг.2, только слова 3, 4 и 5 кодового слова многократной точности модифицируются при переходе от  к . Конкретными словами, которые выбраны для модифицирования, являются слова от  до  кодового слова (C) многократной точности, причем  и  основаны на экспоненте , так что
M
M
Слово  из  модифицируется путем прибавления сдвинутых влево  меньших значимых бит мантиссы . Слова от  до  модифицируются путем прибавления последующих 16 бит мантиссы . Слово  модифицируется путем прибавления только разряда переноса из предыдущего сложения. Заметим, что, поскольку =16, то =. В случае декодера вместо сложений выполняются вычитания.
n
d
x
x
x
x
i
i
i
i
Фиг.3 является блок-схемой декодера 300. Как показано, декодер 300 содержит схему 306 комбинаторного декодирования, схему 310 реконструкции сигнала, другую схему 304 декодирования и генератор 108 комбинаторных функций. Во время работы схемой 306 комбинаторного декодирования принимается комбинаторное кодовое слово. Схема 306 комбинаторного декодирования предоставляет и  в генератор комбинаторных функций и принимает  в ответ. Схема 306 декодирования затем создает вектор  на основании . Схема 306 работает сходным образом как схема 106, за исключением того, что операции сложения заменены вычитаниями. Другими словами, . Вектор  передается в схему 310 реконструкции сигнала, где создается выходной сигнал (например, речь, аудио, изображения, видео или другие сигналы) на основании  и других параметров от другой схемы 304 декодирования. Более конкретно, другие параметры могут содержать любое количество параметров реконструкции сигнала, связанных с используемой парадигмой кодирования сигналов в конкретном варианте осуществления. Они могут содержать, но не в качестве ограничения, параметры энергии и масштабирования сигнала и параметры спектрального формования и/или фильтра синтезатора. Обычно эти параметры используются для масштабирования энергии и/или спектрального формования реконструированного сигнального вектора  таким образом, чтобы воспроизвести окончательный выходной сигнал.
n
d
A
i
n-d+1
A
i
i
n
i>n
i
n
B
B
Фиг.4 является блок-схемой последовательности операций, показывающей работу генератора комбинаторных функций с Фиг.1 и Фиг.3. Более конкретно, последовательность операций логической схемы на Фиг.4 показывает те этапы, которые необходимы генератору 108 комбинаторных функций для получения . Последовательность операций логической схемы начинается на этапе 402, где принимаются входные и. На этапе 403 накопитель  устанавливается в 0. На этапе 404 счетчик  устанавливается равным . На этапе 406 логарифмическое приближение  прибавляется к накопителю . На этапе 410 счетчик  увеличивается на 1. Этапы 406-410 повторяются в цикле, пока счетчик  не превзойдет . Этап 412 проверяет условие  и завершает цикл, когда  превзойдет . На этой стадии накопитель содержит логарифмическое приближение числителя комбинаторной функции , логарифмическое приближение знаменателя комбинаторной функции  вычитается из накопителя на этапе 416 для получения логарифмического приближения комбинаторной функции. На этапе 418 берется экспоненциальное приближение  накопителя для генерирования приближения  комбинаторной функции. На этапе 414 выводится как .
x
m
d
m
x
d
x
x
C
i
i
i
i
Фиг.5 является блок-схемой последовательности операций, показывающей работу кодера с Фиг.1. Последовательность операций логической схемы начинается на этапе 501, где генератором 102 вектора принимается входной сигнал. Как обсуждалось выше, входной сигнал может содержать речь, аудио, изображение, видео, или другие сигналы. На этапе 503 создается вектор и вводится в схему 106 комбинаторного кодирования, определяются  и  и передаются в генератор 108 комбинаторных функций. Как обсуждалось выше,  является полным количеством импульсов единичной амплитуды (или сумма абсолютных значений совокупно измеренных компонентов ) и  является количеством ненулевых элементов . На этапе 505 генератором 108 комбинаторных функций создается  и передается в схему 106 комбинаторного кодирования, где вектор кодируется для создания кодового слова  (этап 507). Как обсуждалось выше,  создается путем замены функций  в  на приближения низкой сложности исходных функций так, чтобы условия Ур.10 и 11 удовлетворялись.
n
d
x
x
i
i
Фиг.6 является блок-схемой последовательности операций, показывающей работу декодера с Фиг.3. Последовательность операций логической схемы начинается на этапе 601, где комбинаторным декодером 306 принимается комбинаторное кодовое слово. На этапе 603 и  передаются от комбинаторного декодера 306 в генератор 108 комбинаторных функций, и  возвращается в комбинаторный декодер 306 (этап 605). Кодовое слово декодируется декодером 306 на основании  (этап 607) для получения вектора , а  передается схему 310 реконструкции сигнала, где создается выходной сигнал (этап 609).
x
x
Фиг.7 является блок-схемой последовательности операций, показывающей работу схемы 106 комбинаторного кодирования. Последовательность операций логической схемы начинается на этапе 701, где принимается сигнальный вектор (). Первый операнд () многократной точности будет сгенерирован (этап 703) на основании сигнального вектора, который должен быть закодирован. Более конкретно, , где  являются положениями ненулевых элементов вектора . Генерируются (этап 705) операнд мантиссы () и операнд экспоненты (). Как операнд мантиссы, так и операнд экспоненты представляют второй операнд () многократной точности, который основывается на сигнальном векторе, который должен быть закодирован. Схема 106 затем выбирает часть , чтобы модифицировать на основании операнда экспоненты (этап 707). Как обсуждалось выше, эта часть представляется указателем положения, определяемым целыми числами  и , которые определяют слова в кодовом слове многократной точности, которые будут модифицированы. Указатель положения вычисляется как в Ур.38. На этапе 709 часть  затем модифицируется на основании операнда мантиссы и указателя положения для получения модифицированного операнда () многократной точности как в Ур.34, и на этапе 711 генерируется кодовое слово многократной точности для использования в соответствующем декодере на основании модифицированного операнда многократной точности, как показано в Ур.39.
π
Фиг.8 является блок-схемой последовательности операций, показывающей работу схемы 306 комбинаторного декодирования. Последовательность операций логической схемы начинается на этапе 801, где принимается кодовое слово (С).Первый операнд
x
() многократной точности будет сгенерирован (этап 803) на основании принятого кодового слова. Более конкретно, , где  являются положениями ненулевых элементов закодированного вектора . Генерируются (этап 805) операнд мантиссы () и операнд экспоненты
k-1
x
x
(). Как операнд мантиссы, так и операнд экспоненты представляют второй операнд () многократной точности, который основывается на кодовом слове. Как обсуждалось выше, эта часть представляется указателем положения, определяемым целыми числами  и , которые определяют слова в кодовом слове многократной точности, которые будут модифицированы. Указатель положения вычисляется как в Ур.38. На этапе 809 часть  модифицируется на основании операнда мантиссы и указателя положения для получения модифицированного операнда () многократной точности как, и на этапе 811 положение  ()-го ненулевого элемента вектора  декодируется на основании модифицированного кодового слова многократной точности как в Ур.40. На этапе 813 декодированный вектор () генерируется на основании положения .
m
n
M
m
n
m
n
m
n
Таблица 3 показывает снижение сложности, связанное с настоящим изобретением, по сравнению с уровнем техники. Для разных значений и  даны связанное число бит  и среднее количество вызовов  за фрейм. Для этих примеров интервал длины фрейма составляет 20 мс, что соответствует скорости 50 фреймов в секунду. Единицей измерения для сравнения сложности является взвешенное значение миллионов операций в секунду, или WMOPS. Была использована компьютерная симуляция для получения оценки сложности, как если бы она была запущена DSP с фиксированной запятой и ограниченной точностью. Для этих примеров при необходимости использовались библиотеки вычислений с многократной точностью, и каждой элементарной команде был назначен подходящий вес. Например, перемножениям и сложениям был назначен вес одной операции, в то время как элементарным трансцендентным операциям и операциям деления был назначен вес 25 операций. По таблице легко заметить, что использование  обеспечивает значительное снижение сложности по сравнению с уровнем техники, и что пропорциональное снижение сложности растет с ростом и . Показано, что такое снижение сложности так же велико, как два порядка магнитуды для случая с , но будет продолжать расти с дальнейшим ростом и . Это происходит в основном за счет роста точности операндов, которая требуется, чтобы разрешать комбинаторные выражения в уровне техники. Эти операции на практике приводят к чрезмерной нагрузке сложности и фактически препятствуют использованию факторного импульсного кодирования в качестве способа кодирования векторов с потенциально большими и . Настоящее изобретение решает эти проблемы, требуя только однотактовые операции с низкой точностью вкупе с малым количеством памяти для получения оценок сложных комбинаторных выражений, требуемых для этого типа кодирования.
Таблица 3Сравнение сложности <i>F(n,m)</i> и <i>F'(n,m)</i>
<i>n</i>
<i>m</i>
Биты
Среднее значение вызовов <img file="00000155.tif" he="5" wi="14" img-content="undefined" img-format="tif" /> за фрейм
<img file="00000153.tif" he="5" wi="14" img-content="undefined" img-format="tif" /> уровня техники
<img file="00000156.tif" he="5" wi="15" img-content="undefined" img-format="tif" /> изобретения
Пиковое значение WMOPS
Среднее значение WMOPS
Пиковое значение WMOPS
Среднее значение WMOPS
54
7
35
44
0,44
0,32
0,09
0,07
144
28
131
191
24,50
16,45
0,51
0,37
144
44
180
279
76,45
46,65
0,96
0,64
144
60
220
347
150,00
83,25
1,50
0,90
Последующий текст и уравнения реализуют вышеприведенную методику кодирования и декодирования в спецификации C.P0014-C Проекта Партнерства Третьего Поколения 2 (3GPP2) для Расширенного Кодека с Переменной Скоростью, Речевые Службы Варианты 3, 68 и 70 для Широкополосных Цифровых Систем с Расширением Спектра.
4.13.5 Квантование остаточного линейного спектра MDCT
v
v
n
m
i
Коэффициенты MDCT, также называемые остаточным линейным спектром, квантуются тем же способом, что и кодовая факторная книга FCB 4.11.8.3. В общем случае факторное кодирование  возможных комбинаций может быть достигнуто при условии, что вектор  длины  имеет свойство , и все элементы ν целочисленные. То есть, сумма абсолютных значений целочисленных элементов  равна . В данном случае мы желаем закодировать версию  с масштабированной энергией, так что
, (4.13.5-1)
m
где  является коэффициентом глобального масштабирования, а диапазон от 0 до 143 соответствует частотам от 0 до 3600 Гц. Для этого случая  может быть для NB или WB входов. Значение , используемое для достижения вышеприведенной задачи, определяется итеративно (для ненулевого ) согласно следующему псевдокоду:
/*Инициализация*/
/*основной цикл*/
do {
m'==m
if () then break
m'>m
s
s
else if ( and ==+1) then =-1,
m'<m
s
s
else if ( and ==-1) then =+1,
end
} while  and
Квантованный остаточный линейный спектр  затем вычисляется как
, (4.13.5-2)
m
m'
RLSIDX
Если, в редком случае, значения и различны, линейный спектр будет модифицирован путем прибавления или вычитания единичных значений из квантованного линейного спектра . Это гарантирует, что результирующий линейный спектр может быть надежно закодирован с использованием способа факторного кодирования. Выходной индекс, представляющий линейный спектр , обозначается . Этот индекс содержит 131 бит для случая  и 114 бит для случая .
Для решения вопросов сложности, связанных с кодированием и декодированием вектора , используется приближенная комбинаторная функция  малого порядка вместо стандартного комбинаторного отношения . В частности, как кодер, так и декодер используют генератор  комбинаторных функций, имеющий свойства  и , которые достаточны для однозначного кодирования/декодирования вектора . Функция  задается как
, (4.13.5-3)
где и  являются 32-битными таблицами поиска, задаваемыми как
, (4.13.5-4)
и
(4.13.5-5)
и где  является целочисленным приближением многократной точности функции , задаваемой как
, (4.13.5-6)
k
k
где  разбито на целый и дробный компоненты , а  - остаточный член разложения в ряд Тейлора дробного компонента . Эти операции значительно снижают сложность, необходимую для вычисления комбинаторных выражений, путем замены операций умножения и деления многократной точности на 32-битные сложения и на приближения  рядом Тейлора низкой сложности с последующей операцией сдвига многократной точности. Все другие компоненты операций кодирования/декодирования те же, что и в 4.11.8.3.
Несмотря на то, что изобретение было описано со ссылкой на конкретный вариант осуществления, специалистам в области техники должно быть понятно, что могут быть сделаны различные модификации в отношении формы и подробностей изобретения без отступления от сущности и объема изобретения. Предполагается, что подобные изменения попадают в объем пунктов следующей формулы изобретения.