RU2426227C2 - Encoding variable-length codes with efficient memory usage - Google Patents

Encoding variable-length codes with efficient memory usage Download PDF

Info

Publication number
RU2426227C2
RU2426227C2 RU2009122479/09A RU2009122479A RU2426227C2 RU 2426227 C2 RU2426227 C2 RU 2426227C2 RU 2009122479/09 A RU2009122479/09 A RU 2009122479/09A RU 2009122479 A RU2009122479 A RU 2009122479A RU 2426227 C2 RU2426227 C2 RU 2426227C2
Authority
RU
Russia
Prior art keywords
codewords
base
codeword
values
bits
Prior art date
Application number
RU2009122479/09A
Other languages
Russian (ru)
Other versions
RU2009122479A (en
Inventor
Юрий РЕЗНИК (US)
Юрий РЕЗНИК
Original Assignee
Квэлкомм Инкорпорейтед
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Квэлкомм Инкорпорейтед filed Critical Квэлкомм Инкорпорейтед
Publication of RU2009122479A publication Critical patent/RU2009122479A/en
Application granted granted Critical
Publication of RU2426227C2 publication Critical patent/RU2426227C2/en

Links

Images

Abstract

FIELD: information technology.
SUBSTANCE: invention is aimed at methods for adaptive variable-length coding (VLC) with efficient memory usage and low degree of complexity with respect to data for different fields of application, such as digital video data, image data, audio and voice data. In certain aspects, these methods can employ properties of defined sets of code words to support very compact data structures. In other aspects, the methods can support adaptive coding and decoding with low degree of complexity with respect to binary sequences generated by memoryless sources.
EFFECT: adaptive variable-length coding with more efficient memory usage and low complexity for data in different fields of application, such as coding digital video data, image data, audio or voice data.
83 cl, 15 dwg

Description

По настоящей заявке испрашивается приоритет на основании предварительной заявки США регистрационный № 60/865,827, поданной 14 ноября 2006 г., и предварительной заявки США регистрационный № 60/867,081, поданной 22 ноября 2006 г., содержание каждой из которых полностью включено в настоящую заявку посредством ссылки.This application claims priority on the basis of provisional application US registration No. 60 / 865,827, filed November 14, 2006, and provisional US application registration number 60 / 867,081, filed November 22, 2006, the contents of each of which is fully incorporated into this application by links.

Область техники, к которой относится изобретениеFIELD OF THE INVENTION

Настоящее изобретение относится к сжатию данных и, более конкретно, к сжатию данных с использованием кодов переменной длины (VLC).The present invention relates to data compression and, more specifically, to data compression using variable length codes (VLC).

Уровень техникиState of the art

Сжатие данных широко используется в различных областях применения для уменьшения занимаемой области для хранения данных, полосы пропускания или и того, и другого. Примеры областей применения сжатия данных включают в себя кодирование цифровых видеоданных, данных изображения, голосовых и звуковых данных. Кодирование цифровых видеоданных используется, например, в целом ряде устройств, в том числе в цифровых телевизионных устройствах, цифровых системах прямого вещания, устройствах беспроводной связи, карманных персональных компьютерах (КПК), портативных компьютерах или настольных компьютерах, цифровых камерах, цифровых записывающих устройствах, устройствах для видеоигр, сотовых или спутниковых радиотелефонах и тому подобном. Цифровые видеоустройства реализуют способы сжатия видеоданных, такие как MPEG-2, MPEG-4 или H.264/MPEG-4 улучшенного кодирования видеоданных (AVC), для более эффективной передачи и приема цифровых видеоданных.Data compression is widely used in various applications to reduce the occupied area for data storage, bandwidth, or both. Examples of data compression applications include encoding digital video data, image data, voice and audio data. Digital video encoding is used, for example, in a number of devices, including digital television devices, digital direct broadcasting systems, wireless communication devices, personal digital assistants (PDAs), laptop computers or desktop computers, digital cameras, digital recording devices, devices for video games, cellular or satellite radiotelephones and the like. Digital video devices implement video compression methods, such as MPEG-2, MPEG-4, or H.264 / MPEG-4 enhanced video coding (AVC), for more efficient transmission and reception of digital video data.

В целом, в способах сжатия видеоданных для уменьшения или исключения избыточности, присущей видеоданным, выполняют пространственное предсказание, оценку движения и компенсацию движения. В частности, внутреннее кодирование опирается на пространственное предсказание для уменьшения или исключения пространственной избыточности в видеоданных в пределах данного видеокадра. Внешнее кодирование опирается на временное предсказание для уменьшения или исключения временной избыточности в видеоданных в пределах соседних кадров. Для внешнего кодирования устройство кодирования видеоданных выполняет оценку движения для отслеживания перемещения соответствующих видеоблоков между двумя или несколькими соседними кадрами. Оценка движения генерирует векторы движения, которые показывают смещение видеоблоков относительно соответствующих видеоблоков в одном или нескольких опорных кадрах. Компенсация движения использует вектор движения для генерации из опорного кадра видеоблока предсказания. После компенсации движения посредством вычитания видеоблока предсказания из первоначального видеоблока формируется остаточный видеоблок.In general, in video compression methods to reduce or eliminate redundancy inherent in video data, spatial prediction, motion estimation, and motion compensation are performed. In particular, intra-coding relies on spatial prediction to reduce or eliminate spatial redundancy in video data within a given video frame. External coding relies on temporal prediction to reduce or eliminate temporal redundancy in video data within adjacent frames. For external coding, the video encoding device performs motion estimation to track the movement of the respective video blocks between two or more adjacent frames. The motion estimation generates motion vectors that show the offset of the video blocks relative to the corresponding video blocks in one or more reference frames. Motion compensation uses a motion vector to generate a prediction video block from a reference frame. After motion compensation by subtracting the prediction video block from the original video block, a residual video block is formed.

Устройство кодирования видеоданных применяет процессы кодирования с преобразованием, кодирования с квантованием и статистического кодирования для дополнительного уменьшения скорости передачи в битах остаточного блока, полученного в процессе кодирования видеоданных. Способы статистического кодирования используются на последних каскадах кодера-декодера видеосигналов (CODEC) и в различных других кодирующих приложениях перед сохранением или передачей кодированных данных. Статистическое кодирование в целом включает в себя применение арифметических кодов или кодов переменной длины (VLC) для дальнейшего сжатия остаточных коэффициентов, полученных в результате операций преобразования и квантования. Примеры способов статистического кодирования включают в себя контекстно-регулируемое двоичное арифметическое кодирование (CABAC) и контекстно-регулируемое кодирование переменной длины (CAVLC), которые можно использовать в некоторых кодерах в качестве альтернативных режимов статистического кодирования. Устройство декодирования видеоданных выполняет статистическое декодирование для распаковки остаточной информации по каждому из блоков и восстановление кодированных видеоданных с использованием информации о движении и остаточной информации.The video encoding apparatus employs transform encoding, quantization encoding, and statistical encoding processes to further reduce the bit rate of the residual block obtained in the video encoding process. Statistical encoding methods are used on the last stages of the video signal encoder / decoder (CODEC) and various other encoding applications before storing or transmitting the encoded data. Statistical coding as a whole involves the use of arithmetic codes or variable length codes (VLCs) to further compress the residual coefficients resulting from the transform and quantization operations. Examples of statistical coding methods include context-sensitive binary arithmetic coding (CABAC) and variable-length context-sensitive coding (CAVLC), which can be used in some encoders as alternative statistical coding modes. The video decoding apparatus performs statistical decoding to decompress residual information for each of the blocks and recover encoded video data using motion information and residual information.

Сущность изобретенияSUMMARY OF THE INVENTION

В целом настоящее изобретение направлено на создание способов адаптивного кодирования переменной длины (VLC) с более эффективным использованием памяти и меньшей сложностью для данных в различных областях применения, таких как кодирование цифровых видеоданных, данных изображения, звуковых или голосовых данных. В первом общем аспекте в этих способах могут использоваться определенные наборы кодовых слов для поддержки очень компактных структур данных. Во втором общем аспекте способы могут поддерживать адаптивное кодирование и декодирование с низкой степенью сложности двоичных последовательностей, созданных источниками без памяти.In General, the present invention is directed to the creation of adaptive coding of variable length (VLC) with more efficient use of memory and less complexity for data in various applications, such as encoding digital video data, image data, audio or voice data. In a first general aspect, certain codeword sets can be used in these methods to support very compact data structures. In a second general aspect, the methods may support adaptive coding and decoding with a low degree of complexity of binary sequences generated by memoryless sources.

Изобретение обеспечивает, в первом аспекте, способ, содержащий генерацию частичных значений базовых кодовых слов для уровней дерева кодирования, определяющего кодовые слова переменной длины, генерацию показателя пропуска, указывающего декодеру пропустить несколько битов в потоке битов, подлежащем декодированию, перед переходом к выбранному уровню дерева кодирования, и сохранению частичных значений и показателя пропуска в структуре данных в памяти.The invention provides, in a first aspect, a method comprising generating partial values of basic codewords for levels of a coding tree defining variable-length codewords, generating a skip indicator instructing the decoder to skip a few bits in the bitstream to be decoded before proceeding to the selected level of the coding tree , and storing partial values and skip in the data structure in memory.

В другом аспекте изобретение обеспечивает материальный машиночитаемый носитель, содержащий структуру данных, хранящую частичные значения базовых кодовых слов для уровней дерева кодирования, определяющего кодовые слова переменной длины, и показатель пропуска, указывающий декодеру пропустить несколько битов в потоке битов, подлежащем декодированию, перед переходом к выбранному уровню дерева кодирования.In another aspect, the invention provides a tangible computer-readable medium comprising a data structure storing partial values of base codewords for levels of a coding tree defining variable-length codewords and a skip indicator instructing the decoder to skip a few bits in the bitstream to be decoded before proceeding to the selected coding tree level.

В дополнительном аспекте изобретение обеспечивает устройство, содержащее процессор, выполненный с возможностью генерации частичных значений базовых кодовых слов для уровней дерева кодирования, определяющего кодовые слова переменной длины и генерации показателя пропуска, указывающего декодеру пропустить несколько битов в потоке битов, подлежащем декодированию, перед переходом к выбранному уровню дерева кодирования, и память, которая хранит частичные значения и показатель пропуска в структуре данных.In an additional aspect, the invention provides a device comprising a processor configured to generate partial values of basic codewords for levels of a coding tree defining variable-length codewords and generating a skip indicator instructing the decoder to skip a few bits in the bitstream to be decoded before proceeding to the selected the level of the coding tree, and a memory that stores partial values and a skip rate in the data structure.

В еще одном аспекте изобретение обеспечивает декодирующее устройство, содержащее память, хранящую структуру данных, содержащую частичные значения базовых кодовых слов для уровней дерева кодирования, определяющего кодовые слова переменной длины, и показатель пропуска, указывающий декодеру пропустить несколько битов в потоке битов, подлежащем декодированию, перед переходом к выбранному уровню дерева кодирования, и декодер, который обращается к памяти для декодирования одного из кодовых слов из потока битов на основе частичных значений и показателя пропуска в хранящейся структуре данных.In yet another aspect, the invention provides a decoding apparatus comprising a memory storing a data structure comprising partial values of base codewords for levels of a coding tree defining variable-length codewords, and a skip indicator instructing the decoder to skip several bits in the bitstream to be decoded before a transition to the selected level of the encoding tree, and a decoder that accesses the memory to decode one of the code words from the bitstream based on partial values and a skip rate in the stored data structure.

В еще одном аспекте изобретение обеспечивает способ декодирования, содержащий обращение к структуре данных, хранящейся в памяти, причем структура данных содержит частичные значения базовых кодовых слов для уровней дерева кодирования, определяющего кодовые слова переменной длины, и показатель пропуска, указывающий декодеру пропустить несколько битов в потоке битов, подлежащем декодированию, перед переходом к выбранному уровню дерева кодирования, и декодирование одного из кодовых слов из потока битов на основе частичных значений и показателя пропуска в хранящейся структуре данных.In yet another aspect, the invention provides a decoding method comprising accessing a data structure stored in a memory, the data structure comprising partial values of base codewords for levels of a coding tree defining variable length codewords, and a skip rate instructing the decoder to skip a few bits in the stream the bits to be decoded before moving to the selected level of the encoding tree, and decoding one of the code words from the bitstream based on partial values and exponent pass in the stored data structure.

В еще одном аспекте изобретение обеспечивает материальный машиночитаемый носитель, содержащий команды, побуждающие процессор обращаться к структуре данных, хранящейся в памяти, причем структура данных содержит частичные значения базовых кодовых слов для уровней дерева кодирования, определяющего кодовые слова переменной длины, и показатель пропуска, указывающий декодеру пропустить множество битов в потоке битов, подлежащем декодированию, перед переходом к выбранному уровню дерева кодирования, и декодировать одно из кодовых слов из потока битов на основе частичных значений и показателя пропуска в хранящейся структуре данных.In yet another aspect, the invention provides a tangible computer-readable medium comprising instructions causing a processor to access a data structure stored in memory, the data structure comprising partial values of base codewords for levels of a coding tree defining variable-length codewords and a skip indicator indicating a decoder skip the many bits in the bit stream to be decoded before moving to the selected level of the encoding tree, and decode one of the code words from n bits of the current based on the partial values and the skip indicator in the stored data structure.

В дополнительном аспекте изобретение обеспечивает способ, содержащий выполнение кодирования переменной длины согласно структуре кода, причем структура кода определяет группы кодовых слов в дереве кодирования, каждая из групп включает в себя кодовые слова, представляющие значения, имеющие одинаковые веса, и кодовые слова в каждой из групп упорядочены в лексикографическом порядке относительно значений, представленных кодовыми словами, и первую и вторую подгруппы кодовых слов внутри каждой из групп, причем первая подгруппа включает в себя кодовые слова, имеющие первую длину, а вторая подгруппа включает в себя кодовые слова, имеющие вторую длину, отличную от первой длины, и генерацию результата кодирования переменной длины по меньшей мере для одного из сохранения в памяти, передачи устройству или представления пользователю.In an additional aspect, the invention provides a method comprising performing variable-length coding according to a code structure, the code structure defining groups of codewords in a coding tree, each of the groups includes codewords representing values having the same weights, and codewords in each of the groups ordered in lexicographic order with respect to the values represented by the code words, and the first and second subgroups of code words within each of the groups, the first subgroup including by codewords having a first length, and the second subgroup includes codewords having a second length different from the first length, and generating a variable length encoding result for at least one of being stored in memory, transmitted to a device, or presented to a user.

В дополнительном аспекте изобретение обеспечивает материальный машиночитаемый носитель, содержащий команды, побуждающие процессор выполнять кодирование переменной длины согласно структуре кода, причем структура кода определяет группы кодовых слов в дереве кодирования, каждая из групп включает в себя кодовые слова, представляющие значения, имеющие одинаковые веса, и кодовые слова в каждой из групп упорядочиваются в лексикографическом порядке относительно значений, представленных кодовыми словами, и первую и вторую подгруппы кодовых слов внутри каждой из групп, причем первая подгруппа включает в себя кодовые слова, имеющие первую длину, а вторая подгруппа включает в себя кодовые слова, имеющие вторую длину, отличную от первой длины, и генерировать результат кодирования переменной длины по меньшей мере для одного из сохранения в памяти, передачи устройству или представления пользователю.In an additional aspect, the invention provides a tangible computer-readable medium comprising instructions causing a processor to perform variable-length coding according to a code structure, the code structure defining groups of code words in a coding tree, each group including code words representing values having the same weights, and the code words in each of the groups are ordered in lexicographic order relative to the values represented by the code words, and the first and second subgroups of code words within each of the groups, wherein the first subgroup includes codewords having a first length, and the second subgroup includes codewords having a second length different from the first length, and generate a variable length encoding result for at least one of the storage in memory, transferring to a device or presentation to a user.

В дополнительном аспекте изобретение обеспечивает устройство, содержащее процессор, выполненный с возможностью выполнения кодирования переменной длины согласно структуре кода, причем структура кода определяет группы кодовых слов в дереве кодирования, каждая из групп включает в себя кодовые слова, представляющие значения, имеющие одинаковые веса, и кодовые слова в каждой из групп упорядочиваются в лексикографическом порядке относительно значений, представленных кодовыми словами, и первую и вторую подгруппы кодовых слов внутри каждой из групп, причем первая подгруппа включает в себя кодовые слова, имеющие первую длину, а вторая подгруппа включает в себя кодовые слова, имеющие вторую длину, отличную от первой длины, и генерации результата кодирования переменной длины по меньшей мере для одного из сохранения в памяти, передачи устройству или представления пользователю.In an additional aspect, the invention provides a device comprising a processor configured to perform variable length coding according to a code structure, the code structure defining groups of code words in a coding tree, each of the groups includes code words representing values having the same weights and code words in each of the groups are ordered in lexicographic order relative to the values represented by code words, and the first and second subgroups of code words inside each from groups, the first subgroup including code words having a first length, and the second subgroup includes code words having a second length different from the first length, and generating a variable length encoding result for at least one of the memory, transmitting to the device or presentation to the user.

В дополнительном аспекте изобретение обеспечивает способ, содержащий для кодовой структуры определение группы кодовых слов в дереве кодирования, определяющем кодовые слова переменной длины, причем каждая из групп включает в себя кодовые слова, представляющие значения, имеющие одинаковые веса, и кодовые слова в каждой из групп упорядочены в лексикографическом порядке относительно значений, представленных кодовыми словами, первую и вторую подгруппы кодовых слов внутри каждой из групп, причем первая подгруппа включает в себя кодовые слова, имеющие первую длину, а вторая подгруппа включает в себя кодовые слова, имеющие вторую длину, отличную от первой длины, выполнение кодирования переменной длины с использованием базовых кодовых слов для каждой из подгрупп, позиций кодовых слов внутри каждой из групп, числа кодовых слов в каждой из первых подгрупп и длин кодовых слов в каждой из подгрупп, и генерацию результата кодирования переменной длины по меньшей мере для одного из сохранения в памяти, передачи устройству или представления пользователю.In a further aspect, the invention provides a method comprising for a code structure definition of a group of codewords in a coding tree, determining variable length codewords, wherein each of the groups includes codewords representing values having same weights and the codewords in each of the groups are ordered in lexicographic order with respect to the values represented by the code words, the first and second subgroups of code words within each of the groups, the first subgroup including code layers va having a first length and the second subgroup includes codewords having a second length different from the first length, performing variable length coding using base codewords for each of the subgroups, positions of codewords within each of the groups, the number of code words in each of the first subgroups and codeword lengths in each of the subgroups, and generating a variable length encoding result for at least one of being stored in memory, transmitted to a device, or presented to a user.

В дополнительном аспекте изобретение обеспечивает устройство, содержащее, для структуры кода, средство определения групп кодовых слов в дереве кодирования, определяющем кодовые слова переменой длины, причем каждая из групп включает в себя кодовые слова, представляющие значения, имеющие одинаковые веса, и кодовые слова в каждой из групп упорядочены в лексикографическом порядке относительно значений, представляемых кодовыми словами, и первой и второй подгрупп кодовых слов внутри каждой из групп, причем первая подгруппа включает в себя кодовые слова, имеющие первую длину, а вторая подгруппа включает в себя кодовые слова, имеющие вторую длину, отличную от первой длины, средство выполнения кодирования переменной длины с использованием базовых кодовых слов для каждой из подгрупп, позиций кодовых слов в каждой из групп, числа кодовых слов в каждой из первых подгрупп и длин кодовых слов в каждой из подгрупп, и средство генерации результата кодирования переменной длины по меньшей мере для одного из сохранения в памяти, передачи устройству или представления пользователю.In an additional aspect, the invention provides an apparatus comprising, for code structure, means for determining groups of codewords in a coding tree defining codewords by varying lengths, each of the groups including codewords representing values having the same weights and codewords in each of the groups are ordered in lexicographic order relative to the values represented by the code words, and the first and second subgroups of code words within each of the groups, the first subgroup includes common words having a first length, and the second subgroup includes code words having a second length different from the first length, a means of performing variable-length encoding using basic code words for each of the subgroups, positions of code words in each of the groups, the number of code words in each of the first subgroups and codeword lengths in each of the subgroups, and means for generating a variable length encoding result for at least one of being stored in memory, transmitted to a device, or presented to a user.

В дополнительном аспекте изобретение обеспечивает материальный машиночитаемый носитель, содержащий команды, побуждающие процессор, для структуры кода, определяющей группы кодовых слов в дереве кодирования, причем каждая из групп включает в себя кодовые слова, представляющие значения, имеющие одинаковые веса, и кодовые слова в каждой из групп упорядочиваются в лексикографическом порядке относительно значений, представленных кодовыми словами, и первую и вторую подгруппы кодовых слов внутри каждой из групп, причем первая подгруппа включает в себя кодовые слова, имеющие первую длину, а вторая подгруппа включает в себя кодовые слова, имеющие вторую длину, отличную от первой длины, выполнять кодирование переменной длины с использованием базовых кодовых слов для каждой из подгрупп, позиций кодовых слов в каждой из групп, числа кодовых слов в каждой из первых подгрупп и длин кодовых слов в каждой из подгрупп, и генерировать результат кодирования переменной длины по меньшей мере для одного из сохранения в памяти, передачи устройству или представления пользователю.In an additional aspect, the invention provides a tangible computer-readable medium comprising instructions causing a processor for a code structure defining groups of codewords in a coding tree, each of which includes codewords representing values having the same weights and codewords in each of groups are ordered in lexicographic order relative to the values represented by the code words, and the first and second subgroups of code words within each of the groups, the first subgroup including includes code words having a first length, and the second subgroup includes code words having a second length different from the first length, perform variable length encoding using basic code words for each of the subgroups, codeword positions in each of the groups, the number of codewords in each of the first subgroups and the lengths of codewords in each of the subgroups, and generate a variable length encoding result for at least one of being stored in memory, transmitted to a device, or presented to a user.

В дополнительном аспекте изобретение обеспечивает устройство, содержащее, для структуры кода, определяющей группы кодовых слов в дереве кодирования, каждая из групп включает в себя кодовые слова, представляющие значения, имеющие одинаковые веса, и кодовые слова в каждой из групп упорядочиваются в лексикографическом порядке относительно значений, представленных кодовыми словами, и первую и вторую подгруппы кодовых слов внутри каждой из групп, причем первая подгруппа включает в себя кодовые слова, имеющие первую длину, а вторая подгруппа включает в себя кодовые слова, имеющие вторую длину, отличную от первой длины, процессор, выполненный с возможностью выполнения кодирования переменной длины с использованием базовых кодовых слов для каждой из подгрупп, позиций кодовых слов в каждой из групп, числа кодовых слов в каждой из первых подгрупп и длин кодовых слов в каждой из подгрупп, и генерации результата кодирования переменной длины по меньшей мере для одного из сохранения в памяти, передачи устройству или представления пользователю.In an additional aspect, the invention provides an apparatus comprising, for a code structure defining groups of codewords in a coding tree, each of the groups includes codewords representing values having the same weights, and codewords in each of the groups are ordered in lexicographic order relative to the values represented by code words, and the first and second subgroups of code words within each of the groups, the first subgroup includes code words having a first length and a second subgroup includes codewords having a second length different from the first length, a processor configured to perform variable length coding using basic codewords for each of the subgroups, positions of the codewords in each of the groups, the number of codewords in each of the first subgroups and codeword lengths in each of the subgroups, and generating a variable length encoding result for at least one of being stored in memory, transmitted to a device, or presented to a user.

В еще одном аспекте изобретение обеспечивает материальный машиночитаемый носитель, содержащий структуру данных для кодирования переменной длины, использующего структуру кода переменной длины, которая определяет группы кодовых слов в дереве кодирования, каждая из групп включает в себя кодовые слова, представляющие значения, имеющие одинаковые веса, и кодовые слова в каждой из групп упорядочиваются в лексикографическом порядке относительно значений, представленных кодовыми словами, и первую и вторую подгруппы кодовых слов внутри каждой из групп, причем первая подгруппа включает в себя кодовые слова, имеющие первую длину, а вторая подгруппа включает в себя кодовые слова, имеющие вторую длину, отличную от первой длины.In yet another aspect, the invention provides a tangible computer-readable medium comprising a data structure for variable-length encoding using a variable-length code structure that defines groups of codewords in a coding tree, each of the groups includes codewords representing values having the same weights, and the code words in each of the groups are ordered in lexicographic order relative to the values represented by the code words, and the first and second subgroups of code words inside each second groups, wherein the first subgroup includes codewords having a first length and the second subgroup includes codewords having a second length different from the first length.

В еще одном аспекте изобретение обеспечивает устройство на интегральной схеме, содержащее память, хранящую структуру данных, включающую частичные значения базовых кодовых слов для уровней дерева кодирования, определяющего кодовые слова переменной длины, и показатель пропуска, указывающий декодеру пропустить несколько битов в потоке битов, подлежащем декодированию, перед переходом к выбранному уровню дерева кодирования, и декодер, который обращается к памяти для декодирования одного из кодовых слов из потока битов на основе частичных значений и показателя пропуска в хранящейся структуре данных.In yet another aspect, the invention provides an integrated circuit device comprising a memory storing a data structure including partial values of base codewords for levels of a coding tree defining variable length codewords and a skip indicator instructing the decoder to skip a few bits in the bitstream to be decoded , before moving on to the selected level of the encoding tree, and a decoder that accesses the memory to decode one of the code words from the bitstream based on partial values and a skip rate in the stored data structure.

В еще одном аспекте изобретение обеспечивает портативное устройство беспроводной связи, содержащее память, хранящую структуру данных, содержащую частичные значения базовых кодовых слов для уровней дерева кодирования, определяющего кодовые слова переменной длины, и показатель пропуска, указывающий декодеру пропустить несколько битов в потоке битов, подлежащем декодированию, перед переходом к выбранному уровню дерева кодирования, декодер, который обращается к памяти для декодирования одного из кодовых слов из потока битов на основе частичных значений и показателя пропуска в хранящейся структуре данных, приемник для приема кодовых слов от кодера посредством беспроводной связи, и устройство вывода, которое представляет выходной сигнал пользователю на основе, по меньшей мере частично, декодированных кодовых слов.In yet another aspect, the invention provides a portable wireless communications device comprising a memory storing a data structure comprising partial values of base codewords for levels of a coding tree defining variable length codewords and a skip indicator instructing the decoder to skip multiple bits in the bitstream to be decoded , before moving on to the selected level of the encoding tree, a decoder that accesses the memory to decode one of the code words from the bitstream based on cha statistics and the skip rate in the stored data structure, a receiver for receiving codewords from the encoder via wireless communication, and an output device that presents the output signal to the user based at least in part on the decoded codewords.

В еще одном аспекте изобретение обеспечивает устройство на интегральной схеме, содержащее процессор, выполненный с возможностью выполнения кодирования переменной длины согласно структуре кода, причем структура кода определяет группы кодовых слов в дереве кодирования, каждая из групп включает в себя кодовые слова, представляющие значения, имеющие одинаковые веса, и кодовые слова в каждой из групп упорядочиваются в лексикографическом порядке относительно значений, представленных кодовыми словами, и первую и вторую подгруппы кодовых слов внутри каждой из групп, причем первая подгруппа включает в себя кодовые слова, имеющие первую длину, а вторая подгруппа включает в себя кодовые слова, имеющие вторую длину, отличную от первой длины, и при этом процессор выполнен с возможностью генерации результата кодирования переменной длины по меньшей мере для одного из сохранения в памяти, передачи устройству или представления пользователю.In yet another aspect, the invention provides an integrated circuit device comprising a processor configured to perform variable length coding according to a code structure, the code structure defining groups of code words in a coding tree, each of the groups including code words representing values having the same the weights and codewords in each of the groups are ordered in lexicographic order relative to the values represented by the codewords, and the first and second subgroups of codewords s within each of the groups, the first subgroup includes codewords having a first length, and the second subgroup includes codewords having a second length different from the first length, and the processor is configured to generate a variable length encoding result from for at least one of storage, transmission to a device, or presentation to a user.

В еще одном аспекте изобретение обеспечивает портативное устройство беспроводной связи, содержащее процессор, выполненный с возможностью выполнения кодирования переменной длины согласно структуре кода, причем структура кода определяет группы кодовых слов в дереве кодирования, каждая из групп включает в себя кодовые слова, представляющие значения, имеющие одинаковые веса, и кодовые слова в каждой из групп упорядочиваются в лексикографическом порядке относительно значений, представленных кодовыми словами, и первую и вторую подгруппы кодовых слов внутри каждой из групп, причем первая подгруппа включает в себя кодовые слова, имеющие первую длину, а вторая подгруппа включает в себя кодовые слова, имеющие вторую длину, отличную от первой длины, и при этом процессор выполнен с возможностью генерации результата кодирования переменной длины по меньшей мере для одного из сохранения в памяти, передачи устройству или представления пользователю.In yet another aspect, the invention provides a portable wireless communications device comprising a processor configured to perform variable length encoding according to a code structure, the code structure defining groups of code words in a coding tree, each of the groups including code words representing values having the same the weights and code words in each of the groups are ordered in lexicographic order relative to the values represented by the code words, and the first and second subgroups single words within each of the groups, the first subgroup including code words having a first length, and the second subgroup includes code words having a second length different from the first length, and the processor is configured to generate a variable length encoding result at least one of storage, transmission to a device, or presentation to a user.

Способы, описанные в настоящей заявке, могут быть реализованы аппаратными средствами, программными средствами или их сочетанием. В случае реализации программными средствами программное обеспечение может выполняться в одном или нескольких процессорах, таких как микропроцессор, специализированная интегральная схема (ASIC), программируемая пользователем логическая матрица (FPGA) или процессор цифровых сигналов (DSP), либо другая эквивалентная интегральная или дискретная логическая схема. Программные средства, которые выполняют эти способы, могут первоначально храниться в машиночитаемом носителе и загружаться и выполняться процессором. Соответственно, настоящее изобретение предусматривает также компьютерные программные продукты, содержащие машиночитаемый носитель, который содержит команды, побуждающие процессор выполнять любой из множества способов, описанных в настоящей заявке.The methods described in this application can be implemented in hardware, software, or a combination thereof. If implemented by software, the software may run on one or more processors, such as a microprocessor, application specific integrated circuit (ASIC), user-programmable logic array (FPGA) or digital signal processor (DSP), or other equivalent integrated or discrete logic circuit. Software that performs these methods may initially be stored in a computer-readable medium and loaded and executed by a processor. Accordingly, the present invention also provides computer program products comprising a computer-readable medium that comprises instructions for causing a processor to execute any of a variety of methods described herein.

Подробные сведения об одном или нескольких аспектах изобретения приведены на прилагаемых чертежах и в нижеследующем описании. Другие признаки, цели и преимущества способов, описанных в настоящей заявке, станут очевидны из описания и чертежей, а также из формулы.Details of one or more aspects of the invention are provided in the accompanying drawings and in the following description. Other features, objectives and advantages of the methods described in this application will become apparent from the description and drawings, as well as from the formula.

Краткое описание чертежейBrief Description of the Drawings

Фиг.1 - блок-схема, иллюстрирующая систему кодирования и декодирования видеоданных.Figure 1 is a block diagram illustrating a system for encoding and decoding video data.

Фиг.2 - блок-схема, иллюстрирующая пример кодера видеоданных.2 is a block diagram illustrating an example of a video encoder.

Фиг.3 - блок-схема, иллюстрирующая пример декодера видеоданных.3 is a block diagram illustrating an example of a video decoder.

Фиг.4 - схема, иллюстрирующая пример дерева двоичного кодирования.4 is a diagram illustrating an example of a binary encoding tree.

Фиг.5 - график, иллюстрирующий степень избыточности адаптивного блочного кода с асимптотическим поведением.5 is a graph illustrating a degree of redundancy of an adaptive block code with asymptotic behavior.

Фиг.6 - схема двоичного дерева, иллюстрирующая группы блоков, подгруппы и основные кодовые слова.6 is a binary tree diagram illustrating block groups, subgroups, and basic codewords.

Фиг.7A и 7B - графики, иллюстрирующие сравнение степеней избыточности адаптивного блочного кода с различными значениями ρ.7A and 7B are graphs illustrating a comparison of the degrees of redundancy of an adaptive block code with various ρ values.

Фиг.8 - график, иллюстрирующий чувствительность избыточности к асимметрии исходных данных.8 is a graph illustrating the sensitivity of redundancy to the asymmetry of the source data.

Фиг.9 - блок-схема последовательности операций, иллюстрирующая способ построения кодирования переменной длины с эффективным использованием памяти для монотонных распределений в соответствии с одним аспектом настоящего изобретения.FIG. 9 is a flowchart illustrating a method for constructing variable length coding with efficient use of memory for monotone distributions in accordance with one aspect of the present invention.

Фиг.10 - блок-схема последовательности операций, иллюстрирующая способ кодирования символов с использованием кодов переменной длины, построенных согласно способу на фиг.9.FIG. 10 is a flowchart illustrating a method of encoding symbols using variable-length codes constructed according to the method of FIG. 9.

Фиг.11 - блок-схема последовательности операций, иллюстрирующая способ декодирования переменных кодов переменной длины, построенных согласно способу на фиг.9.11 is a flowchart illustrating a method for decoding variable-length variable codes constructed according to the method of FIG. 9.

Фиг.12 - блок-схема последовательности операций, иллюстрирующая способ построения адаптивных блочных кодов в соответствии с другим аспектом настоящего изобретения.12 - a block flowchart illustrating a method for constructing adaptive block codes in accordance with another aspect of the present invention.

Фиг.13 - блок-схема последовательности операций, иллюстрирующая способ кодирования блоков с использованием кодов переменной длины, построенных согласно способу на фиг.12.FIG. 13 is a flowchart illustrating a method of encoding blocks using variable-length codes constructed according to the method of FIG. 12.

Фиг.14 - блок-схема, иллюстрирующая способ декодирования кодов переменной длины, построенных согласно способу на фиг. 12.FIG. 14 is a flowchart illustrating a method for decoding variable length codes constructed according to the method of FIG. 12.

Подробное описаниеDetailed description

В целом настоящее изобретение направлено на создание способов адаптивного кодирования переменной длины (VLC) с эффективным использованием памяти и пониженной сложностью в отношении данных для множества применений, таких как кодирование цифровых видеоданных, данных изображений, звуковых или речевых данных. В некоторых аспектах эти способы могут использовать свойства определенных наборов кодовых слов для поддержки очень компактных структур данных. В других аспектах способы могут поддерживать низкую сложность, адаптивное кодирование и декодирование двоичных последовательностей, созданных источниками без памяти. Хотя способы, описанные в настоящей заявке, могут применяться к широкому кругу практических областей применения, в том числе к общему сжатию и кодированию данных, в настоящей заявке в качестве примера и иллюстрации описывается кодирование и декодирование цифровых видеоданных.In General, the present invention is directed to the creation of adaptive coding of variable length (VLC) with efficient use of memory and reduced complexity in relation to data for many applications, such as encoding digital video data, image data, audio or speech data. In some aspects, these methods may use the properties of certain sets of codewords to support very compact data structures. In other aspects, the methods may support low complexity, adaptive coding, and decoding of binary sequences generated by memoryless sources. Although the methods described in this application can be applied to a wide range of practical applications, including general compression and encoding of data, the encoding and decoding of digital video data is described in this application as an example and illustration.

В соответствии с первым общим аспектом настоящего изобретения раскрытым способам нет необходимости опираться на какую-либо определенную схему построения кода для поддержки компактных структур данных. Например, можно использовать схемы Хаффмана, Шеннона, Шеннона-Фано, Гилберта-Мура или другие схемы построения кодов. Однако для этого первого общего аспекта предполагается, что такой код строится для источника с монотонно возрастающими вероятностями символов из входного алфавита символов. Более конкретно, предполагается, что длина кодовых слов монотонно уменьшается или, по меньшей мере, не увеличивается, и что кодовые слова одинаковой длины имеют тот же лексикографический порядок, что и символы во входном алфавите, который они представляют.In accordance with a first general aspect of the present invention, the disclosed methods do not need to rely on any particular code construction scheme to support compact data structures. For example, you can use Huffman, Shannon, Shannon-Fano, Gilbert-Moore, or other code construction schemes. However, for this first general aspect, it is assumed that such a code is constructed for a source with monotonically increasing probabilities of characters from the input character alphabet. More specifically, it is assumed that the length of the codewords is monotonically decreasing or at least not increasing, and that the codewords of the same length have the same lexicographic order as the characters in the input alphabet that they represent.

Желаемый лексикографический порядок можно обеспечивать посредством переупорядочивания входного алфавита. Для таких кодовых слов можно вычислить базовые значения кодовых слов для каждого уровня дерева кодирования. Базовые значения кодовых слов представляют собой лексикографически наименьшие канонические кодовые слова на каждом уровне дерева кодирования. Базовые значения кодовых слов и индексы их соответствующих символов могут быть сохранены в переупорядоченном массиве. Эти индексы могут быть сохранены в виде значений смещения для каждого заполненного уровня дерева. Процесс декодирования может включать в себя сравнение буфера потока битов со значениями выровненных влево базовых кодовых слов с последующим простым непосредственным вычислением индекса декодированного символа.The desired lexicographical order can be provided by reordering the input alphabet. For such codewords, you can calculate the basic values of the codewords for each level of the coding tree. The base codeword values are the lexicographically smallest canonical codewords at each level of the coding tree. The base values of the codewords and the indices of their respective characters can be stored in a reordered array. These indices can be stored as offset values for each populated tree level. The decoding process may include comparing the bitstream buffer with the values of the left-aligned base codewords, followed by a simple direct calculation of the index of the decoded symbol.

Вышеуказанные свойства можно использовать для уникального описания такого кода при помощи структуры данных, которую можно дополнительно сжать для получения очень компактной структуры данных, которая облегчает поэтапное декодирование кодов переменной длины. Например, значения, выровненные влево, базовых кодовых слов, обычно имеют большое число начальных нулей справа налево. Число начальных нулей монотонно уменьшается по мере перехода процесса на более глубокие слои в соответствующем дереве кодирования. Следовательно, при последовательном декодировании битов, начиная с самого первого слоя с последующим перемещением вниз, некоторые из начальных нулевых битов можно пропустить без влияния на точность процесса декодирования.The above properties can be used to uniquely describe such a code using a data structure that can be further compressed to obtain a very compact data structure that facilitates the phased decoding of variable-length codes. For example, left-aligned values of base codewords usually have a large number of leading zeros from right to left. The number of leading zeros decreases monotonically as the process moves to deeper layers in the corresponding coding tree. Therefore, when sequentially decoding bits, starting from the very first layer and then moving down, some of the initial zero bits can be skipped without affecting the accuracy of the decoding process.

Начальные нули можно удалять с фиксированными приращениями, например, с 8-битовыми приращениями, что удобно при управлении буфером потока данных в традиционных 8-битовых/байтовых компьютерах. Для управления этим процессом может быть предусмотрена дополнительная таблица, содержащая один или несколько показателей пропуска. Например, показатель пропуска указывает декодеру прокрутить поток битов вперед в буфере на фиксированное приращение, так чтобы различные базовые кодовые слова можно было различать при опущенных начальных нулях. После удаления начальных нулей ширину результирующего массива измененных значений базовых кодовых слов можно существенно уменьшить, сэкономив тем самым свободную память.Leading zeros can be deleted with fixed increments, for example, with 8-bit increments, which is convenient when controlling the data stream buffer in traditional 8-bit / byte computers. To control this process, an additional table may be provided containing one or more skip indicators. For example, a skip metric tells the decoder to scroll the bit stream forward in the buffer in a fixed increment so that different base codewords can be distinguished when the leading zeros are omitted. After removing the leading zeros, the width of the resulting array of modified values of the base codewords can be significantly reduced, thereby saving free memory.

Таким образом, в первом общем аспекте настоящее изобретение предусматривает способ, содержащий генерацию частичных значений базовых кодовых слов для уровней дерева кодирования, определяющего кодовые слова переменной длины, генерацию показателя пропуска, указывающего декодеру пропустить несколько битов в потоке битов, подлежащем декодированию, перед переходом к выбранному уровню дерева кодирования, и сохранение частичных значений и показателя пропуска в структуре данных в памяти. Структура данных может быть любой из множества структур данных, таких как таблицы, связанные списки, двоичные деревья, базисные деревья, неструктурированные файлы или тому подобное, и может быть сохранена в любом из множества различных запоминающих устройств, таких как различные виды оперативной памяти (RAM), постоянной памяти (ROM) или и то, и другое. Структура данных может храниться в такой памяти внутри кодера или декодера. Например, декодер может обращаться к структуре данных или участкам содержимого структуры данных из памяти, связанной с декодером, для выполнения декодирования переменной длины для кодовых слов с эффективным использованием памяти.Thus, in a first general aspect, the present invention provides a method comprising generating partial values of basic codewords for levels of a coding tree defining variable-length codewords, generating a skip indicator instructing the decoder to skip a few bits in the bitstream to be decoded before proceeding to the selected the level of the coding tree, and the preservation of partial values and the rate of omission in the data structure in memory. The data structure may be any of a variety of data structures, such as tables, linked lists, binary trees, base trees, unstructured files, or the like, and may be stored in any of a variety of different storage devices, such as various kinds of random access memory (RAM) , read only memory (ROM), or both. The data structure may be stored in such memory inside an encoder or decoder. For example, the decoder may access the data structure or portions of the contents of the data structure from the memory associated with the decoder to perform variable-length decoding for code words with efficient memory usage.

В соответствии с этим первым общим аспектом изобретение дополнительно предусматривает процессор, выполненный с возможностью генерации частичных значений базовых кодовых слов для уровней дерева кодирования, определяющего кодовые слова переменной длины, и генерации показателя пропуска, указывающего декодеру пропустить несколько битов в потоке битов, подлежащем декодированию, перед переходом к выбранному уровню дерева кодирования, а также память, которая хранит частичные значения и показатель пропуска в структуре данных. Такая информация может храниться в единственной структуре данных или во множестве структур данных. Соответственно, термин "структура данных" может относиться к одной или нескольким структурам данных, хранящим информацию, предусмотренную настоящим изобретением. Процессор, выполненный с возможностью обращения к структуре данных для выполнения кодирования переменной длины, может быть реализован в устройстве-источнике или в устройстве-приемнике либо в отдельном устройстве, которое генерирует структуры данных, определяющие структуры кодов для использования кодером и/или декодером при выполнении кодирования переменной длины.In accordance with this first general aspect, the invention further provides a processor configured to generate partial values of the base codewords for the levels of a coding tree defining variable length codewords, and generate a skip indicator instructing the decoder to skip a few bits in the bitstream to be decoded before a transition to the selected level of the encoding tree, as well as a memory that stores partial values and the skip rate in the data structure. Such information may be stored in a single data structure or in multiple data structures. Accordingly, the term “data structure” may refer to one or more data structures storing information provided by the present invention. A processor configured to access a data structure to perform variable-length encoding can be implemented in a source device or in a receiver device or in a separate device that generates data structures that define code structures for use by an encoder and / or decoder when performing encoding variable length.

Согласно этому способу обеспечения компактных структур данных, соответствующему первому общему аспекту настоящего изобретения, каждая допустимая длина кодового слова может соответствовать уровню с внешним узлом в кодовом дереве. Как указывалось выше, структура данных может включать в себя частичные значения базовых кодовых слов и один или несколько показателей пропуска. Более конкретно, в некоторых вариантах осуществления структура данных может содержать следующую информацию для каждой допустимой длины кодового слова: (a) частичное значение лексикографически наименьшего (или наибольшего) кодового слова на текущем уровне кодового дерева, (b) число битов в частичном значении, (c) значение символа, соответствующего лексикографически наименьшему (или наибольшему) кодовому слову, и (d) показатель, указывающий декодеру пропускать определенное число битов перед переходом к следующему уровню кодового дерева. Соответственно, структура данных может дополнительно включать в себя значения для символов, представленных базовыми кодовыми словами, и длины частичных значений базовых основных кодовых слов, то есть число битов в каждом частичном значении базового кодового слова. Способы кодирования и декодирования могут использовать эту структуру данных для идентификации уровня, соответствующего кодовому слову, подлежащему созданию или декодированию, и затем непосредственно вычисляют значение кодового слова или декодированного символа. Соответственно, структура данных может храниться в памяти кодера или декодера видеоданных, кодера или декодера изображений, кодера или декодера аудиоданных либо кодера или декодера голосовых данных, некоторые из которых могут быть сконструированы в виде совмещенных CODEC.According to this method of providing compact data structures in accordance with a first general aspect of the present invention, each valid codeword length may correspond to a level with an external node in the code tree. As indicated above, the data structure may include partial values of the base codewords and one or more missing indicators. More specifically, in some embodiments, the data structure may contain the following information for each valid codeword length: (a) the partial value of the lexicographically smallest (or largest) codeword at the current code tree level, (b) the number of bits in the partial value, (c ) the value of the character corresponding to the lexicographically smallest (or largest) codeword, and (d) an indicator that tells the decoder to skip a certain number of bits before moving on to the next level of the code tree. Accordingly, the data structure may further include values for the characters represented by the base codewords and the lengths of the partial values of the base core codewords, that is, the number of bits in each partial value of the base codeword. Encoding and decoding methods can use this data structure to identify the level corresponding to the codeword to be created or decoded, and then directly calculate the value of the codeword or decoded symbol. Accordingly, the data structure may be stored in the memory of a video encoder or decoder, an image encoder or decoder, an audio data encoder or decoder, or a voice data encoder or decoder, some of which may be designed as combined CODECs.

Примеры существующих способов кодирования или декодирования кодов переменной длины описаны в работе A. Moffat и A. Turpin, On the Implementation of Minimum-Redundancy Prefix Codes, IEEE Trans. Communications, 45 (10) (1997) 1200-1207; J. B. Connell, A Huffman-Shannon-Fano Code, Proc. IEEE, July 1973, 1046-1047; и A. Brodnik и S. Carlsson, Sublinear Decoding of Huffman Codes Almost in Place, DIMACS Workshop on Codes and Trees: Algorithmic and Information Theoretic Approaches, October 1998, Rutgers University, DIMACS Center, NJ. По сравнению с этими существующими способами раскрытые способы обеспечения компактных структур данных могут предлагать определенные преимущества.Examples of existing methods for encoding or decoding variable length codes are described in A. Moffat and A. Turpin, On the Implementation of Minimum-Redundancy Prefix Codes, IEEE Trans. Communications, 45 (10) (1997) 1200-1207; J. B. Connell, A Huffman-Shannon-Fano Code, Proc. IEEE, July 1973, 1046-1047; and A. Brodnik and S. Carlsson, Sublinear Decoding of Huffman Codes Almost in Place, DIMACS Workshop on Codes and Trees: Algorithmic and Information Theoretic Approaches, October 1998, Rutgers University, DIMACS Center, NJ. Compared to these existing methods, the disclosed methods for providing compact data structures may offer certain advantages.

В качестве первого примера структура данных, созданная посредством раскрытого способа, может занимать значительно меньший объем памяти вследствие того, что лишь частичные значения лексикографически наименьших кодовых слов хранятся и используются, например, декодером видеоданных. В качестве другого примера раскрытый способ может использовать пошаговый доступ к данным потока битов, что позволяет представить буфер потока битов разумно коротким регистром и обновлять его через любые удобные интервалы, например, при помощи указания на пропуск, что еще больше уменьшает сложность реализации.As a first example, a data structure created by the disclosed method can occupy a significantly smaller amount of memory due to the fact that only partial values of the lexicographically smallest code words are stored and used, for example, by a video data decoder. As another example, the disclosed method may use step-by-step access to the bitstream data, which allows the bitstream buffer to be presented in a reasonably short register and updated at any convenient intervals, for example, by indicating a skip, which further reduces implementation complexity.

Например, в некотором варианте выполнения 32-битового регистра может быть достаточно даже для очень длинных кодов. Кроме того, могут делаться обновления с 8-битовыми интервалами. В целом, раскрытый способ позволяет значительно уменьшить сложность представления и кодирования/декодирования кодов переменной длины, что может позволить разработчикам алгоритмов сжатия применять значительно большие и, следовательно, более эффективные кодовые книги.For example, in some embodiments, a 32-bit register may be sufficient even for very long codes. In addition, updates can be made at 8-bit intervals. In General, the disclosed method can significantly reduce the complexity of the presentation and encoding / decoding of codes of variable length, which may allow developers of compression algorithms to use significantly larger and, therefore, more efficient codebooks.

В соответствии со вторым общим аспектом настоящего изобретения для поддержки адаптивного кодирования и декодирования с низкой степенью сложности для двоичных последовательностей, созданных источниками без памяти, раскрытые способы позволяют реализовать универсальные блочные коды, построенные для набора контекстов, идентифицируемых по числу ненулевых битов среди предыдущих битов в последовательности. Этот второй общий аспект может обеспечиваться и применяться независимо или совместно с первым общим аспектом, описанным выше в отношении генерации очень компактных структур данных. Способы адаптивного кодирования и декодирования с низкой степенью сложности могут, в соответствии с этим вторым общим аспектом, опираться на раскрытую формулу для асимптотической избыточности таких кодов, которая уточняет оценку, описанную в работе R. E. Krichevsky и V. K. Trofimov, The Performance of Universal Encoding, IEEE Trans. Information Theory, 27 (1981) 199-207.In accordance with a second general aspect of the present invention, to support adaptive coding and decoding with a low degree of complexity for binary sequences created by memoryless sources, the disclosed methods allow implementing universal block codes constructed for a set of contexts identified by the number of non-zero bits among previous bits in a sequence . This second general aspect can be provided and applied independently or in conjunction with the first general aspect described above with respect to the generation of very compact data structures. Methods of adaptive coding and decoding with a low degree of complexity can, in accordance with this second general aspect, rely on the disclosed formula for the asymptotic redundancy of such codes, which refines the estimate described by RE Krichevsky and VK Trofimov, The Performance of Universal Encoding, IEEE Trans . Information Theory, 27 (1981) 199-207.

Способы в соответствии с этим вторым общим аспектом могут использовать массив кодов Хаффмана, предназначенный для нескольких оцениваемых плотностей и индексированный числом ненулевых битов в предыдущих блоках (контекстах) в последовательности. При использовании блоков даже умеренного размера n = 8…16 (и использовании соответствующих 1,5…5 килобайт памяти) такие способы могут обеспечивать эффективность сжатия, сравнимую или превосходящую другие существующие алгоритмы, такие как алгоритм Q-кодирования, описанный в работе W.B. Pennebaker, J.L. Mitchell, G.G. Langdon, Jr, R. B. Arps, An overview of the basic principles of the Q-coder adaptive binary arithmetic coder, IBM J. Res. Dev., 32 (6) (1988) 717, который используется в стандарте кодирования изображений JBIG, или алгоритм CABAC, описанный в работе D. Marpe, H. Schwartz и T. Wiegand, Context-Based Adaptive Binary Arithmetic Coding in the H.264/AVC video compression standard, IEEE Trans. on CSVT, 13(7):620 636, July 2003, который используется в стандартах ITU-T H.264/MPEG AVC для сжатия видеосигнала.The methods in accordance with this second general aspect can use an array of Huffman codes designed for several estimated densities and indexed by the number of nonzero bits in previous blocks (contexts) in the sequence. When using blocks of even moderate size n = 8 ... 16 (and using appropriate 1.5 ... 5 kilobytes of memory), such methods can provide compression efficiency comparable to or superior to other existing algorithms, such as the Q-coding algorithm described in W.B. Pennebaker, J.L. Mitchell, G.G. Langdon, Jr, R. B. Arps, An overview of the basic principles of the Q-coder adaptive binary arithmetic coder, IBM J. Res. Dev. 32 (6) (1988) 717, which is used in the JBIG image encoding standard, or the CABAC algorithm described by D. Marpe, H. Schwartz and T. Wiegand, Context-Based Adaptive Binary Arithmetic Coding in the H. 264 / AVC video compression standard, IEEE Trans. on CSVT, 13 (7): 620 636, July 2003, which is used in ITU-T H.264 / MPEG AVC standards for video compression.

Адаптивное кодирование и декодирование с низкой степенью сложности, в соответствии с этим вторым общим аспектом изобретения, может быть основано на понимании того, что в модели без памяти вероятность блока битов или ее оценка зависит только от его веса (числа ненулевых битов), но не от фактической комбинации битов. Следовательно, набор всех возможных блоков некоторой фиксированной длины можно разделить на несколько групп, содержащих блоки с одинаковым весом (и, следовательно, с одинаковой вероятностью). Можно предположить, что каждая группа хранит блоки в лексикографическом порядке, либо естественным образом, либо в результате переупорядочивания.Adaptive coding and decoding with a low degree of complexity, in accordance with this second general aspect of the invention, can be based on the understanding that in a memoryless model, the probability of a block of bits or its estimation depends only on its weight (the number of nonzero bits), but not on the actual combination of bits. Therefore, the set of all possible blocks of a certain fixed length can be divided into several groups containing blocks with the same weight (and, therefore, with the same probability). It can be assumed that each group stores the blocks in lexicographical order, either naturally or as a result of reordering.

Известно свойство кодов с минимальной избыточностью (такие как коды Хаффмана или Шеннона), что каждая группа равновероятных блоков может включать в себя максимум две подгруппы, причем блоки в каждой такой подгруппе закодированы кодовыми словами одной и той же длины. Без ограничения общности можно дополнительно предположить, что длина кодовых слов в первой подгруппе короче длины кодовых слов во второй подгруппе. Поскольку блоки (или слова) внутри группы следуют в лексикографическом порядке, ее можно просто поделить на подгруппы с более длинными кодовыми словами и подгруппы с менее длинными кодовыми словами. На положение блока внутри группы указывает значение индекса. Лексикографически наименьшему блоку (или слову) в каждой подгруппе присваивается базовое кодовое слово. При наличии базового кодового слова можно легко вычислить остальные кодовые слова в каждой подгруппе.It is a known property of codes with minimal redundancy (such as Huffman or Shannon codes) that each group of equally probable blocks can include a maximum of two subgroups, and the blocks in each such subgroup are encoded with code words of the same length. Without loss of generality, it can be further assumed that the codeword length in the first subgroup is shorter than the codeword length in the second subgroup. Since the blocks (or words) within the group follow in lexicographic order, it can simply be divided into subgroups with longer codewords and subgroups with shorter codewords. The position of the block within the group is indicated by the index value. Lexicographically, the smallest block (or word) in each subgroup is assigned a base codeword. With a basic codeword, you can easily calculate the rest of the codewords in each subgroup.

Таким образом, в соответствии с этим вторым общим аспектом изобретения кодирование переменной длины может быть выполнено, например, кодером или декодером с использованием структуры кодов, которая определяет группы входных блоков или слов и их соответствующие выходные кодовые слова в дереве кодирования, причем каждая из групп включает в себя кодовые слова, представляющие блоки (или слова), имеющие одинаковые веса, и первую и вторую подгруппы кодовых слов в пределах каждой из групп, причем первая подгруппа включает в себя кодовые слова, имеющие первую длину, а вторая подгруппа включает в себя кодовые слова, имеющие вторую длину, отличную от первой длины. Блоки в каждой из групп упорядочиваются в лексикографическом порядке и затем разбиваются на подгруппы, так чтобы лексикографический порядок сохранялся в каждой из подгрупп. Кроме того, кодовые слова, соответствующие каждому блоку в пределах подгруппы, присваиваются таким образом, чтобы они также следовали в том же лексикографическом порядке и облегчали кодирование и декодирование посредством прямого вычисления.Thus, in accordance with this second general aspect of the invention, variable-length coding can be performed, for example, by an encoder or decoder using a code structure that defines groups of input blocks or words and their corresponding output code words in a coding tree, each group including code words representing blocks (or words) having the same weights and a first and second subgroup of code words within each of the groups, the first subgroup including code words having the first length, and the second subgroup includes codewords having a second length different from the first length. Blocks in each of the groups are ordered in lexicographic order and then divided into subgroups, so that the lexicographic order is preserved in each of the subgroups. In addition, codewords corresponding to each block within a subgroup are assigned in such a way that they also follow the same lexicographic order and facilitate encoding and decoding by direct calculation.

На основании этого взаимного расположения блоков и их групп и подгрупп можно непосредственным образом вычислить кодовые слова с использованием упрощенного процесса. Например, после получения значения веса и индекса для блока, если значение индекса меньше максимального числа блоков в первой подгруппе, то для определения местонахождения кодового слова выбирается первая подгруппа. В противном случае для определения местонахождения кодового слова выбирается вторая подгруппа. Затем, после извлечения базового кодового слова для выбранной подгруппы кодовое слово легко вычисляется посредством суммирования значения базового кодового слова со значением, определенным на основе значения индекса блока в пределах выбранной подгруппы. В отношении этого второго общего аспекта изобретения термины "блоки" и "слова" могут употребляться взаимозаменяемым образом для общего обозначения входных величин, подлежащих кодированию в соответствии со схемой кодирования. Блок или слово могут включать в себя последовательность символов, которые могут быть сформированы из входного алфавита, такого как двоичный алфавит {0, 1}. Кодовые слова обозначают в целом выходные величины, присвоенные блокам (или словам) в результате применения схемы кодирования.Based on this relative arrangement of blocks and their groups and subgroups, code words can be directly calculated using a simplified process. For example, after obtaining the weight and index value for a block, if the index value is less than the maximum number of blocks in the first subgroup, then the first subgroup is selected to determine the location of the code word. Otherwise, a second subgroup is selected to locate the codeword. Then, after extracting the base codeword for the selected subgroup, the codeword is easily calculated by summing the value of the base codeword with a value determined based on the value of the block index within the selected subgroup. With respect to this second general aspect of the invention, the terms “blocks” and “words” may be used interchangeably to generically denote input values to be encoded in accordance with a coding scheme. A block or word may include a sequence of characters that can be formed from an input alphabet, such as the binary alphabet {0, 1}. Code words generally denote the output values assigned to blocks (or words) as a result of applying the coding scheme.

Эти и другие аспекты способов, описанных в настоящей заявке, более подробно описываются ниже. Способы могут использоваться совместно или независимо и могут быть реализованы в любых из множества систем и устройств кодирования и декодирования, в том числе систем и устройств, выполненных с возможностью кодирования и декодирования цифровых видеоданных, данных изображений, звуковых или голосовых данных. В качестве примера и иллюстрации в заявке описывается применение таких способов к кодированию и декодированию цифровых видеоданных, что не накладывает ограничение на общее практическое применение сжатия и кодирования данных или на другие частные применения к различным типам данных.These and other aspects of the methods described in this application are described in more detail below. The methods can be used together or independently and can be implemented in any of a variety of encoding and decoding systems and devices, including systems and devices configured to encode and decode digital video data, image data, audio or voice data. As an example and illustration, the application describes the application of such methods to the encoding and decoding of digital video data, which does not impose a restriction on the general practical application of data compression and encoding, or on other particular applications for various types of data.

На фиг.1 приведена блок-схема, иллюстрирующая систему 10 кодирования и декодирования видеоданных. Как показано на фиг.1, система 10 включает в себя устройство-источник 12, который передает закодированные видеоданные на устройство-приемник 14 по каналу 16 связи. Устройство-источник 12 может включать в себя источник 18 видеоданных, кодер 20 видеоданных и передатчик 22. Устройство-приемник 14 может включать в себя приемник 24, декодер 26 видеоданных и устройство 28 отображения видеоданных. Система 10 может быть выполнена с возможностью применения способов по адаптивному кодированию переменной длины (VLC) с эффективным использованием памяти и низкой степенью сложности к цифровым видеоданным. В частности, способы по адаптивному VLC с эффективным использованием памяти и низкой степенью сложности можно применять для статистического кодирования остаточных блочных коэффициентов, полученных в процессе кодирования видеоданных с предсказанием. Эти способы могут применяться к схемам кодирования видеоданных, которые кодируют положения ненулевых коэффициентов преобразования с использованием последовательностей нулей, или к другим схемам кодирования видеоданных.1 is a block diagram illustrating a video encoding and decoding system 10. As shown in FIG. 1, system 10 includes a source device 12 that transmits encoded video data to a receiver device 14 via a communication channel 16. The source device 12 may include a video source 18, a video encoder 20, and a transmitter 22. A receiver device 14 may include a receiver 24, a video decoder 26, and a video display device 28. System 10 can be configured to employ adaptive variable length coding (VLC) methods with efficient memory use and low complexity for digital video data. In particular, adaptive VLC methods with efficient use of memory and low complexity can be used for statistical coding of residual block coefficients obtained in the process of encoding predictive video data. These methods can be applied to video encoding schemes that encode the positions of non-zero transform coefficients using sequences of zeros, or to other video encoding schemes.

В примере на фиг.1 канал 16 связи может содержать любую среду беспроводной или проводной связи, такой как радиочастотный (РЧ) спектр или одну или несколько физических передающих линий, либо любое сочетание беспроводных и проводных сред. Канал 16 может быть частью сети на основе передачи пакетов, такой как локальная сеть, территориальная сеть или глобальная сеть, такая как Интернет. Канал 16 связи в целом представляет любую подходящую среду связи или совокупность различных сред связи для передачи видеоданных от устройства-источника 12 к устройству-приемнику 14.In the example of FIG. 1, communication channel 16 may comprise any wireless or wired communication medium, such as a radio frequency (RF) spectrum or one or more physical transmission lines, or any combination of wireless and wired media. Channel 16 may be part of a packet-based network, such as a local area network, a regional network, or a wide area network, such as the Internet. The communication channel 16 as a whole represents any suitable communication medium or a combination of various communication media for transmitting video data from the source device 12 to the receiver device 14.

Устройство-источник 12 генерирует видеоданные для передачи устройству 14 назначения. В некоторых случаях, однако, устройства 12, 14 могут работать по существу симметричным образом. Например, каждое из устройств 12, 14 может включать в себя компоненты кодирования и декодирования видеоданных. Следовательно, система 10 может поддерживать одностороннюю или двухстороннюю передачу видеоданных между устройствами 12, 14 видеоданных, например, для потоковой передачи видеоданных, широковещательной передачи видеоданных или видеотелефонии. Для других областей применения сжатия и кодирования данных устройства 12, 14 могут быть выполнены с возможностью отправки и приема, или обмена других типов данных, таких как данные изображений, голосовые или звуковые данные, или сочетания двух или нескольких из видеоданных, данных изображений, голосовых и звуковых данных. Соответственно, рассмотрение применения в отношении видеоданных используется в иллюстративных целях и не должно считаться ограничивающим различные аспекты изобретения, описанного здесь наиболее широким образом.The source device 12 generates video data for transmission to the destination device 14. In some cases, however, devices 12, 14 may operate in a substantially symmetrical manner. For example, each of devices 12, 14 may include encoding and decoding components of video data. Therefore, system 10 can support one-way or two-way video transmission between video data devices 12, 14, for example, for streaming video, broadcasting video, or video telephony. For other applications, data compression and encoding of the device 12, 14 may be configured to send and receive, or exchange other types of data, such as image data, voice or audio data, or a combination of two or more of video data, image data, voice and sound data. Accordingly, consideration of the application with respect to video data is used for illustrative purposes and should not be construed as limiting the various aspects of the invention described herein in the broadest possible manner.

Источник 18 видеоданных может включать в себя устройство захвата видеоизображения, такое как одна или несколько видеокамер, видеоархив, содержащий ранее захваченные видеоизображения, или видеоданные, непосредственно поступающие от поставщика видеоконтента. В качестве еще одной альтернативы источник 18 видеоданных может генерировать в качестве исходных видеоданных данные на основе компьютерной графики или сочетание непосредственных видеоданных и видеоданных, сгенерированных на компьютере. В некоторых случаях, если источником 18 видеоданных является камера, устройство-источник 12 и устройство-приемник 14 могут образовать так называемые видеотелефоны. Так, в некоторых аспектах устройство-источник 12, устройство-приемник 14 или оба устройства могут образовать портативное устройство беспроводной связи, такое как мобильный телефон. В каждом случае захваченное, предварительное захваченное или генерируемое компьютером видеоизображение может быть закодировано кодером 20 видеоданных для передачи от устройства-источника 12 видеоданных к декодеру 26 видеоданных устройства-приемника 14 видеоданных через передатчик 22, канал 16 и приемник 24. Устройство 28 отображения может включать в себя всевозможные устройства отображения, такие как жидкокристаллический дисплей (LCD), плазменный дисплей, дисплей на органических светодиодах (OLED).Video source 18 may include a video capture device, such as one or more video cameras, a video archive containing previously captured video images, or video data directly from a video content provider. As another alternative, the video source 18 can generate computer graphics based data or a combination of the direct video data and video data generated on a computer as source video data. In some cases, if the source of the video data 18 is a camera, the source device 12 and the receiver device 14 may form so-called video telephones. So, in some aspects, source device 12, receiver device 14, or both, can form a portable wireless device, such as a mobile phone. In each case, the captured, pre-captured, or computer-generated video image may be encoded by the video encoder 20 for transmission from the video source device 12 to the video decoder 26 of the video receiver device 14 of the video data through the transmitter 22, channel 16 and receiver 24. The display device 28 may include all kinds of display devices, such as a liquid crystal display (LCD), a plasma display, an organic light emitting diode (OLED) display.

Кодер 20 видеоданных и декодер 26 видеоданных могут быть выполнены с возможностью поддержки кодирования масштабируемых видеоданных для пространственной, временной масштабируемости и/или масштабируемости отношения сигнал-шум (SNR). В некоторых аспектах кодер 20 видеоданных и декодер 22 видеоданных могут быть выполнены с возможностью поддержки мелкоячеистого кодирования с SNR-масштабируемостью (FGS) для SVC. Кодер 20 и декодер 26 могут поддерживать различные степени масштабируемости посредством поддержки кодирования, передачи и декодирования базового уровня и одного или нескольких масштабируемых уровней повышения качества. Для кодирования масштабируемых видеоданных базовый уровень несет видеоданные с минимальным уровнем качества. Один или несколько слоев повышения качества несут дополнительный поток данных для поддержки более высоких пространственных, временных уровней и/или уровня отношения сигнал-шум.Video encoder 20 and video decoder 26 may be configured to support scalable video encoding for spatial, temporal scalability and / or scalability of the signal-to-noise ratio (SNR). In some aspects, video encoder 20 and video decoder 22 may be configured to support fine mesh SNR scalability (FGS) coding for SVCs. Encoder 20 and decoder 26 can support varying degrees of scalability by supporting encoding, transmitting, and decoding of the base layer and one or more scalable enhancement layers. For scalable video coding base layer carries video data with a minimum level of quality. One or more layers carry additional quality improvement data flow to support higher spatial, temporal level and / or level of SNR.

Кодер 20 видеоданных и декодер 26 видеоданных могут работать в соответствии со стандартом сжатия видеоданных, таким как MPEG-2, MPEG-4, ITU-T H.263 или ITU-T H.264/MPEG-4 усовершенствованное видеокодирование (AVC). Хотя это не показано на фиг.1, в некоторых аспектах кодер 20 видеоданных и декодер 26 видеоданных могут быть объединены соответственно с кодером и декодером звука и включать в себя соответствующие блоки мультиплексирования-демультиплексирования (MUX-DEMUX), либо иные аппаратные и программные средства, для обработки кодирования одновременно звуковых и видеоданных в общем потоке данных или в раздельных потоках данных. Если возможно, блоки MUX-DEMUX могут соответствовать протоколу мультиплексора ITU H.223 или другим протоколам, таким как протокол пользовательских дейтаграмм (UDP).Video encoder 20 and video decoder 26 may operate in accordance with a video compression standard such as MPEG-2, MPEG-4, ITU-T H.263 or ITU-T H.264 / MPEG-4 Advanced Video Coding (AVC). Although not shown in FIG. 1, in some aspects, the video encoder 20 and the video decoder 26 may be combined with an audio encoder and decoder, respectively, and include respective MUX-DEMUX or other hardware and software tools, for processing encoding of simultaneously audio and video data in a common data stream or in separate data streams. If possible, the MUX-DEMUX units can conform to the ITU H.223 multiplexer protocol or other protocols such as user datagram protocol (UDP).

Стандарт H.264/MPEG-4 (AVC) был выработан экспертной группой по кодированию видеосигналов (VCEG) ITU-T вместе с экспертной группой по движущимся изображениям (MPEG) ISO/IEC как продукт совместного партнерства, известного под названием объединенная видеогруппа (JVT). Стандарт H.264 описан в рекомендации H.264 ITU-T, "Улучшенное кодирование видеосигнала для общих аудиовизуальных служб", выпущенной исследовательской группой ITU-T и датируемой мартом 2005 г., которая может называться в настоящей заявке стандартом H.264, или техническим стандартом H.264, или стандартом или техническим стандартом H.264/AVC.The H.264 / MPEG-4 (AVC) standard was developed by the ITU-T Video Coding Expertise (VCEG) team with the ISO / IEC Moving Picture Expertise (MPEG) as a collaborative partnership product known as JVT . The H.264 standard is described in ITU-T Recommendation H.264, “Enhanced Video Coding for General Audiovisual Services,” issued by the ITU-T Research Group and dated March 2005, which may be referred to in this application as the H.264 standard, or technical H.264 standard, or H.264 / AVC standard or technical standard.

Объединенная видеогруппа (JVT) продолжает работать над расширением масштабируемого кодирования видеоданных (SVC) на H.264/MPEG-4 AVC. Технические стандарты для разрабатываемого расширения SVC имеют вид объединенного проекта (JD). Объединенная модель масштабируемых видеоданных (JSVM), созданная JVT, реализует инструменты для использования в масштабируемых видеоданных, которые можно использовать в системе 10 для различных задач кодирования, описанных в настоящей заявке. Подробная информация о мелкоячеистом кодировании с SNR-масштабируемостью (FGS) можно найти в документах по объединенному проекту, например, в объединенном проекте 6 (SVC JD6), Thomas Wiegand, Gary Sullivan, Julien Reichel, Heiko Schwartz и Mathias Wien, "Joint Draft 6: Scalable Video Coding", JVT-S 201, April 2006, Geneva, и в объединенном проекте 9 (SVC JD9), Thomas Wiegand, Gary Sullivan, Julien Reichel, Heiko Schwartz и Mathias Wien, "Joint Draft 9 of SVC Amendments," JVT-V 201, January 2007, Marrakech, Morocco.Joint Video Group (JVT) continues to work on expanding scalable video coding (SVC) to H.264 / MPEG-4 AVC. Technical standards for the development of the SVC extension are in the form of a joint project (JD). The Joint Scalable Video Data Model (JSVM) created by JVT implements tools for use in scalable video data that can be used in system 10 for various coding tasks described in this application. Detailed information on fine mesh coding with SNR scalability (FGS) can be found in documents for a joint project, for example, in joint project 6 (SVC JD6), Thomas Wiegand, Gary Sullivan, Julien Reichel, Heiko Schwartz and Mathias Wien, "Joint Draft 6 : Scalable Video Coding ", JVT-S 201, April 2006, Geneva, and Joint Project 9 (SVC JD9), Thomas Wiegand, Gary Sullivan, Julien Reichel, Heiko Schwartz and Mathias Wien," Joint Draft 9 of SVC Amendments, " JVT-V 201, January 2007, Marrakech, Morocco.

В некоторых аспектах для случая широковещательной передачи видеоданных способы, описанные в настоящей заявке, могут быть применены к расширенному кодированию видеоданных H.264, для доставки видеоуслуг в режиме реального времени в наземных мобильных мультимедийных многоабонентских (MT3) системах, использующих технический стандарт радиоинтерфейса только с прямой линией связи (FLO) "Forward Link Only Air Interface Specification for Terrestrial Mobile Multimedia Multicast", который будет опубликован под названием технический стандарт TIA-1099 ("Технический стандарт FLO"), например, сервере беспроводной широковещательной передачи видеоданных или портативном устройстве беспроводной связи. Технический стандарт FLO включает в себя примеры, определяющие синтаксис, семантику и процессы декодирования потока битов, подходящие для радиоинтерфейса FLO. В альтернативном варианте видеоданные могут широковещательно передаваться в соответствии с другими стандартами, такими как DVB-H (широковещательная передача цифровых видеоданных - портативное устройство), ISDB-T (цифровая широковещательная передача и комплексными услугами - наземная) или DMB (широковещательная передача цифрового мультимедиа). Следовательно, устройство-источник 12 может быть мобильным беспроводным терминалом, сервером потокового видео или сервером широковещательной передачи видеоданных. Однако способы, описанные в настоящей заявке, не ограничиваются каким-либо определенным типом системы широковещательной передачи, групповой передачи или двухточечной передачи. В случае широковещательной передачи устройство-источник 12 может передавать несколько каналов видеоданных на множество устройств-приемников, каждое из которых может быть подобно устройству-приемнику 14 на фиг.1.In some aspects for the case of broadcast video, the methods described herein can be applied to advanced H.264 video coding for the delivery of real-time video services in terrestrial mobile multimedia multi-subscriber (MT3) systems using the direct air interface technical standard only Forward Link Only Air Interface Specification for Terrestrial Mobile Multimedia Multicast (FLO), which will be published under the name TIA-1099 Technical Standard (FLO Technical Standard), for example, a server A wireless broadcast video or portable wireless device. The FLO technical standard includes examples defining the syntax, semantics, and bitstream decoding processes suitable for the FLO radio interface. Alternatively, video data may be broadcast in accordance with other standards, such as DVB-H (Digital Video Broadcasting - Portable), ISDB-T (Digital Broadcasting and Integrated Services - Terrestrial) or DMB (Digital Multimedia Broadcasting). Therefore, the source device 12 may be a mobile wireless terminal, a video streaming server, or a video broadcast server. However, the methods described in this application are not limited to any particular type of broadcast, multicast, or point-to-point transmission system. In the case of broadcast transmission, source device 12 may transmit multiple video channels to a plurality of receiver devices, each of which may be similar to receiver device 14 of FIG. 1.

Кодер 20 видеоданных и декодер 26 видеоданных могут быть каждый реализованы в виде одного или нескольких микропроцессоров, процессоров цифровых сигналов (DSP), специализированных интегральных схем (ASIC), программируемых пользователем логических элементов (FPGA), дискретной логики, программных средств, аппаратных средств, программно-аппаратных средств или любых сочетаний вышеперечисленного. Так, каждый кодер 20 видеоданных и декодер 26 видеоданных может быть реализован, по меньшей мере частично, в виде чипа или устройства на интегральной схеме (ИС) и включен в состав одного или нескольких кодеров или декодеров, любой из которых может быть составной частью объединенного кодера/декодера (CODEC) в соответствующем мобильном устройстве, абонентском устройстве, широковещательном устройстве, сервере или тому подобном. Кроме того, устройство-источник 12 и устройство-приемник 14 могут каждое включать в себя соответствующие компоненты модуляции, демодуляции, преобразования частоты, фильтрования и усиления для передачи и приема кодированных видеоданных, в том числе радиочастотные (RF) компоненты и антенны, достаточные для поддержки беспроводной связи. Однако для упрощения чертежа такие компоненты на фиг.1 не показаны.Video encoder 20 and video decoder 26 can each be implemented as one or more microprocessors, digital signal processors (DSP), specialized integrated circuits (ASIC), user-programmable logic elements (FPGA), discrete logic, software, hardware, software hardware or any combination of the above. So, each video encoder 20 and video decoder 26 can be implemented, at least in part, in the form of a chip or integrated circuit (IC) device and is included in one or more encoders or decoders, any of which can be an integral part of the combined encoder / decoder (CODEC) in the corresponding mobile device, subscriber device, broadcast device, server, or the like. In addition, source device 12 and receiver device 14 may each include respective modulation, demodulation, frequency conversion, filtering, and amplification components for transmitting and receiving encoded video data, including radio frequency (RF) components and antennas sufficient to support wireless connection. However, to simplify the drawing, such components are not shown in FIG. 1.

Видеопоследовательность включает в себя последовательность видеокадров. Для кодирования видеоданных кодер 20 видеоданных работает на блоках пикселов в пределах отдельных видеокадров. Видеоблоки могут иметь фиксированные или переменные размеры и могут отличаться по размеру согласно заданному стандарту кодирования. Каждый видеокадр включает в себя последовательность секций. Каждая секция может включать в себя последовательность макроблоков, которые могут быть скомпонованы в подблоки. Например, стандарт ITU-T H.264 поддерживает внутреннее предсказание в блоках различных размеров, таких как 16 на 16, 8 на 8, 4 на 4 для яркостных компонентов и 8×8 для компонентов цветности, а также внешнее предсказание в блоках различного размера, таких как 16 на 16, 16 на 8, 8 на 16, 8 на 8, 8 на 4, 4 на 8 и 4 на 4 для яркостных компонентов и соответствующих масштабированных размеров для компонентов цветности.A video sequence includes a sequence of video frames. For encoding video data, the video encoder 20 operates on blocks of pixels within individual video frames. Video blocks may have fixed or variable sizes and may vary in size according to a given coding standard. Each video frame includes a sequence of sections. Each section may include a sequence of macroblocks that can be arranged in sub-blocks. For example, the ITU-T H.264 standard supports intra prediction in blocks of various sizes, such as 16 by 16, 8 by 8, 4 by 4 for luminance components and 8 × 8 for color components, as well as inter prediction in blocks of various sizes, such as 16 by 16, 16 by 8, 8 by 16, 8 by 8, 8 by 4, 4 by 8 and 4 by 4 for luminance components and corresponding scaled sizes for color components.

Блоки меньшего размера могут обеспечивать лучшее разрешение и могут использоваться в таких местах видеокадра, которые содержат более высокий уровень детализации. В целом макроблоки (MB) и различные подблоки можно считать видеоблоками. Кроме того, секция может считаться последовательностью видеоблоков, таких как MB и/или подблоки. Каждая секция может быть независимо кодируемой единицей. После предсказания может быть выполнено преобразование на остаточном блоке размером 8×8 или 4×4, и дополнительное преобразование может быть применено к DC-коэффициентам блоков размером 4×4 для компонентов цветности или компонента яркости, если используется режим внутреннего предсказания для блоков размером 16×l6.Smaller blocks can provide better resolution and can be used in areas of the video frame that contain a higher level of detail. In general, macroblocks (MB) and various subblocks can be considered video blocks. In addition, a section can be considered a sequence of video blocks, such as MB and / or sub blocks. Each section may be an independently coded unit. After the prediction, a conversion can be performed on the 8 × 8 or 4 × 4 residual block, and an additional conversion can be applied to the 4 × 4 block DC coefficients for the color or luminance components if the intra prediction mode is used for 16 × blocks l6.

Кодер 20 видеоданных и/или декодер 26 видеоданных системы 10 на фиг.1 могут быть выполнены с возможностью применения способов адаптивного кодирования переменной длины (VLC) с эффективным использованием памяти и низкой степенью сложности, описанного в настоящей заявке. В частности, кодер 20 видеоданных и/или декодер 26 видеоданных могут включать в себя соответственно кодер статистического кода и декодер статистического кода, которые применяют по меньшей мере некоторые из таких способов уменьшения используемого объема памяти, избыточной обработки, сложности обработки, степени занятия полосы пропускания, области хранения данных и/или энергопотребления.The video encoder 20 and / or video decoder 26 of the system 10 of FIG. 1 can be configured to employ variable length adaptive coding (VLC) techniques with memory efficiency and low complexity described in this application. In particular, the video encoder 20 and / or the video decoder 26 may include, respectively, a statistical code encoder and a statistical code decoder, which apply at least some of these methods to reduce memory usage, excessive processing, processing complexity, bandwidth occupancy, areas of data storage and / or power consumption.

На фиг.2 приведена блок-схема, иллюстрирующая пример кодера 20 видеоданных, изображенного на фиг.1. Кодер 20 видеоданных может быть выполнен, по меньшей мере частично, в виде одного или нескольких устройств на интегральной схеме, которое собирательно может называться устройством на интегральной схеме. В некоторых аспектах кодер 20 видеоданных может быть составной частью портативного устройства беспроводной связи или сервером широковещательной передачи. Кодер 20 видеоданных может выполнять внутреннее и внешнее кодирование блоков в пределах видеокадров. Внутреннее кодирование опирается на пространственное предсказание для уменьшения или исключения пространственной избыточности в видеоданных в пределах данного видеокадра. Внешнее кодирование опирается на временное предсказание для уменьшения или исключения временной избыточности в видеоданных в пределах соседних кадров видеопоследовательности. В случае внешнего кодирования кодер 20 видеоданных выполняет оценку движения для отслеживания перемещения соответствующих видеоблоков между соседними кадрами.FIG. 2 is a block diagram illustrating an example of the video encoder 20 of FIG. 1. The video encoder 20 may be made, at least in part, in the form of one or more integrated circuit devices, which collectively may be referred to as an integrated circuit device. In some aspects, video encoder 20 may be an integral part of a portable wireless communications device or broadcast server. Video encoder 20 may perform internal and external encoding of blocks within video frames. Internal coding relies on spatial prediction to reduce or eliminate spatial redundancy in the video data within a given video frame. External coding relies on temporal prediction to reduce or eliminate temporal redundancy in video data within adjacent frames of a video sequence. In the case of external coding, video encoder 20 performs motion estimation to track the movement of respective video blocks between adjacent frames.

Как показано на фиг.2, кодер 20 видеоданных принимает текущий видеоблок 30 в пределах видеокадра, подлежащего кодированию. В примере на фиг.2 кодер 20 видеоданных содержит модуль 32 оценки движения, хранилище 34 опорных кадров, модуль 36 компенсации движения, модуль 38 преобразования блоков, модуль 40 квантования, модуль 42 обратного квантования, модуль 44 обратного преобразования и модуль 46 статистического кодирования. Модуль 46 статистического кодирования может обращаться к одной или нескольким структурам данных, хранящимся в памяти 45, для получения данных, подходящих для кодирования. Для фильтрации блоков с целью удаления артефактов блочности может применяться циклический фильтр уменьшения блочности (не показан). Кодер 20 видеоданных также включает в себя сумматор 48 и сумматор 50. На фиг.2 показаны компоненты временного предсказания кодера 20 видеоданных для внешнего кодирования видеоблоков. Кодер 20 видеоданных может также включать в себя компоненты пространственного предсказания внутреннего кодирования некоторых видеоблоков, хотя для упрощения чертежа эти компоненты не показаны.As shown in FIG. 2, the video encoder 20 receives the current video block 30 within the video frame to be encoded. In the example of FIG. 2, the video encoder 20 includes a motion estimation module 32, a reference frame storage 34, a motion compensation module 36, a block transform module 38, a quantization module 40, a quantization module 42, an inverse transform module 44, and a statistical encoding module 46. Statistical encoding unit 46 may access one or more data structures stored in memory 45 to obtain data suitable for encoding. To filter blocks to remove blocking artifacts, a cyclic blocking reduction filter (not shown) can be used. The video encoder 20 also includes an adder 48 and an adder 50. Figure 2 shows the temporal prediction components of the video encoder 20 for external coding of video blocks. The video encoder 20 may also include spatial prediction components of the internal coding of some video blocks, although these components are not shown to simplify the drawing.

Модуль 32 оценки движения сравнивает видеоблок 30 с блоками в одном или нескольких соседних видеокадрах для генерации одного или нескольких векторов движения. Соседний кадр или кадры могут быть извлечены из хранилища 34 опорных кадров, которое может содержать любого типа память или запоминающее устройство для хранения видеоблоков, восстановленных из ранее закодированных блоков. Оценка движения может выполняться для блоков переменных размеров, например, 16×16, 16×8, 8×16, 8×8 или блоков меньших размеров. Модуль 32 оценки движения идентифицирует один или несколько блоков в соседних кадрах, которые в наибольшей степени совпадают с текущим видеоблоком 30, например, на основе модели "затраты-искажение", и определяет смещение между блоками в соседних кадрах и текущим видеоблоком. На этой основе модуль 32 оценки движения создает один или несколько векторов движения (MV), которые указывают величину и траекторию смещения между текущим видеоблоком 30 и одним или несколькими совпадающими блоками из опорных кадров, используемых для кодирования текущего видеоблока 30.Motion estimation module 32 compares video block 30 with blocks in one or more adjacent video frames to generate one or more motion vectors. The adjacent frame or frames may be extracted from the reference frame storage 34, which may contain any type of memory or storage device for storing video blocks reconstructed from previously encoded blocks. Motion estimation can be performed for blocks of varying sizes, for example, 16 × 16, 16 × 8, 8 × 16, 8 × 8 or smaller blocks. Motion estimation module 32 identifies one or more blocks in adjacent frames that most closely match the current video block 30, for example, based on a cost-distortion model, and determines the offset between blocks in adjacent frames and the current video block. On this basis, motion estimation module 32 creates one or more motion vectors (MV) that indicate the magnitude and trajectory of the displacement between the current video block 30 and one or more matching blocks of reference frames used to encode the current video block 30.

Векторы движения могут обладать точностью в половину или четверть пиксела, и даже более высокую точность, что позволяет кодеру 20 видеоданных отслеживать движение с более высокой точностью, чем целочисленные местоположения пикселов, и получать лучший блок предсказания. Когда используются векторы движения с долевыми значениями пикселов, в модуле 36 компенсации движения выполняются операции интерполяции. Модуль 32 оценки движения идентифицирует лучшее разбиение на блоки и вектор или векторы движения для видеоблока при помощи определенных критериев, таких как модель "затраты-искажения". Например, в случае двунаправленного предсказания можно получить нечто большее, чем вектор движения. При помощи полученных в результате разбиений на блоки и векторов движения модуль 36 компенсации движения образует видеоблок предсказания.Motion vectors can have an accuracy of half or a quarter of a pixel, and even higher accuracy, which allows the video encoder 20 to track the movement with higher accuracy than integer pixel locations, and to obtain a better prediction block. When motion vectors with fractional pixel values are used, interpolation operations are performed in the motion compensation unit 36. Motion estimation module 32 identifies the best blocking and motion vector or vectors for a video block using certain criteria, such as a cost-distortion model. For example, in the case of bidirectional prediction, you can get something more than a motion vector. Using the resulting blocking and motion vectors, the motion compensation module 36 forms a prediction video block.

Кодер 20 видеоданных образует остаточный видеоблок посредством вычитания видеоблока предсказания, полученного модулем 36 компенсации движения, из первоначального, текущего видеоблока 30 в сумматоре 48. Модуль 38 преобразования блоков применяет преобразование, такое как целочисленное преобразование 4×4 или 8×8, используемое в H.264/AVC, к остаточному блоку c получением коэффициентов остаточного преобразованного блока. Модуль 40 квантования квантует коэффициенты остаточного преобразованного блока для дальнейшего уменьшения скорости передачи в битах. Модуль 46 статистического кодирования статистически кодирует квантованные коэффициенты для еще большего уменьшения скорости передачи в битах.The video encoder 20 forms a residual video block by subtracting the prediction video block obtained by the motion compensation module 36 from the original, current video block 30 in the adder 48. The block transform module 38 applies a transform, such as the integer 4 × 4 or 8 × 8 transform used in H. 264 / AVC, to the residual block with obtaining the coefficients of the residual converted block. Quantization module 40 quantizes the coefficients of the residual transformed block to further reduce the bit rate. The statistical coding unit 46 statistically encodes the quantized coefficients to further reduce the bit rate.

Модуль 46 статистического кодирования действует как блок кодирования переменной длины (VLC) для применения кодирования VLC к квантованным коэффициентам блока. В частности, модуль 46 статистического кодирования может быть выполнен с возможностью выполнения кодирования VLC коэффициентов цифровых видеоблоков с использованием способов адаптивного VLC с эффективным использованием памяти и низкой степенью сложности, как описано в настоящей заявке. Таким образом, различные процессы кодирования, описанные в настоящей заявке, могут быть выполнены в модуле 46 статистического кодирования для выполнения кодирования видеоданных. В альтернативном варианте, такой модуль 46 статистического кодирования может выполнять процессы, описанные в настоящей заявке, для кодирования любых данных, в том числе, в частности, видеоданных, данных изображения, голосовых и звуковых данных. В целом декодер 26 видеоданных выполняет обратные операции, в том числе декодирование VLC для декодирования и восстановления кодированных видеоданных, как будет описано ниже со ссылкой на фиг.3.The statistical coding unit 46 acts as a variable length coding (VLC) block for applying VLC coding to the quantized block coefficients. In particular, statistical encoding module 46 may be configured to perform VLC coding of coefficients of digital video blocks using adaptive VLC techniques with memory efficiency and low complexity, as described herein. Thus, the various encoding processes described in this application can be performed in the statistical encoding unit 46 to perform encoding of the video data. Alternatively, such a statistical coding unit 46 may perform the processes described herein to encode any data, including, in particular, video data, image data, voice and audio data. In general, video decoder 26 performs inverse operations, including VLC decoding, for decoding and recovering encoded video data, as will be described later with reference to FIG. 3.

Модуль 42 обратного квантования и модуль 44 обратного преобразования применяют соответственно обратное квантование и обратное преобразование для восстановления остаточного блока. Сумматор 50 прибавляет восстановленный остаточный блок к блоку предсказания со скомпенсированным движением, полученному модулем 36 компенсации движения для получения восстановленного видеоблока, предназначенного для сохранения в хранилище 34 опорных кадров. Восстановленный видеоблок используется модулем 32 оценки движения и модулем 36 компенсации движения для кодирования блока в следующем видеокадре.The inverse quantization unit 42 and the inverse transform unit 44 apply inverse quantization and inverse transform respectively to reconstruct the residual block. The adder 50 adds the reconstructed residual block to the motion compensated prediction block obtained by the motion compensation unit 36 to obtain a reconstructed video block for storing reference frames in the storage 34. The reconstructed video block is used by the motion estimation module 32 and the motion compensation module 36 to encode the block in the next video frame.

На фиг.3 приведена блок-схема, иллюстрирующая пример декодера 26 видеоданных. Декодер 26 видеоданных может быть выполнен, по меньшей мере частично, в виде одного или нескольких устройств на интегральных схемах, которые совместно могут называться устройством на интегральной схеме. В некоторых аспектах декодер 26 видеоданных может являться составной частью переносного устройства беспроводной связи. Декодер 26 видеосигналов может выполнять внутреннее и внешнее декодирование в пределах видеокадров. Как показано на фиг.3, декодер 26 видеоданных принимает кодированный поток битов видеоданных, который был закодирован кодером 20 видеоданных. В примере на фиг.3, декодер 26 видеоданных включает в себя модуль 52 статистического декодирования, модуль 54 компенсации движения, модуль 56 обратного квантования, модуль 58 обратного преобразования и хранилище 62 опорных кадров. Модуль 52 статистического декодирования может обращаться к одной или нескольким структурам данных, хранящимся в памяти 51, для получения данных, требуемых для кодирования. Декодер 26 видеоданных может также включать в себя циклический фильтр уменьшения блочности (не показан), который фильтрует выходной сигнал с сумматора 64. Декодер 26 видеоданных включает в себя также сумматор 64. На фиг.3 приведены компоненты временного предсказания декодера 26 видеоданных для внешнего декодирования видеоблоков. Декодер 26 видеоданных может также включать в себя компоненты пространственного предсказания для внутреннего декодирования некоторых видеоблоков, хотя эти компоненты на фиг.3 не показаны.3 is a block diagram illustrating an example of a video decoder 26. The video decoder 26 may be made, at least in part, in the form of one or more integrated circuit devices, which collectively may be called an integrated circuit device. In some aspects, video decoder 26 may be an integral part of a portable wireless communications device. Video decoder 26 may perform internal and external decoding within video frames. As shown in FIG. 3, video decoder 26 receives an encoded video bitstream that has been encoded by video encoder 20. In the example of FIG. 3, video decoder 26 includes a statistical decoding unit 52, a motion compensation unit 54, an inverse quantization unit 56, an inverse transform unit 58, and a reference frame storage 62. The statistical decoding unit 52 may access one or more data structures stored in the memory 51 to obtain the data required for encoding. Video decoder 26 may also include a cyclic deblocking filter (not shown) that filters the output from adder 64. Video decoder 26 also includes adder 64. FIG. 3 shows temporal prediction components of video decoder 26 for external decoding of video blocks . Video decoder 26 may also include spatial prediction components for internally decoding some video blocks, although these components are not shown in FIG. 3.

Модуль 52 статистического декодирования принимает кодированный поток битов видеоданных и декодирует из потока битов квантованные остаточные коэффициенты, режим кодирования макроблоков и информацию о движении, которая может включать в себя векторы движения и разбиение на блоки. Таким образом, модуль 52 статистического декодирования выполняет функцию блока VLC-декодирования. Например, для декодирования квантованных остаточных коэффициентов от кодированного потока битов модуль 52 статистического декодирования на фиг.3, подобно модулю 46 статистического кодирования на фиг.2, может выполнять адаптивное VLC-декодирование коэффициентов блоков цифровых видеоданных, как описано в настоящей заявке. Однако модуль 52 статистического декодирования может выполнять VLC-декодирование обратным образом относительно модуля 46 статистического кодирования на фиг.2 для извлечения квантованных коэффициентов блоков из кодированного потока битов. Таким образом, различные процессы декодирования, описанные в настоящей заявке, могут быть реализованы в модуле 52 статистического декодирования для выполнения декодирования видеоданных. В альтернативном варианте такой модуль 52 статистического декодирования может выполнять процессы, описанные в настоящей заявке, для декодирования любых из множества типов данных, в том числе, в частности, видеоданных, данных изображения, голосовых и звуковых данных. В любом случае результат кодирования переменной длины, выполняемого модулем 52 статистического декодирования, может быть выдан пользователю, сохранен в памяти и/или передан другому устройству или блоку обработки.The statistical decoding unit 52 receives the encoded video bitstream and decodes the quantized residual coefficients, macroblock coding mode, and motion information from the bitstream, which may include motion vectors and blocking. Thus, the statistical decoding unit 52 performs the function of a VLC decoding unit. For example, to decode the quantized residual coefficients from the encoded bitstream, the statistical decoding module 52 of FIG. 3, like the statistical encoding module 46 of FIG. 2, can perform adaptive VLC decoding of coefficients of blocks of digital video data, as described herein. However, entropy decoding unit 52 may perform VLC decoding inversely with respect to entropy encoding unit 46 in FIG. 2 to extract quantized block coefficients from the encoded bitstream. Thus, the various decoding processes described herein can be implemented in a statistical decoding unit 52 for decoding video data. Alternatively, such a statistical decoding module 52 may perform the processes described herein to decode any of a variety of data types, including but not limited to video data, image data, voice and audio data. In any case, the variable-length encoding result performed by the statistical decoding unit 52 may be provided to the user, stored in memory, and / or transferred to another device or processing unit.

Модуль 54 компенсации движения принимает векторы движения и разбиения на блоки и один или несколько восстановленных опорных кадров из хранилища 62 опорных кадров для получения блока предсказания видеоданных. Модуль 56 обратного квантования осуществляет обратное квантование, то есть деквантование квантованных коэффициентов блока. Модуль 58 обратного преобразования применяет к этим коэффициентам обратное преобразование, например, обратное DCT или обратное 4×4 или 8×8 целочисленное преобразование для получения остаточных блоков. Блоки предсказания видеоданных затем суммируются сумматором 64 с остаточными блоками для формирования декодированных блоков. Может применяться фильтр уменьшения блочности (не показан) для фильтрования декодированных блоков с целью удаления артефактов блочности. Затем фильтрованные блоки помещают в хранилище 62 опорных кадров, которое обеспечивает опорные кадры для декодирования последующих видеокадров и также создает декодированные видеоданные для управления устройством 28 отображения (фиг.1)The motion compensation module 54 receives the motion and blocking vectors and one or more reconstructed reference frames from the reference frame storage 62 to obtain a video prediction block. The inverse quantization module 56 performs inverse quantization, i.e., dequantization of the quantized block coefficients. The inverse transform unit 58 applies an inverse transform to these coefficients, for example, an inverse DCT or an inverse 4x4 or 8x4 integer transform to produce residual blocks. The video prediction blocks are then summed by the adder 64 with the residual blocks to form the decoded blocks. A deblocking filter (not shown) may be used to filter decoded blocks to remove blocking artifacts. Then the filtered blocks are placed in the storage 62 reference frames, which provides reference frames for decoding subsequent video frames and also creates decoded video data to control the display device 28 (Fig. 1)

Кодирование с эффективным использованием памяти кодов переменной длиныMemory efficient coding of variable length codes

В соответствии с первым общим аспектом изобретения далее подробно описывается способ, обеспечивающий эффективное использование памяти, для кодирования с переменной длиной для поддержки компактных структур данных. Этот способ не должен обязательно опираться на какую-либо определенную схему построения кода, такую как коды Хаффмана, Шеннона, Шеннона-Фано, Гильберта-Мура или другие коды. Этот способ предполагает, однако, что код строится для источника с монотонно возрастающими вероятностями символов. Более конкретно, предполагается, что кодовые слова имеют монотонно убывающие (или по крайней мере не возрастающие) длины и что кодовые слова одинаковой длины имеют тот же лексикографический порядок, что и символы во входном алфавите, который они представляют.In accordance with a first general aspect of the invention, a method for efficiently utilizing memory for variable length coding to support compact data structures is described in detail below. This method should not necessarily rely on any particular code construction scheme, such as Huffman, Shannon, Shannon-Fano, Hilbert-Moore, or other codes. This method assumes, however, that the code is constructed for a source with monotonically increasing character probabilities. More specifically, it is assumed that codewords have monotonically decreasing (or at least non-increasing) lengths and that codewords of the same length have the same lexicographic order as the characters in the input alphabet that they represent.

Этот способ при применении к кодированию видеоданных или в других областях применения использует вышеуказанные свойства для уникального описания такого кода с очень компактной структурой данных. Как описано выше, структура данных может содержать, для каждой допустимой длины кодового слова, то есть для уровня с внешними узлами на кодовом дереве, следующую информацию:This method, when applied to encoding video data or in other applications, uses the above properties to uniquely describe such code with a very compact data structure. As described above, the data structure may contain, for each valid codeword length, that is, for a level with external nodes in the code tree, the following information:

a) частное значение лексикографически наименьшего (или наибольшего) кодового слова на текущем уровне кодового дерева,a) the particular value of the lexicographically smallest (or largest) codeword at the current level of the code tree,

b) число битов в частичном значении,b) the number of bits in a partial value,

c) значение символа, соответствующего лексикографически наименьшему (или наибольшему) кодовому слову, иc) the meaning of the character corresponding to the lexicographically smallest (or largest) codeword, and

d) показатель, который указывает декодеру пропустить определенное число битов перед переходом к следующему уровню кодового дерева.d) a metric that tells the decoder to skip a certain number of bits before moving on to the next level of the code tree.

Процессы кодирования и декодирования могут использовать эту структуру для идентификации уровня кодового дерева, соответствующего кодовому слову, которое требуется получить (или декодировать), и затем непосредственно вычислить значение кодового слова (или декодированного символа).Encoding and decoding processes can use this structure to identify the level of the code tree corresponding to the code word that you want to receive (or decode), and then directly calculate the value of the code word (or decoded symbol).

Этот способ может позволить использование значительно меньшего объема памяти для кодирования и декодирования благодаря тому, что сохраняются только частичные значения лексикографически наименьших кодовых слов. Структура данных может относиться к любым из множества известных структур данных, таких как таблицы, связные списки, двоичные деревья, базисные деревья, бесструктурные файлы или тому подобное, и может храниться в любом из множества различных запоминающих устройств, таких как оперативная память (RAM), постоянная память (ROM), или и то, и другое одновременно. Структура данных может храниться в такой памяти внутри кодера или декодера, например, в памяти 45 или в памяти 51, приведенных соответственно на фиг.2 и 3, и в этом случае по меньшей мере некоторые из уровней дерева кодирования включают в себя кодовые слова, расположенные в лексикографическом порядке относительно порядка значений символов, представленных кодовыми словами. Соответственно, каждое из базовых кодовых слов является лексикографически наименьшим кодовым словом на соответствующем уровне дерева кодирования. Кроме того, этот способ разрешает использование поэтапного доступа к данным в потоке битов, вследствие чего буфер потока битов может быть представлен разумно коротким регистром. Например, может быть достаточно 32-битового регистра даже для очень длинных кодов. Регистр может обновляться через удобно подобранные интервалы (например, через 8 битов), что еще более снижает сложность реализации. В целом этот способ, в различных своих аспектах, может позволить значительно уменьшить сложность представления и кодирования/декодирования кодов переменной длины, что может позволить разработчикам алгоритмов сжатия использовать большие, более эффективные кодовые книги.This method may allow the use of significantly less memory for encoding and decoding due to the fact that only partial values of the lexicographically smallest code words are stored. A data structure may refer to any of a variety of known data structures, such as tables, linked lists, binary trees, basis trees, structureless files, or the like, and may be stored in any of a variety of different storage devices, such as random access memory (RAM), read-only memory (ROM), or both at the same time. The data structure may be stored in such a memory inside the encoder or decoder, for example, in the memory 45 or in the memory 51 shown in FIGS. 2 and 3, respectively, in which case at least some of the levels of the coding tree include codewords located in lexicographic order relative to the order of the values of the characters represented by the code words. Accordingly, each of the base codewords is the lexicographically smallest codeword at the corresponding level of the coding tree. In addition, this method allows the use of phased access to data in the bitstream, as a result of which the buffer of the bitstream can be represented by a reasonably short register. For example, a 32-bit register may be sufficient even for very long codes. The register can be updated at conveniently selected intervals (for example, after 8 bits), which further reduces the implementation complexity. In general, this method, in its various aspects, can significantly reduce the complexity of the representation and encoding / decoding of variable-length codes, which may allow developers of compression algorithms to use large, more efficient codebooks.

Теперь будет дано общее представление о кодах переменной длины с тем, чтобы способствовать иллюстрации способов, описанных в настоящей заявке. Коды переменной длины представляют собой фундаментальный инструмент в области сжатия данных. В целом коды переменной длины используются для представления последовательности символов с некоторым известным и обычно крайне несбалансированным распределением. Такие последовательности могут быть представлены двоичными последовательностями, или кодами, значительно меньшей длины. Сокращение длины обеспечивается заменой более часто встречающихся символов на более короткие коды, а менее частных символов на более длинные коды.An overview of variable length codes will now be given in order to help illustrate the methods described in this application. Variable-length codes are a fundamental tool in data compression. In general, variable-length codes are used to represent a sequence of characters with some well-known and usually extremely unbalanced distribution. Such sequences may be represented by binary sequences, or codes of significantly shorter length. Reducing the length is provided by replacing the more common characters with shorter codes, and less private characters with longer codes.

Примерами кодов переменной длины, используемых для сжатия данных, являются коды Хаффмана, например, описанные в работе D.A. Huffman. A method of the construction of mminimum-redundancy codes. Proc. IRE, vol.40, pp.1098-1101. Sept. 1952, коды Шеннона, например, описанные в работе C.E. Shannon, A mathematical theory of communication, Bell Syst. Tech J. Vol. 27. pp. 379-423, July 1948, коды Шеннона-Фано, например, описанные в работе М R. Fano, The transmission of information, Res. Lab. Electronics, Massachusetts Inst. of Technology, Cambridge, Mass. Tech, Rep. No. 65, 1949, и коды Гилберта-Мура, например, описанные в работе E. N. Gilbert и E. F. Moore, Variable-Length Binary Encoding, Bell. Syst. Tech. J., Vol. 7, pp. 932-967, 1959 (иногда также называемые кодами Шеннона-Фано-Элиаса).Examples of variable length codes used to compress data are Huffman codes, such as those described in D.A. Huffman. A method of the construction of mminimum-redundancy codes. Proc. IRE, vol. 40, pp. 1098-1101. Sept. 1952, Shannon codes, for example, described in C.E. Shannon, A mathematical theory of communication, Bell Syst. Tech J. Vol. 27. pp. 379-423, July 1948, Shannon-Fano codes, for example, described in M R. Fano, The transmission of information, Res. Lab. Electronics, Massachusetts Inst. of Technology, Cambridge, Mass. Tech, Rep. No. 65, 1949, and Hilbert-Moore codes, for example, described by E. N. Gilbert and E. F. Moore, Variable-Length Binary Encoding, Bell. Syst. Tech. J., Vol. 7, pp. 932-967, 1959 (sometimes also called Shannon-Fano-Elias codes).

Описанные выше коды принадлежат к классу беспрефиксных кодов, например, как описано в работе T. Cover and J. Томас, Element of Information Theory, Wiley, 1991. На фиг.4 приведена схема, иллюстрирующая пример двоичного дерева. Описанные выше коды удобно представить в виде двоичного дерева, такого как изображенное на фиг.4. Таким образом, кодер может кодировать значения символов в соответствии с деревом кодирования. Значения согласно дереву могут представлять любое из множества данных, таких как видеоданные, данные изображения, голосовые или звуковые данные. Каждый внутренний узел в таком дереве соответствует двоичному символу, значение которого, равное 0, вызывает шаг вправо, а значение, равное 1, вызывает шаг влево к дочернему узлу в дереве. Самый верхний узел называют корневым узлом, и он является узлом, с которого начинается кодирование/декодирование.The codes described above belong to the class of non-prefix codes, for example, as described by T. Cover and J. Thomas, Element of Information Theory, Wiley, 1991. Fig. 4 is a diagram illustrating an example of a binary tree. The codes described above are conveniently represented in the form of a binary tree, such as that shown in FIG. 4. Thus, the encoder can encode symbol values in accordance with the encoding tree. Values according to the tree can represent any of a variety of data, such as video data, image data, voice or audio data. Each internal node in such a tree corresponds to a binary symbol whose value equal to 0 causes a step to the right, and a value equal to 1 causes a step to the left to a child node in the tree. The topmost node is called the root node, and it is the node from which encoding / decoding begins.

Каждый внешний узел в дереве является узлом, где процесс кодирования/декодирования возобновляется, в результате чего получается либо слово, то есть последовательность битов от корневого узла до текущего узла, либо декодированное значение символа, связанного с текущим кодовым словом. В примере дерева кодирования, приведенном на фиг.4, имеется шестнадцать кодовых слов, соответствующих символам, проиндексированным от 0 до 15. В этом примере самое короткое кодовое слово имеет длину 1 бит, а самые длинные кодовые слова имеют длины 10 бит каждое. Число уровней, содержащих внешние узлы (кодовые слова), в этом дереве равно 7, а именно, 1-й, 3-й, 4-й, 6-й, 7-й, 9-й и 10-й уровни.Each external node in the tree is a node where the encoding / decoding process is resumed, resulting in either a word, that is, a sequence of bits from the root node to the current node, or a decoded symbol value associated with the current code word. In the example coding tree of FIG. 4, there are sixteen codewords corresponding to characters indexed from 0 to 15. In this example, the shortest codeword is 1 bit long and the longest codewords are 10 bit long. The number of levels containing external nodes (code words) in this tree is 7, namely, 1st, 3rd, 4th, 6th, 7th, 9th and 10th levels.

Как далее показано на фиг.4, пусть n обозначает число внешних узлов в дереве кодирования (и, соответственно, число кодовых слов в коде), пусть L обозначает длину самого длинного кодового слова, и пусть K обозначает число уровней, заполненных внешними узлами в дереве кодирования. В дальнейшем рассмотрении используется обозначение "О-большое", введенное П. Бахманом. Например, выражение y(n) = O(x(n)) означает наличие некоторой постоянной M>0, так что y()≤М|x(n)| для всех достаточно больших n.As shown in Fig. 4 below, let n denote the number of external nodes in the encoding tree (and, accordingly, the number of codewords in the code), let L denote the length of the longest codeword, and let K denote the number of levels filled with external nodes in the tree coding. In further consideration, the designation "O-large" is used, introduced by P. Bachmann. For example, the expression y (n) = O (x (n)) means the presence of some constant M> 0, so that y () ≤M | x (n) | for all sufficiently large n.

Для поддержки процесса кодирования кодер и декодер, такие как модуль 46 статистического кодирования и модуль 52 статистического декодирования, вообще говоря, должны хранить двоичное дерево в памяти компьютера, такой как память 45 или память 51. Кроме того, процессы кодирования и декодирования должны включать в себя побитовый (то есть поузельный) обход дерева кодирования, хранящегося в памяти. Следовательно, для такой реализации затраты на хранение должны составлять O(n), а число шагов может составлять до O(L). Однако, в некоторых специальных случаях, когда деревья кодирования имеют некоторую особую структуру, могут существовать более эффективные способы хранения таких структур кодов и выполнения операций кодирования или декодирования.To support the encoding process, an encoder and a decoder, such as a statistical encoding module 46 and a statistical decoding module 52, generally should store a binary tree in a computer memory, such as a memory 45 or a memory 51. In addition, the encoding and decoding processes should include a bitwise (i.e., node-wise) traversal of the encoding tree stored in memory. Therefore, for such an implementation, storage costs must be O (n), and the number of steps can be up to O (L). However, in some special cases where the encoding trees have some special structure, there may be more efficient ways to store such code structures and perform encoding or decoding operations.

Например, рассматривая код, представленный в примере дерева кодирования на фиг.4, можно заметить, что длина кодовых слов не уменьшается и что все кодовые слова на одном уровне дерева кодирования имеют смежные значения. Например, кодовые слова на 4-м уровне дерева на фиг.4 имеют большую длину, чем кодовые слова на 3-м уровне дерева, а именно 0001 по сравнению с 011, 010, 001 и 000. Кроме того, кодовые слова на 3-м уровне имеют смежные значения 011, 010, 011, 000. Следовательно, вместо того чтобы хранить все коды, может быть достаточно хранить только наименьшее или наибольшее кодовое слово для каждого уровня дерева кодирования, то есть в качестве базового кодового слова, из которого можно вычислить все соседние кодовые слова.For example, looking at the code presented in the example coding tree of FIG. 4, it can be noted that the codeword length does not decrease and that all codewords at the same level of the coding tree have adjacent values. For example, the codewords at the 4th level of the tree in FIG. 4 are longer than the codewords at the 3rd level of the tree, namely 0001 compared to 011, 010, 001 and 000. In addition, the codewords at 3- m level have adjacent values 011, 010, 011, 000. Therefore, instead of storing all the codes, it may be sufficient to store only the smallest or largest codeword for each level of the coding tree, that is, as the base codeword from which it can be calculated all adjacent codewords.

Вышеуказанное наблюдение является ключом к пониманию способов декодирования кодов переменной длины на основе их преобразования в так называемый канонический вид, например, как описано в работе A. Moffat and A. Turpin, On the Implementation of Minimum-Redundancy Prefix Codes, IEEE Trans. Communications, 45 (10) (1997) 1200-1207. Если говорить простыми словами, канонический код имеет неубывающее распределение длин и поддерживает лексикографический заказ в отношении индексов, присвоенных его узлам. Довольно просто показать, что любой данный источник можно переупорядочить таким образом, что результирующий код будет иметь вышеуказанные свойства.The above observation is the key to understanding how to decode variable-length codes based on their conversion to the so-called canonical form, for example, as described in A. Moffat and A. Turpin, On the Implementation of Minimum-Redundancy Prefix Codes, IEEE Trans. Communications, 45 (10) (1997) 1200-1207. In simple words, the canonical code has a non-decreasing distribution of lengths and supports the lexicographic order with respect to the indices assigned to its nodes. It is quite simple to show that any given source can be reordered in such a way that the resulting code will have the above properties.

Например, код, приведенный в дереве кодирования на фиг.4, представляет собой переупорядоченный код для источника с немонотонным распределением, как показано ниже в Таблице 1. В частности, Таблица 1 служит примером канонического кода переменной длины, который был переупорядочен.For example, the code shown in the coding tree of FIG. 4 is a reordered code for a non-monotonous source, as shown in Table 1 below. In particular, Table 1 is an example of a canonical variable-length code that has been reordered.

Таблица 1
Пример канонического кода переменной длины
Table 1
Variable Length Canonical Code Example
СимволSymbol ВероятностьProbability Индекс символа после переупорядоченияCharacter index after reordering Длина кодаCode length КодThe code 00 0,65610.6561 15fifteen 1one 1one 1one 0,07290,0729 1212 33 011011 22 0,07290,0729 1313 33 010010 33 0,00810.0081 55 77 00001010000101 4four 0,07290,0729 14fourteen 33 001001 55 0,00810.0081 66 77 00001000000100 66 0,00810.0081 1010 66 000011000011 77 0,00090,0009 1one 1010 00000000010000000001 88 0,07290,0729 11eleven 4four 00010001 99 0,00810.0081 77 77 00000110000011 1010 0,00810.0081 88 77 00000100000010 11eleven 0,00090,0009 22 99 000000011000000011 1212 0,00810.0081 99 77 00000010000001 1313 0,00090,0009 33 99 000000010000000010 14fourteen 0,00090,0009 4four 99 000000001000000001 15fifteen 0,00010.0001 00 1010 00000000000000000000

В приведенной выше таблице 1 символ 0 имеет самую высокую вероятность, за ним идут символы 1 и 2. Однако символ 3 имеет более низкую вероятность, чем 4, а 4 и 8 имеют такую же вероятность, что и 1 и 2. После переупорядочения все вероятности символов монотонно возрастают (не убывают) и приводят к каноническому коду, представленному деревом кодирования на фиг.4. Так называемый алгоритм Моффата-Турпина, описанный в работе A. Moffat and A. Turpin, On the Implementation of Minimum-Redundancy Prefix Codes, IEEE Trans. Communications, 45 (10) (1997) 1200-1207, дает метод декодирования канонических кодов. Способы, описанные в настоящей заявке, могут обеспечить усовершенствование алгоритма Моффата-Турпина. Другие алгоритмы, такие как описанные в работах J. B. Connell, A Huffman-Shannon-Fano Code, Proc. IEEE, July 1973, 1046-1047, и A. Brodnik and S. Carlsson, Sub linear Decoding of Huffman Codes Almost in Place, DIMACS Workshop on Codes and Trees: Algorithmic and information Theoretic Approaches, October 1998, Rutgers University, DIMACS Center, NJ, подобны алгоритму Моффата-Турпина, и их также можно улучшить посредством использования раскрытых способов аналогичным образом.In table 1 above, the symbol 0 has the highest probability, followed by the symbols 1 and 2. However, the symbol 3 has a lower probability than 4, and 4 and 8 have the same probability as 1 and 2. After reordering, all the probabilities characters monotonically increase (do not decrease) and lead to the canonical code represented by the encoding tree in figure 4. The so-called Moffat-Turpin algorithm described by A. Moffat and A. Turpin, On the Implementation of Minimum-Redundancy Prefix Codes, IEEE Trans. Communications, 45 (10) (1997) 1200-1207, provides a method for decoding canonical codes. The methods described in this application may provide an improvement to the Moffat-Turpin algorithm. Other algorithms, such as those described by J. B. Connell, A Huffman-Shannon-Fano Code, Proc. IEEE, July 1973, 1046-1047, and A. Brodnik and S. Carlsson, Sub linear Decoding of Huffman Codes Almost in Place, DIMACS Workshop on Codes and Trees: Algorithmic and information Theoretic Approaches, October 1998, Rutgers University, DIMACS Center, NJs are similar to the Moffat-Turpin algorithm, and can also be improved by using the disclosed methods in a similar manner.

Алгоритм Моффата-Турпина для декодирования кодов переменной длины описан ниже. Предположим, что входной алфавит A содержит n букв A={α0,…αn-1}, применяется переупорядочение i:A→{0,…,n-1}, так что результирующие вероятности удовлетворяют условию: p0≤p1≤…≤pn-1. Затем может быть применен алгоритм Хаффмана или другой алгоритм построения минимальной избыточности, который присваивает длины кодовых слов li каждому индексу 1≤i≤L, где L - длина самого длинного кодового слова. В результате получаются "числа заполнения" m1, то есть число кодовых слов длины l.The Moffat-Turpin algorithm for decoding variable-length codes is described below. Suppose that the input alphabet A contains n letters A = {α 0 , ... α n-1 }, the reordering i: A → {0, ..., n-1} is applied, so that the resulting probabilities satisfy the condition: p 0 ≤p 1 ≤ ... ≤p n-1 . Then, the Huffman algorithm or another algorithm for constructing the minimum redundancy, which assigns the length of codewords l i to each index 1≤i≤L, where L is the length of the longest codeword, can be applied. The result is "fill numbers" m 1 , that is, the number of code words of length l.

При помощи этих параметров вычисляются так называемые "базовые" значения для каждого уровня в дереве по следующей формуле:Using these parameters, the so-called "base" values are calculated for each level in the tree according to the following formula:

Figure 00000001
, (1≤l≤L)
Figure 00000001
, (1≤l≤L)

Эти базовые значения кодовых слов представляют лексикографически наименьшие канонические кодовые слова на каждом уровне дерева. Зная базовое значение кодового слова base[l], можно теперь вычислить j+1-го кодового слова среди ml кодовых слов длины l:These basic codeword values represent the lexicographically smallest canonical codewords at each level of the tree. Knowing the base value of the codeword base [l], we can now calculate the j + 1th codeword among m l codewords of length l:

base[l]+j.base [l] + j.

Для работы декодера удобнее хранить выровненный влево вариант базового значения кодового слова:For the decoder to work, it is more convenient to store a left-aligned version of the base value of the code word:

lj_base[l]=base[l]2W-l,lj_base [l] = base [l] 2 Wl ,

где W - длина битового буфера или регистра, используемого для хранения самых последних загруженных битов из потока битов. Предполагается, что W≥L.where W is the length of the bit buffer or register used to store the most recently loaded bits from the bitstream. It is assumed that W≥L.

Наконец, помимо базовых значений кодовых слов декодер Моффата-Турпина хранит также индексы соответствующих символов в переупорядоченном массиве. Эти индексы хранятся в виде значений смещения [l] для каждого заполненного уровня в дереве. Пример полной структуры, поддерживаемой алгоритмом Моффата-Турпина для кода, представленного деревом на фиг.4, приведен ниже в таблице 2.Finally, in addition to the basic codeword values, the Moffat-Turpin decoder also stores the indices of the corresponding symbols in a reordered array. These indices are stored as offset values [l] for each filled level in the tree. An example of the complete structure supported by the Moffat-Turpin algorithm for the code represented by the tree in FIG. 4 is shown in Table 2 below.

Таблица 2
Структура декодера Моффата-Турпина для кода на фиг.4
table 2
The structure of the Moffat-Turpin decoder for the code in figure 4
ii Lj_base[i] (W=16)Lj_base [i] (W = 16) Уровень [i]Level [i] Смещение [i]Offset [i] 00 1000000000000000 1 000000000000000 1one 15fifteen 1one 0010000000000000 001 0000000000000 33 1212 22 0001000000000000 0001 000000000000 4four 11eleven

33 0000110000000000 000011 0000000000 66 1010 4four 0000001000000000 0000001 000000000 77 55 55 0000000010000000 000000001 0000000 99 22 66 0000000000000000 0000000000000000 1010 00

Пример псевдокода для реализации алгоритма декодирования Моффата-Турпина, использующего структуру из таблицы 2, представлен ниже в таблице 3.An example of pseudo-code for the implementation of the Moffat-Turpin decoding algorithm using the structure from table 2 is presented below in table 3.

Таблица 3
Алгоритм декодирования Моффата-Турпина
Table 3
Moffat-Turpin Decoding Algorithm
СтрокаLine КомандаTeam КомментарийComment 1one V = bitstream bufferV = bitstream buffer получить последние W битов из потока битовget the last W bits from the bitstream 22 For (i=0; i<K;i++){For (i = 0; i <K; i ++) { 33 if(lj_base[i]<=V)if (lj_base [i] <= V) искать уровеньsearch level 4four break;break; содержащий текущее кодовое словоcontaining the current codeword 55 }} 66 l=level[i];l = level [i]; получить длинуget the length 77 scroll_bitsream(l);scroll_bitsream (l); прокрутить поток битов на l битовscroll bit stream by l bits 88 Symbol=offset[i]+
((V-base[i])>>(W-l));
Symbol = offset [i] +
((V-base [i]) >>(Wl));
декодировать символdecode character

Из вышеприведенной таблицы 3 можно видеть, что весь процесс декодирования включает в себя до K (W-битовых) сравнений текущего буфера потока битов с выровненными влево значениями базовых кодовых слов, после чего следует простое прямое вычисление индекса декодированного символа. Можно также видеть, что массив lj_base[], используемый такой структурой, требует O(K·W) битов памяти, что могло бы быть проблемой, если бы кодовое слово было длинным, поскольку W должно использоваться таким образом, чтобы W≥1.From Table 3 above, it can be seen that the entire decoding process includes up to K (W-bit) comparisons of the current bitstream buffer with left-aligned values of the base codewords, followed by a simple direct calculation of the decoded symbol index. You can also see that the lj_base [] array used by such a structure requires O (K · W) bits of memory, which could be a problem if the codeword were long, since W should be used so that W≥1.

В примере из таблицы 3 декодер принимает W битов из потока битов и в качестве V и сравнивает V с базовыми кодовыми словами (lj_base[i]) для последующих уровней i дерева кодирования. Когда установлено, что базовое кодовое слово меньше или равно V, поиск уровня кодового слова прекращается. Затем декодер определяет длину, связанную с уровнем i, прокручивает поток битов на l бит и декодирует символ. В частности, декодированный символ определяется суммой значения смещения для уровня i и разностью между кодовым словом V из потока данных и базовым кодовым словом для уровня i, смещенного вправо на W-I битов.In the example from Table 3, the decoder receives W bits from the bitstream and as V and compares V with the base codewords (lj_base [i]) for subsequent levels i of the encoding tree. When it is determined that the base codeword is less than or equal to V, the search for the codeword level is terminated. The decoder then determines the length associated with level i, scrolls the bitstream by l bits, and decodes the symbol. In particular, the decoded symbol is determined by the sum of the offset value for level i and the difference between the code word V from the data stream and the base code word for level i shifted to the right by W-I bits.

В общем случае реализации декодирования Моффата-Турпина обратное отображение представляет собой: i-1: {0,…,n-1} → A. В этом случае последняя операция становится самой затратной по памяти, поскольку она требует область размером O(n). Однако во многих встречающихся на практике случаях, таких как ситуации, включающие в себя последовательное кодирование или выдачу преобразований или прогностических параметров, источники, подлежащие кодированию, уже являются упорядоченными. Следовательно, память, используемая массивом lj_base[] в структуре Моффата-Турпина, становится основным фактором в общих затратах на хранение.In the general case of implementing the Moffat-Turpin decoding, the inverse mapping is: i -1 : {0, ..., n-1} → A. In this case, the last operation becomes the most memory-intensive, since it requires an area of size O (n). However, in many cases encountered in practice, such as situations involving the sequential coding or output of transformations or prognostic parameters, the sources to be encoded are already ordered. Consequently, the memory used by the lj_base [] array in the Moffat-Turpin structure becomes a major factor in overall storage costs.

В соответствии с первым общим аспектом способы, раскрытые в настоящем описании, обеспечивают усовершенствования, которые позволяют еще большее сжатие структур данных, используемых в алгоритме Моффата-Турпина или в других алгоритмах, и поддерживают поэтапное кодирование кодов переменной длины. Теперь рассмотрим эти усовершенствования более подробно. Из таблицы 2 с очевидностью следует, что значения lj_base[l] имеют большое число начальных битов, если смотреть справа налево. Следовательно, частичные значения базовых кодовых слов представляют собой удаление фиксированного числа начальных битов из базовых кодовых слов. В большинстве случаев удаляемые начальные биты являются нулями. Такое число нулей монотонно возрастает по мере расширения дерева кодирования на более глубокие уровни. Таким образом, если биты последовательно декодируются, начинаясь с самого первого уровня дерева кодирования и перемещения вниз, то можно пропустить несколько начальных нулевых битов без какого-либо влияния на правильность декодирования. Пропуск по меньшей мере нескольких начальных нулей в способах, описанных в настоящей заявке, позволяет получить сильно сжатые структуры данных и поэтапное декодирование кодов переменной длины.In accordance with a first general aspect, the methods disclosed herein provide improvements that allow even more compression of data structures used in the Moffat-Turpin algorithm or other algorithms and support phased coding of variable length codes. Now consider these improvements in more detail. From table 2 it clearly follows that the values of lj_base [l] have a large number of initial bits, when viewed from right to left. Therefore, partial values of the base codewords are the removal of a fixed number of leading bits from the base codewords. In most cases, the deleted start bits are zeros. This number of zeros increases monotonically as the coding tree expands to deeper levels. Thus, if the bits are sequentially decoded, starting from the very first level of the encoding tree and moving down, you can skip several initial zero bits without any effect on the decoding. Skipping at least a few leading zeros in the methods described in this application allows us to obtain highly compressed data structures and stage-by-stage decoding of codes of variable length.

Возможно, однако, что после удаления начальных битов некоторые законные коды на нижних уровнях дерева кодирования могут зайти в область удаленных начальных битов. Соответственно, чтобы не допустить потери таких кодов, предусмотрена таблица показателей пропуска. Показатель пропуска указывает декодеру пропустить несколько битов в потоке битов, который будет декодирован перед переходом к выбранному уровню дерева кодирования. В частности, показатель пропуска может указывать декодеру пропускать фиксированное число битов, например, 8 битов, в потоке битов кодовых слов перед переходом к выбранному уровню дерева кодирования. Таким образом, частичное значение базового кодового слова на выбранном уровне дерева основано на частичном смещении базового кодового слова на фиксированное число битов. Без этого сдвига базовое кодовое слово на выбранном уровне дерева распространится, по меньшей мере частично, на удаленное число начальных битов.It is possible, however, that after deleting the initial bits, some legitimate codes at the lower levels of the encoding tree may enter the region of the deleted initial bits. Accordingly, in order to prevent the loss of such codes, a table of pass indicators is provided. The skip rate tells the decoder to skip a few bits in the bitstream, which will be decoded before moving to the selected level of the encoding tree. In particular, the skip rate may instruct the decoder to skip a fixed number of bits, for example, 8 bits, in the bitstream of the codewords before moving to the selected level of the encoding tree. Thus, the partial value of the base codeword at the selected tree level is based on the partial offset of the base codeword by a fixed number of bits. Without this shift, the base codeword at the selected tree level will extend, at least in part, to the remote number of start bits.

Нижеприведенная таблица 4 иллюстрирует пример реализации процесса кодирования, в котором удалены начальные нули, в соответствии с одним аспектом настоящего изобретения, для дальнейшего сжатия структуры данных, используемой для представления и обработки кодовых слов. В примере таблицы 4 начальные нули удаляются с шагом, равным 8, что удобно для управления буфером потока битов в обычных 8-битовых/байтовых компьютерах. Для управления удалением начальных нулей предусмотрена, как указано выше, дополнительная таблица показателей (skip_8[i]). Таким образом, таблица 4 в целом соответствует таблице 2, но в ней удалены начальные нули из каждого кодового слова и добавлен столбец с показателем пропуска.Table 4 below illustrates an example implementation of an encoding process in which leading zeros are removed, in accordance with one aspect of the present invention, to further compress the data structure used to represent and process code words. In the example of Table 4, leading zeros are deleted in increments of 8, which is convenient for controlling the bitstream buffer in regular 8-bit / byte computers. To control the removal of leading zeros, an additional indicator table (skip_8 [i]) is provided, as indicated above. Thus, table 4 as a whole corresponds to table 2, but the leading zeros from each codeword are removed and a column with a skip indicator is added.

Таблица 4
Модифицированная структура декодирования Моффата-Турпина
Table 4
Modified Moffat-Turpin Decoding Structure
ii r_lj_base[i] (W=8)r_lj_base [i] (W = 8) skip_8 [i]skip_8 [i] r_level [i]r_level [i] offset [i]offset [i] 00 10000000 1 000 000 000 00 1one 15fifteen 1one 00100000 001 00000 00 33 1212 22 00010000 0001 0000 00 4four 11eleven 33 00001100 000011 00 00 66 1010 4four 00000010 0000001 0 1one 77 55 55 10000000 1 000 000 000 00 9-8=19-8 = 1 22 66 00000000 00 000 000 00 10-8=210-8 = 2 00

В примере таблицы 4 значение r_lj_base(i) представляет значение базового кодового слова в каждом положении индекса, значение r_level[i] указывает уровень внутри дерева кодирования для положения индекса и длину кодовых слов на этом уровне, значение offset[i] указывает число начальных нулей справа налево для значения базового кодового слова, а значение skip_8[i] указывает, должен ли декодер пропустить 8 битов для получения следующего значения базового кодового слова, причем 1 обозначает пропуск, а 0 обозначает отсутствие пропуска. Эта операция пропуска периодически обновляет буфер битов через выбранные интервалы, что позволяет декодеру идентифицировать кодовые слова, которые в противном случае были бы потеряны после удаления начальных нулей. Например, если удаляются самые правые восемь начальных нолей выровненного влево кодового слова, кодовое слово, которое распространяется на самые правые восемь битов, было бы частично или полностью потеряно. Соответственно, пропуск самых левых восьми битов в ответ на показатель пропуска переместит кодовое слово в область не удаленных битов, тем самым сохраняя кодовое слово для декодирования.In the example of Table 4, the value r_lj_base (i) represents the value of the base codeword at each index position, the value r_level [i] indicates the level inside the coding tree for the index position and the length of codewords at this level, the offset [i] value indicates the number of leading zeros to the right to the left for the value of the base codeword, and the value skip_8 [i] indicates whether the decoder should skip 8 bits to obtain the next value of the base codeword, with 1 indicating a gap and 0 indicating no gap. This skip operation periodically updates the bit buffer at selected intervals, which allows the decoder to identify codewords that would otherwise be lost after the removal of leading zeros. For example, if the rightmost eight leading zeros of a left-aligned codeword are deleted, the codeword that extends to the rightmost eight bits would be partially or completely lost. Accordingly, skipping the left-most eight bits in response to the skip rate will move the codeword to the region of undeleted bits, thereby preserving the codeword for decoding.

Следовательно, индикатор пропуска сигнализирует, когда декодер должен сделать пропуск вперед на заданный шаг пропуска для следующего уровня кода, то есть на 8 в данном примере таблицы 4. Например, в таблице 2 значения базовых кодовых слов положениях индекса 5 и 6 (уровни дерева 9 и 10) равны соответственно 0000000010000000 и 0000000000000000, соответственно. После удаления самых правых восьми начальных нулей (выровненных влево) из этих значений базовых кодовых слов, необходимо, чтобы декодер перескочил вперед на восемь битов, так чтобы фактическое значение базового кодового слова (0000000010000000) не было потеряно при удалении восьми начальных нулей. Вместо этого фактическое значение базового кодового слова (0000000010000000) преобразуется в другое значение базового кодового слова (10000000) путем пропуска первых восьми битов (00000000) и последующего удаления самых правых восьми начальных нулей.Therefore, the skip indicator signals when the decoder should skip ahead by the specified skip step for the next code level, that is, 8 in this example of table 4. For example, in table 2, the values of the basic code words are positions 5 and 6 (tree levels 9 and 10) are equal, respectively, 0000000010000000 and 0000000000000000, respectively. After removing the rightmost eight leading zeros (left justified) from these values of the base codewords, it is necessary that the decoder jumps forward eight bits so that the actual value of the base codeword (0000000010000000) is not lost when removing the eight leading zeros. Instead, the actual value of the base codeword (0000000010000000) is converted to another value of the base codeword (10000000) by skipping the first eight bits (00000000) and then deleting the rightmost eight leading zeros.

Из-за удаления начальных нулей ширина модифицированного массива lj_base[i] получается намного меньше. Например, в коде в таблице 4 ширина W модифицированного массива lj_base[i] W=8, вместо W=16 в случае таблицы 2. Пример реализации алгоритма, который использует такую дополнительную таблицу пропусков для периодического обновления буфера битов, приведен ниже в таблице 5. Алгоритм, построенный так, как показано в таблице 5, может быть выполнен с возможностью поддержки очень длинных кодовых слов и очень компактных таблиц значений (lj_base) базовых кодовых слов.Due to the removal of leading zeros, the width of the modified lj_base [i] array is much smaller. For example, in the code in table 4, the width W of the modified array lj_base [i] W = 8, instead of W = 16 in the case of table 2. An example implementation of an algorithm that uses such an additional skip table to periodically update the bit buffer is shown in Table 5 below. The algorithm, constructed as shown in table 5, can be performed with the ability to support very long codewords and very compact value tables (lj_base) of the base codewords.

Таблица 5
Модифицированный алгоритм декодера Моффата-Турпина
Table 5
Modified Moffat-Turpin Decoder Algorithm
СтрокаLine КомандаTeam КомментарийComment 1one V=bitstream_bufferV = bitstream_buffer получить последние W битов из потока битовget the last W bits from the bitstream 22 for(i=0; i<K; i++){for (i = 0; i <K; i ++) { 33 if(lj_base[i]<=V)if (lj_base [i] <= V) поиск уровняlevel search 4four break;break; содержащего текущее кодовое словcontaining the current codeword 55 if(skip_B[i])if (skip_B [i]) Следует ли пропустить следующие B битовShould I skip the next B bits 66 V=scroll_bitsream(B);V = scroll_bitsream (B); прокрутить поток битов на B битовscroll bitstream by B bits 77 }} 88 l=level[i]l = level [i] получить остаточную длинуget residual length 99 scroll_bitstream(l)scroll_bitstream (l) прокрутить поток битов на l битовscroll bit stream by l bits 1010 Symbol=offset[i]+((V-base[i])>>
(W-l));
Symbol = offset [i] + ((V-base [i]) >>
(Wl));
декодировать символdecode character

Как показано в таблице 5, декодер получает последние W битов из потока битов, представленного значением V = bitstream_buffer. Затем декодер ищет уровни i дерева кодирования для значения lj_base[i] базового кодового слова, которое меньше или равно кодовому слову V из буфера потока битов. Если текущий уровень i дерева соответствует уровню пропуска (skip_B[i]), например, как показано в таблице 5, то декодер прокручивает поток битов вправо на B битов, например, на 8 битов в некотором варианте выполнения, так чтобы кодовое слово на следующем уровне, на который ищет декодер, можно было сохранить, а не потерять при удалении B самых правых начальных битов.As shown in table 5, the decoder receives the last W bits from the bit stream represented by the value V = bitstream_buffer. The decoder then searches for coding tree levels i for the value lj_base [i] of the base codeword that is less than or equal to codeword V from the bitstream buffer. If the current level i of the tree corresponds to the skip level (skip_B [i]), for example, as shown in table 5, then the decoder scrolls the bit stream to the right by B bits, for example, by 8 bits in some embodiment, so that the codeword is at the next level , which the decoder is looking for, could be saved rather than lost when deleting B of the rightmost start bits.

После определения остаточной длины l = level[i] для кодовых слов на текущем уровне дерева, например, как указано в таблице 5, декодер прокручивает поток битов на длину l. Затем декодер непосредственно вычисляет индекс символа на основе суммы смещения для текущего уровня i и разницы между содержимым V буфера потока данных и базовым кодовым словом для текущего уровня i, смещенного вправо на W-I битов.After determining the residual length l = level [i] for codewords at the current tree level, for example, as shown in table 5, the decoder scrolls the bitstream by length l. The decoder then directly calculates the symbol index based on the offset amount for the current level i and the difference between the contents V of the data stream buffer and the base codeword for the current level i shifted to the right by W-I bits.

Декодер декодирует кодовое слово из потока битов кодового слова при помощи хранящейся структуры данных, задающей частичные значения для базовых кодовых слов, показателя пропуска, значений, представленных базовым кодовым словом, и длин (а именно, числом битов) частичных значений в базовых кодовых словах. В целом процессор, связанный с декодером, таким как модуль 52 статистического декодирования, ищет уровни дерева кодирования выбранного одного из частичных значений базовых кодовых слов, которое меньше или равно кодовому слову из потока битов кодового слова. Процессор пропускает несколько битов в потоке битов кодового слова перед переходом к выбранному уровню дерева кодирования в ответ на показатель пропуска и вычисляет одно из множества значений, соответствующих кодовому слову, на основе разности между выбранным из частичных значений базовых кодовых слов, которое меньше или равно кодовому слову, и кодовым словом и индексом выбранного значения из частичных значений базовых кодовых слов, которое меньше или равно кодовому слову. Процессор генерирует результат декодирования для сохранения в памяти, передачи другому устройству или обрабатывающему модулю либо представления пользователю. Например, декодированные результаты можно использовать для управления устройством 28 отображения, чтобы оно представляло видео или неподвижное изображение, и/или устройством вывода звука, чтобы оно воспроизводило звук или речь.The decoder decodes the codeword from the bitstream of the codeword using a stored data structure defining partial values for the base codewords, skip rate, values represented by the base codeword, and lengths (namely, the number of bits) of the partial values in the base codewords. In general, a processor associated with a decoder, such as statistical decoding unit 52, searches for encoding tree levels of a selected one of the partial values of the base codewords that is less than or equal to the codeword from the codeword bitstream. The processor skips several bits in the bitstream of the codeword before moving to the selected level of the coding tree in response to the skip rate and calculates one of a plurality of values corresponding to the codeword based on the difference between the selected from the partial values of the base codewords that is less than or equal to the codeword , and a codeword and an index of a selected value from partial values of the base codewords that are less than or equal to the codeword. The processor generates a decoding result for storage, transmission to another device or processing module, or presentation to the user. For example, the decoded results can be used to control the display device 28 to represent video or a still image and / or the audio output device to produce sound or speech.

В примере в таблице 5 декодер выполняет пошаговое обновление буфера потока битов посредством операции пропуска для сохранения кодовых слов, которые в противном случае были бы потеряны после удаления начальных нулей. Кроме того, значения базовых кодовых слов, которые декодер сравнивает на каждом уровне кода, могут быть значительно короче. Ниже рассматривается потенциальный объем сокращения длины значения базовых кодовых слов. Для анализа динамического диапазона таких величин в модифицированном алгоритме, описанном в настоящей заявке, разность между двумя соседними уровнями определяется из следующей формулы:In the example in Table 5, the decoder incrementally updates the bitstream buffer through a skip operation to save codewords that would otherwise be lost after the removal of leading zeros. In addition, the values of the basic codewords that the decoder compares at each code level can be significantly shorter. The following describes the potential scope for reducing the length of the meaning of the base codewords. To analyze the dynamic range of such quantities in the modified algorithm described in this application, the difference between two adjacent levels is determined from the following formula:

Figure 00000002
Figure 00000002

Если i - индекс следующего непустого уровня, то:If i is the index of the next non-empty level, then:

lj_base[l]- lj_base[l+i]=2W-l+ml+i2W-(l+i).lj_base [l] - lj_base [l + i] = 2 Wl + m l + i 2 W- (l + i) .

Здесь основная величина, представляющая интерес: ml+i2-i, которая влияет на эту разность. В простейшем случае, когда i=1, ясно, что эта разность просто зависит от числа внешних узлов, и, значит, W можно выбрать таким образом, что:Here, the main quantity of interest is: m l + i 2 -i , which affects this difference. In the simplest case, when i = 1, it is clear that this difference simply depends on the number of external nodes, and, therefore, W can be chosen in such a way that:

W ≥ max log2(ml),W ≥ max log 2 (m l ),

и эта величина в случаях, представляющих интерес на практике, значительно меньше L. Эта разность должна быть особенно большой для крайне несбалансированных распределений.and this value in cases of interest in practice is much less than L. This difference should be especially large for extremely unbalanced distributions.

Например, если входные символы представляют собой блоки из m битов с Бернуллиевыми вероятностями pm(1-p)m-k, то наиболее заполненный уровень должен содержать приблизительно

Figure 00000003
кодовых слов, а это значит, что требуется использовать приблизительно H(p)m битов, чтобы различить кодовые слова, где H(p) - функция энтропии, например, описанная в работе T. Cover and J. Thomas, Elements of Information Theory, Wiley, 1991.For example, if the input symbols are blocks of m bits with Bernoulli probabilities p m (1-p) mk , then the most populated level should contain approximately
Figure 00000003
code words, which means that you need to use approximately H (p) m bits to distinguish code words, where H (p) is the entropy function, for example, described in T. Cover and J. Thomas, Elements of Information Theory, Wiley, 1991.

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

Figure 00000004
битов, причем известно, что для асимметричных распределенийOn the other hand, the longest codeword in this case will have approximately
Figure 00000004
bits, and it is known that for asymmetric distributions

Figure 00000005
,
Figure 00000005
,

где

Figure 00000006
- специальный случай энтропии Реньи, например, описанный в работе W. Szpankowski, Average Case Analysis of Algorithms on Sequences. (New York, John Wiley & Sons, 2001). Эта разность может быть произвольно большой при p → 0 или p → 1.Where
Figure 00000006
- a special case of Renyi entropy, for example, described in W. Szpankowski, Average Case Analysis of Algorithms on Sequences. (New York, John Wiley & Sons, 2001). This difference can be arbitrarily large as p → 0 or p → 1.

Из вышеприведенного рассмотрения следует, что предложенный способ должен быть эффективным при обработке больших, асимметричных структур кодов. С такими структурами традиционно трудно работать при помощи традиционных/существующих способов, и во многих случаях инженеры прибегают к упрощениям, которые влияют на эффективность сжатия кодов, чтобы сделать их более практичными.From the above consideration it follows that the proposed method should be effective in processing large, asymmetric code structures. It is traditionally difficult to work with such structures using traditional / existing methods, and in many cases, engineers resort to simplifications that affect the compression efficiency of codes to make them more practical.

Например, очень популярные коды Голомба, описанные, например, в работах S. Golomb, "Run-length coding," IEEE Trans. Inform. Theory, vol. IT-12, pp. 399-401, July 1966, и R. Gallager and D. van Voorhis, "Optimal source codes for geometrically distributed integer alphabets," IEEE Trans. Inform. Theory, vol. IT-21, pp. 228-230, Mar. 1975, представляют собой коды переменной длины с особенно простой структурой, но они являются оптимальными только для одного класса геометрических распределений и только для счетного числа значений параметров таких распределений. Инженеры стремятся использовать их даже для существенно отличающихся распределений, мотивируя это главным образом соображениями сложности. Такие решения могут стать одновременно не вполне оптимальными и трудными для расширения или изменения из-за присущих для таких кодов ограничений эффективности.For example, the very popular Golomb codes, described, for example, in S. Golomb, "Run-length coding," IEEE Trans. Inform. Theory, vol. IT-12, pp. 399-401, July 1966, and R. Gallager and D. van Voorhis, "Optimal source codes for geometrically distributed integer alphabets," IEEE Trans. Inform. Theory, vol. IT-21, pp. 228-230, Mar. 1975, are variable-length codes with a particularly simple structure, but they are optimal only for one class of geometric distributions and only for a countable number of parameter values of such distributions. Engineers strive to use them even for significantly different distributions, motivating this mainly with considerations of complexity. Such solutions may become at the same time not entirely optimal and difficult to expand or change due to the performance limitations inherent in such codes.

Другое решение, связанное с конструкцией кодов Линча-Дэвиссона, описанной в работах T. J. Lynch, Sequence time coding for data compression, Proc. IEEE (Lett.), 54 (1966) 1490-1491, и L. D. Davisson, Comments on Sequence time coding for data compression, Proc. IEEE (Lett.), 54 (1966) 2010-2011, заключается в том, чтобы расщепить коды на две части, причем только первая подвергается кодированию переменной длины, а другая передается в качестве расширения с использованием фиксированного числа битов. К сожалению, при таком расщеплении теряется эффективность, причем потеря иногда достигает 1,5-2 бита на символ.Another solution related to the construction of Lynch-Davisson codes described in T. J. Lynch, Sequence time coding for data compression, Proc. IEEE (Lett.), 54 (1966) 1490-1491, and L. D. Davisson, Comments on Sequence time coding for data compression, Proc. IEEE (Lett.), 54 (1966) 2010-2011, is to split the codes into two parts, with only the first being subjected to variable length encoding, and the other being transmitted as an extension using a fixed number of bits. Unfortunately, with such splitting, efficiency is lost, and the loss sometimes reaches 1.5-2 bits per character.

Был разработан более изощренный вариант способа расщепления кодовой книги, получивший название алфавитного группирования, описанного, например, в работах Boris Ryabko, Jaakko Astola, Karen Egiazarian, Fast Codes for Large Alphabets, Communications in Information and Systems, v.3, n. 2, pp.139-152, и Boris Ryabko, Jorma Rissanen, Fast Adaptive Arithmetic Code for Large Alphabet Sources with Asymmetrical Distributions, IEEE Communications Letters, v. 7, no. 1, 2003, pp.33-35. Однако этот подход также реализуется за счет некоторой потери в эффективности сжатия.A more sophisticated version of the codebook splitting method was developed, called alphabetical grouping, described, for example, in the works of Boris Ryabko, Jaakko Astola, Karen Egiazarian, Fast Codes for Large Alphabets, Communications in Information and Systems, v.3, n. 2, pp. 139-152, and Boris Ryabko, Jorma Rissanen, Fast Adaptive Arithmetic Code for Large Alphabet Sources with Asymmetrical Distributions, IEEE Communications Letters, v. 7, no. 1, 2003, pp. 33-35. However, this approach is also implemented due to some loss in compression efficiency.

В отличие от вышеуказанных способов способы, описанные в настоящей заявке, могут быть выполнены с возможностью полного сохранения структуры и оптимальности кода и потому могут быть полезны для широкого круга практических применений в области сжатия и кодирования данных, например, при кодировании и декодировании цифровых видеоданных, данных изображения, звуковых и голосовых данных.In contrast to the above methods, the methods described in this application can be performed with the possibility of fully preserving the structure and optimality of the code and therefore can be useful for a wide range of practical applications in the field of data compression and encoding, for example, when encoding and decoding digital video data, data images, sound and voice data.

Двоичное адаптивное блочное кодированиеBinary Adaptive Block Coding

Далее подробно описывается пример обладающего низкой степенью сложности способа адаптивного кодирования переменной длины для двоичных последовательностей, созданных источниками без памяти, в соответствии со вторым общим аспектом настоящего изобретения. Этот раскрытый способ может реализовывать универсальные блочные коды, построенные для набора контекстов, идентифицируемых числом ненулевых битов в предыдущих битах в последовательности. Этот второй общий аспект изобретения может быть осуществлен или предоставлен независимо или в сочетании с первым общим аспектом, описанным выше в отношении генерации очень компактных структур данных. Структуры данных могут относиться к широкому кругу структур данных, таких как таблицы, связанные списки, двоичные деревья, базисные деревья, бесструктурные файлы или тому подобное, и могут храниться в любом из множества различных запоминающих устройств, таких как многие виды оперативного запоминающего устройства (RAM), постоянного запоминающего устройства (ROM), или и того и другого. Структура данных может храниться в такой памяти в пределах кодера или декодера. В соответствии с этим вторым общим аспектом способ для обладающего пониженной степенью сложности адаптивного кодирования и декодирования может опираться, по меньшей мере частично, на формулу для асимптотической избыточности таких кодов, которая уточняет оценку, описанную в работе R. E. Krichevsky and V. K. Trofimov, The Performance of Universal Encoding, IEEE Trans. Information Theory, 27 (1981) 199-207.The following describes in detail an example of a low-complexity adaptive variable-length coding method for binary sequences generated by memoryless sources in accordance with a second general aspect of the present invention. This disclosed method may implement universal block codes constructed for a set of contexts identified by the number of non-zero bits in previous bits in a sequence. This second general aspect of the invention can be implemented or provided independently or in combination with the first general aspect described above with respect to the generation of very compact data structures. Data structures can refer to a wide range of data structures, such as tables, linked lists, binary trees, basis trees, structureless files, or the like, and can be stored in any of a variety of different storage devices, such as many kinds of random access memory (RAM). , read only memory (ROM), or both. The data structure may be stored in such memory within the encoder or decoder. In accordance with this second general aspect, a method for adaptive encoding and decoding having a reduced degree of complexity can rely, at least in part, on a formula for the asymptotic redundancy of such codes, which refines the estimate described by RE Krichevsky and VK Trofimov, The Performance of Universal Encoding, IEEE Trans. Information Theory, 27 (1981) 199-207.

Алгоритмы сжатия данных преобразуют входные последовательности битов, имеющие некоторое неизвестное распределение, в декодируемый поток битов. Сжатие данных используется, например, при разработке кодеров данных изображений и видеоданных, в масштабируемом (на основе секционирования) кодировании спектра в аудиокодерах и в других областях применения. В большинстве таких случаев биты, подлежащие кодированию, берутся из значений, созданных различными инструментами обработки сигналов, такими как преобразования, фильтры с предсказанием и т.п., а это значит, что они уже декоррелированы, и что предположение об отсутствии памяти у такого источника является оправданным.Data compression algorithms convert input bit sequences having some unknown distribution into a decoded bit stream. Data compression is used, for example, in the development of encoders of image data and video data, in scalable (based on sectioning) coding of the spectrum in audio encoders and in other applications. In most of these cases, the bits to be encoded are taken from the values created by various signal processing tools, such as transforms, prediction filters, etc., which means that they are already decorrelated and that there is no memory assumption for such a source is warranted.

Наиболее часто используемые варианты реализации таких двоичных адаптивных алгоритмов обычно основаны на арифметических кодах с использованием некоторых приближений и сокращений для уменьшения их сложности. Два известных примера таких алгоритмов - это алгоритм Q-кодера, описанный в работе W. B. Pennebaker, J. L. Mitchell, G. G. Langdon, Jr., R. B. Arps, An overview of the basic principles of the Q-Coder adaptive binary arithmetic coder, IBM J. Res. Dev., 32 (6) (1988) 717, который используется в стандарте кодирования изображений JBIG, или алгоритм CABAC, описанный в D. Marpe, H. Schwartz, and T. Wiegand, Context-Based Adaptive Binary Arithmetic Coding in the H.264/ AVC video compression standard, IEEE Trans, on CSVT, 13(7):620 636, July 2003, который используется в стандартах для сжатия видеоданных ITU-T H.264/MPEG AVC.The most commonly used options for implementing such binary adaptive algorithms are usually based on arithmetic codes using some approximations and abbreviations to reduce their complexity. Two well-known examples of such algorithms are the Q-encoder algorithm described by WB Pennebaker, JL Mitchell, GG Langdon, Jr., RB Arps, An overview of the basic principles of the Q-Coder adaptive binary arithmetic coder, IBM J. Res . Dev., 32 (6) (1988) 717, which is used in the JBIG image encoding standard, or the CABAC algorithm described in D. Marpe, H. Schwartz, and T. Wiegand, Context-Based Adaptive Binary Arithmetic Coding in the H. 264 / AVC video compression standard, IEEE Trans, on CSVT, 13 (7): 620 636, July 2003, which is used in the ITU-T H.264 / MPEG AVC video compression standards.

В соответствии с этим вторым общим аспектом изобретения в альтернативном варианте выполнения используется массив кодов Хаффмана, предназначенный для нескольких оцененных плотностей и индексированный числом ненулевых битов в предыдущих блоках (контекстах) в последовательности. С точки зрения как эффективности, так и реализации, такой способ может обеспечивать требуемые характеристики сжатия при использовании даже блоков битов умеренных размеров, например, n=8…16, и при использовании соответствующих объемов памяти, например, от 1,5 килобайтов до 5 килобайтов.In accordance with this second general aspect of the invention, an alternative embodiment uses an array of Huffman codes for multiple estimated densities and indexed by the number of non-zero bits in previous blocks (contexts) in the sequence. From the point of view of both efficiency and implementation, such a method can provide the required compression characteristics when using even blocks of bits of moderate sizes, for example, n = 8 ... 16, and when using appropriate memory volumes, for example, from 1.5 kilobytes to 5 kilobytes .

Этот способ можно рассматривать в контексте источника без памяти, создающего символы из двоичного алфавита {0,1} с вероятностями соответственно p и q=1-p. Если w - слово с длиной n, созданное этим источником, то его вероятность:This method can be considered in the context of a memoryless source that creates characters from the binary alphabet {0,1} with probabilities p and q = 1-p, respectively. If w is a word with a length n created by this source, then its probability:

Pr(w)=pkqn-k, (1)Pr (w) = p k q nk , (1)

где k обозначает число единиц в этом слове. Значение k может также называться весом w.where k denotes the number of units in this word. The value of k may also be called the weight of w.

Блочный код ϕ представляет собой инъективное отображение между словами w длины |w|=n и двоичными последовательностями (или кодовыми словами) ϕ(w):The block code ϕ is an injective mapping between words w of length | w | = n and binary sequences (or code words) ϕ (w):

ϕ:{0,1}n→{0,1}*,ϕ: {0,1} n → {0,1} * ,

где кодовые слова ϕ(w) представляют собой уникально декодируемый набор, как описано, например, в работе T. M. Cover and J. M. Thomas, Elements of Information Theory, (John Wiley & Sons, New York, 1991).where the code words ϕ (w) are a uniquely decoded set, as described, for example, in T. M. Cover and J. M. Thomas, Elements of Information Theory, (John Wiley & Sons, New York, 1991).

Как правило, когда источник (то есть его вероятность p) известен, такой код предназначен для минимизации его средней длины или, в относительных терминах, его средней избыточности:As a rule, when the source (i.e., its probability p) is known, such a code is intended to minimize its average length or, in relative terms, its average redundancy:

Figure 00000007
.
Figure 00000007
.

В вышеприведенной формуле H(p)=-plogp - qlogq обозначает энтропию источника.In the above formula, H (p) = - plogp - qlogq denotes the source entropy.

Классические примеры кодов и алгоритмов, предлагаемых для решения этой задачи, включают в себя коды Хаффмана, Шеннона, Шеннона-Фано и Гилберта-Мура и их варианты. Характеристики таких кодов хорошо изучены, многие полезные для практического применения способы реализации таких кодов известны из литературы.Classical examples of codes and algorithms proposed to solve this problem include Huffman, Shannon, Shannon-Fano, and Gilbert-Moore codes and their variants. The characteristics of such codes are well studied; many methods of implementing such codes that are useful for practical application are known from the literature.

Когда источник неизвестен, наилучший доступный вариант заключается в конструировании универсального кода ϕ*, который минимизирует избыточность для худшего случая для некоторого класса источников, как, например, описано в работах B. M. Fitingof, Optimal Coding in the Case of Unknown and Changing Message Statistics, Probl. Inform. Transm., 2, (2) (1965) 3 {11 (in Russian) 1-7 (English Transl.), L. D. Davisson, Universal Noiseless Coding, IEEE Trans. Inform. Theory, 19 (6) (1973), 783-795, и R. E. Krichevsky and V. K. Trofimov, The Performance of Universal Encoding, IEEE Trans. Information Theory, 27 (1981) 199-207, и как указано ниже:When the source is unknown, the best available option is to construct a universal ϕ * code that minimizes worst case redundancy for a certain class of sources, as described, for example, in BM Fitingof, Optimal Coding in the Case of Unknown and Changing Message Statistics, Probl. Inform. Transm., 2, (2) (1965) 3 {11 (in Russian) 1-7 (English Transl.), LD Davisson, Universal Noiseless Coding, IEEE Trans. Inform. Theory, 19 (6) (1973), 783-795, and RE Krichevsky and VK Trofimov, The Performance of Universal Encoding, IEEE Trans. Information Theory, 27 (1981) 199-207, and as follows:

Figure 00000008
.
Figure 00000008
.

Пример такого кода может быть построен c использованием следующих оценок вероятностей слов:An example of such a code can be constructed using the following word probability estimates:

Figure 00000009
,
Figure 00000009
,

где Γ(x) - Γ-функция, k - вес слова w и n - его длина. Вышеприведенная формула описана в работе R. E. Krichevsky and V. K. Trofimov, The Performance of Universal Encoding, IEEE Trans. Information Theory, 27 (1981) 199-207, и обеспечивает равномерную (по ρ) сходимость к истинным вероятностям по мере приближения n к бесконечности (n→∞).where Γ (x) is a Γ-function, k is the weight of the word w, and n is its length. The above formula is described by R. E. Krichevsky and V. K. Trofimov, The Performance of Universal Encoding, IEEE Trans. Information Theory, 27 (1981) 199-207, and provides uniform (in ρ) convergence to true probabilities as n approaches infinity (n → ∞).

В ситуации, когда точное значение параметра источника неизвестно, можно обратиться к последовательности символов u, созданной тем же источником в прошлом. Такая последовательность может называться выборкой, и ее длина может предполагаться равной |u|=t битов. Задача здесь состоит в том, чтобы сконструировать набор кодов ϕ*u, индексированных различными значениями этой выборки так, чтобы их результирующая средняя избыточность для худшего случая была минимальной, как показано ниже:In a situation where the exact value of the source parameter is unknown, you can refer to the sequence of characters u created by the same source in the past. Such a sequence may be called a sample, and its length may be assumed to be equal to | u | = t bits. The challenge here is to construct a set of ϕ * u codes indexed by different values of this sample so that their resulting average worst case redundancy is minimal, as shown below:

Figure 00000010
.
Figure 00000010
.

Такие коды называют основанными на выборке, или адаптивными, универсальными блочными кодами. В настоящей заявке описаны частные варианты осуществления адаптивных блочных кодов с использованием следующих оценок вероятности слов w данной выборки u:Such codes are called sample-based, or adaptive, universal block codes. This application describes private embodiments of adaptive block codes using the following probability estimates for words w of a given sample u:

Figure 00000011
(1)
Figure 00000011
(one)

где s - вес выборки u, а t - ее длина.where s is the sample weight u and t is its length.

Понятие и анализ основанных на выборке кодов, использующих функцию оценок (1), приведенную выше, описано в работе R. E. Krichevsky in R. E. Krichevsky, Universal Data Compression and Retrieval. (Kluwer, Norwell, MA, 1993). Асимптотически средняя степень избыточности адаптивного блочного кода равна:The concept and analysis of sample-based codes using the rating function (1) above is described in R. E. Krichevsky in R. E. Krichevsky, Universal Data Compression and Retrieval. (Kluwer, Norwell, MA, 1993). Asymptotically, the average degree of redundancy of the adaptive block code is:

Figure 00000012
, (2)
Figure 00000012
, (2)

где n - размер блока, а t - размер выборок.where n is the block size and t is the size of the samples.

Из приведенной выше формулы (2) очевидно, что при использовании выборок длиной t=O(n) можно понизить степень избыточности таких кодов до O(1/n), что по порядку величины соответствует степени избыточности блочных кодов известных источников. Однако для понимания в полной мере потенциала таких кодов необходимо знать более точное выражение для их избыточности, в том числе члены, на которые влияет выбор фактического алгоритма построения кода, такого как код Хаффмана, Шеннона или тому подобный код.From the above formula (2), it is obvious that when using samples of length t = O (n), the degree of redundancy of such codes can be reduced to O (1 / n), which in order of magnitude corresponds to the degree of redundancy of block codes of known sources. However, to fully understand the potential of such codes, it is necessary to know a more accurate expression for their redundancy, including terms that are affected by the choice of the actual algorithm for constructing the code, such as the Huffman, Shannon code or the like.

В соответствии с этим вторым общим аспектом настоящее изобретение предлагает следующее уточнение теоремы 2 Кричевского. В частности, приведенная ниже теорема 1 уточняет теорему о средней степени избыточности для адаптивного блочного кода ϕ*u следующим образом:In accordance with this second general aspect, the present invention provides the following refinement of Krichevsky’s Theorem 2. In particular, Theorem 1 below refines the theorem on the average degree of redundancy for the adaptive block code ϕ * u as follows:

Теорема 1: Средняя степень избыточности адаптивного блочного кода ϕ*u имеет следующее асимптотическое поведение (n, t → ∞):Theorem 1: The average degree of redundancy of the adaptive block code ϕ * u has the following asymptotic behavior (n, t → ∞):

Figure 00000013
Figure 00000013

(3А)(3A)

где n - размер блока, и t - размер выборки, p, q=1-p - вероятности символов входного источника, и где:where n is the block size, and t is the sample size, p, q = 1-p are the probabilities of the symbols of the input source, and where:

Figure 00000014
Figure 00000014

средняя избыточность кода ϕ*u относительно оцененного распределения в формуле (1).the average redundancy of the code ϕ * u relative to the estimated distribution in formula (1).

Точное поведение величины

Figure 00000015
зависит от алгоритма. Однако для большого класса способов обеспечения минимальной избыточности, который включает в себя традиционные коды Хаффмана и Шеннона, величина этого члена ограничена следующим условием:Exact value behavior
Figure 00000015
Depends on the algorithm. However, for a large class of methods for ensuring minimal redundancy, which includes the traditional Huffman and Shannon codes, the value of this term is limited by the following condition:

Figure 00000016
,
Figure 00000016
,

и характеризуется колебательным поведением, которое может сходиться или не сходиться к некоторой постоянной величине в зависимости от значения параметра p. Кроме того, для малых значений t и n на избыточность таких кодов может влиять следующий член:and is characterized by oscillatory behavior, which may or may not converge to a certain constant value depending on the value of the parameter p. In addition, for small values of t and n, the following member can influence the redundancy of such codes:

Figure 00000017
Figure 00000017

который является функцией параметра источника p. На фиг.5 приведен график, иллюстрирующий степень избыточности адаптивного блочного кода с асимптотическим поведением. Для коротких блоков/выборок характеристики таких кодов становятся чувствительны к асимметрии источника. Доказательство этой теоремы можно найти, например, в работе Asymptotic average redundancy of adaptive block codes, Y. A. Reznik, W. Szpankowski, Proceedings of IEEE International Symposium on Information Theory (ISIT), 2003.which is a function of the source parameter p. 5 is a graph illustrating the degree of redundancy of an adaptive block code with asymptotic behavior. For short blocks / samples, the characteristics of such codes become sensitive to source asymmetry. A proof of this theorem can be found, for example, in Asymptotic average redundancy of adaptive block codes, Y. A. Reznik, W. Szpankowski, Proceedings of IEEE International Symposium on Information Theory (ISIT), 2003.

Далее описываются примеры эффективных алгоритмов для реализации описанных выше кодов. В модели без памяти вероятность слова w (или ее оценка) зависит только от его веса k, но не от фактической комбинации его битов. Следовательно, рассматривая множество всех возможных слов из n битов, мы можем разделить это множество на n + 1 группу:The following are examples of efficient algorithms for implementing the codes described above. In a memoryless model, the probability of the word w (or its estimate) depends only on its weight k, and not on the actual combination of its bits. Therefore, considering the set of all possible words of n bits, we can divide this set into n + 1 groups:

Figure 00000018
,
Figure 00000018
,

содержащие слова с одинаковым весом (k = 0,…,n) и одинаковой вероятностью. Размеры таких групп равны

Figure 00000019
. Далее для удобства предполагается, что каждая группа Wn,k хранит слова в лексикографическом порядке. Значение In,k(w) обозначает индекс (позицию) слова w в группе Wn,k. Приведенная ниже таблица 6 служит примером кода, построенного для 4-битовых блоков с Бернуллиевыми вероятностями: pkqn-k, p=0,9.containing words with the same weight (k = 0, ..., n) and the same probability. The sizes of such groups are equal
Figure 00000019
. Further, for convenience, it is assumed that each group W n, k stores words in lexicographical order. The value of I n, k (w) denotes the index (position) of the word w in the group W n, k . Table 6 below is an example of code built for 4-bit blocks with Bernoulli probabilities: p k q nk , p = 0.9.

Таблица 6
Пример кода, построенного для 4-битовых блоков
с Бернуллиевыми вероятностями pkqn-k, p=0,9
Table 6
Sample code built for 4-bit blocks
with Bernoulli probabilities p k q nk , p = 0.9
Блок w Block w kk In,k(w)I n, k (w) Pr(w)Pr (w) ДлинаLength Код ϕ(w) Code ϕ (w) ПодгруппаSubgroup 0000
0001
0010
0011
0100
0101
0110
0111
1000
1001
1010
1011
1100
1101
1110
1111
0000
0001
0010
0011
0100
0101
0110
0111
1000
1001
1010
1011
1100
1101
1110
1111
0
1
1
2
1
2
2
3
1
2
2
3
2
3
3
4
0
one
one
2
one
2
2
3
one
2
2
3
2
3
3
four
0
0
1
0
2
1
2
0
3
3
4
1
5
2
3
0
0
0
one
0
2
one
2
0
3
3
four
one
5
2
3
0
0,6561
0,0729
0,0729
0,0081
0,0729
0,0081
0,0081
0,0009
0,0729
0,0081
0,0081
0,0009
0,0081
0,0009
0,0009
0,0001
0.6561
0,0729
0,0729
0.0081
0,0729
0.0081
0.0081
0,0009
0,0729
0.0081
0.0081
0,0009
0.0081
0,0009
0,0009
0.0001
1
3
3
6
3
7
7
9
4
7
7
9
7
9
10
10
one
3
3
6
3
7
7
9
four
7
7
9
7
9
10
10
1
001
010
000011
011
0000001
0000010
000000001
0001
0000011
000100
000000010
0000101
000000011
0000000001
0000000000
one
001
010
000011
011
0000001
0000010
000000001
0001
0000011
000100
000000010
0000101
000000011
0000000001
0000000000
0
1
1
3
1
4
4
5
2
4
4
5
4
5
6
7
0
one
one
3
one
four
four
5
2
four
four
5
four
5
6
7

Пример кода в таблице 6 будет использован для описания структуры предложенного соответствия между словами в группе Wn,k и их кодовыми словами в соответствии с некоторыми аспектами настоящего изобретения. Этот код был построен с использованием модификации алгоритма Хаффмана, в котором были выполнены дополнительные этапы, чтобы обеспечить для кодовых слов, расположенных на одном и том же уровне, тот же лексикографический порядок, что и для входных блоков, которые они представляют. Известно, что такое переупорядочение возможно без потери эффективности сжатия. Примеры известных ранее алгоритмов, которые использовали эту идею переупорядочения, включают в себя коды Хаффмана-Шеннона-Фано и канонические коды, описанные Моффатом и Турпином.The code example in Table 6 will be used to describe the structure of the proposed correspondence between the words in the group W n, k and their code words in accordance with some aspects of the present invention. This code was built using a modification of the Huffman algorithm, in which additional steps were performed to ensure that codewords located at the same level have the same lexicographic order as the input blocks that they represent. It is known that such reordering is possible without loss of compression efficiency. Examples of previously known algorithms that used this idea of reordering include Huffman-Shannon-Fano codes and canonical codes described by Moffat and Turpin.

На фиг.6 приведена схема с изображением дерева кодирования, которое отображает структуру примера блочного кода, приведенного в таблице 6. Как и следовало ожидать, каждая группа Wn,k состоит максимум из двух подгрупп, содержащих кодовые слова одинаковой длины. В целом кодовая структура, представленная деревом кодирования на фиг.6 и блочными кодами из таблицы 6, определяет группы кодовых слов и первую и вторую подгруппы кодовых слов внутри каждой из групп. Каждая из групп включает в себя кодовые слова, представляющие значения с одинаковыми весами. Первая подгруппа включает в себя кодовые слова, имеющие первую длину, а вторая подгруппа включает в себя кодовые слова, имеющие вторую длину, отличную от первой длины. Кодовые слова в каждой из групп упорядочены в лексикографическом порядке относительно значений, представленных кодовыми словами, для облегчения кодирования и декодирования прямым вычислением.Fig. 6 is a diagram showing a coding tree that displays the structure of the example block code shown in Table 6. As expected, each group W n, k consists of a maximum of two subgroups containing code words of the same length. In general, the code structure represented by the coding tree of FIG. 6 and the block codes from Table 6 defines the codeword groups and the first and second subgroups of codewords within each of the groups. Each of the groups includes code words representing values with the same weights. The first subgroup includes codewords having a first length, and the second subgroup includes codewords having a second length different from the first length. The codewords in each of the groups are ordered in lexicographic order relative to the values represented by the codewords, to facilitate encoding and decoding by direct calculation.

Пример группы обозначен на фиг.6 номером позиции 66. Примеры первой и второй подгрупп обозначены на фиг.6 соответственно номерами позиций 68A, 68B. Аналогичные группы и подгруппы обеспечиваются для каждого веса в пределах дерева кодирования. Группа содержит блоки, имеющие одинаковый вес k. Подгруппа содержит блоки, имеющие одинаковый вес и одинаковый уровень в дереве кодирования. Это следует из того, что все слова в группе Wn,k имеют одинаковую вероятность и обладают так называемым братским свойством кодов Хаффмана. Это наблюдение сохраняет справедливость и для кодов Шеннона, обобщенных кодов Шеннона и, возможно, для других алгоритмов. Как отмечено выше, группа Wn,k включает в себя максимум две подгруппы, содержащие кодовые слова одинаковой длины, и может быть представлена в виде:An example of a group is indicated in FIG. 6 by reference numeral 66. Examples of the first and second subgroups are indicated in FIG. 6 by reference numbers 68A, 68B. Similar groups and subgroups are provided for each weight within the coding tree. The group contains blocks having the same weight k. The subgroup contains blocks that have the same weight and the same level in the encoding tree. This follows from the fact that all words in the group W n, k have the same probability and have the so-called fraternal property of Huffman codes. This observation holds true for Shannon codes, generalized Shannon codes, and, possibly, for other algorithms. As noted above, the group W n, k includes a maximum of two subgroups containing code words of the same length, and can be represented as:

Figure 00000020
,
Figure 00000020
,

где

Figure 00000021
- наименьшая длина кода, которая может быть присвоена блокам из группы Wn,k. Кроме того, поскольку слова в группе Wn,k следуют в лексикографическом порядке, то разделение на Wn,k,l и Wn,k,l+1 - это просто:Where
Figure 00000021
is the smallest code length that can be assigned to blocks from the group W n, k . In addition, since the words in the group W n, k follow in lexicographic order, the division into W n, k, l and W n, k, l + 1 is simple:

Figure 00000022
,
Figure 00000022
,

Figure 00000023
,
Figure 00000023
,

где nk обозначает размер подгруппы с более короткими кодовыми словами. Таким образом, если в первой подгруппе три кодовых слова с длиной 3, а во второй подгруппе той же группы одно кодовое слово с длиной 4, то nk (размер подгруппы с более короткими кодовыми словами, то есть, первой подгруппа) равен 3. Этот пример соответствует подгруппам в группе, связанной с уровнями 3 и 4 дерева кодирования на фиг. 6, в котором подгруппа 68A имеет кодовые слова 001, 010 и 011, длина каждого из которых равна трем, и подгруппа 68B имеет кодовое слово 0001, длина которого равна четырем.where n k denotes the size of the subgroup with shorter codewords. Thus, if the first subgroup has three codewords with a length of 3, and the second subgroup of the same group has one codeword with a length of 4, then n k (the size of the subgroup with shorter codewords, that is, the first subgroup) is 3. This the example corresponds to subgroups in the group associated with layers 3 and 4 of the coding tree of FIG. 6, in which subgroup 68A has codewords 001, 010, and 011, each of which is three in length, and subgroup 68B has codeword 0001, which is four in length.

Лексикографически наименьшие кодовые слова в каждой подгруппе могут называться базовыми кодовыми словами, например, как описано выше в отношении первого аспекта настоящего изобретения, и могут быть представлены как:The lexicographically smallest codewords in each subgroup can be called basic codewords, for example, as described above with respect to the first aspect of the present invention, and can be represented as:

Figure 00000024
,
Figure 00000024
,

Figure 00000025
,
Figure 00000025
,

где wi - i-й блок в группе Wn,k. Заметим, что, как указано выше, остальные кодовые слова в обеих подгруппах могут быть вычислены следующим образом:where w i is the i-th block in the group W n, k . Note that, as indicated above, the remaining codewords in both subgroups can be calculated as follows:

Figure 00000026
Figure 00000026

В качестве иллюстрации предположим, что имеется первая подгруппа 68A с тремя кодовыми словами длиной 3 и вторая подгруппа 68B с одним кодовым словом длиной 4, например, как в примере уровней 3 и 4 дерева кодирования на фиг.6. В этом случае, если позиция данного блока i=2, то i<nk (nk равно 3), и результирующее кодовое слово является применимым базовым словом +i. В этом примере базовое кодовое слово для подгруппы - 001, а результирующее кодовое слово - 001+2=011. Для уровней 3 и 4 дерева кодирования на фиг.6, если бы позиция применимого кодового слова была бы i≥nk, то кодовое слово было бы во второй подгруппе и было бы равно базовому кодовому слову 0000+i-nk, что равно 0000+4-3=0001.As an illustration, suppose that there is a first subgroup 68A with three codewords of length 3 and a second subgroup 68B with one codeword of length 4, for example, as in the example of layers 3 and 4 of the coding tree of FIG. 6. In this case, if the position of this block is i = 2, then i <n k (n k is 3), and the resulting codeword is the applicable base word + i. In this example, the base codeword for the subgroup is 001, and the resulting codeword is 001 + 2 = 011. For levels 3 and 4 of the coding tree in FIG. 6, if the position of the applicable codeword were i≥n k , then the codeword would be in the second subgroup and would be equal to the base codeword 0000 + in k , which is 0000 + 4 -3 = 0001.

Базовые кодовые слова определяются только непустыми подгруппами, и число таких подгрупп S в дереве, построенном для n-битовых блоков, находится в пределах:Basic codewords are defined only by non-empty subgroups, and the number of such subgroups S in the tree constructed for n-bit blocks is within:

n + 1 ≤ S ≤ 2n.n + 1 ≤ S ≤ 2n.

Кроме того, на одном уровне может находиться множество подгрупп, и число таких соотнесенных подгрупп не может превышать n+1. Например, на 10-м уровне дерева на фиг.6 имеются две подгруппы, соответствующие кодовым словам 1110 и 1111. Однако эти подгруппы не принадлежат к одной группе. В этом состоит существенное отличие от алгоритмов, которые присваивают уникальные базовые кодовые слова для каждого уровня, но затем для работы с такими кодами требуют большую таблицу переупорядочения размером O(n2n). В данном же случае вся структура имеет размер O (n2) битов.In addition, at the same level there can be many subgroups, and the number of such related subgroups cannot exceed n + 1. For example, at the 10th level of the tree in FIG. 6, there are two subgroups corresponding to codewords 1110 and 1111. However, these subgroups do not belong to the same group. This is a significant difference from algorithms that assign unique basic codewords for each level, but then require a large reordering table of size O (n2 n ) to work with such codes. In this case, the whole structure has a size of O (n 2 ) bits.

В целом эта кодовая структура определяет группы W и подгруппы S. Каждая из групп включает в себя кодовые слова, представляющие значения, имеющие одинаковые веса. Кодовые слова в каждой из групп упорядочены в лексикографическом порядке относительно значений, представленных кодовыми словами. Кроме того, первая подгруппа в каждой группе включает в себя кодовые слова, имеющие первую длину, а вторая подгруппа включает в себя кодовые слова, имеющие вторую длину, отличную от первой длины. Кодовая структура может быть представлена структурой данных, к которой может обращаться кодер для выполнения кодирования переменной длины. Изобретение предусматривает применение такой кодовой структуры в кодировании или декодировании переменной длины, а также машиночитаемый носитель, содержащий структуру данных, которая определяет такую кодовую структуру.In general, this code structure defines groups W and subgroups S. Each of the groups includes code words representing values having the same weight. The code words in each of the groups are ordered in lexicographic order relative to the values represented by the code words. In addition, the first subgroup in each group includes codewords having a first length, and the second subgroup includes codewords having a second length other than the first length. The code structure can be represented by a data structure that the encoder can access to perform variable length encoding. The invention provides for the use of such a code structure in variable-length encoding or decoding, as well as a computer-readable medium containing a data structure that defines such a code structure.

Далее с учетом вышеприведенного рассмотрения будет описан простой алгоритм прямого вычисления блочных кодов. Предполагается, что параметры nk (0≤k≤n) доступны и что уровень l и базовое кодовое слово Bn,k,l можно получить для каждой непустой подгруппы. Тогда процесс кодирования блока w может быть выполнен по существу посредством следующих этапов:Next, based on the foregoing discussion, a simple algorithm for directly computing block codes will be described. It is assumed that the parameters n k (0≤k≤n) are available and that level l and the base codeword B n, k, l can be obtained for each non-empty subgroup. Then, the encoding process of the block w can be performed essentially by the following steps:

1. При наличии блока w получить его вес k и индекс In,k(w).1. If there is a block w, get its weight k and index I n, k (w).

2. Если In,k(w)<nk, выбрать первую подгруппу Wn,k,l; в противном случае выбрать вторую подгруппу Wn,k,l+1.2. If I n, k (w) <n k , choose the first subgroup W n, k, l ; otherwise, choose the second subgroup W n, k, l + 1 .

3. Затем извлечь базовое кодовое слово (Bn,k,l или Bn,k,l+1) для выбранной подгруппы (Wn,k,l или Wn,k,l+1) и вычислить соответственный код по следующей формуле:3. Then extract the base codeword (B n, k, l or B n, k, l + 1 ) for the selected subgroup (W n, k, l or W n, k, l + 1 ) and calculate the corresponding code using the following the formula:

Figure 00000027
(13)
Figure 00000027
(13)

Согласно вышеприведенной формуле, если позиция i=In,k(w) блока w в выбранной подгруппе (Wn,k,l или Wn,k,l+1) меньше числа nk блоков в подгруппе, тогда кодовое слово Bn,k,l+i. Если же позиция i блока w в выбранной подгруппе (Wn,k,l или Wn,k,l+1) больше или равна числу nk блоков в подгруппе, то кодовое слово Bn,k,l+i-nk.According to the above formula, if the position i = I n, k (w) of the block w in the selected subgroup (W n, k, l or W n, k, l + 1 ) is less than the number n k blocks in the subgroup, then the code word B n , k, l + i. If the position i of the block w in the selected subgroup (W n, k, l or W n, k, l + 1 ) is greater than or equal to the number n k blocks in the subgroup, then the code word is B n, k, l + in k .

Как описано выше и приведено на иллюстрации для уровней 3 и 4 дерева кодирования на фиг.6, вышеуказанный процесс выдает кодовое слово 011, когда позиция данного блочного кода i=2<nk, и кодовое слово 0001, когда позиция данного блочного кода i=3≥nk. В этом примере nk равно 3, то есть числу кодовых слов в первой подгруппе 68A для веса k=1. Порядок позиции i определяется лексикографически, начиная с базового кодового слова, например, от 0 до 3 в случае веса = 1 в примере на фиг.6. В частности, позиция 0 соответствует базовому кодовому слову 001, позиция 1 соответствует кодовому слову 010, позиция 2 соответствует кодовому слову 011, все эти кодовые слова находятся в первой подгруппе 68A (i<nk), и позиция 3 соответствует кодовому слову 0001 в подгруппе 68B (i≥nk).As described above and shown in the illustration for levels 3 and 4 of the coding tree of FIG. 6, the above process outputs a codeword 011 when the position of a given block code is i = 2 <n k , and codeword 0001 when a position of a given block code is i = 3≥n k . In this example, n k is 3, that is, the number of codewords in the first subgroup 68A for a weight k = 1. The order of position i is determined lexicographically, starting with the base codeword, for example, from 0 to 3 in the case of weight = 1 in the example of FIG. 6. In particular, position 0 corresponds to the base codeword 001, position 1 corresponds to the codeword 010, position 2 corresponds to the codeword 011, all these codewords are in the first subgroup 68A (i <n k ), and position 3 corresponds to the codeword 0001 in the subgroup 68B (i≥n k ).

Этот процесс можно легко реализовать, обеспечив переупорядочение кодовых слов, расположенных на одном уровне, таким образом, чтобы они имели тот же лексикографический порядок, что входные блоки, которые они представляют. Например, вышеописанные кодовые слова следуют в лексикографическом порядке входных блоков 0001, 0010, 0100 и 1000. Затем лексикографически наименьшие кодовые слова в каждой подгруппе, например, 001 в подгруппе 68A или 0001 в подгруппе 68B можно использовать в качестве базовых кодовых слов с целью вышеописанного вычисления кодового слова. Ниже в таблице 7 приведен программный код на языке C, представляющий пример реализации описанного выше процесса прямого построения блочных кодов.This process can be easily implemented by reordering codewords located at the same level so that they have the same lexicographic order as the input blocks that they represent. For example, the codewords described above are followed in the lexicographical order of input blocks 0001, 0010, 0100 and 1000. Then, the lexicographically smallest codewords in each subgroup, for example, 001 in subgroup 68A or 0001 in subgroup 68B, can be used as basic codewords for the purpose of the above calculation code word. Table 7 below shows the C code that represents an example of the implementation of the process for directly building block codes described above.

Таблица 7
Процесс прямого построения блочных кодов
Table 7
The process of directly building block codes

Figure 00000028
Figure 00000028

В вышеприведенном коде на языке C значение k указывает вес блока w, значение i указывает позицию In,k(w) блока внутри группы с весом k, а nk[k] указывает число кодовых слов в первой подгруппе группы с весом k. Если i больше или равно nk[k], то i уменьшается для корректировки индекса, и подгруппа устанавливается во вторую подгруппу (1) для соответствующего веса k. Эта вторая подгруппа идентифицируется посредством j=sg[k][1]. Если i меньше чем nk[k], i не уменьшается, и подгруппа устанавливается в первую подгруппу (0) для соответствующего веса k. Эта первая подгруппа идентифицирована посредством j=sg[k][0].In the above C code, the value k indicates the weight of the block w, the value i indicates the position I n, k (w) of the block within the group with weight k, and nk [k] indicates the number of code words in the first subgroup of the group with weight k. If i is greater than or equal to nk [k], then i decreases to adjust the index, and the subgroup is established in the second subgroup (1) for the corresponding weight k. This second subgroup is identified by j = sg [k] [1]. If i is less than nk [k], i does not decrease, and the subgroup is established in the first subgroup (0) for the corresponding weight k. This first subgroup is identified by j = sg [k] [0].

Затем генерируется кодовое слово в виде суммы базового кодового слова для соответствующей подгруппы j(base[j]) и значения i. В случае примера на фиг. 6, если значение i равно 2, то код представляет собой сумму базового кодового слова 001 для подгруппы 68A и значения i(2), что равно 001+010=011. Как следует из вышеприведенной формулы (13), в зависимости от подгруппы базовое кодовое слово - это либо Bn,k,l, либо Bn,k,l+1, а значение i - это либо i, либо i-nk[k]. Следовательно, вышеуказанный код в целом соответствует результату, даваемому формулой (13). После вычисления кодового слова (code), длина (len) определяется как len[j], которая является длиной кода для соответствующей подгруппы, где длина кода второй подгруппы на единицу больше длины кода первой подгруппы. Затем процесс кодирования записывает поток битов посредством операции put_bits (code, len, bs), которая записывает значение code и len в поток битов bs. Поток битов передается для декодирования другим устройством. Процесс возвращает вес k для вычисления следующего кодового слова.Then a codeword is generated as the sum of the base codeword for the corresponding subgroup j (base [j]) and the value i. In the case of the example of FIG. 6, if the value of i is 2, then the code is the sum of the base codeword 001 for subgroup 68A and the value of i (2), which is 001 + 010 = 011. As follows from the above formula (13), depending on the subgroup, the base codeword is either B n, k, l , or B n, k, l + 1 , and the value i is either i or i-nk [k ]. Therefore, the above code generally corresponds to the result given by formula (13). After calculating the code word (code), the length (len) is defined as len [j], which is the code length for the corresponding subgroup, where the code length of the second subgroup is one greater than the code length of the first subgroup. The encoding process then writes the bitstream using the put_bits (code, len, bs) operation, which writes the value of code and len to the bs bitstream. The bitstream is transmitted for decoding by another device. The process returns the weight k to calculate the next codeword.

Вышеизложенный процесс кодирования может включать в себя выбор одной из групп на основе веса значения, подлежащего кодированию, выбор одной из подгрупп на основе лексикографической позиции значения, подлежащего кодированию, относительно числа кодовых слов в первой подгруппе выбранной группы, выбор одного из кодовых слов в выбранной подгруппе на основе кодового слова для выбранной подгруппы и лексикографической позиции значения, подлежащего кодированию, и кодирование значения, подлежащего кодированию, при помощи выбранного кодового слова. Базовые кодовые слова для каждой из подгрупп, позиции кодовых слов внутри каждой из групп, число кодовых слов внутри каждой из первых подгрупп и длины кодовых слов внутри каждой из подгрупп могут храниться в структуре данных, к которой может обращаться кодер для поддержки кодирования переменной длины.The above encoding process may include selecting one of the groups based on the weight of the value to be encoded, selecting one of the subgroups based on the lexicographic position of the value to be encoded, relative to the number of code words in the first subgroup of the selected group, selecting one of the code words in the selected subgroup based on the code word for the selected subgroup and the lexicographic position of the value to be encoded, and encoding the value to be encoded using the selected code fishing. The base codewords for each of the subgroups, the position of the codewords within each of the groups, the number of codewords within each of the first subgroups, and the length of the codewords within each of the subgroups can be stored in a data structure that can be accessed by the encoder to support variable length encoding.

С точки зрения памяти процесс, приведенный в таблице 7, требует только S базовых кодовых слов (длина O(n) битов), n+1 значений nk (длина O(n) битов), S длин кода (длина O(log n) битов) и 2(n+1) индексов подгрупп (длина O(log n) битов). Возможно дополнительное сокращение памяти посредством хранения приращений базовых кодовых слов, что рассматривалось в другом месте настоящей заявки. При S=O(n) вся структура данных требует лишь O(n2) битов. В частном варианте осуществления, приведенном в таблице 7, в предположении, например, что n - 20 и S=32, размер этой структуры данных становится равным 244 байтам. Это намного меньше 220 слов, которые были бы необходимы для представления этого кода непосредственно в виде таблицы. Для разумно коротких блоков, например, для n≤12…16, вычисление весов и индексов (функции weight(.) и index(.,.) в процессе, приведенном в таблице 7), может представлять собой один-единственный поиск. В этом случае весь процесс кодирования может требовать максимум одного сравнения, двух сложений и четырех поисков.In terms of memory, the process shown in Table 7 requires only S base code words (length O (n) bits), n + 1 nk values (length O (n) bits), S code lengths (length O (log n) bits) and 2 (n + 1) indexes of subgroups (length O (log n) bits). An additional memory reduction is possible by storing the increments of the base codewords, which was considered elsewhere in this application. For S = O (n), the entire data structure requires only O (n 2 ) bits. In the particular embodiment shown in Table 7, assuming, for example, that n is 20 and S = 32, the size of this data structure becomes 244 bytes. This is much less than 220 words that would be needed to present this code directly in a table. For reasonably short blocks, for example, for n≤12 ... 16, the calculation of weights and indices (functions weight (.) And index (.,.) In the process shown in Table 7) can be a single search. In this case, the entire encoding process may require a maximum of one comparison, two additions and four searches.

Для блоков большего размера может использоваться следующая известная комбинаторная формула:For larger blocks, the following well-known combinatorial formula can be used:

Figure 00000029
,
Figure 00000029
,

где wj представляют собой отдельные биты слова w, и предполагается, что

Figure 00000030
для всех k>n. Для реализации этой формулы можно либо заранее вычислить все биноминальные коэффициенты до уровня n в треугольнике Паскале, либо вычислять их динамически, используя следующие простые тождества:where w j are the individual bits of the word w, and it is assumed that
Figure 00000030
for all k> n. To implement this formula, you can either pre-calculate all binomial coefficients up to level n in the Pascal triangle, or dynamically calculate them using the following simple identities:

Figure 00000031
и
Figure 00000032
.
Figure 00000031
and
Figure 00000032
.

Реализация на основе заранее вычисленных коэффициентов требует

Figure 00000033
слов (O(n3) битов) памяти и O(n) сложений. Динамическое вычисление коэффициентов требует O(n) сложений, умножений и делений. Однако весь процесс может требовать лишь нескольких регистров и не требовать статистической памяти. Дополнительное обсуждение вопроса сложности вычисления индексов можно найти в работе T. Tjalkens, Implementation cost of the Huffman-Shannon-Fano code, in Proc. Data Compression Conference (DCC'05) (Snowbird, Utah, March 29-31, 2005) 123-132.Implementation based on pre-calculated coefficients requires
Figure 00000033
words (O (n 3 ) bits) of memory and O (n) additions. Dynamic coefficient calculation requires O (n) additions, multiplications and divisions. However, the entire process may require only a few registers and not require statistical memory. An additional discussion of the difficulty of computing indexes can be found in T. Tjalkens, Implementation cost of the Huffman-Shannon-Fano code, in Proc. Data Compression Conference (DCC'05) (Snowbird, Utah, March 29-31, 2005) 123-132.

Далее описан пример конструкции декодера, реализующего вышеуказанные способы. Как и описанный выше процесс кодирования, процесс декодирования может использовать параметры nk, базовые кодовые слова и связанные с ними длины. Для удобства в нижеследующем рассмотрении используются выровненные влево варианты значений базовых кодовых слов:The following describes an example of a design of a decoder that implements the above methods. Like the encoding process described above, the decoding process can use the parameters n k , the base codewords and the associated lengths. For convenience, the following discussion uses left-aligned variants of the values of the basic codewords:

Figure 00000034
,
Figure 00000034
,

где T - длина машинного слова (T > max l). В этом случае примерный процесс декодирования можно описать следующим образом:where T is the length of the machine word (T> max l). In this case, an exemplary decoding process can be described as follows:

1. Найти самую верхнюю подгруппу, у которой

Figure 00000035
меньше, чем T бит в потоке битов.1. Find the uppermost subgroup for which
Figure 00000035
less than T bits in the bitstream.

2. Декодировать индекс блока In,k(w) на основе вышеприведенной формулы (13).2. Decode the block index I n, k (w) based on the above formula (13).

3. Получить восстановленный блок при помощи его веса k и индекса.3. Get the restored block using its weight k and index.

Ниже в таблице 8 приведен код на языке C, представляющий пример реализации вышеописанного процесса декодирования.Table 8 below shows the C code representing an example implementation of the above decoding process.

Таблица 8
Декодирование блоков кода
Table 8
Decoding Code Blocks

Figure 00000036
Figure 00000036

Примерный процесс декодирования, приведенный в таблице 8, использует выровненные влево базовые кодовые слова lj_base[S]. В процессе работы процесс декодирования принимает содержимое val из буфера потока битов и идентифицирует подгруппу в дереве кодирования, имеющую базовое кодовое слово, соответствующее содержимому val буфера потока битов. Например, процесс продолжает пересекать, спускаясь вниз, подгруппы на различных уровнях в дереве кодирования до тех пор, пока базовые кодовые слова не станут больше принятого кодового слова. Однако когда процесс доходит до подгруппы с базовым кодовым словом, которое меньше или равно val, осуществляется выбор этой подгруппы. После нахождения соответствующей подгруппы процесс определяет длину кода для подгруппы и затем прокручивает поток битов на эту длину, чтобы перескочить декодированные биты и изолировать кодовое слово. Процесс декодирования определяет индексную позицию i кодового слова внутри подгруппы посредством вычитания значения базового кодового слова из содержимого буфера потока битов.The exemplary decoding process shown in Table 8 uses the left-aligned base codewords lj_base [S]. In operation, the decoding process receives the contents of val from the bitstream buffer and identifies a subgroup in the encoding tree having a base codeword corresponding to the contents of val of the bitstream buffer. For example, a process continues to cross, going down, subgroups at various levels in the coding tree until the base codewords are larger than the received codeword. However, when the process reaches a subgroup with a base codeword that is less than or equal to val, that subgroup is selected. After finding the appropriate subgroup, the process determines the code length for the subgroup and then scrolls the bitstream by this length to skip the decoded bits and isolate the codeword. The decoding process determines the index position i of the codeword within a subgroup by subtracting the value of the base codeword from the contents of the bitstream buffer.

Если, например, кодовое слово - 011, а базовое кодовое слово - 010, то результат этой разницы равен 2, что означает, что кодовое слово находится в позиции 2 из возможных позиций 0, 1 и 2 в подгруппе. Для случая регистра шириной 32 бита эта разность может быть смещена вправо на величину 32 минус длина len кода. Затем процесс декодирования извлекает соответствующий вес k и индекс j подгруппы и восстанавливает индекс i. Процесс затем генерирует i-е слово в выбранной группе в качестве кодового слова и возвращает вес k. Выражение kj[j].j возвращает вес подгруппы, а выражение kj[j].j возвращает индекс подгруппы в виде либо 0, либо 1, что указывает либо на первую подгруппу (0), либо на вторую подгруппу (1) для данного веса. Если вторая подгруппа выбрана таким образом, что j=1, то индекс i корректируется посредством добавления значения nk[k]. Или же индекс i не корректируется, если выбрана первая подгруппа. Функция word() возвращает i-е слово в группу n,k в качестве декодированного значения слова, например, при помощи вышеприведенной формулы (13).If, for example, the codeword is 011, and the base codeword is 010, then the result of this difference is 2, which means that the codeword is at position 2 from possible positions 0, 1, and 2 in the subgroup. For the case of a register 32 bits wide, this difference can be shifted to the right by 32 minus the length len of the code. The decoding process then extracts the corresponding weight k and subgroup index j and restores the index i. The process then generates the ith word in the selected group as a codeword and returns the weight k. The expression kj [j] .j returns the weight of the subgroup, and the expression kj [j] .j returns the index of the subgroup as either 0 or 1, which indicates either the first subgroup (0) or the second subgroup (1) for a given weight . If the second subgroup is chosen in such a way that j = 1, then the index i is adjusted by adding the value nk [k]. Or index i is not adjusted if the first subgroup is selected. The word () function returns the ith word to the group n, k as a decoded word value, for example, using the above formula (13).

В целом кодер может выполнить кодирование переменной длины согласно описанной выше кодовой структуре, причем кодовая структура определяет группы и подгруппы. Повторим еще раз, что каждая из групп включает в себя кодовые слова, представляющие значения с одинаковыми весами. Кодовые слова в каждой из групп упорядочиваются в лексикографическом порядке относительно значений, представленных кодовыми словами. Кроме того, первая подгруппа в каждой группе включает в себя кодовые слова, имеющие первую длину, и вторая подгруппа включает в себя кодовые слова, имеющие вторую длину, отличную от первой длины.In general, the encoder can perform variable length coding according to the above code structure, the code structure defining groups and subgroups. Once again, each of the groups includes codewords representing values with the same weights. The code words in each of the groups are ordered in lexicographic order relative to the values represented by the code words. In addition, the first subgroup in each group includes codewords having a first length, and the second subgroup includes codewords having a second length other than the first length.

Кодовая структура может быть представлена структурой данных, к которой может обращаться кодер или декодер для выполнения кодирования переменной длины. Как описано выше, структура данных может определять базовые кодовые слова для каждой из подгрупп, позиции кодовых слов внутри каждой из групп, число кодовых слов внутри каждой из первых подгрупп и длины кодовых слов внутри каждой из подгрупп. Эта структура данных может храниться в памяти, связанной с одним кодером из кодера видеоданных, кодера изображения, аудиокодера, голосового кодера, декодера видеоданнных, декодера изображения и аудиодекодера или голосового декодера, и к ней по необходимости может осуществляться обращение для поддержки операций кодирования.The code structure can be represented by a data structure that can be accessed by an encoder or decoder to perform variable length encoding. As described above, the data structure can determine the basic codewords for each of the subgroups, the position of the codewords within each of the groups, the number of codewords within each of the first subgroups, and the length of the codewords within each of the subgroups. This data structure can be stored in memory associated with one encoder from a video encoder, an image encoder, an audio encoder, a voice encoder, a video data decoder, an image decoder and an audio decoder or voice decoder, and can be accessed to support encoding operations as necessary.

Как описано выше, декодер, такой как модуль 52 статистического декодирования, может осуществлять выбор в процессе нисходящего (сверху вниз) поиска по дереву кодирования посредством выбора первой из подгрупп с базовым кодовым словом, которое меньше или равно кодовому слову, подлежащему декодированию. Затем декодер может определить позицию кодового слова, подлежащего декодированию, внутри выбранной подгруппы, то есть индекс подгруппы, на основании разности между кодовым словом, подлежащим декодированию, и базовым кодовым словом для выбранной подгруппы. Декодер определяет вес значения, представленного кодовым словом, подлежащим декодированию, на основе группы, в которой находится выбранная подгруппа, и определяет позицию, то есть индекс группы, кодового слова внутри группы, в которой находится выбранная подгруппа, основываясь на том, является ли выбранная подгруппа первой подгруппой или второй подгруппой для группы. Затем декодер выбирает одно из значений на основе веса значения, представленного кодовым словом, подлежащим декодированию, и позиции кодового слова внутри группы, в которой находится выбранная подгруппа, и декодирует кодовое слово, подлежащее декодированию, при помощи выбранного значения. Это значение может соответствовать, например, одному из блочных кодов в таблице 6.As described above, a decoder, such as statistical decoding unit 52, may select during a top-down search in the encoding tree by selecting the first of the subgroups with a base codeword that is less than or equal to the codeword to be decoded. The decoder can then determine the position of the codeword to be decoded within the selected subgroup, that is, the index of the subgroup, based on the difference between the codeword to be decoded and the base codeword for the selected subgroup. The decoder determines the weight of the value represented by the codeword to be decoded based on the group in which the selected subgroup is located, and determines the position, that is, the index of the group, code word within the group in which the selected subgroup is based, based on whether the selected subgroup is the first subgroup or the second subgroup for the group. The decoder then selects one of the values based on the weight of the value represented by the codeword to be decoded and the position of the codeword within the group in which the selected subgroup is located, and decodes the codeword to be decoded using the selected value. This value may correspond, for example, to one of the block codes in table 6.

Кодовая структура и структура данных, предусмотренные в соответствии с настоящим аспектом изобретения, могут поддерживать эффективность в смысле избыточных вычислительных затрат и продолжительности обработки. Например, пример процесса декодирования в таблице 8 требует для нахождения подгруппы от 1 до S операций сравнения и поиска, одно или два сложения, одну операцию сдвига, одну операцию дополнительного сравнения и три операции дополнительного поиска. Число этапов, необходимых для нахождения подгруппы, можно еще больше уменьшить, поместив базовые кодовые слова в дерево двоичного поиска или воспользовавшись дополнительной таблицей поиска, но в обоих случаях за счет дополнительного использования памяти.The code structure and data structure provided in accordance with the present aspect of the invention can maintain efficiency in terms of excessive computational overhead and processing time. For example, the example decoding process in Table 8 requires a subgroup from 1 to S to compare and search, one or two additions, one shift operation, one additional comparison operation, and three additional search operations to find a subgroup. The number of steps required to find a subgroup can be further reduced by placing the base code words in the binary search tree or by using the additional search table, but in both cases due to the additional use of memory.

В конце процесса декодирования, описанного выше, вес k и индекс In,k(w) для кодового слова преобразуются в фактические значения (например, при помощи функции word() в таблице 8). Если блоки являются разумно короткими, это можно обеспечить просто операцией поиска. В противном случае слово может быть синтезировано посредством использования формулы нумерации, например, как описано в работе D. A. Huffman, A method for the construction of minimum-redundancy codes. Proc. IRE, 40 (Sept. 1952) 1098-1101. С точки зрения сложности этот процесс сходен с вычислением индекса в кодере.At the end of the decoding process described above, the weight k and index I n, k (w) for the codeword are converted to actual values (for example, using the word () function in table 8). If the blocks are reasonably short, this can be achieved simply by a search operation. Otherwise, the word can be synthesized by using the numbering formula, for example, as described in DA Huffman, A method for the construction of minimum-redundancy codes. Proc. IRE, 40 (Sept. 1952) 1098-1101. In terms of complexity, this process is similar to calculating an index in an encoder.

При помощи вышеописанных процессов кодирования и декодирования можно определить систему для адаптивного кодирования и декодирования блоков данных. В настоящем примере предполагается, что входные блоки можно кодировать при следующих условиях:Using the above encoding and decoding processes, it is possible to define a system for adaptively encoding and decoding data blocks. In this example, it is assumed that input blocks can be encoded under the following conditions:

1. Отсутствует контекст, то есть реализуется универсальный код.1. There is no context, that is, universal code is implemented.

2. Контекст дается одним ранее наблюденным блоком, то есть, t=n.2. The context is given by one previously observed block, that is, t = n.

3. Контекст дается двумя ранее наблюденными блоками, то есть t=2n.3. The context is given by two previously observed blocks, that is, t = 2n.

Вместо использования в качестве контекста фактических блоков достаточно (по причине отсутствия памяти у источника) использовать их веса. Это означает, что для t-битовых выборок предоставляется массив из t+1 кодовых структур, индексированных по их весу s. Для еще большей экономии места можно использовать симметрию KT-распределений относительно s и k. В частности, процесс может осуществить замену s=t-s и перебрасывать биты (то есть, принудительно выполнять k=n-k) каждый раз, когда s>t/2. Таким образом, необходимо только определить t/2+1 таблиц. В этом примере общий объем памяти, требуемый адаптивным кодом, становится равным 1+0+1+n+1=1,5n+3 таблиц. Частные случаи оценки объема памяти для размеров блока n=8…20 приведены ниже в таблице 9.Instead of using actual blocks as a context, it is enough (due to lack of memory at the source) to use their weights. This means that an array of t + 1 code structures indexed by their weight s is provided for t-bit samples. To further save space, one can use the symmetry of KT distributions with respect to s and k. In particular, the process can replace s = t-s and flip bits (that is, force k = n-k) every time s> t / 2. Thus, it is only necessary to define t / 2 + 1 tables. In this example, the total amount of memory required by the adaptive code becomes 1 + 0 + 1 + n + 1 = 1.5n + 3 tables. Special cases of estimating the amount of memory for block sizes n = 8 ... 20 are shown below in table 9.

Таблица 9
Оценки использования памяти (в байтах) для различных размеров блока
Table 9
Estimates of memory usage (in bytes) for various block sizes
nn макс. tMax. t макс. SMax. S Размер одной таблицыSize of one table Таблицы для всех контекстовTables for all contexts 8
12
16
20
8
12
16
twenty
16
24
32
40
16
24
32
40
14
19
25
29
fourteen
19
25
29th
102
140
184
216
102
140
184
216
1530
2940
4986
7128
1530
2940
4986
7128

Вышеприведенные таблицы были сгенерированы с использованием плотностей на основе КТ-оценок и с использованием модифицированного алгоритма построения кода Хаффмана в соответствии с настоящим изобретением. Ниже приведен пример компьютерного кода для программы, реализующей адаптивный кодер блоков, описанный в настоящем изобретении.The above tables were generated using densities based on CT scores and using a modified Huffman code algorithm in accordance with the present invention. The following is an example of computer code for a program that implements the adaptive block encoder described in the present invention.

Figure 00000037
Figure 00000038
Figure 00000039
Figure 00000040
Figure 00000041
Figure 00000042
Figure 00000037
Figure 00000038
Figure 00000039
Figure 00000040
Figure 00000041
Figure 00000042

Figure 00000043
Figure 00000044
Figure 00000043
Figure 00000044

Figure 00000045
Figure 00000045

Figure 00000046
Figure 00000046

Figure 00000047
Figure 00000047

Figure 00000048
Figure 00000048

Далее описываются экспериментальные результаты оценки характеристик процесса адаптивного кодирования, описанного в настоящей заявке, с размером блока n=16 и сравниваются с другими известными алгоритмами. В частности, процесс адаптивного кодирования сравнивается с алгоритмом Q-кодера, описанным в работе W. B. Pennebaker, J. L. Mitchell, G. G. Langdon, Jr., R. B. Arps, An overview of the basic principles of the Q-Coder adaptive binary arithmetic coder, IBM J. Res. Dev., 32 (6) (1988) 717, который используется в стандарте кодирования изображений JBIG, и с алгоритмом CABAC, описанным в работе D. Marpe, H. Schwartz, and T. Wiegand, Context-Based Adaptive Binary Arithmetic Coding in the H.264/AVC video compression standard, IEEE Trans, on CSVT, 13(7):620-636, July 2003, который используется в стандартах ITU-T H.264/MPEG AVC.The following describes the experimental results of evaluating the characteristics of the adaptive coding process described in this application with a block size of n = 16 and are compared with other known algorithms. In particular, the adaptive coding process is compared with the Q-encoder algorithm described by WB Pennebaker, JL Mitchell, GG Langdon, Jr., RB Arps, An overview of the basic principles of the Q-Coder adaptive binary arithmetic coder, IBM J. Res. Dev., 32 (6) (1988) 717, which is used in the JBIG image encoding standard, and with the CABAC algorithm described by D. Marpe, H. Schwartz, and T. Wiegand, Context-Based Adaptive Binary Arithmetic Coding in the H.264 / AVC video compression standard, IEEE Trans, on CSVT, 13 (7): 620-636, July 2003, which is used in ITU-T H.264 / MPEG AVC standards.

Для проведения испытаний использовались сгенерированные компьютером последовательности битов для моделирования выходных последовательностей из двоичного источника Бернулли с вероятностью p. Длина таких последовательностей находится в диапазоне от 16 до 1024, и для каждой длины генерировалось Q=1000000 выборок из таких последовательностей. Относительная степень избыточности вычислялась по формуле:For testing, computer-generated bit sequences were used to simulate output sequences from a Bernoulli binary source with probability p. The length of such sequences is in the range from 16 to 1024, and for each length Q = 1,000,000 samples from such sequences were generated. The relative degree of redundancy was calculated by the formula:

Figure 00000049
Figure 00000049

Для процесса адаптивного кодирования, описанного в настоящей заявке, использовалась следующая структура контекстов:For the adaptive coding process described in this application, the following context structure was used:

1) первый 16-битовый блок кодируется без контекста (универсальный код);1) the first 16-bit block is encoded without context (universal code);

2) второй блок кодируется с использованием одного из его контекстов (код с t = 16); и2) the second block is encoded using one of its contexts (code with t = 16); and

3) третий и все последующие блоки кодируются с использованием двух предыдущих блоков в последовательности в качестве контекстов (код на основе выборок с t = 32).3) the third and all subsequent blocks are encoded using the two previous blocks in the sequence as contexts (code based on samples with t = 32).

На фиг.7A и 7B приведены графики, иллюстрирующие сравнение степеней избыточности адаптивного блочного кода со способами Q-кодера и CABAC при различных значениях p. На фиг.7A приведены результаты для p=0,1, а на фиг.7B приведены результаты для p=0,5. На фиг.8 приведен график, иллюстрирующий чувствительность избыточности к асимметрии исходных данных для адаптивного блочного кода, способов Q-кодера b CABAC. Результаты экспериментального исследования приведены на фиг.7A, 7B и 8. На фиг.7A и 7B по оси X отложено число кодированных битов, а по оси Y отложено отношение (средняя длина кода - энтропия)/энтропия.7A and 7B are graphs illustrating a comparison of the degrees of redundancy of an adaptive block code with the Q-encoder and CABAC methods at various p values. FIG. 7A shows the results for p = 0.1, and FIG. 7B shows the results for p = 0.5. On Fig is a graph illustrating the sensitivity of redundancy to the asymmetry of the source data for adaptive block code, methods of Q-encoder b CABAC. The results of the experimental study are shown in Figs. 7A, 7B and 8. In Figs. 7A and 7B, the number of encoded bits is plotted on the X-axis, and the ratio (average code length - entropy) / entropy is plotted on the Y-axis.

На фиг.8 по оси X отложена вероятность, а по оси Y отложено отношение (средняя длина кода - энтропия)/энтропия. Каждый граф на фиг.7A, 7B и 8 содержит графики для Q-кодера, CABAC и адаптивного кодирования с соответствующими обозначениями. Из экспериментальных результатов можно заметить, что адаптивный код, описанный в настоящей заявке, может иметь значительно более высокую скорость сходимости по сравнению с алгоритмами Q-кодера и CABAC. Процесс адаптивного кодирования превосходит алгоритмы Q-кодера и CABAC для более коротких последовательностей, и становится сравнимым с алгоритмами Q-кодера и CABAC, когда полная длина кодированных битов приближается к 1024. Кроме того, из фиг.8 следует, что после 160 кодированных битов (или, к тому времени, 16-битовых блоков) процесс адаптивного кодирования может обеспечить более низкую избыточность по сравнению с алгоритмами Q-кодера и CABAC. Такая закономерность согласуется с вышеприведенной теоремой 1.In Fig. 8, the x-axis represents the probability, and the y-axis represents the ratio (average code length - entropy) / entropy. Each graph in FIGS. 7A, 7B, and 8 contains graphs for a Q-encoder, CABAC, and adaptive coding with corresponding notation. From the experimental results, it can be noted that the adaptive code described in this application may have a significantly higher convergence rate compared to the Q-encoder and CABAC algorithms. The adaptive coding process surpasses the Q encoder and CABAC algorithms for shorter sequences, and becomes comparable to the Q encoder and CABAC algorithms when the total length of the encoded bits approaches 1024. In addition, from Fig. 8, it follows that after 160 encoded bits ( or, by that time, 16-bit blocks) the adaptive coding process can provide lower redundancy compared to the Q-encoder and CABAC algorithms. This pattern is consistent with Theorem 1 above.

На фиг.9 приведена блок-схема последовательности операций, иллюстрирующая метод построения кодирования переменной длины с эффективным использованием памяти для монотонных распределений в соответствии с первым общим аспектом настоящего изобретения. Способ может быть реализован процессором, связанным с кодером, декодером или другим устройством для построения кодов с целью их использования модулем 46 статистического кодирования и модулем 52 статистического декодирования, как показано на фиг.2 и 3, и может поддерживать сжатие и кодирование самых различных данных, в том числе, в частности, видеоданных, данных изображения, речевых и звуковых данных. Такой процессор может быть предусмотрен, например, в составе кодера или декодера либо в вычислительной системе общего назначения, например, для создания структуры данных, определяющей атрибуты кодовой структуры, применяющиеся при кодировании переменной длины.FIG. 9 is a flowchart illustrating a method for constructing variable length coding with efficient use of memory for monotone distributions in accordance with a first general aspect of the present invention. The method can be implemented by a processor associated with an encoder, decoder, or other device for constructing codes for use by the statistical encoding module 46 and the statistical decoding module 52, as shown in FIGS. 2 and 3, and can support compression and encoding of a wide variety of data, including, in particular, video data, image data, voice and sound data. Such a processor can be provided, for example, as part of an encoder or decoder or in a general-purpose computing system, for example, to create a data structure that defines the attributes of the code structure used in variable-length encoding.

Как показано на фиг.9, процессор получает алфавит входных символов, подлежащих кодированию (70). Символы имеют соответствующие веса, указывающие вероятность или частоту наличия или использования символов в данном наборе или последовательности данных. После определения соответствующих весов символов (72) процесс присваивает символам индексы на основе их весов (74) и присваивает коды символам на основе индексов и лексикографического порядка символов (76). Следовательно, символы, имеющие одинаковые веса, можно упорядочить в лексикографическом порядке для облегчения способов кодирования, описанных в настоящей заявке.As shown in FIG. 9, the processor obtains an alphabet of input characters to be encoded (70). Symbols have corresponding weights indicating the likelihood or frequency of the presence or use of symbols in a given data set or sequence. After determining the corresponding symbol weights (72), the process assigns indices to the symbols based on their weights (74) and assigns codes to the symbols based on the indices and the lexicographic order of the symbols (76). Therefore, characters having the same weights can be ordered in lexicographic order to facilitate the encoding methods described in this application.

Коды могут быть организованы согласно кодовой структуре, представленной деревом двоичного кодирования. Процессор идентифицирует базовое кодовое слово для каждого уровня в дереве кодирования (78). Базовое кодовое слово является наименьшим кодовым словом на данном уровне в дереве и лексикографически соответствует самому раннему символу среди символов на этом уровне в дереве. Для обеспечения компактной структуры данных процессор удаляет фиксированное число B начальных битов из базовых кодовых слов для получения частичных базовых кодовых слов (80). Базовые кодовые слова можно определить как выровненные влево кодовые слова, а начальные биты могут быть M начальными битами при прохождении справа налево в выровненных влево кодовых словах. В некоторых вариантах осуществления число удаляемых начальных битов может быть равно 8. В других вариантах осуществления число удаляемых начальных битов может быть меньше или больше 8.Codes can be organized according to the code structure represented by the binary encoding tree. The processor identifies the base codeword for each level in the encoding tree (78). The base codeword is the smallest codeword at a given level in the tree and lexicographically corresponds to the earliest character among the characters at that level in the tree. To ensure a compact data structure, the processor removes a fixed number B of the initial bits from the base codewords to obtain partial base codewords (80). The base codewords can be defined as left-aligned codewords, and the leading bits can be M leading bits when passing from right to left in left-aligned codewords. In some embodiments, the number of starting bits to be deleted may be 8. In other embodiments, the number of starting bits to be deleted may be less than or greater than 8.

Для многих уровней дерева кодирования М начальных битов являются нулями. Однако на некоторых уровнях начальные биты могут формировать весь или часть базового кода для соответствующего уровня в дереве. На этих выбранных уровнях процессор генерирует показатели пропуска (82). Показатели пропуска обеспечивают декодер командой для прокручивания потока битов на B битов таким образом, чтобы не потерять базовый код после удаления начальных B битов. Процесс может хранить в структуре данных получающиеся в результате частичные базовые кодовые слова, длины, связанные с кодовыми словами на соответствующих уровнях дерева кодирования, и один или несколько показателей пропуска, которые указывают, когда поток битов следует прокрутить на B битов для недопущения потери базового кодового слова, которое попало, по меньшей мере частично, в начальные B битов (84). Это структуру данных можно предоставить модулю 46 статистического кодирования и модулю 52 статистического декодирования. Структура данных может принимать различные формы, в том числе представлять собой одномерные, более чем одномерные и многомерные таблицы поиска, списки ссылок, двоичные деревья, базисные деревья, бесструктурные файлы или тому подобное.For many levels of the coding tree, the M leading bits are zeros. However, at some levels, the start bits may form all or part of the base code for the corresponding level in the tree. At these selected levels, the processor generates skip indicators (82). The skip indices provide the decoder with a command to scroll the bitstream by B bits so as not to lose the base code after deleting the initial B bits. A process can store in the data structure the resulting partial base codewords, lengths associated with codewords at the appropriate levels of the coding tree, and one or more skip indicators that indicate when the bitstream should be scrolled to B bits to prevent loss of the base codeword , which is at least partially in the initial B bits (84). This data structure can be provided to the statistical encoding module 46 and the statistical decoding module 52. The data structure can take various forms, including one-dimensional, more than one-dimensional and multidimensional search tables, link lists, binary trees, base trees, structureless files, or the like.

На фиг.10 приведена блок-схема последовательности операций, иллюстрирующая способ кодирования символов с использованием кодов переменной длины, построенных согласно способу на фиг.9 в соответствии с первым общим аспектом настоящего изобретения. Как показано на фиг.10, модуль 46 статистического кодирования принимает символ (86), определяет индекс для символа (87) и сравнивает индекс символа с таблицей смещений для идентификации соответствующего уровня в дереве кодирования. В частности, модуль 46 статистического кодирования определяет, является индекс символа большим или равным смещению для данного уровня дерева (88). Индекс символа представляет собой порядок символа среди других символов, ранжированных в порядке веса, причем символы с одинаковым весом упорядочиваются в лексикографическом порядке, соответствующем алфавиту символов. Смещение представляет собой разность между длиной кода или кодов для соответствующего уровня дерева и максимальной длиной кода. Если в дереве на фиг.4 максимальная длина кода равна, например, 16 и длина кода на уровне 3 дерева равна 3, то соответствующее смещение базового кодового слова равно 12.FIG. 10 is a flowchart illustrating a method of encoding symbols using variable-length codes constructed according to the method of FIG. 9 in accordance with a first general aspect of the present invention. As shown in FIG. 10, the statistical coding unit 46 receives a symbol (86), determines an index for a symbol (87), and compares the symbol index with an offset table to identify the corresponding level in the encoding tree. In particular, statistical coding unit 46 determines whether a character index is greater than or equal to an offset for a given tree level (88). A character index is a character order among other characters, ranked in order of weight, with characters of equal weight being ordered in lexicographic order corresponding to the character alphabet. The offset is the difference between the length of the code or codes for the corresponding tree level and the maximum code length. If in the tree of FIG. 4 the maximum code length is, for example, 16 and the code length at tree level 3 is 3, then the corresponding offset of the base codeword is 12.

Если индекс символа не превышает смещение для текущего уровня дерева, модуль 46 статистического кодирования переходит вниз на следующий уровень (90) дерева кодирования в процессе нисходящего поиска и повторяет сравнение индекса символа со смещением для этого следующего уровня (88). Когда модуль 46 статистического кодирования определяет, что индекс символа больше или равен смещению для определенного уровня дерева кодирования (88), блок статистического кодирования вычисляет соответствующее кодовое слово для этого символа. В частности, модуль 46 статистического кодирования устанавливает кодовое слово для символа в сумму базового кодового слова для текущего уровня дерева и разницы между индексом символа и смещением для этого уровня (92).If the symbol index does not exceed the offset for the current level of the tree, the statistical coding unit 46 moves down to the next level (90) of the coding tree in the downward search process and repeats the comparison of the symbol index with the offset for this next level (88). When the statistical encoding unit 46 determines that the index of the symbol is greater than or equal to the offset for a particular level of the encoding tree (88), the statistical encoding unit calculates the corresponding code word for that symbol. In particular, statistical encoding module 46 sets the codeword for a symbol to the sum of the base codeword for the current tree level and the difference between the symbol index and the offset for that level (92).

Если взять в качестве примера дерево на фиг.4, то если индекс символа равен 14, модуль 46 статистического кодирования определяет, что код для символа находится на уровне 3 дерева, потому что 14 больше смещения 12, присвоенного базовому кодовому слову для этого уровня. Затем модуль 46 статистического кодирования вычисляет кодовое слово в виде базового кодового слова (001) + (индекс символа (14) - смещение (12)), то есть 001 + 2 = 001 + 010 = 011. После установки кода для принятого символа (92), модуль 46 статистического кодирования выдает кодовое слово потоку битов (94) для передачи, например, приемному устройству с модулем 52 статистического декодирования. Затем модуль 46 статистического кодирования повторяет процесс для следующего символа в соответствующей последовательности данных.If we take the tree in FIG. 4 as an example, then if the symbol index is 14, the statistical coding module 46 determines that the code for the symbol is at tree level 3, because 14 is greater than the offset 12 assigned to the base codeword for this level. Then, the statistical coding unit 46 calculates the codeword as a base codeword (001) + (character index (14) - offset (12)), i.e. 001 + 2 = 001 + 010 = 011. After setting the code for the received character (92 ), the statistical encoding module 46 provides a codeword to the bitstream (94) for transmission, for example, to a receiver with the statistical decoding module 52. Then, statistical encoding unit 46 repeats the process for the next character in the corresponding data sequence.

На фиг.11 приведена блок-схема, иллюстрирующая способ декодирования кодов переменной длины, построенных согласно способу на фиг. 9 в соответствии с первым общим аспектом настоящего изобретения. Способ, изображенный на фиг.11, может быть реализован при помощи алгоритма, идентичного или аналогичного алгоритму, приведенному в таблице 5. В примере осуществления коды могут быть приняты модулем 52 статистического декодирования, причем коды закодированы модулем 46 статистического кодирования, как описано со ссылкой на фиг.10. Способ, изображенный на фиг.11, может использовать способы декодирования с эффективным использованием памяти, описанные в настоящей заявке, и может использовать преимущества компактной структуры данных, при помощи которой могут быть построены такие коды. Как показано на фиг.11, модуль 52 статистического декодирования принимает кодовое слово от поступающего потока битов (96). Кодовое слово может быть получено из фиксированной ширины W битов, извлеченных из буфера потока битов. Кодовое слово может быть выровнено влево или преобразовано в форматы с выравниванием влево, а ширина W может быть уменьшена посредством удаления B начальных битов из кодового слова, если идти справа налево.11 is a flowchart illustrating a method for decoding variable length codes constructed according to the method of FIG. 9 in accordance with a first general aspect of the present invention. The method depicted in FIG. 11 may be implemented using an algorithm identical or similar to the algorithm shown in Table 5. In the embodiment, the codes may be received by the statistical decoding module 52, the codes being encoded by the statistical encoding module 46, as described with reference to figure 10. The method of FIG. 11 can use the memory efficient decoding methods described herein and can take advantage of the compact data structure by which such codes can be constructed. As shown in FIG. 11, the statistical decoding unit 52 receives a codeword from an incoming bitstream (96). The codeword can be obtained from a fixed width of W bits extracted from the bitstream buffer. The codeword can be left justified or converted to left justified formats, and the width W can be reduced by removing B leading bits from the codeword from right to left.

Модуль 52 статистического декодирования сравнивает кодовое слово с базовым кодовым словом для различных уровней дерева кодирования, начиная с верхнего уровня и переходя к более глубоким уровням в процессе нисходящего поиска до тех пор, пока не будет найдено соответствующее базовое кодовое слово. В частности, модуль 52 статистического декодирования может определить, является ли базовое кодовое слово для текущего уровня дерева меньшим или равным кодовому слову (98). Если не является, блок статистического декодирования продолжает переход вниз на следующий уровень дерева (100) и повторяет сравнение (98) для базового кодового слова, связанного со следующим уровнем. Однако, после перехода к следующему уровню (100) модуль 52 статистического декодирования определяет, связан ли с текущим уровнем показатель пропуска (102). Если связан, то перед переходом к следующему уровню (100) модуль 52 статистического декодирования прокручивает буфер потока битов на фиксированный шаг (104). В частности, модуль 52 статистического декодирования может прокрутить буфер потока битов на М битов, так чтобы кодовое слово не потерялось при пропуске начальных М битов. Если признак пропуска отсутствует (102), модуль 52 статистического декодирования просто переходит к следующему уровню (100).The statistical decoding unit 52 compares the codeword with the base codeword for various levels of the coding tree, starting from the top level and moving to deeper levels in the downward search process until the corresponding base codeword is found. In particular, the statistical decoding unit 52 may determine whether the base codeword for the current tree level is less than or equal to the codeword (98). If not, the statistical decoding unit continues to move down to the next level of the tree (100) and repeats the comparison (98) for the base codeword associated with the next level. However, after moving to the next level (100), the statistical decoding module 52 determines whether the skip indicator (102) is associated with the current level. If connected, then before moving on to the next level (100), the statistical decoding module 52 scrolls the bitstream buffer by a fixed step (104). In particular, the statistical decoding unit 52 may scroll the bitstream buffer by M bits so that the codeword is not lost when the initial M bits are skipped. If there is no skip sign (102), the statistical decoding unit 52 simply proceeds to the next level (100).

В обоих случаях модуль 52 статистического декодирования вновь сравнивает кодовое слово с базовым кодовым словом для текущего уровня (98). Когда модуль 52 статистического декодирования находит уровень, на котором базовое кодовое слово меньше или равно кодовому слову (98), модуль 52 статистического декодирования определяет остаточную длину базовых кодовых слов на соответствующем уровне (106) и прокручивает поток битов на остаточную длину (108). Затем модуль 52 статистического декодирования вычисляет символ, связанный с кодовым словом (110), на основе смещения для уровня и разности между базовым кодовым словом и декодируемым кодовым словом.In both cases, the statistical decoding unit 52 again compares the codeword with the base codeword for the current level (98). When the statistical decoding unit 52 finds a level at which the base codeword is less than or equal to the codeword (98), the statistical decoding unit 52 determines the residual length of the base codewords at the corresponding level (106) and scrolls the bitstream by the residual length (108). Then, the statistical decoding unit 52 calculates a symbol associated with the codeword (110) based on the offset for the level and the difference between the base codeword and the decoded codeword.

Если взять в качестве примера дерево на фиг.4, то если кодовое слово 0110000000000000, тогда частичное, урезанное кодовое слово с пропущенными 8 начальными битами - 01100000. В этом случае модуль 52 статистического декодирования определяет, что частичное базовое кодовое слово на уровне 3 (00100000) меньше или равно кодовому слову, и идентифицирует остаточную длину равной 3. Модуль 52 статистического декодирования прокручивает поток битов на 3 бита вперед для получения следующего кодового слов. Кроме того, модуль 52 статистического декодирования вычисляет символ для кодового слова, добавляя смещение для уровня 3 к разнице между кодовым словом в буфере потока данных и базовым кодовым словом для этого уровня. Например, модуль 52 статистического декодирования вычисляет код в виде смещения [3] = 12 плюс кодовое слово 01100000 минус 00100000, что эквивалентно 12 плюс 2 = 14. В этом случае 14 - это индекс символа, представленного кодом 011.If we take the tree in FIG. 4 as an example, then if the codeword is 0110000000000000, then the partial, truncated codeword with the missing 8 leading bits is 01100000. In this case, the statistical decoding module 52 determines that the partial base codeword is at level 3 (00100000 ) is less than or equal to the codeword, and identifies a residual length of 3. The statistical decoding unit 52 scrolls the bitstream 3 bits forward to obtain the next codeword. In addition, the statistical decoding unit 52 computes the symbol for the codeword by adding an offset for level 3 to the difference between the codeword in the data stream buffer and the base codeword for that level. For example, statistical decoding unit 52 computes the code as an offset [3] = 12 plus codeword 01100000 minus 00100000, which is equivalent to 12 plus 2 = 14. In this case, 14 is the index of the character represented by code 011.

Способ, изображенный на фиг.11, может использовать преимущества очень компактной структуры данных и весьма эффективное использование памяти, как описано в другом месте настоящей заявки. В результате при реализации такого способа модуль 52 статистического декодирования может обеспечить повышенную эффективность, в том числе уменьшенные затраты на обработку, уменьшенное использование памяти и повышенную скорость обработки, причем все это желательно иметь в устройствах декодирования видеоданных и в других устройствах, выполненных с возможностью распаковки и декодирования данных.The method depicted in FIG. 11 can take advantage of a very compact data structure and very efficient use of memory, as described elsewhere in this application. As a result, when implementing this method, the statistical decoding module 52 can provide increased efficiency, including reduced processing costs, reduced memory usage and increased processing speed, all of which it is desirable to have in video decoding devices and in other devices capable of unpacking and decoding data.

На фиг.12 приведена блок-схема последовательности операций, иллюстрирующая способ построения адаптивных блочных кодов в соответствии со вторым общим аспектом настоящего изобретения. Способ на фиг.12 можно реализовать в процессоре, находящемся в кодере, или в процессоре общего назначения для поддержки эффективного, непосредственного построения адаптивных блочных кодов. Как показано на фиг. 12, процессор получает набор слов (112), подлежащих кодированию. Структура данных, представляющая собой результирующую кодовую структуру, может храниться в памяти внутри кодера, декодера или в том, и в другом. Слова могут быть блоками двоичных кодов. После определения весов слов (114) процессор присваивает группы кодовых слов словам на основе весов (116). Группы кодовых слов включают в себя кодовые слова для слов с одинаковым весом k и могут охватывать два соседних уровня дерева кодирования, например, как показано на фиг.6.12 is a flowchart illustrating a method for constructing adaptive block codes in accordance with a second general aspect of the present invention. The method of FIG. 12 can be implemented in a processor located in an encoder, or in a general-purpose processor to support efficient, direct construction of adaptive block codes. As shown in FIG. 12, the processor obtains a set of words (112) to be encoded. The data structure, which is the resulting code structure, can be stored in memory inside the encoder, decoder, or both. Words can be blocks of binary codes. After determining the word weights (114), the processor assigns groups of code words to words based on the weights (116). The codeword groups include codewords for words with the same weight k and can span two adjacent levels of the coding tree, for example, as shown in FIG. 6.

Как показано далее на фиг.12, процессор присваивает подгруппы словам одной группы на основе длин слов (118). В частности, группа может включать в себя первую подгруппу и вторую подгруппу. Первая подгруппа содержит одно или несколько кодовых слов, имеющих одинаковую длину и одинаковый вес. Аналогично, вторая подгруппа содержит одно или несколько кодовых слов, имеющих одинаковую длину и одинаковый вес. Однако, длина кодовых слов в первой подгруппе меньше длины кодовых слов во второй подгруппе. Таким образом, каждая подгруппа включает в себя кодовые слова, имеющие одинаковый вес и находящиеся на одном уровне в дереве кодирования.As shown further in FIG. 12, the processor assigns subgroups to the words of one group based on word lengths (118). In particular, a group may include a first subgroup and a second subgroup. The first subgroup contains one or more code words having the same length and the same weight. Similarly, the second subgroup contains one or more code words having the same length and the same weight. However, the codeword length in the first subgroup is less than the codeword length in the second subgroup. Thus, each subgroup includes codewords that have the same weight and are at the same level in the encoding tree.

Процессор идентифицирует базовое кодовое слово для каждой подгруппы (120). Базовое кодовое слово - это наименьшее кодовое слово в подгруппе. В примере на фиг.6 базовое кодовое слово для подгруппы 68A - 001. Однако подгруппа 68 дополнительно включает в себя кодовые слова 010 и 011 помимо базового кодового слова 001. В этом примере кодовые слова в подгруппе упорядочиваются в лексикографическом порядке слов, который они представляют, так что коды могут быть легко и непосредственно вычислены при сравнительно небольшом объеме вычислений.The processor identifies the base codeword for each subgroup (120). A base codeword is the smallest codeword in a subgroup. In the example of FIG. 6, the base codeword for subgroup 68A is 001. However, subgroup 68 further includes codewords 010 and 011 in addition to base codeword 001. In this example, codewords in the subgroup are ordered in the lexicographic word order that they represent, so that codes can be easily and directly calculated with a relatively small amount of computation.

Число элементов в первой подгруппе каждой группы может использоваться для вычисления кодовых слов. Для этой цели процессор хранит число элементов в первой подгруппе каждой группы (122), а также хранит отображение (124) индекса группы, отображение (126) длины кодов подгруппы и отображение (128) базового кодового слова подгруппы. Отображение индекса группы может идентифицировать позицию кодового слова для слова в группе, в которой находится это кодовое слово. Отображение длины кодов подгруппы может идентифицировать длину кодов внутри определенной подгруппы. Отображение базового кодового слова подгруппы может идентифицировать базовое кодовое слово, связанное с каждой подгруппой. В целом код может быть построен из базового кодового слова для определенной подгруппы, если известен индекс слова в группе. Сохраненная информация может храниться в структуре данных, к которой могут обращаться кодер, декодер или и то, и другое.The number of elements in the first subgroup of each group can be used to calculate codewords. For this purpose, the processor stores the number of elements in the first subgroup of each group (122), and also stores the group index display (124), the subgroup code length display (126) and the subgroup base code word display (128). The group index display may identify the position of the codeword for the word in the group in which the codeword is located. The display of the length of the codes of a subgroup can identify the length of the codes within a specific subgroup. The display of the base codeword of a subgroup can identify the base codeword associated with each subgroup. In general, a code can be constructed from a basic codeword for a particular subgroup if the index of the word in the group is known. The stored information may be stored in a data structure that can be accessed by an encoder, decoder, or both.

На фиг.13 приведена блок-схема последовательности операций, иллюстрирующей способ кодирования блоков при помощи кодов переменной длины, построенных согласно способу на фиг.12 и в соответствии со вторым общим аспектом настоящего изобретения. Способ на фиг.13 может быть реализован, например, в блоке статистического кодирования, такого как модуль 46 статистического кодирования на фиг.2. Способ, изображенный на фиг.13, может быть реализован при помощи алгоритма, идентичного или аналогичного алгоритму, приведенному в таблице 7. Как показано на фиг.13, для кодирования данного слова модуль 46 статистического кодирования получает его вес (130) и индекс группы (132). Используя вес слова, модуль 46 статистического кодирования определяет индекс группы для слова (132) в рамках соответствующего дерева кодирования. Индекс In,k(w) группы определяет индекс (позицию) слова w в группе Wn,k, которая хранит слова в лексикографическом порядке.FIG. 13 is a flowchart illustrating a method of encoding blocks using variable-length codes constructed according to the method of FIG. 12 and in accordance with a second general aspect of the present invention. The method of FIG. 13 may be implemented, for example, in a statistical coding unit, such as statistical encoding unit 46 in FIG. 2. The method shown in Fig. 13 can be implemented using an algorithm identical or similar to the algorithm shown in Table 7. As shown in Fig. 13, to encode this word, the statistical encoding module 46 receives its weight (130) and the group index ( 132). Using the word weight, the statistical coding unit 46 determines the group index for the word (132) within the corresponding coding tree. The index I n, k (w) of the group defines the index (position) of the word w in the group W n, k , which stores the words in lexicographic order.

Модуль 46 статистического кодирования сравнивает индекс группы с числом элементов nk в первой подгруппе группы, в которой находится кодовое слово для входного слова. В частности, модуль 46 статистического кодирования определяет, является ли индекс группы большим или равным числу элементов в первой подгруппе (134). Если является, модуль 46 статистического кодирования выбирает в группе вторую подгруппу (138), то есть подгруппу 1, и уменьшает значение индекса группы (140). В частности, значение индекса группы уменьшается на число элементов в первой подгруппе nk. Если индекс группы не является большим или равным числу элементов в первой подгруппе (134), модуль 46 статистического кодирования выбирает первую подгруппу (136), то есть подгруппу 0. Каждая подгруппа имеет свое собственное базовое кодовое слово. Модуль 46 статистического кодирования получает базовое кодовое слово для выбранной подгруппы (142) и вычисляет кодовое слово на основе суммы базового кодового слова и значения индекса группы (144).The statistical coding unit 46 compares the group index with the number of elements n k in the first subgroup of the group in which the code word for the input word is located. In particular, statistical coding unit 46 determines whether the group index is greater than or equal to the number of elements in the first subgroup (134). If it is, statistical coding unit 46 selects a second subgroup (138) in the group, that is, subgroup 1, and decreases the value of the group index (140). In particular, the value of the group index decreases by the number of elements in the first subgroup n k . If the group index is not greater than or equal to the number of elements in the first subgroup (134), the statistical coding unit 46 selects the first subgroup (136), that is, the subgroup 0. Each subgroup has its own base codeword. The statistical coding unit 46 obtains the base codeword for the selected subgroup (142) and calculates the codeword based on the sum of the base codeword and the group index value (144).

Если обратиться в качестве иллюстрации к примеру дерева кодирования на фиг.6, то если предположить, что, например, вес слова, подлежащего кодированию, равен 2, значение индекса группы равно 2 и число элементов в первой подгруппе равно 3, что соответствует группе на уровнях 3 и 4 дерева кодирования, то в этом случае модуль 46 статистического кодирования выбирает первую подгруппу (подгруппа 0), поскольку значение индекса группы (2) меньше числа элементов (3) в первой подгруппе. В результате базовое кодовое слово - 001. Для кодирования слова модуль 46 статистического кодирования добавляет значение индекса группы 2 к базовому кодовому слову 001, что дает кодовое слово 011.If we refer to the example of the encoding tree in Fig. 6 as an illustration, then assuming that, for example, the weight of the word to be encoded is 2, the index value of the group is 2, and the number of elements in the first subgroup is 3, which corresponds to the group at the levels 3 and 4 of the encoding tree, then in this case the statistical encoding module 46 selects the first subgroup (subgroup 0), since the index value of the group (2) is less than the number of elements (3) in the first subgroup. As a result, the base codeword is 001. For encoding the word, the statistical coding unit 46 adds the group 2 index value to the base codeword 001, which gives the codeword 011.

Если для этой же группы значение индекса группы равнялось 3, то модуль 46 статистического кодирования выбрал бы вторую подгруппу (подгруппа 1). Однако модуль 46 статистического кодирования уменьшил бы значение индекса группы на число nk элементов в первой подгруппе (подгруппа 0). В этом случае значение индекса группы, равное 3, было бы уменьшено на 3, что равно нулю, и кодовое слово было бы вычислено как базовое кодовое слово 0001 для второй подгруппы плюс значение индекса группы 0, что дает кодовое слово 0001.If for the same group the group index value was 3, then the statistical coding module 46 would select the second subgroup (subgroup 1). However, statistical coding unit 46 would reduce the group index value by the number n k elements in the first subgroup (subgroup 0). In this case, the group index value of 3 would be reduced by 3, which is zero, and the codeword would be calculated as the base codeword 0001 for the second subgroup plus the group index value of 0, which gives the codeword 0001.

Помимо вычисления кодового слова для входного слова модуль 46 статистического кодирования может получать длину кодов в выбранной подгруппе (146). В вышеприведенном примере для подгруппы 0 на уровне 3 длина кодов была бы равна 3. Блок статистического кодирования выдает в поток битов вычисленное кодовое слово и длину кода подгруппы для сохранения и/или передачи другому устройству, такому как устройство декодирования, включающее в себя блок статистического декодирования, такой как модуль 52 статистического декодирования.In addition to calculating the codeword for the input word, the statistical coding module 46 may obtain the length of the codes in the selected subgroup (146). In the above example, for subgroup 0 at level 3, the length of the codes would be 3. The statistical encoding unit outputs the calculated codeword and the length of the subgroup code to the bitstream for storage and / or transmission to another device, such as a decoding device including a statistical decoding unit such as statistical decoding unit 52.

На фиг.14 приведена блок-схема, иллюстрирующая способ декодирования кодов переменной длины, построенных согласно способам на фиг.12 и фиг. 13 и в соответствии со вторым общим аспектом настоящего изобретения. Способ, изображенный на фиг.14, может быть реализован при помощи алгоритма, идентичного или аналогичного алгоритму, приведенному в таблице 8. Коды переменной длины могут быть получены от кодера, такого как кодер, включающий в себя модуль 46 статистического кодирования. Коды переменной длины могут быть получены и декодированы модулем 52 статистического декодирования. Как показано на фиг.14, модуль 52 статистического декодирования получает кодовое слово из поступающего потока битов (150) и сравнивает кодовое слово с базовым кодовым словом подгруппы. В частности, модуль 52 статистического декодирования может искать соответствующее дерево кодирования для выровненного влево базового слова подгруппы, которое меньше или равно содержимому кодового слова, полученного из буфера потока битов (152).FIG. 14 is a flowchart illustrating a method for decoding variable length codes constructed according to the methods of FIG. 12 and FIG. 13 and in accordance with a second general aspect of the present invention. The method depicted in FIG. 14 may be implemented using an algorithm identical or similar to the algorithm shown in Table 8. Variable-length codes may be obtained from an encoder, such as an encoder, including a statistical encoding unit 46. Variable length codes can be obtained and decoded by the statistical decoding unit 52. As shown in FIG. 14, the statistical decoding unit 52 obtains a codeword from an incoming bitstream (150) and compares the codeword with the base codeword of the subgroup. In particular, statistical decoding unit 52 may search for a corresponding coding tree for a left-aligned subgroup base word that is less than or equal to the contents of the code word obtained from the bitstream buffer (152).

Если базовое кодовое слово подгруппы в подгруппе на данном уровне дерева не является меньшим или равным кодовому слову (152), то модуль 52 статистического декодирования переходит к следующей подгруппе на следующем уровне (154) дерева и повторяет сравнение. Этот процесс продолжается на поэтапной основе до тех пор, пока базовое кодовое слово не станет больше или равно кодовому слову, принятому из потока битов, то есть до тех пор, пока модуль 52 статистического декодирования не достигнет уровня, на котором базовое кодовое слово подгруппы меньше или равно кодовому слову. При сравнении кодового слова и базовых кодовых слов модуль 52 статистического декодирования может использовать частичные, прирастающие значения базовых кодовых слов для дополнительного уменьшения памяти в соответствии с первым аспектом настоящего изобретения. В частности, несколько начальных битов можно пропустить для улучшения эффективности использования памяти, как это описано выше.If the base codeword of the subgroup in the subgroup at a given level of the tree is not less than or equal to the codeword (152), then the statistical decoding module 52 proceeds to the next subgroup at the next level (154) of the tree and repeats the comparison. This process continues on a phased basis until the base codeword is greater than or equal to the codeword received from the bitstream, that is, until the statistical decoding unit 52 reaches a level at which the base codeword of the subgroup is less than or equals code word. When comparing the codeword and the base codewords, the statistical decoding unit 52 may use partial, incremental values of the base codewords to further reduce memory in accordance with the first aspect of the present invention. In particular, a few leading bits can be skipped to improve memory efficiency, as described above.

Когда достигается уровень дерева кодирования, на котором базовое кодовое слово подгруппы меньше или равно кодовому слову, модуль 52 статистического декодирования определяет длину кода для подгруппы (156) и прокручивает поток битов на эту длину для пропуска декодированных битов и изоляции кодового слова. Модуль 52 статистического декодирования может определить позицию кодового слова в подгруппе при помощи базового кодового слова (158). Например, модуль 52 статистического декодирования может вычесть кодовое слово потока битов из базового кодового слова для получения разности позиций между кодовым словом и базовым кодовым словом.When the level of the encoding tree is reached at which the base codeword of the subgroup is less than or equal to the codeword, the statistical decoding unit 52 determines the code length for the subgroup (156) and scrolls the bitstream by this length to skip the decoded bits and isolate the codeword. The statistical decoding unit 52 may determine the position of the codeword in a subgroup using the base codeword (158). For example, statistical decoding unit 52 may subtract the codeword of the bitstream from the base codeword to obtain a position difference between the codeword and the base codeword.

Если взять в качестве примера дерево кодирования на фиг.6, то если поступающее кодовое слово - 0110000000000000, модуль 52 статистического декодирования идентифицирует базовое кодовое слово 0010000000000000 как самое верхнее базовое слово кодовое слово подгруппы, которое меньше или равно кодовому слову. Это базовое кодовое слово связано с первой подгруппой в группе на уровнях 3 и 4. После определения длины кода (3) подгруппы, связанной с базовым кодовым словом, модуль 52 статистического декодирования может прокрутить поток битов для пропуска декодированных битов. Модуль 52 статистического декодирования может определить индекс группы для кодового слова посредством вычитания базового кодового слова из кодового слова, полученного из потока битов. В данном примере 011 минус 001 дает 010, что дает значение индекса группы, равное 2.If we take the coding tree of FIG. 6 as an example, then if the incoming codeword is 0110000000000000, the statistical decoding unit 52 identifies the base codeword 0010000000000000 as the highest base word, the codeword of the subgroup, which is less than or equal to the codeword. This base codeword is associated with the first subgroup in the group at levels 3 and 4. After determining the code length (3) of the subgroup associated with the base codeword, the statistical decoding unit 52 can scroll the bitstream to skip the decoded bits. The statistical decoding unit 52 may determine the group index for the codeword by subtracting the base codeword from the codeword obtained from the bitstream. In this example, 011 minus 001 gives 010, which gives a group index value of 2.

Модуль 52 статистического декодирования может также определить вес кодового слова (160), например, на основе уровня подгруппы в дереве кодирования. Кроме того, модуль 52 статистического декодирования может определить индекс подгруппы (162), то есть индекс выбранной подгруппы в дереве кодирования. Используя вес, позицию и индекс подгруппы, модуль 52 статистического декодирования определяет индекс слова (164), тем самым декодируя кодовое слово, полученное из потока данных, для получения слова, представленного кодовым словом. Повторим еще раз, что в некоторых вариантах выполнения способ декодирования, выполняемый модулем 52 статистического декодирования, может соответствовать процессу, приведенному в таблице 8.The statistical decoding unit 52 may also determine the weight of the codeword (160), for example, based on the level of the subgroup in the encoding tree. In addition, the statistical decoding unit 52 may determine the index of the subgroup (162), that is, the index of the selected subgroup in the encoding tree. Using the weight, position and index of the subgroup, the statistical decoding unit 52 determines the index of the word (164), thereby decoding the codeword obtained from the data stream to obtain the word represented by the codeword. Once again, in some embodiments, the decoding method performed by the statistical decoding unit 52 may correspond to the process shown in Table 8.

Специалистам в данной области техники должно быть понятно, что информация и сигналы могут быть представлены с использованием самых различных технологий и методов. Например, данные, инструкции, команды, информация, сигналы, биты, символы и элементы, которые могут упоминаться в вышеприведенном описании, могут быть представлены напряжением, током, электромагнитными волнами, магнитными полями или частицами, оптическими полями или частицами, либо любым сочетанием вышеперечисленного.Specialists in the art should understand that information and signals can be represented using a variety of technologies and methods. For example, data, instructions, commands, information, signals, bits, symbols and elements that may be mentioned in the above description may be represented by voltage, current, electromagnetic waves, magnetic fields or particles, optical fields or particles, or any combination of the above.

Специалистам в данной области техники должно быть также понятно, что приведенные в качестве иллюстрации различные логические блоки, модули, схемы и этапы алгоритма, описанные в связи с раскрытыми вариантами осуществления, могут быть реализованы в виде электронных аппаратных средств, компьютерных программных средств или сочетанием обоих видов средств. Для более понятной иллюстрации этой взаимозаменяемости аппаратных и программных средств, приведенных в качестве иллюстрации, различные компоненты, блоки, модули, схемы и этапы были описаны выше с точки зрения их функциональных возможностей. Будут ли такие функциональные возможности реализованы в виде аппаратных или программных средств, зависит от конкретной области применения и ограничений на конструкцию, накладываемых системой в целом. Квалифицированные специалисты могут реализовать описанные функциональные возможности различными способами для каждой конкретной области применения, но такие решения в области реализации не должны считаться вызывающими отклонение от объема настоящего изобретения.Those skilled in the art will also appreciate that the various logical blocks, modules, circuits, and algorithm steps described by way of illustration described in connection with the disclosed embodiments may be implemented as electronic hardware, computer software, or a combination of both funds. To more clearly illustrate this interchangeability of the hardware and software provided by way of illustration, various components, blocks, modules, circuits, and steps have been described above in terms of their functionality. Whether such functionality will be implemented in the form of hardware or software depends on the specific application and design restrictions imposed by the system as a whole. Skilled artisans may implement the described functionality in varying ways for each particular application, but such implementation decisions should not be construed as causing a departure from the scope of the present invention.

Описанные способы могут быть реализованы аппаратными средствами, программными средствами, аппаратно-программными средствами или любым сочетанием вышеперечисленного. Такие способы могут быть реализованы в любом из множества устройств, таких как компьютеры общего назначения, телефонные устройства беспроводной связи или устройства на интегральных схемах, имеющие множество областей применения, в том числе применение в телефонных устройствах беспроводной связи и других устройствах. Любые характеристики, описанные в виде модулей или компонентов, могут быть реализованы совместно в объединенном логическом устройстве или отдельно в виде отдельных, но взаимодействующих логических устройств. В случае программной реализации эти способы могут быть реализованы, по меньшей мере, частично, посредством машиночитаемого носителя для хранения данных, содержащего программный код, включающий в себя команды, которые при исполнении выполняют один или несколько из вышеописанных способов. Машиночитаемый носитель для хранения данных может быть частью компьютерного программного продукта. Машиночитаемый носитель может содержать оперативную память (RAM), такую как синхронная динамическая оперативная память (SDRAM), постоянную память (ROM), энергонезависимую оперативную память (NVRAM), электрически стираемую программируемую постоянную память (EEPROM), флэш-память, магнитные или оптические носители для хранения данных и т. п. Дополнительно к этому или вместо этого эти способы могут быть реализованы, по меньшей мере, частично, машиночитаемой средой передачи, которая переносит или передает программный код в виде команд или структур данных и которая может быть доступна, считываема и/или исполняема для компьютера, такая как распространяющиеся сигналы или волны.The described methods can be implemented in hardware, software, hardware-software, or any combination of the above. Such methods can be implemented in any of a variety of devices, such as general-purpose computers, wireless telephone devices, or integrated circuit devices having many fields of application, including applications in wireless telephone devices and other devices. Any characteristics described in the form of modules or components can be implemented together in an integrated logical device or separately as separate, but interacting logical devices. In the case of a software implementation, these methods can be implemented, at least in part, by a computer-readable medium for storing data containing program code including instructions that, when executed, execute one or more of the above methods. Computer-readable storage media may be part of a computer program product. A computer-readable medium may comprise random access memory (RAM), such as synchronous dynamic random access memory (SDRAM), read-only memory (ROM), non-volatile random access memory (NVRAM), electrically erasable programmable read-only memory (EEPROM), flash memory, magnetic or optical media for storing data, etc. In addition to or instead, these methods can be implemented, at least in part, by a computer-readable transmission medium that transfers or transmits program code in the form of instructions or data structures which may be available, readable and / or executable computer, such as propagate signals or waves.

Программный код может исполняться одним или несколькими процессорами, таким как один или несколько процессоров цифровых сигналов (DPS), микропроцессоры общего назначения, специализированные интегральные схемы (ASIC), программируемые пользователем большие интегральные схемы (FPGA) или другие эквивалентные интегральные или дискретные логические схемы. Процессор общего назначения может быть микропроцессором, но в альтернативном варианте процессор может быть любым обычным процессором, контроллером, микроконтроллером или конечным автоматом. Процессор может быть также реализован в виде сочетания вычислительных устройств, например, в виде сочетания DSP и микропроцессора, множества микропроцессоров, одного или нескольких микропроцессоров в сочетании c ядром DSP и любой иной такой конфигурации. Соответственно, термин "процессор" в данной заявке может относиться к любой из вышеперечисленных структур или к любой другой структуре, подходящей для реализации описанных в заявке способов. Кроме того, в некоторых аспектах описанные функциональные возможности можно обеспечить в пределах специализированных программных модулей или аппаратных модулей, выполненных с возможностью кодирования или декодирования, или можно встроить в объединенный кодер-декодер (CODEC) видеоданных.The program code may be executed by one or more processors, such as one or more digital signal processors (DPS), general purpose microprocessors, specialized integrated circuits (ASICs), user programmable large integrated circuits (FPGAs), or other equivalent integrated or discrete logic circuits. A general purpose processor may be a microprocessor, but in the alternative, the processor may be any conventional processor, controller, microcontroller, or state machine. A processor can also be implemented as a combination of computing devices, for example, in the form of a combination of a DSP and a microprocessor, a plurality of microprocessors, one or more microprocessors in combination with a DSP core, and any other such configuration. Accordingly, the term "processor" in this application may refer to any of the above structures or to any other structure suitable for implementing the methods described in the application. In addition, in some aspects, the described functionality may be provided within specialized software modules or hardware modules capable of encoding or decoding, or may be integrated into video codec (CODEC).

Были описаны различные варианты осуществления изобретения. Эти и другие варианты изобретения находятся в пределах объема нижеприведенной формулы.Various embodiments of the invention have been described. These and other embodiments of the invention are within the scope of the following claims.

Claims (83)

1. Способ создания данных для кодирования кодовых слов переменной длины, содержащий этапы, на которых:
генерируют частичные значения базовых кодовых слов, причем базовые кодовые слова соответствуют уровням дерева кодирования, определяющего канонические кодовые слова переменной длины, и причем частичные значения основаны на смещении базовых кодовых слов на фиксированное число битов;
генерируют показатель пропуска, указывающий декодеру пропустить фиксированное число битов в потоке битов, подлежащем декодированию, перед переходом к выбранному уровню дерева кодирования; и
сохраняют частичные значения и показатель пропуска в структуре данных в памяти.
1. A method of creating data for encoding code words of variable length, comprising the steps of:
generating partial values of the base codewords, the base codewords corresponding to the levels of the coding tree defining canonical codewords of variable length, and the partial values being based on the shift of the base codewords by a fixed number of bits;
generating a skip indicator instructing the decoder to skip a fixed number of bits in the bit stream to be decoded before moving to a selected level of the encoding tree; and
store partial values and the skip rate in the data structure in memory.
2. Способ по п.1, дополнительно содержащий этапы, на которых:
генерируют значения, представленные базовыми кодовыми словами;
генерируют длины частичных значений базовых кодовых слов и сохраняют значения и длины в структуре данных в памяти.
2. The method according to claim 1, additionally containing stages in which:
generating values represented by basic codewords;
generate lengths of partial values of the base codewords and store the values and lengths in the data structure in memory.
3. Способ по п.1, дополнительно содержащий этап, на котором сохраняют структуру данных в памяти одного из декодера видеоданных, декодера изображений и звукового декодера или голосового декодера.3. The method according to claim 1, further comprising storing the data structure in the memory of one of the video decoder, image decoder and sound decoder or voice decoder. 4. Способ по п.1, в котором некоторые из уровней дерева кодирования включают в себя кодовые слова, расположенные в лексикографическом порядке относительно значений, представленных кодовыми словами, и каждое из базовых кодовых слов является лексикографически наименьшим кодовым словом на соответствующем уровне в дереве кодирования.4. The method according to claim 1, in which some of the levels of the coding tree include codewords arranged in lexicographic order relative to the values represented by the codewords, and each of the base codewords is the lexicographically smallest codeword at the corresponding level in the coding tree. 5. Способ по п.1, в котором частичные значения базовых кодовых слов представляют собой удаление фиксированного числа начальных битов из базовых кодовых слов.5. The method according to claim 1, in which the partial values of the base code words are the removal of a fixed number of leading bits from the base code words. 6. Способ по п.5, в котором при отсутствии упомянутого смещения базовое кодовое слово на выбранном уровне дерева распространяется, по меньшей мере, частично, на удаленное число начальных битов.6. The method according to claim 5, in which, in the absence of said offset, the base codeword at a selected tree level extends, at least in part, to a remote number of start bits. 7. Способ по п.1, дополнительно содержащий этап, на котором декодируют одно из кодовых слов из потока битов с кодовыми словами при помощи хранящейся структуры данных, причем декодирование содержит этапы, на которых:
осуществляют поиск уровней дерева кодирования для выбранного значения из частичных значений базовых кодовых слов, которое меньше или равно кодовому слову из потока битов с кодовыми словами;
пропускают фиксированное число битов в потоке битов с кодовыми словами перед переходом к выбранному уровню дерева кодирования в ответ на показатель пропуска;
вычисляют одно из множества значений, соответствующих кодовому слову, на основе разности между выбранным значением из частичных значений базовых кодовых слов, которое меньше или равно кодовому слову, и кодовым словом и индекс выбранного значения из частичных значений базовых кодовых слов, которое меньше или равно кодовому слову.
7. The method according to claim 1, further comprising the step of decoding one of the codewords from the bitstream with the codewords using a stored data structure, the decoding comprising the steps of:
searching for coding tree levels for a selected value from partial values of the base codewords that is less than or equal to the codeword from the bitstream with the codewords;
skip a fixed number of bits in the bitstream with the code words before moving to the selected level of the coding tree in response to the skip rate;
one of the plurality of values corresponding to the codeword is calculated based on the difference between the selected value from the partial values of the base codewords that is less than or equal to the codeword and the codeword and the index of the selected value from the partial values of the base codewords that is less than or equal to the codeword .
8. Способ по п.7, дополнительно содержащий этап, на котором представляют выходные данные пользователю на основе, по меньшей мере, частично, вычисленного значения.8. The method according to claim 7, further comprising the step of presenting the output to the user based at least in part on the calculated value. 9. Способ по п.1, дополнительно содержащий этап, на котором кодируют значения кодовыми словами, согласующимися с деревом кодирования, причем значения, представленные кодовыми словами, представляют, по меньшей мере, одно из видеоданных, данных изображения, голосовых данных или звуковых данных.9. The method of claim 1, further comprising encoding the values with codewords consistent with the coding tree, the values represented by codewords representing at least one of video data, image data, voice data, or audio data. 10. Устройство для создания данных для кодирования кодовых слов переменной длины, содержащее:
средство генерации частичных значений базовых кодовых слов, причем базовые кодовые слова соответствуют уровням дерева кодирования, определяющего канонические кодовые слова переменной длины, и причем частичные значения основаны на смещении базовых кодовых слов на фиксированное число битов;
средство генерации показателя пропуска, указывающего декодеру пропустить фиксированное число битов в потоке битов, подлежащем декодированию, перед переходом к выбранному уровню дерева кодирования; и
средство сохранения частичных значений и показателя пропуска в структуре данных в памяти.
10. A device for creating data for encoding codewords of variable length, containing:
means for generating partial values of the base codewords, wherein the base codewords correspond to levels of a coding tree defining canonical codewords of variable length, and wherein the partial values are based on shifting the base codewords by a fixed number of bits;
means for generating a skip indicator instructing the decoder to skip a fixed number of bits in the bit stream to be decoded before moving to a selected level of the encoding tree; and
means for storing partial values and a skip rate in a data structure in memory.
11. Устройство по п.10, дополнительно содержащее:
средство генерации значений, представленных базовыми кодовыми словами;
средство генерации длин частичных значений базовых кодовых слов, и
средство сохранения значений и длин в структуре данных в памяти.
11. The device according to claim 10, further comprising:
means for generating values represented by basic codewords;
means for generating lengths of partial values of the base codewords, and
means for storing values and lengths in a data structure in memory.
12. Устройство по п.10, дополнительно содержащее средство сохранения структуры данных в памяти одного из декодера видеоданных, декодера изображений, звукового декодера или голосового декодера.12. The device of claim 10, further comprising means for storing the data structure in the memory of one of the video decoder, image decoder, audio decoder, or voice decoder. 13. Устройство по п.10, в котором некоторые из уровней дерева кодирования включают в себя кодовые слова, расположенные в лексикографическом порядке относительно значений, представленных кодовыми словами, и каждое из базовых кодовых слов является лексикографически наименьшим кодовым словом на соответствующем уровне в дереве кодирования.13. The device according to claim 10, in which some of the levels of the coding tree include codewords arranged in lexicographic order relative to the values represented by the codewords, and each of the basic codewords is the lexicographically smallest codeword at the corresponding level in the coding tree. 14. Устройство по п.10, в котором частичные значения базовых кодовых слов представляют собой удаление фиксированного числа начальных битов из базовых кодовых слов.14. The device according to claim 10, in which the partial values of the base code words are the removal of a fixed number of initial bits from the base code words. 15. Устройство по п.14, в котором при отсутствии упомянутого смещения базовое кодовое слово на выбранном уровне дерева распространяется, по меньшей мере, частично, на удаленное число начальных битов.15. The device according to 14, in which, in the absence of said offset, the base codeword at a selected tree level extends, at least in part, to a remote number of start bits. 16. Устройство по п.10, дополнительно содержащее средство декодирования одного из кодовых слов из потока битов с кодовыми словами при помощи сохраненной структуры данных, причем средство декодирования содержит:
средство поиска уровней дерева кодирования для выбранного значения из частичных значений базовых кодовых слов, которое меньше или равно кодовому слову из потока битов с кодовыми словами;
средство пропуска фиксированного числа битов в потоке битов с кодовыми словами перед переходом к выбранному уровню дерева кодирования в ответ на показатель пропуска;
средство вычисления одного из множества значений, соответствующих кодовому слову, на основе разности между выбранным значением из частичных значений базовых кодовых слов, которое меньше или равно кодовому слову, и кодовым словом и индекса выбранного значения из частичных значений базовых кодовых слов, которое меньше или равно кодовому слову.
16. The device of claim 10, further comprising means for decoding one of the codewords from the bitstream with the codewords using the stored data structure, the decoding means comprising:
means for searching the levels of the coding tree for a selected value from partial values of the base codewords that is less than or equal to the codeword from the bitstream with codewords;
means for skipping a fixed number of bits in the bitstream with codewords before moving to a selected level of the coding tree in response to a skip rate;
means for calculating one of a plurality of values corresponding to the codeword based on the difference between the selected value from the partial values of the base codewords that is less than or equal to the codeword and the codeword and the index of the selected value from the partial values of the base codewords that is less than or equal to the codeword a word.
17. Устройство по п.16, дополнительно содержащее средство представления выходных данных пользователю на основе, по меньшей мере, частично, вычисленного значения.17. The device according to clause 16, further comprising means for presenting the output to the user based at least in part on the calculated value. 18. Устройство по п.10, дополнительно содержащее средство кодирования значений кодовыми словами, согласующимися с деревом кодирования, причем значения, представленные кодовыми словами, представляют, по меньшей мере, одно из видеоданных, данных изображения, голосовых данных или звуковых данных.18. The device of claim 10, further comprising means for encoding the values with code words consistent with the coding tree, the values represented by code words representing at least one of video data, image data, voice data, or audio data. 19. Материальный машиночитаемый носитель, содержащий структуру данных, хранящую частичные значения базовых кодовых слов, причем базовые кодовые слова соответствуют уровням дерева кодирования, определяющего канонические кодовые слова переменной длины, и причем частичные значения основаны на смещении базовых кодовых слов на фиксированное число битов, и показатель пропуска, указывающий декодеру пропустить фиксированное число битов в потоке битов, подлежащем декодированию, перед переходом к выбранному уровню дерева кодирования.19. A material machine-readable medium containing a data structure storing partial values of the base codewords, the base codewords corresponding to the levels of the coding tree defining canonical codewords of variable length, and the partial values being based on the shift of the base codewords by a fixed number of bits, and an indicator a pass indicating the decoder to skip a fixed number of bits in the bitstream to be decoded before moving to a selected level of the encoding tree. 20. Машиночитаемый носитель по п.19, в котором структура данных дополнительно хранит значения, представленные базовыми кодовыми словами, и длины частичных значений базовых кодовых слов.20. The computer-readable medium of claim 19, wherein the data structure further stores values represented by basic codewords and lengths of partial values of the basic codewords. 21. Машиночитаемый носитель по п.19, в котором некоторые из уровней дерева кодирования включают в себя кодовые слова, расположенные в лексикографическом порядке относительно значений, представленных кодовыми словами, и каждое из базовых кодовых слов является лексикографически наименьшим кодовым словом на соответствующем уровне в дереве кодирования.21. The computer-readable medium of claim 19, wherein some of the levels of the coding tree include codewords arranged in lexicographic order relative to the values represented by codewords, and each of the base codewords is the lexicographically smallest codeword at a corresponding level in the coding tree . 22. Машиночитаемый носитель по п.19, в котором частичные значения базовых кодовых слов представляют собой удаление фиксированного числа начальных битов из базовых кодовых слов.22. The machine-readable medium of claim 19, wherein the partial values of the base codewords are the removal of a fixed number of start bits from the base codewords. 23. Машиночитаемый носитель по п.22, в котором при отсутствии упомянутого смещения базовое кодовое слово на выбранном уровне дерева распространяется, по меньшей мере, частично, на удаленное число начальных битов.23. The computer-readable medium of claim 22, wherein in the absence of said offset, the base codeword at a selected tree level extends, at least in part, to a remote number of start bits. 24. Машиночитаемый носитель по п.22, в котором значения, представленные кодовыми словами, представляют, по меньшей мере, одно из видеоданных, данных изображения, голосовых данных или звуковых данных.24. The computer-readable medium of claim 22, wherein the values represented by code words represent at least one of video data, image data, voice data, or audio data. 25. Устройство для создания данных для кодирования кодовых слов переменной длины, содержащее:
процессор, выполненный с возможностью генерации частичных значений базовых кодовых слов, причем базовые кодовые слова соответствуют уровням дерева кодирования, определяющего кодовые слова переменной длины, и причем частичные значения основаны на смещении базовых кодовых слов на фиксированное число битов, и генерации показателя пропуска, указывающего декодеру пропустить фиксированное число битов в потоке битов, подлежащем декодированию, перед переходом к выбранному уровню дерева кодирования; и
память, которая хранит частичные значения и показатель пропуска в структуре данных.
25. A device for creating data for encoding codewords of variable length, comprising:
a processor configured to generate partial values of the base codewords, the base codewords corresponding to the levels of the coding tree defining variable-length codewords, and the partial values being based on the shift of the base codewords by a fixed number of bits, and the generation of a skip indicator indicating the decoder to skip a fixed number of bits in the bitstream to be decoded before moving to a selected level of the encoding tree; and
a memory that stores partial values and a skip rate in the data structure.
26. Устройство по п.25, в котором процессор генерирует значения, представленные базовыми кодовыми словами, и генерирует длины частичных значений базовых кодовых слов, а память хранит значения и длины в структуре данных.26. The device according A.25, in which the processor generates the values represented by the basic code words, and generates the lengths of partial values of the basic code words, and the memory stores the values and lengths in the data structure. 27. Устройство по п.25, в котором устройство содержит одно из декодера видеоданных, декодера изображения и звукового декодера или голосового декодера.27. The device according A.25, in which the device contains one of the video decoder, image decoder and sound decoder or voice decoder. 28. Устройство по п.25, в котором некоторые из уровней дерева кодирования включают в себя кодовые слова, расположенные в лексикографическом порядке относительно значений, представленных кодовыми словами, и каждое из базовых кодовых слов является лексикографически наименьшим кодовым словом на соответствующем уровне в дереве кодирования.28. The device according A.25, in which some of the levels of the encoding tree include codewords located in lexicographic order relative to the values represented by code words, and each of the base code words is the lexicographically smallest code word at the corresponding level in the encoding tree. 29. Устройство по п.25, в котором частичные значения базовых кодовых слов представляют собой удаление фиксированного числа начальных битов из базовых кодовых слов.29. The device according A.25, in which the partial values of the base code words are the removal of a fixed number of initial bits from the base code words. 30. Устройство по п.29, в котором при отсутствии упомянутого смещения базовое кодовое слово на выбранном уровне дерева распространяется, по меньшей мере, частично, на удаленное число начальных битов.30. The device according to clause 29, in which, in the absence of said offset, the base codeword at a selected tree level extends, at least in part, to a remote number of start bits. 31. Устройство по п.25, дополнительно содержащее декодер, который декодирует одно из кодовых слов из потока битов с кодовыми словами при помощи хранящейся структуры данных, причем декодер:
ищет уровни дерева кодирования для выбранного значения из частичных значений базовых кодовых слов, которое меньше или равно кодовому слову из потока битов с кодовыми словами;
пропускает фиксированное число битов в потоке битов с кодовыми словами перед переходом к выбранному уровню дерева кодирования в ответ на показатель пропуска;
вычисляет одно значение из множества значений, соответствующих кодовому слову, на основе разности между выбранным значением из частичных значений базовых кодовых слов, которое меньше или равно кодовому слову, и кодовым словом и индекс выбранного значения из частичных значений базовых кодовых слов, которое меньше или равно кодовому слову.
31. The device according A.25, further containing a decoder that decodes one of the code words from the bitstream with code words using the stored data structure, the decoder:
looking for coding tree levels for the selected value from the partial values of the base codewords that is less than or equal to the codeword from the bitstream with the codewords;
skips a fixed number of bits in the bitstream with code words before moving to the selected level of the coding tree in response to the skip rate;
calculates one value from the set of values corresponding to the codeword based on the difference between the selected value from the partial values of the base codewords that is less than or equal to the codeword and the codeword and the index of the selected value from the partial values of the base codewords that is less than or equal to the codeword a word.
32. Устройство по п.31, дополнительно содержащее устройство вывода, которое представляет выходные данные пользователю на основе, по меньшей мере, частично, вычисленного значения.32. The device according to p, optionally containing an output device that presents output to the user based at least in part on the calculated value. 33. Устройство по п.25, в котором значения, представленные кодовыми словами, представляют, по меньшей мере, одно из видеоданных, данных изображения, голосовых данных или звуковых данных.33. The device according A.25, in which the values represented by code words represent at least one of the video data, image data, voice data or audio data. 34. Устройство по п.25, дополнительно содержащее беспроводной приемник, который принимает кодовые слова от кодера по беспроводной связи.34. The device according A.25, optionally containing a wireless receiver that receives code words from the encoder wirelessly. 35. Декодирующее устройство, содержащее:
память, хранящую структуру данных, содержащую частичные значения базовых кодовых слов, причем базовые кодовые слова соответствуют уровням дерева кодирования, определяющего канонические кодовые слова переменной длины, причем частичные значения основаны на смещении базовых кодовых слов на фиксированное число битов, и показатель пропуска, указывающий декодеру пропустить фиксированное число битов в потоке битов, подлежащем декодированию, перед переходом к выбранному уровню дерева кодирования; и
декодер, который обращается к памяти для декодирования одного из кодовых слов из потока битов на основе частичных значений и показателя пропуска в хранящейся структуре данных.
35. A decoding device comprising:
a memory storing a data structure containing partial values of the base codewords, wherein the base codewords correspond to the levels of a coding tree defining canonical codewords of variable length, the partial values being based on the shift of the base codewords by a fixed number of bits, and a skip rate indicating the decoder to skip a fixed number of bits in the bitstream to be decoded before moving to a selected level of the encoding tree; and
a decoder that accesses the memory to decode one of the codewords from the bitstream based on the partial values and the skip rate in the stored data structure.
36. Устройство по п.35, в котором декодер:
осуществляет поиск уровней дерева кодирования для выбранного значения из частичных значений базовых кодовых слов, которое меньше или равно кодовому слову из потока битов с кодовыми словами,
пропускает фиксированное число битов в потоке битов с кодовыми словами перед переходом к выбранному уровню дерева кодирования в ответ на показатель пропуска; и
вычисляет одно значение из множества значений, соответствующих кодовому слову, на основе разности между выбранным значением из частичных значений базовых кодовых слов, которое меньше или равно кодовому слову, и кодовым словом и индекс выбранного значения из частичных значений базовых кодовых слов, которое меньше или равно кодовому слову.
36. The device according to clause 35, in which the decoder:
searches for coding tree levels for a selected value from partial values of the base codewords, which is less than or equal to the codeword from the bitstream with codewords,
skips a fixed number of bits in the bitstream with code words before moving to the selected level of the coding tree in response to the skip rate; and
calculates one value from the set of values corresponding to the codeword based on the difference between the selected value from the partial values of the base codewords that is less than or equal to the codeword and the codeword and the index of the selected value from the partial values of the base codewords that is less than or equal to the codeword a word.
37. Устройство по п.36, дополнительно содержащее устройство вывода, которое представляет выходные данные пользователю на основе, по меньшей мере, частично, вычисленного значения.37. The device according to clause 36, further comprising an output device that presents output to the user based at least in part on the calculated value. 38. Устройство по п.37, в котором структура данных содержит значения, представленные базовыми кодовыми словами, и длины частичных значений базовых кодовых слов.38. The device according to clause 37, in which the data structure contains the values represented by the base code words, and the lengths of the partial values of the base code words. 39. Устройство по п.35, в котором декодер содержит мультимедийное декодирующее устройство, и декодер включает в себя одно из декодера видеоданных, декодера изображения и звукового декодера или голосового декодера.39. The device according to clause 35, in which the decoder contains a multimedia decoding device, and the decoder includes one of a video decoder, image decoder and sound decoder or voice decoder. 40. Устройство по п.35, в котором некоторые из уровней дерева кодирования включают в себя кодовые слова, расположенные в лексикографическом порядке относительно значений, представленных кодовыми словами, и каждое из базовых кодовых слов является лексикографически наименьшим кодовым словом на соответствующем уровне в дереве кодирования.40. The device according to clause 35, in which some of the levels of the encoding tree include codewords located in lexicographic order relative to the values represented by code words, and each of the basic code words is the lexicographically smallest code word at the corresponding level in the encoding tree. 41. Устройство по п.35, в котором частичные значения базовых кодовых слов представляют собой удаление фиксированного числа начальных битов из базовых кодовых слов.41. The device according to clause 35, in which the partial values of the base code words are the removal of a fixed number of initial bits from the base code words. 42. Устройство по п.41, в котором при отсутствии упомянутого смещения базовое кодовое слово на выбранном уровне дерева распространяется, по меньшей мере, частично, на удаленное число начальных битов.42. The device according to paragraph 41, in which, in the absence of said offset, the base codeword at a selected tree level extends, at least in part, to a remote number of start bits. 43. Устройство по п.35, дополнительно содержащее приемник для приема кодовых слов от кодера по беспроводной связи.43. The device according to clause 35, further comprising a receiver for receiving codewords from the encoder wirelessly. 44. Способ декодирования, содержащий этапы, на которых:
обращаются к структуре данных, хранящейся в памяти, причем структура данных содержит частичные значения базовых кодовых слов, причем базовые кодовые слова соответствуют уровням дерева кодирования, определяющего кодовые слова переменной длины, причем частичные значения основаны на смещении базовых кодовых слов на фиксированное число битов, и показатель пропуска, указывающий декодеру пропустить фиксированное число битов в потоке битов, подлежащем декодированию, перед переходом к выбранному уровню дерева кодирования; и
декодируют одно из кодовых слов из потока битов на основе частичных значений и показателя пропуска в хранящейся структуре данных.
44. A decoding method, comprising the steps of:
referring to the data structure stored in the memory, the data structure containing partial values of the base codewords, the base codewords corresponding to the levels of the coding tree defining codewords of variable length, the partial values being based on the shift of the base codewords by a fixed number of bits, and the exponent a pass instructing the decoder to skip a fixed number of bits in the bit stream to be decoded before moving to a selected level of the encoding tree; and
decode one of the code words from the bitstream based on the partial values and the skip rate in the stored data structure.
45. Способ по п.44, в котором декодирование содержит этапы, на которых:
осуществляют поиск уровней дерева кодирования для выбранного значения из частичных значений базовых кодовых слов, которое меньше или равно кодовому слову из потока битов с кодовыми словами;
пропускают фиксированное число битов в потоке битов с кодовыми словами перед переходом к выбранному уровню дерева кодирования в ответ на показатель пропуска; и
вычисляют одно из множества значений, соответствующих кодовому слову, на основе разности между выбранным значением из частичных значений базовых кодовых слов, которое меньше или равно кодовому слову, и кодовым словом и индекс выбранного значения из частичных значений базовых кодовых слов, которое меньше или равно кодовому слову.
45. The method according to item 44, in which the decoding comprises the steps of:
searching for coding tree levels for a selected value from partial values of the base codewords that is less than or equal to the codeword from the bitstream with the codewords;
skip a fixed number of bits in the bitstream with the code words before moving to the selected level of the coding tree in response to the skip rate; and
one of the plurality of values corresponding to the codeword is calculated based on the difference between the selected value from the partial values of the base codewords that is less than or equal to the codeword and the codeword and the index of the selected value from the partial values of the base codewords that is less than or equal to the codeword .
46. Способ по п.44, дополнительно содержащий этап, на котором представляют выходные данные пользователю на основе, по меньшей мере, частично, вычисленного значения.46. The method according to item 44, further comprising the step of presenting the output to the user based at least in part on the calculated value. 47. Способ по п.44, в котором структура данных содержит значения, представленные базовыми кодовыми словами, и длины частичных значений базовых кодовых слов.47. The method of claim 44, wherein the data structure comprises values represented by basic codewords and lengths of partial values of the basic codewords. 48. Способ по п.44, в котором декодирование содержит этап, на котором декодируют кодовые слова для получения значений, представляющих, по меньшей мере, одно из видеоданных, данных изображения, звуковых данных и голосовых данных.48. The method according to item 44, in which the decoding comprises the step of decoding the code words to obtain values representing at least one of the video data, image data, audio data and voice data. 49. Способ по п.44, в котором некоторые из уровней дерева кодирования включают в себя кодовые слова, расположенные в лексикографическом порядке относительно значений, представленных кодовыми словами, и каждое из базовых кодовых слов является лексикографически наименьшим кодовым словом на соответствующем уровне в дереве кодирования.49. The method according to item 44, in which some of the levels of the coding tree include codewords arranged in lexicographic order relative to the values represented by codewords, and each of the basic codewords is the lexicographically smallest codeword at the corresponding level in the coding tree. 50. Способ по п.44, в котором частичные значения базовых кодовых слов представляют собой удаление фиксированного числа начальных битов из базовых кодовых слов.50. The method according to item 44, in which the partial values of the base code words are the removal of a fixed number of initial bits from the base code words. 51. Способ по п.50, в котором при отсутствии упомянутого смещения базовое кодовое слово на выбранном уровне дерева распространяется, по меньшей мере, частично, на удаленное число начальных битов.51. The method of claim 50, wherein, in the absence of said offset, the base codeword at a selected tree level extends, at least in part, to a remote number of start bits. 52. Способ по п.44, дополнительно содержащий этап, на котором принимают кодовые слова от кодера по беспроводной связи.52. The method according to item 44, further comprising the step of receiving the code words from the encoder wirelessly. 53. Декодирующее устройство, содержащее:
средство хранения структуры данных, содержащей частичные значения базовых кодовых слов, причем базовые кодовые слова соответствуют уровням дерева кодирования, определяющего кодовые слова переменной длины, причем частичные значения основаны на смещении базовых кодовых слов на фиксированное число битов, и показатель пропуска, указывающий декодеру пропустить фиксированное число битов в потоке битов, подлежащем декодированию, перед переходом к выбранному уровню дерева кодирования; и
средство декодирования одного из кодовых слов из потока битов на основе частичных значений и показателя пропуска в хранящейся структуре данных.
53. A decoding device comprising:
means for storing a data structure containing partial values of the base codewords, wherein the base codewords correspond to the levels of a coding tree defining variable-length codewords, the partial values being based on the shift of the base codewords by a fixed number of bits, and a skip rate instructing the decoder to skip the fixed number bits in the bitstream to be decoded before moving to the selected level of the encoding tree; and
means for decoding one of the codewords from the bitstream based on partial values and a skip rate in the stored data structure.
54. Устройство по п.53, в котором средство декодирования содержит:
средство поиска уровней дерева кодирования для выбранного значения из частичных значений базовых кодовых слов, которое меньше или равно кодовому слову из потока битов с кодовыми словами;
средство пропуска фиксированного числа битов в потоке битов с кодовыми словами перед переходом к выбранному уровню дерева кодирования в ответ на показатель пропуска; и
средство вычисления одного из множества значений, соответствующих кодовому слову, на основе разности между выбранным значением из частичных значений базовых кодовых слов, которое меньше или равно кодовому слову, и кодовым словом и индекса выбранного значения из частичных значений базовых кодовых слов, которое меньше или равно кодовому слову.
54. The device according to item 53, in which the decoding tool comprises:
means for searching the levels of the coding tree for a selected value from partial values of the base codewords that is less than or equal to the codeword from the bitstream with codewords;
means for skipping a fixed number of bits in the bitstream with codewords before moving to a selected level of the coding tree in response to a skip rate; and
means for calculating one of a plurality of values corresponding to the codeword based on the difference between the selected value from the partial values of the base codewords that is less than or equal to the codeword and the codeword and the index of the selected value from the partial values of the base codewords that is less than or equal to the codeword a word.
55. Устройство по п.53, далее дополнительно содержащее средство представления выходных данных пользователю на основе, по меньшей мере частично, вычисленного значения.55. The device according to item 53, further further comprising means for presenting the output data to the user based at least in part on the calculated value. 56. Устройство по п.53, в котором структура данных содержит значения, представленные базовыми кодовыми словами, и длины частичных значений базовых кодовых слов.56. The device according to item 53, in which the data structure contains the values represented by the base code words, and the lengths of the partial values of the base code words. 57. Устройство по п.53, в котором средство декодирования содержит средство декодирования кодовых слов для получения значений, представляющих, по меньшей мере, одно из видеоданных, данных изображения, звуковых данных и голосовых данных.57. The device according to item 53, in which the decoding means comprises means for decoding code words to obtain values representing at least one of the video data, image data, audio data and voice data. 58. Устройство по п.53, в котором некоторые из уровней дерева кодирования включают в себя кодовые слова, расположенные в лексикографическом порядке относительно значений, представленных кодовыми словами, и каждое из базовых кодовых слов является лексикографически наименьшим кодовым словом на соответствующем уровне в дереве кодирования.58. The device according to item 53, in which some of the levels of the encoding tree include codewords located in lexicographic order relative to the values represented by codewords, and each of the basic codewords is the lexicographically smallest codeword at the corresponding level in the encoding tree. 59. Устройство по п.53, в котором частичные значения базовых кодовых слов представляют собой удаление фиксированного числа начальных битов из базовых кодовых слов.59. The device according to item 53, in which the partial values of the base code words are the removal of a fixed number of initial bits from the base code words. 60. Устройство по п.59, в котором при отсутствии упомянутого смещения базовое кодовое слово на выбранном уровне дерева распространяется, по меньшей мере, частично, на удаленное число начальных битов.60. The device according to § 59, in which, in the absence of said offset, the base codeword at a selected tree level extends, at least in part, to a remote number of start bits. 61. Устройство по п.53, дополнительно содержащее средство приема кодовых слов от кодера по беспроводной связи.61. The device according to item 53, further containing a means of receiving code words from the encoder wirelessly. 62. Материальный машиночитаемый носитель, содержащий команды для побуждения процессора:
обращаться к структуре данных, хранящейся в памяти, причем структура данных содержит частичные значения базовых кодовых слов, причем базовые кодовые слова соответствуют уровням дерева кодирования, определяющего канонические кодовые слова переменной длины, причем частичные значения основаны на смещении базовых кодовых слов на фиксированное число битов, и показатель пропуска, указывающий декодеру пропустить фиксированное число битов в потоке битов, подлежащем декодированию, перед переходом к выбранному уровню дерева кодирования; и
декодировать одно из кодовых слов из потока битов на основе частичных значений и показателя пропуска в хранящейся структуре данных.
62. A tangible computer-readable medium containing instructions for causing a processor:
refer to a data structure stored in memory, wherein the data structure contains partial values of the base codewords, the base codewords corresponding to the levels of the coding tree defining canonical codewords of variable length, the partial values being based on the shift of the base codewords by a fixed number of bits, and a skip indicator instructing the decoder to skip a fixed number of bits in the bit stream to be decoded before moving to a selected level of the encoding tree; and
decode one of the code words from the bitstream based on the partial values and the skip rate in the stored data structure.
63. Машиночитаемый носитель по п.62, в котором команды побуждают процессор:
осуществлять поиск уровней дерева кодирования для выбранного значения из частичных значений базовых кодовых слов, которое меньше или равно кодовому слову из потока битов с кодовыми словами;
пропускать фиксированное число битов в потоке битов с кодовыми словами перед переходом к выбранному уровню дерева кодирования в ответ на показатель пропуска; и
вычислять одно из множества значений, соответствующих кодовому слову, на основе разности между выбранным значением из частичных значений базовых кодовых слов, которое меньше или равно кодовому слову, и кодовым словом и индекс выбранного значения из частичных значений базовых кодовых слов, которое меньше или равно кодовому слову.
63. The computer-readable medium of claim 62, wherein the instructions induce the processor:
search the levels of the coding tree for the selected value from the partial values of the base codewords that is less than or equal to the codeword from the bitstream with the codewords;
skip a fixed number of bits in the bitstream with codewords before moving to the selected level of the encoding tree in response to the skip rate; and
calculate one of the many values corresponding to the codeword based on the difference between the selected value from the partial values of the base codewords that is less than or equal to the codeword and the codeword and the index of the selected value from the partial values of the base codewords that is less than or equal to the codeword .
64. Машиночитаемый носитель по п.62, дополнительно содержащий команды, побуждающие процессор управлять устройством вывода для представления выходных данных пользователю на основе, по меньшей мере, частично, вычисленного значения.64. The computer-readable medium of claim 62, further comprising instructions for causing the processor to control the output device to present the output to the user based at least in part on the calculated value. 65. Машиночитаемый носитель по п.62, в котором структура данных содержит значения, представленные базовыми кодовыми словами, и длины частичных значений базовых кодовых слов.65. The computer-readable medium of claim 62, wherein the data structure comprises values represented by basic codewords and lengths of partial values of the basic codewords. 66. Машиночитаемый носитель по п.62, в котором команды побуждают процессор декодировать кодовые слова для получения значений, представляющих, по меньшей мере, одно из видеоданных, данных изображения, звуковых данных и голосовых данных.66. The computer-readable medium of claim 62, wherein the instructions cause the processor to decode code words to obtain values representing at least one of video data, image data, audio data, and voice data. 67. Машиночитаемый носитель по п.62, в котором некоторые из уровней дерева кодирования включают в себя кодовые слова, расположенные в лексикографическом порядке относительно значений, представленных кодовыми словами, и каждое из базовых кодовых слов является лексикографически наименьшим кодовым словом на соответствующем уровне в дереве кодирования.67. The computer-readable medium of claim 62, wherein some of the levels of the coding tree include codewords arranged in lexicographic order relative to the values represented by codewords, and each of the base codewords is the lexicographically smallest codeword at the corresponding level in the coding tree . 68. Машиночитаемый носитель по п.62 в котором частичные значения базовых кодовых слов представляют собой удаление фиксированного числа начальных битов из базовых кодовых слов.68. The computer-readable medium of claim 62 wherein the partial values of the base codewords are the removal of a fixed number of leading bits from the base codewords. 69. Машиночитаемый носитель по п.68, в котором при отсутствии упомянутого смещения базовое кодовое слово на выбранном уровне дерева распространяется, по меньшей мере, частично, на удаленное число начальных битов.69. The computer-readable medium of claim 68, wherein, in the absence of said offset, a base codeword at a selected tree level extends, at least in part, to a remote number of start bits. 70. Переносное устройство беспроводной связи, содержащее:
память, хранящую структуру данных, содержащую частичные значения базовых кодовых слов, причем базовые кодовые слова соответствуют уровням дерева кодирования, определяющего кодовые слова переменной длины, причем частичные значения основаны на смещении базовых кодовых слов на фиксированное число битов, и показатель пропуска, указывающий декодеру пропустить фиксированное число битов в потоке битов, подлежащем декодированию, перед переходом к выбранному уровню дерева кодирования; и
декодер, который обращается к памяти для декодирования одного из кодовых слов из потока битов на основе частичных значений и показателя пропуска в хранящейся структуре данных;
приемник для приема кодовых слов от кодера по беспроводной связи; и
устройство вывода, которое представляет выходные данные пользователю на основе, по меньшей мере, частично, декодированных кодовых слов.
70. A portable wireless communications device, comprising:
a memory storing a data structure containing partial values of the base codewords, wherein the base codewords correspond to the levels of the coding tree defining variable-length codewords, the partial values being based on the shift of the base codewords by a fixed number of bits, and a skip rate instructing the decoder to skip the fixed the number of bits in the bitstream to be decoded before moving to the selected level of the encoding tree; and
a decoder that accesses a memory for decoding one of the codewords from the bitstream based on partial values and a skip rate in the stored data structure;
a receiver for receiving codewords from the encoder wirelessly; and
an output device that presents output to the user based at least in part on decoded codewords.
71. Переносное устройство беспроводной связи по п.70, в котором декодер:
осуществляет поиск уровней дерева кодирования для выбранного значения из частичных значений базовых кодовых слов, которое меньше или равно кодовому слову из потока битов с кодовыми словами,
пропускает фиксированное число битов в потоке битов с кодовыми словами перед переходом к выбранному уровню дерева кодирования в ответ на показатель пропуска; и
вычисляет одно значение из множества значений, соответствующих кодовому слову, на основе разности между выбранным значением из частичных значений базовых кодовых слов, которое меньше или равно кодовому слову, и кодовым словом и индекс выбранного значения из частичных значений базовых кодовых слов, которое меньше или равно кодовому слову.
71. The portable wireless communications apparatus of claim 70, wherein the decoder:
searches for coding tree levels for a selected value from partial values of the base codewords, which is less than or equal to the codeword from the bitstream with codewords,
skips a fixed number of bits in the bitstream with code words before moving to the selected level of the coding tree in response to the skip rate; and
calculates one value from the set of values corresponding to the codeword based on the difference between the selected value from the partial values of the base codewords that is less than or equal to the codeword and the codeword and the index of the selected value from the partial values of the base codewords that is less than or equal to the codeword a word.
72. Переносное устройство беспроводной связи по п.70, в котором структура данных содержит значения, представленные базовыми кодовыми словами, и длины частичных значений базовых кодовых слов.72. The portable wireless communications apparatus of claim 70, wherein the data structure comprises values represented by basic codewords and lengths of partial values of the basic codewords. 73. Переносное устройство беспроводной связи по п.70, в котором декодер включает в себя одно из декодера видеоданных, декодера изображения и звукового декодера или голосового декодера.73. The portable wireless communications apparatus of claim 70, wherein the decoder includes one of a video decoder, an image decoder, and an audio decoder or voice decoder. 74. Переносное устройство беспроводной связи по п.70, в котором некоторые из уровней дерева кодирования включают в себя кодовые слова, расположенные в лексикографическом порядке относительно значений, представленных кодовыми словами, и каждое из базовых кодовых слов является лексикографически наименьшим кодовым словом на соответствующем уровне в дереве кодирования.74. The portable wireless communications apparatus of claim 70, wherein some of the levels of the coding tree include codewords arranged in lexicographic order relative to the values represented by codewords, and each of the base codewords is the lexicographically smallest codeword at a corresponding level in coding tree. 75. Переносное устройство беспроводной связи по п.70, в котором частичные значения базовых кодовых слов представляют собой удаление фиксированного числа начальных битов из базовых кодовых слов.75. The portable wireless communications apparatus of claim 70, wherein the partial values of the base codewords are the removal of a fixed number of start bits from the base codewords. 76. Переносное устройство беспроводной связи по п.75, в котором при отсутствии упомянутого смещения базовое кодовое слово на выбранном уровне дерева распространяется, по меньшей мере, частично, на удаленное число начальных битов.76. The portable wireless communications apparatus of claim 75, wherein, in the absence of said offset, a base codeword at a selected tree level extends, at least in part, to a remote number of start bits. 77. Интегральная схема устройства беспроводной связи, содержащая:
память, хранящую структуру данных, содержащую частичные значения базовых кодовых слов, причем базовые кодовые слова соответствуют уровням дерева кодирования, определяющего канонические кодовые слова переменной длины, причем частичные значения основаны на смещении базовых кодовых слов на фиксированное число битов, и показатель пропуска, указывающий декодеру пропустить фиксированное число битов в потоке битов, подлежащем декодированию, перед переходом к выбранному уровню дерева кодирования; и
декодер, который обращается к памяти для декодирования одного из кодовых слов из потока битов на основе частичных значений и показателя пропуска в хранящейся структуре данных.
77. An integrated circuit for a wireless communication device, comprising:
a memory storing a data structure containing partial values of the base codewords, wherein the base codewords correspond to the levels of a coding tree defining canonical codewords of variable length, the partial values being based on the shift of the base codewords by a fixed number of bits, and a skip rate indicating the decoder to skip a fixed number of bits in the bitstream to be decoded before moving to a selected level of the encoding tree; and
a decoder that accesses the memory to decode one of the codewords from the bitstream based on the partial values and the skip rate in the stored data structure.
78. Интегральная схема по п.77, в которой декодер:
осуществляет поиск уровней дерева кодирования для выбранного значения из частичных значений базовых кодовых слов, которое меньше или равно кодовому слову из потока битов с кодовыми словами,
пропускает фиксированное число битов в потоке битов с кодовыми словами перед переходом к выбранному уровню дерева кодирования в ответ на показатель пропуска; и
вычисляет одно значение из множества значений, соответствующих кодовому слову, на основе разности между выбранным значением из частичных значений базовых кодовых слов, которое меньше или равно кодовому слову, и кодовым словом и индекс выбранного значения из частичных значений базовых кодовых слов, которое меньше или равно кодовому слову.
78. The integrated circuit according to clause 77, in which the decoder:
searches for coding tree levels for a selected value from partial values of the base codewords, which is less than or equal to the codeword from the bitstream with codewords,
skips a fixed number of bits in the bitstream with code words before moving to the selected level of the coding tree in response to the skip rate; and
calculates one value from the set of values corresponding to the codeword based on the difference between the selected value from the partial values of the base codewords that is less than or equal to the codeword and the codeword and the index of the selected value from the partial values of the base codewords that is less than or equal to the codeword a word.
79. Интегральная схема по п.77, в которой структура данных содержит значения, представленные базовыми кодовыми словами, и длины частичных значений базовых кодовых слов.79. The integrated circuit according to clause 77, in which the data structure contains the values represented by the base code words, and the lengths of the partial values of the base code words. 80. Интегральной схема по п.77, в которой декодер включает в себя одно из декодера видеоданных, декодера изображения и звукового декодера или голосового декодера.80. The integrated circuit according to claim 77, wherein the decoder includes one of a video decoder, an image decoder, and an audio decoder or voice decoder. 81. Интегральная схема по п.77, в которой некоторые из уровней дерева кодирования включают в себя кодовые слова, расположенные в лексикографическом порядке относительно значений, представленных кодовыми словами, и каждое из базовых кодовых слов является лексикографически наименьшим кодовым словом на соответствующем уровне в дереве кодирования.81. The integrated circuit of claim 77, wherein some of the levels of the coding tree include codewords arranged in lexicographic order relative to the values represented by codewords, and each of the base codewords is the lexicographically smallest codeword at the corresponding level in the coding tree . 82. Интегральная схема по п.77, в котором частичные значения базовых кодовых слов представляют собой удаление фиксированного числа начальных битов из базовых кодовых слов.82. The integrated circuit according to claim 77, wherein the partial values of the base codewords are the removal of a fixed number of leading bits from the base codewords. 83. Интегральная схема по п.82, в которой при отсутствии упомянутого смещения базовое кодовое слово на выбранном уровне дерева распространяется, по меньшей мере, частично, на удаленное число начальных битов. 83. The integrated circuit of claim 82, wherein, in the absence of said offset, the base codeword at a selected tree level extends, at least in part, to a remote number of start bits.
RU2009122479/09A 2006-11-14 2007-11-09 Encoding variable-length codes with efficient memory usage RU2426227C2 (en)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US86582706P 2006-11-14 2006-11-14
US60/865,827 2006-11-14
US86708106P 2006-11-22 2006-11-22
US60/867,081 2006-11-22
US11/840,362 2007-08-17

Publications (2)

Publication Number Publication Date
RU2009122479A RU2009122479A (en) 2010-12-20
RU2426227C2 true RU2426227C2 (en) 2011-08-10

Family

ID=44056310

Family Applications (2)

Application Number Title Priority Date Filing Date
RU2009122479/09A RU2426227C2 (en) 2006-11-14 2007-11-09 Encoding variable-length codes with efficient memory usage
RU2009122477/09A RU2413360C1 (en) 2006-11-14 2007-11-14 Memory efficient adaptive block coding

Family Applications After (1)

Application Number Title Priority Date Filing Date
RU2009122477/09A RU2413360C1 (en) 2006-11-14 2007-11-14 Memory efficient adaptive block coding

Country Status (1)

Country Link
RU (2) RU2426227C2 (en)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
RU2480918C1 (en) * 2011-11-18 2013-04-27 Федеральное государственное бюджетное образовательное учреждение высшего профессионального образования "Ульяновский государственный технический университет" Adaptive coder of 3d dimension hypercode
RU2559691C2 (en) * 2012-08-13 2015-08-10 Гурулоджик Микросистемс Ой Decoding method, decoder, software product, software application for mobile wireless communication device, and electronic consumer product
RU2630750C1 (en) * 2014-02-20 2017-09-12 Гурулоджик Микросистемс Ой Device and method for encoding and decoding initial data

Families Citing this family (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP2687012A1 (en) * 2011-06-30 2014-01-22 Telefonaktiebolaget L M Ericsson (PUBL) Absolute or explicit reference picture signaling
EP3902258A1 (en) * 2011-06-30 2021-10-27 Telefonaktiebolaget LM Ericsson (publ) Reference picture signaling
FR2982446A1 (en) 2011-11-07 2013-05-10 France Telecom METHOD FOR ENCODING AND DECODING IMAGES, CORRESPONDING ENCODING AND DECODING DEVICE AND COMPUTER PROGRAMS
FR2982447A1 (en) 2011-11-07 2013-05-10 France Telecom METHOD FOR ENCODING AND DECODING IMAGES, CORRESPONDING ENCODING AND DECODING DEVICE AND COMPUTER PROGRAMS
US9432665B2 (en) * 2011-12-02 2016-08-30 Qualcomm Incorporated Coding least significant bits of picture order count values identifying long-term reference pictures
RU2485592C1 (en) * 2012-03-07 2013-06-20 Федеральное государственное унитарное предприятие "Государственный научно-исследовательский институт авиационных систем" Method of forming integer non-orthogonal decorrelating matrices of given dimensions and apparatus for realising said method
GB2511493B (en) * 2013-03-01 2017-04-05 Gurulogic Microsystems Oy Entropy modifier and method
WO2016074147A1 (en) 2014-11-11 2016-05-19 Mediatek Singapore Pte. Ltd. Separated coding tree for luma and chroma
GB2543844B (en) 2015-11-01 2018-01-03 Gurulogic Microsystems Oy Encoders, decoders and methods
RU2616178C1 (en) * 2016-03-28 2017-04-12 Федеральное государственное бюджетное образовательное учреждение высшего образования "Тульский государственный университет" (ТулГУ) Method of encoding-decoding of static digital video images
RU2672625C1 (en) * 2017-12-11 2018-11-16 федеральное государственное автономное образовательное учреждение высшего образования "Национальный исследовательский ядерный университет МИФИ" (НИЯУ МИФИ) Device for compression of data

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
RU2480918C1 (en) * 2011-11-18 2013-04-27 Федеральное государственное бюджетное образовательное учреждение высшего профессионального образования "Ульяновский государственный технический университет" Adaptive coder of 3d dimension hypercode
RU2559691C2 (en) * 2012-08-13 2015-08-10 Гурулоджик Микросистемс Ой Decoding method, decoder, software product, software application for mobile wireless communication device, and electronic consumer product
RU2630750C1 (en) * 2014-02-20 2017-09-12 Гурулоджик Микросистемс Ой Device and method for encoding and decoding initial data
US10003356B2 (en) 2014-02-20 2018-06-19 Gurulogic Microsystems Oy Devices and methods of source-encoding and decoding of data

Also Published As

Publication number Publication date
RU2009122477A (en) 2010-12-20
RU2009122479A (en) 2010-12-20
RU2413360C1 (en) 2011-02-27

Similar Documents

Publication Publication Date Title
RU2426227C2 (en) Encoding variable-length codes with efficient memory usage
KR101095335B1 (en) Memory efficient adaptive block coding
KR101108465B1 (en) Memory efficient coding of variable length codes
JP5313362B2 (en) High speed parsing of variable length fixed length code
JP2010509895A5 (en)
JP2010509893A5 (en)
JP2022123096A (en) Context initialization in entropy coding
JP6469652B2 (en) Rice parameter update for coefficient level coding in video coding process
KR100636229B1 (en) Method and apparatus for adaptive entropy encoding and decoding for scalable video coding
US7626522B2 (en) Data compression using variable-to-fixed length codes
JP2013528025A (en) Entropy coding
JP2005252374A (en) Encoder, program, and encoding method

Legal Events

Date Code Title Description
MM4A The patent is invalid due to non-payment of fees

Effective date: 20181110