RU2426227C2 - Encoding variable-length codes with efficient memory usage - Google Patents
Encoding variable-length codes with efficient memory usage Download PDFInfo
- 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
Links
Images
Abstract
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
В примере на фиг.1 канал 16 связи может содержать любую среду беспроводной или проводной связи, такой как радиочастотный (РЧ) спектр или одну или несколько физических передающих линий, либо любое сочетание беспроводных и проводных сред. Канал 16 может быть частью сети на основе передачи пакетов, такой как локальная сеть, территориальная сеть или глобальная сеть, такая как Интернет. Канал 16 связи в целом представляет любую подходящую среду связи или совокупность различных сред связи для передачи видеоданных от устройства-источника 12 к устройству-приемнику 14.In the example of FIG. 1,
Устройство-источник 12 генерирует видеоданные для передачи устройству 14 назначения. В некоторых случаях, однако, устройства 12, 14 могут работать по существу симметричным образом. Например, каждое из устройств 12, 14 может включать в себя компоненты кодирования и декодирования видеоданных. Следовательно, система 10 может поддерживать одностороннюю или двухстороннюю передачу видеоданных между устройствами 12, 14 видеоданных, например, для потоковой передачи видеоданных, широковещательной передачи видеоданных или видеотелефонии. Для других областей применения сжатия и кодирования данных устройства 12, 14 могут быть выполнены с возможностью отправки и приема, или обмена других типов данных, таких как данные изображений, голосовые или звуковые данные, или сочетания двух или нескольких из видеоданных, данных изображений, голосовых и звуковых данных. Соответственно, рассмотрение применения в отношении видеоданных используется в иллюстративных целях и не должно считаться ограничивающим различные аспекты изобретения, описанного здесь наиболее широким образом.The
Источник 18 видеоданных может включать в себя устройство захвата видеоизображения, такое как одна или несколько видеокамер, видеоархив, содержащий ранее захваченные видеоизображения, или видеоданные, непосредственно поступающие от поставщика видеоконтента. В качестве еще одной альтернативы источник 18 видеоданных может генерировать в качестве исходных видеоданных данные на основе компьютерной графики или сочетание непосредственных видеоданных и видеоданных, сгенерированных на компьютере. В некоторых случаях, если источником 18 видеоданных является камера, устройство-источник 12 и устройство-приемник 14 могут образовать так называемые видеотелефоны. Так, в некоторых аспектах устройство-источник 12, устройство-приемник 14 или оба устройства могут образовать портативное устройство беспроводной связи, такое как мобильный телефон. В каждом случае захваченное, предварительное захваченное или генерируемое компьютером видеоизображение может быть закодировано кодером 20 видеоданных для передачи от устройства-источника 12 видеоданных к декодеру 26 видеоданных устройства-приемника 14 видеоданных через передатчик 22, канал 16 и приемник 24. Устройство 28 отображения может включать в себя всевозможные устройства отображения, такие как жидкокристаллический дисплей (LCD), плазменный дисплей, дисплей на органических светодиодах (OLED).
Кодер 20 видеоданных и декодер 26 видеоданных могут быть выполнены с возможностью поддержки кодирования масштабируемых видеоданных для пространственной, временной масштабируемости и/или масштабируемости отношения сигнал-шум (SNR). В некоторых аспектах кодер 20 видеоданных и декодер 22 видеоданных могут быть выполнены с возможностью поддержки мелкоячеистого кодирования с SNR-масштабируемостью (FGS) для SVC. Кодер 20 и декодер 26 могут поддерживать различные степени масштабируемости посредством поддержки кодирования, передачи и декодирования базового уровня и одного или нескольких масштабируемых уровней повышения качества. Для кодирования масштабируемых видеоданных базовый уровень несет видеоданные с минимальным уровнем качества. Один или несколько слоев повышения качества несут дополнительный поток данных для поддержки более высоких пространственных, временных уровней и/или уровня отношения сигнал-шум.
Кодер 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).
Стандарт 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
В некоторых аспектах для случая широковещательной передачи видеоданных способы, описанные в настоящей заявке, могут быть применены к расширенному кодированию видеоданных 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
Кодер 20 видеоданных и декодер 26 видеоданных могут быть каждый реализованы в виде одного или нескольких микропроцессоров, процессоров цифровых сигналов (DSP), специализированных интегральных схем (ASIC), программируемых пользователем логических элементов (FPGA), дискретной логики, программных средств, аппаратных средств, программно-аппаратных средств или любых сочетаний вышеперечисленного. Так, каждый кодер 20 видеоданных и декодер 26 видеоданных может быть реализован, по меньшей мере частично, в виде чипа или устройства на интегральной схеме (ИС) и включен в состав одного или нескольких кодеров или декодеров, любой из которых может быть составной частью объединенного кодера/декодера (CODEC) в соответствующем мобильном устройстве, абонентском устройстве, широковещательном устройстве, сервере или тому подобном. Кроме того, устройство-источник 12 и устройство-приемник 14 могут каждое включать в себя соответствующие компоненты модуляции, демодуляции, преобразования частоты, фильтрования и усиления для передачи и приема кодированных видеоданных, в том числе радиочастотные (RF) компоненты и антенны, достаточные для поддержки беспроводной связи. Однако для упрощения чертежа такие компоненты на фиг.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
Блоки меньшего размера могут обеспечивать лучшее разрешение и могут использоваться в таких местах видеокадра, которые содержат более высокий уровень детализации. В целом макроблоки (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
На фиг.2 приведена блок-схема, иллюстрирующая пример кодера 20 видеоданных, изображенного на фиг.1. Кодер 20 видеоданных может быть выполнен, по меньшей мере частично, в виде одного или нескольких устройств на интегральной схеме, которое собирательно может называться устройством на интегральной схеме. В некоторых аспектах кодер 20 видеоданных может быть составной частью портативного устройства беспроводной связи или сервером широковещательной передачи. Кодер 20 видеоданных может выполнять внутреннее и внешнее кодирование блоков в пределах видеокадров. Внутреннее кодирование опирается на пространственное предсказание для уменьшения или исключения пространственной избыточности в видеоданных в пределах данного видеокадра. Внешнее кодирование опирается на временное предсказание для уменьшения или исключения временной избыточности в видеоданных в пределах соседних кадров видеопоследовательности. В случае внешнего кодирования кодер 20 видеоданных выполняет оценку движения для отслеживания перемещения соответствующих видеоблоков между соседними кадрами.FIG. 2 is a block diagram illustrating an example of the
Как показано на фиг.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
Модуль 32 оценки движения сравнивает видеоблок 30 с блоками в одном или нескольких соседних видеокадрах для генерации одного или нескольких векторов движения. Соседний кадр или кадры могут быть извлечены из хранилища 34 опорных кадров, которое может содержать любого типа память или запоминающее устройство для хранения видеоблоков, восстановленных из ранее закодированных блоков. Оценка движения может выполняться для блоков переменных размеров, например, 16×16, 16×8, 8×16, 8×8 или блоков меньших размеров. Модуль 32 оценки движения идентифицирует один или несколько блоков в соседних кадрах, которые в наибольшей степени совпадают с текущим видеоблоком 30, например, на основе модели "затраты-искажение", и определяет смещение между блоками в соседних кадрах и текущим видеоблоком. На этой основе модуль 32 оценки движения создает один или несколько векторов движения (MV), которые указывают величину и траекторию смещения между текущим видеоблоком 30 и одним или несколькими совпадающими блоками из опорных кадров, используемых для кодирования текущего видеоблока 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
Кодер 20 видеоданных образует остаточный видеоблок посредством вычитания видеоблока предсказания, полученного модулем 36 компенсации движения, из первоначального, текущего видеоблока 30 в сумматоре 48. Модуль 38 преобразования блоков применяет преобразование, такое как целочисленное преобразование 4×4 или 8×8, используемое в H.264/AVC, к остаточному блоку c получением коэффициентов остаточного преобразованного блока. Модуль 40 квантования квантует коэффициенты остаточного преобразованного блока для дальнейшего уменьшения скорости передачи в битах. Модуль 46 статистического кодирования статистически кодирует квантованные коэффициенты для еще большего уменьшения скорости передачи в битах.The
Модуль 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,
Модуль 42 обратного квантования и модуль 44 обратного преобразования применяют соответственно обратное квантование и обратное преобразование для восстановления остаточного блока. Сумматор 50 прибавляет восстановленный остаточный блок к блоку предсказания со скомпенсированным движением, полученному модулем 36 компенсации движения для получения восстановленного видеоблока, предназначенного для сохранения в хранилище 34 опорных кадров. Восстановленный видеоблок используется модулем 32 оценки движения и модулем 36 компенсации движения для кодирования блока в следующем видеокадре.The
На фиг.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
Модуль 52 статистического декодирования принимает кодированный поток битов видеоданных и декодирует из потока битов квантованные остаточные коэффициенты, режим кодирования макроблоков и информацию о движении, которая может включать в себя векторы движения и разбиение на блоки. Таким образом, модуль 52 статистического декодирования выполняет функцию блока VLC-декодирования. Например, для декодирования квантованных остаточных коэффициентов от кодированного потока битов модуль 52 статистического декодирования на фиг.3, подобно модулю 46 статистического кодирования на фиг.2, может выполнять адаптивное VLC-декодирование коэффициентов блоков цифровых видеоданных, как описано в настоящей заявке. Однако модуль 52 статистического декодирования может выполнять VLC-декодирование обратным образом относительно модуля 46 статистического кодирования на фиг.2 для извлечения квантованных коэффициентов блоков из кодированного потока битов. Таким образом, различные процессы декодирования, описанные в настоящей заявке, могут быть реализованы в модуле 52 статистического декодирования для выполнения декодирования видеоданных. В альтернативном варианте такой модуль 52 статистического декодирования может выполнять процессы, описанные в настоящей заявке, для декодирования любых из множества типов данных, в том числе, в частности, видеоданных, данных изображения, голосовых и звуковых данных. В любом случае результат кодирования переменной длины, выполняемого модулем 52 статистического декодирования, может быть выдан пользователю, сохранен в памяти и/или передан другому устройству или блоку обработки.The
Модуль 54 компенсации движения принимает векторы движения и разбиения на блоки и один или несколько восстановленных опорных кадров из хранилища 62 опорных кадров для получения блока предсказания видеоданных. Модуль 56 обратного квантования осуществляет обратное квантование, то есть деквантование квантованных коэффициентов блока. Модуль 58 обратного преобразования применяет к этим коэффициентам обратное преобразование, например, обратное DCT или обратное 4×4 или 8×8 целочисленное преобразование для получения остаточных блоков. Блоки предсказания видеоданных затем суммируются сумматором 64 с остаточными блоками для формирования декодированных блоков. Может применяться фильтр уменьшения блочности (не показан) для фильтрования декодированных блоков с целью удаления артефактов блочности. Затем фильтрованные блоки помещают в хранилище 62 опорных кадров, которое обеспечивает опорные кадры для декодирования последующих видеокадров и также создает декодированные видеоданные для управления устройством 28 отображения (фиг.1)The
Кодирование с эффективным использованием памяти кодов переменной длины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
Например, рассматривая код, представленный в примере дерева кодирования на фиг.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
Вышеуказанное наблюдение является ключом к пониманию способов декодирования кодов переменной длины на основе их преобразования в так называемый канонический вид, например, как описано в работе 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.
Пример канонического кода переменной длиныTable 1
Variable Length Canonical Code Example
В приведенной выше таблице 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
Алгоритм Моффата-Турпина для декодирования кодов переменной длины описан ниже. Предположим, что входной алфавит 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
При помощи этих параметров вычисляются так называемые "базовые" значения для каждого уровня в дереве по следующей формуле:Using these parameters, the so-called "base" values are calculated for each level in the tree according to the following formula:
, (1≤l≤L) , (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.
Структура декодера Моффата-Турпина для кода на фиг.4table 2
The structure of the Moffat-Turpin decoder for the code in figure 4
Пример псевдокода для реализации алгоритма декодирования Моффата-Турпина, использующего структуру из таблицы 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.
Алгоритм декодирования Моффата-ТурпинаTable 3
Moffat-Turpin Decoding Algorithm
((V-base[i])>>(W-l));Symbol = offset [i] +
((V-base [i]) >>(Wl));
Из вышеприведенной таблицы 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.
Модифицированная структура декодирования Моффата-ТурпинаTable 4
Modified Moffat-Turpin Decoding Structure
В примере таблицы 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
Из-за удаления начальных нулей ширина модифицированного массива 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.
Модифицированный алгоритм декодера Моффата-ТурпинаTable 5
Modified Moffat-Turpin Decoder Algorithm
(W-l));Symbol = offset [i] + ((V-base [i]) >>
(Wl));
Как показано в таблице 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
В примере в таблице 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:
Если 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 +
Здесь основная величина, представляющая интерес: ml+i2-i, которая влияет на эту разность. В простейшем случае, когда i=1, ясно, что эта разность просто зависит от числа внешних узлов, и, значит, W можно выбрать таким образом, что:Here, the main quantity of interest is:
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, то наиболее заполненный уровень должен содержать приблизительно кодовых слов, а это значит, что требуется использовать приблизительно 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 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.
С другой стороны, самое длинное кодовое слово в этом случае будет иметь приблизительно битов, причем известно, что для асимметричных распределенийOn the other hand, the longest codeword in this case will have approximately bits, and it is known that for asymmetric distributions
, ,
где - специальный случай энтропии Реньи, например, описанный в работе W. Szpankowski, Average Case Analysis of Algorithms on Sequences. (New York, John Wiley & Sons, 2001). Эта разность может быть произвольно большой при p → 0 или p → 1.Where - 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:
. .
В вышеприведенной формуле 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:
. .
Пример такого кода может быть построен c использованием следующих оценок вероятностей слов:An example of such a code can be constructed using the following word probability estimates:
, ,
где Γ(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:
. .
Такие коды называют основанными на выборке, или адаптивными, универсальными блочными кодами. В настоящей заявке описаны частные варианты осуществления адаптивных блочных кодов с использованием следующих оценок вероятности слов 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:
(1) (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:
, (2) , (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
Теорема 1: Средняя степень избыточности адаптивного блочного кода ϕ* u имеет следующее асимптотическое поведение (n, t → ∞):Theorem 1: The average degree of redundancy of the adaptive block code ϕ * u has the following asymptotic behavior (n, t → ∞):
(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:
средняя избыточность кода ϕ* u относительно оцененного распределения в формуле (1).the average redundancy of the code ϕ * u relative to the estimated distribution in formula (1).
Точное поведение величины зависит от алгоритма. Однако для большого класса способов обеспечения минимальной избыточности, который включает в себя традиционные коды Хаффмана и Шеннона, величина этого члена ограничена следующим условием:Exact value behavior 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:
, ,
и характеризуется колебательным поведением, которое может сходиться или не сходиться к некоторой постоянной величине в зависимости от значения параметра 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:
который является функцией параметра источника 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:
, ,
содержащие слова с одинаковым весом (k = 0,…,n) и одинаковой вероятностью. Размеры таких групп равны . Далее для удобства предполагается, что каждая группа 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 . 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.
Пример кода, построенного для 4-битовых блоков
с Бернуллиевыми вероятностями pkqn-k, p=0,9Table 6
Sample code built for 4-bit blocks
with Bernoulli probabilities p k q nk , p = 0.9
0001
0010
0011
0100
0101
0110
0111
1000
1001
1010
1011
1100
1101
1110
11110000
0001
0010
0011
0100
0101
0110
0111
1000
1001
1010
1011
1100
1101
1110
1111
1
1
2
1
2
2
3
1
2
2
3
2
3
3
40
one
one
2
one
2
2
3
one
2
2
3
2
3
3
four
0
1
0
2
1
2
0
3
3
4
1
5
2
3
00
0
one
0
2
one
2
0
3
3
four
one
5
2
3
0
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,00010.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
3
3
6
3
7
7
9
4
7
7
9
7
9
10
10one
3
3
6
3
7
7
9
four
7
7
9
7
9
10
10
001
010
000011
011
0000001
0000010
000000001
0001
0000011
000100
000000010
0000101
000000011
0000000001
0000000000one
001
010
000011
011
0000001
0000010
000000001
0001
0000011
000100
000000010
0000101
000000011
0000000001
0000000000
1
1
3
1
4
4
5
2
4
4
5
4
5
6
70
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
, ,
где - наименьшая длина кода, которая может быть присвоена блокам из группы Wn,k. Кроме того, поскольку слова в группе Wn,k следуют в лексикографическом порядке, то разделение на Wn,k,l и Wn,k,l+1 - это просто:Where 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:
, ,
, ,
где 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
Лексикографически наименьшие кодовые слова в каждой подгруппе могут называться базовыми кодовыми словами, например, как описано выше в отношении первого аспекта настоящего изобретения, и могут быть представлены как: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:
, ,
, ,
где 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:
В качестве иллюстрации предположим, что имеется первая подгруппа 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
Базовые кодовые слова определяются только непустыми подгруппами, и число таких подгрупп 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
В целом эта кодовая структура определяет группы 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:
(13) (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
Этот процесс можно легко реализовать, обеспечив переупорядочение кодовых слов, расположенных на одном уровне, таким образом, чтобы они имели тот же лексикографический порядок, что входные блоки, которые они представляют. Например, вышеописанные кодовые слова следуют в лексикографическом порядке входных блоков 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
Процесс прямого построения блочных кодовTable 7
The process of directly building block codes
В вышеприведенном коде на языке 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
Вышеизложенный процесс кодирования может включать в себя выбор одной из групп на основе веса значения, подлежащего кодированию, выбор одной из подгрупп на основе лексикографической позиции значения, подлежащего кодированию, относительно числа кодовых слов в первой подгруппе выбранной группы, выбор одного из кодовых слов в выбранной подгруппе на основе кодового слова для выбранной подгруппы и лексикографической позиции значения, подлежащего кодированию, и кодирование значения, подлежащего кодированию, при помощи выбранного кодового слова. Базовые кодовые слова для каждой из подгрупп, позиции кодовых слов внутри каждой из групп, число кодовых слов внутри каждой из первых подгрупп и длины кодовых слов внутри каждой из подгрупп могут храниться в структуре данных, к которой может обращаться кодер для поддержки кодирования переменной длины.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:
, ,
где wj представляют собой отдельные биты слова w, и предполагается, что для всех k>n. Для реализации этой формулы можно либо заранее вычислить все биноминальные коэффициенты до уровня n в треугольнике Паскале, либо вычислять их динамически, используя следующие простые тождества:where w j are the individual bits of the word w, and it is assumed that 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:
и . and .
Реализация на основе заранее вычисленных коэффициентов требует слов (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 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:
, ,
где 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. Найти самую верхнюю подгруппу, у которой меньше, чем T бит в потоке битов.1. Find the uppermost subgroup for which 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.
Декодирование блоков кодаTable 8
Decoding Code Blocks
Примерный процесс декодирования, приведенный в таблице 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
В целом кодер может выполнить кодирование переменной длины согласно описанной выше кодовой структуре, причем кодовая структура определяет группы и подгруппы. Повторим еще раз, что каждая из групп включает в себя кодовые слова, представляющие значения с одинаковыми весами. Кодовые слова в каждой из групп упорядочиваются в лексикографическом порядке относительно значений, представленных кодовыми словами. Кроме того, первая подгруппа в каждой группе включает в себя кодовые слова, имеющие первую длину, и вторая подгруппа включает в себя кодовые слова, имеющие вторую длину, отличную от первой длины.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
Кодовая структура и структура данных, предусмотренные в соответствии с настоящим аспектом изобретения, могут поддерживать эффективность в смысле избыточных вычислительных затрат и продолжительности обработки. Например, пример процесса декодирования в таблице 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.
Оценки использования памяти (в байтах) для различных размеров блокаTable 9
Estimates of memory usage (in bytes) for various block sizes
12
16
208
12
16
24
32
4016
24
32
40
19
25
29fourteen
19
25
29th
140
184
216102
140
184
216
2940
4986
71281530
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.
Далее описываются экспериментальные результаты оценки характеристик процесса адаптивного кодирования, описанного в настоящей заявке, с размером блока 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:
Для процесса адаптивного кодирования, описанного в настоящей заявке, использовалась следующая структура контекстов: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
На фиг.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
Как показано на фиг.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
На фиг.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
Если индекс символа не превышает смещение для текущего уровня дерева, модуль 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
На фиг.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
Модуль 52 статистического декодирования сравнивает кодовое слово с базовым кодовым словом для различных уровней дерева кодирования, начиная с верхнего уровня и переходя к более глубоким уровням в процессе нисходящего поиска до тех пор, пока не будет найдено соответствующее базовое кодовое слово. В частности, модуль 52 статистического декодирования может определить, является ли базовое кодовое слово для текущего уровня дерева меньшим или равным кодовому слову (98). Если не является, блок статистического декодирования продолжает переход вниз на следующий уровень дерева (100) и повторяет сравнение (98) для базового кодового слова, связанного со следующим уровнем. Однако, после перехода к следующему уровню (100) модуль 52 статистического декодирования определяет, связан ли с текущим уровнем показатель пропуска (102). Если связан, то перед переходом к следующему уровню (100) модуль 52 статистического декодирования прокручивает буфер потока битов на фиксированный шаг (104). В частности, модуль 52 статистического декодирования может прокрутить буфер потока битов на М битов, так чтобы кодовое слово не потерялось при пропуске начальных М битов. Если признак пропуска отсутствует (102), модуль 52 статистического декодирования просто переходит к следующему уровню (100).The
В обоих случаях модуль 52 статистического декодирования вновь сравнивает кодовое слово с базовым кодовым словом для текущего уровня (98). Когда модуль 52 статистического декодирования находит уровень, на котором базовое кодовое слово меньше или равно кодовому слову (98), модуль 52 статистического декодирования определяет остаточную длину базовых кодовых слов на соответствующем уровне (106) и прокручивает поток битов на остаточную длину (108). Затем модуль 52 статистического декодирования вычисляет символ, связанный с кодовым словом (110), на основе смещения для уровня и разности между базовым кодовым словом и декодируемым кодовым словом.In both cases, the
Если взять в качестве примера дерево на фиг.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
Способ, изображенный на фиг.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
На фиг.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
Число элементов в первой подгруппе каждой группы может использоваться для вычисления кодовых слов. Для этой цели процессор хранит число элементов в первой подгруппе каждой группы (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,
Если обратиться в качестве иллюстрации к примеру дерева кодирования на фиг.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
Если для этой же группы значение индекса группы равнялось 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
Помимо вычисления кодового слова для входного слова модуль 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
На фиг.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
Если базовое кодовое слово подгруппы в подгруппе на данном уровне дерева не является меньшим или равным кодовому слову (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
Когда достигается уровень дерева кодирования, на котором базовое кодовое слово подгруппы меньше или равно кодовому слову, модуль 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
Если взять в качестве примера дерево кодирования на фиг.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
Модуль 52 статистического декодирования может также определить вес кодового слова (160), например, на основе уровня подгруппы в дереве кодирования. Кроме того, модуль 52 статистического декодирования может определить индекс подгруппы (162), то есть индекс выбранной подгруппы в дереве кодирования. Используя вес, позицию и индекс подгруппы, модуль 52 статистического декодирования определяет индекс слова (164), тем самым декодируя кодовое слово, полученное из потока данных, для получения слова, представленного кодовым словом. Повторим еще раз, что в некоторых вариантах выполнения способ декодирования, выполняемый модулем 52 статистического декодирования, может соответствовать процессу, приведенному в таблице 8.The
Специалистам в данной области техники должно быть понятно, что информация и сигналы могут быть представлены с использованием самых различных технологий и методов. Например, данные, инструкции, команды, информация, сигналы, биты, символы и элементы, которые могут упоминаться в вышеприведенном описании, могут быть представлены напряжением, током, электромагнитными волнами, магнитными полями или частицами, оптическими полями или частицами, либо любым сочетанием вышеперечисленного.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. 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. 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.
осуществляют поиск уровней дерева кодирования для выбранного значения из частичных значений базовых кодовых слов, которое меньше или равно кодовому слову из потока битов с кодовыми словами;
пропускают фиксированное число битов в потоке битов с кодовыми словами перед переходом к выбранному уровню дерева кодирования в ответ на показатель пропуска;
вычисляют одно из множества значений, соответствующих кодовому слову, на основе разности между выбранным значением из частичных значений базовых кодовых слов, которое меньше или равно кодовому слову, и кодовым словом и индекс выбранного значения из частичных значений базовых кодовых слов, которое меньше или равно кодовому слову.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 .
средство генерации частичных значений базовых кодовых слов, причем базовые кодовые слова соответствуют уровням дерева кодирования, определяющего канонические кодовые слова переменной длины, и причем частичные значения основаны на смещении базовых кодовых слов на фиксированное число битов;
средство генерации показателя пропуска, указывающего декодеру пропустить фиксированное число битов в потоке битов, подлежащем декодированию, перед переходом к выбранному уровню дерева кодирования; и
средство сохранения частичных значений и показателя пропуска в структуре данных в памяти.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. 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.
средство поиска уровней дерева кодирования для выбранного значения из частичных значений базовых кодовых слов, которое меньше или равно кодовому слову из потока битов с кодовыми словами;
средство пропуска фиксированного числа битов в потоке битов с кодовыми словами перед переходом к выбранному уровню дерева кодирования в ответ на показатель пропуска;
средство вычисления одного из множества значений, соответствующих кодовому слову, на основе разности между выбранным значением из частичных значений базовых кодовых слов, которое меньше или равно кодовому слову, и кодовым словом и индекса выбранного значения из частичных значений базовых кодовых слов, которое меньше или равно кодовому слову.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.
процессор, выполненный с возможностью генерации частичных значений базовых кодовых слов, причем базовые кодовые слова соответствуют уровням дерева кодирования, определяющего кодовые слова переменной длины, и причем частичные значения основаны на смещении базовых кодовых слов на фиксированное число битов, и генерации показателя пропуска, указывающего декодеру пропустить фиксированное число битов в потоке битов, подлежащем декодированию, перед переходом к выбранному уровню дерева кодирования; и
память, которая хранит частичные значения и показатель пропуска в структуре данных.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.
ищет уровни дерева кодирования для выбранного значения из частичных значений базовых кодовых слов, которое меньше или равно кодовому слову из потока битов с кодовыми словами;
пропускает фиксированное число битов в потоке битов с кодовыми словами перед переходом к выбранному уровню дерева кодирования в ответ на показатель пропуска;
вычисляет одно значение из множества значений, соответствующих кодовому слову, на основе разности между выбранным значением из частичных значений базовых кодовых слов, которое меньше или равно кодовому слову, и кодовым словом и индекс выбранного значения из частичных значений базовых кодовых слов, которое меньше или равно кодовому слову.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.
память, хранящую структуру данных, содержащую частичные значения базовых кодовых слов, причем базовые кодовые слова соответствуют уровням дерева кодирования, определяющего канонические кодовые слова переменной длины, причем частичные значения основаны на смещении базовых кодовых слов на фиксированное число битов, и показатель пропуска, указывающий декодеру пропустить фиксированное число битов в потоке битов, подлежащем декодированию, перед переходом к выбранному уровню дерева кодирования; и
декодер, который обращается к памяти для декодирования одного из кодовых слов из потока битов на основе частичных значений и показателя пропуска в хранящейся структуре данных.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. 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.
обращаются к структуре данных, хранящейся в памяти, причем структура данных содержит частичные значения базовых кодовых слов, причем базовые кодовые слова соответствуют уровням дерева кодирования, определяющего кодовые слова переменной длины, причем частичные значения основаны на смещении базовых кодовых слов на фиксированное число битов, и показатель пропуска, указывающий декодеру пропустить фиксированное число битов в потоке битов, подлежащем декодированию, перед переходом к выбранному уровню дерева кодирования; и
декодируют одно из кодовых слов из потока битов на основе частичных значений и показателя пропуска в хранящейся структуре данных.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. 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 .
средство хранения структуры данных, содержащей частичные значения базовых кодовых слов, причем базовые кодовые слова соответствуют уровням дерева кодирования, определяющего кодовые слова переменной длины, причем частичные значения основаны на смещении базовых кодовых слов на фиксированное число битов, и показатель пропуска, указывающий декодеру пропустить фиксированное число битов в потоке битов, подлежащем декодированию, перед переходом к выбранному уровню дерева кодирования; и
средство декодирования одного из кодовых слов из потока битов на основе частичных значений и показателя пропуска в хранящейся структуре данных.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. 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.
обращаться к структуре данных, хранящейся в памяти, причем структура данных содержит частичные значения базовых кодовых слов, причем базовые кодовые слова соответствуют уровням дерева кодирования, определяющего канонические кодовые слова переменной длины, причем частичные значения основаны на смещении базовых кодовых слов на фиксированное число битов, и показатель пропуска, указывающий декодеру пропустить фиксированное число битов в потоке битов, подлежащем декодированию, перед переходом к выбранному уровню дерева кодирования; и
декодировать одно из кодовых слов из потока битов на основе частичных значений и показателя пропуска в хранящейся структуре данных.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. 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 .
память, хранящую структуру данных, содержащую частичные значения базовых кодовых слов, причем базовые кодовые слова соответствуют уровням дерева кодирования, определяющего кодовые слова переменной длины, причем частичные значения основаны на смещении базовых кодовых слов на фиксированное число битов, и показатель пропуска, указывающий декодеру пропустить фиксированное число битов в потоке битов, подлежащем декодированию, перед переходом к выбранному уровню дерева кодирования; и
декодер, который обращается к памяти для декодирования одного из кодовых слов из потока битов на основе частичных значений и показателя пропуска в хранящейся структуре данных;
приемник для приема кодовых слов от кодера по беспроводной связи; и
устройство вывода, которое представляет выходные данные пользователю на основе, по меньшей мере, частично, декодированных кодовых слов.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. 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.
память, хранящую структуру данных, содержащую частичные значения базовых кодовых слов, причем базовые кодовые слова соответствуют уровням дерева кодирования, определяющего канонические кодовые слова переменной длины, причем частичные значения основаны на смещении базовых кодовых слов на фиксированное число битов, и показатель пропуска, указывающий декодеру пропустить фиксированное число битов в потоке битов, подлежащем декодированию, перед переходом к выбранному уровню дерева кодирования; и
декодер, который обращается к памяти для декодирования одного из кодовых слов из потока битов на основе частичных значений и показателя пропуска в хранящейся структуре данных.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. 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.
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)
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)
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 |
-
2007
- 2007-11-09 RU RU2009122479/09A patent/RU2426227C2/en not_active IP Right Cessation
- 2007-11-14 RU RU2009122477/09A patent/RU2413360C1/en not_active IP Right Cessation
Cited By (4)
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 |