BRPI0718618A2 - Codificação de memória eficiente de códigos de comprimento variável. - Google Patents

Codificação de memória eficiente de códigos de comprimento variável. Download PDF

Info

Publication number
BRPI0718618A2
BRPI0718618A2 BRPI0718618-5A BRPI0718618A BRPI0718618A2 BR PI0718618 A2 BRPI0718618 A2 BR PI0718618A2 BR PI0718618 A BRPI0718618 A BR PI0718618A BR PI0718618 A2 BRPI0718618 A2 BR PI0718618A2
Authority
BR
Brazil
Prior art keywords
codewords
values
bits
base code
base
Prior art date
Application number
BRPI0718618-5A
Other languages
English (en)
Inventor
Yuriy Reznik
Original Assignee
Qualcomm Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Qualcomm Inc filed Critical Qualcomm Inc
Publication of BRPI0718618A2 publication Critical patent/BRPI0718618A2/pt

Links

Classifications

    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M7/00Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
    • H03M7/30Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
    • H03M7/40Conversion to or from variable length codes, e.g. Shannon-Fano code, Huffman code, Morse code
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M7/00Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
    • H03M7/30Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
    • H03M7/40Conversion to or from variable length codes, e.g. Shannon-Fano code, Huffman code, Morse code
    • H03M7/4006Conversion to or from arithmetic code
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/60Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using transform coding
    • H04N19/61Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using transform coding in combination with predictive coding
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/90Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using coding techniques not provided for in groups H04N19/10-H04N19/85, e.g. fractals
    • H04N19/91Entropy coding, e.g. variable length coding [VLC] or arithmetic coding
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/90Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using coding techniques not provided for in groups H04N19/10-H04N19/85, e.g. fractals
    • H04N19/93Run-length coding

Landscapes

  • Engineering & Computer Science (AREA)
  • Multimedia (AREA)
  • Signal Processing (AREA)
  • Theoretical Computer Science (AREA)
  • Compression, Expansion, Code Conversion, And Decoders (AREA)
  • Compression Or Coding Systems Of Tv Signals (AREA)
  • Image Processing (AREA)
  • Reduction Or Emphasis Of Bandwidth Of Signals (AREA)

Description

"CODIFICAÇÃO DE MEMÓRIA EFICIENTE DE CÓDIGOS DE COMPRIMENTO VARIÁVEL"
Esse pedido reivindica os benefícios do pedido provisório U.S. No. 60/865.827, depositado em 14 de 5 novembro de 2006, e do pedido provisório U.S. o. 60/867.081, depositado em 22 de novembro de 2006, todo o conteúdo de cada um dos quais é incorporado aqui por referência.
Campo da Invenção Essa descrição se refere à compressão de dados e,
mais particularmente, à compressão de dados utilizando códigos de comprimento variável (VLCs).
Descrição da técnica anterior
A compressão de dados é amplamente utilizada em uma variedade de aplicações para reduzir o consumo de espaço de armazenamento de dados, largura de banda de transmissão, ou ambos. Aplicações ilustrativas da compressão de dados incluem codificação de vídeo digital, imagem, fala e áudio. A codificação de video digital, por exemplo, é utilizada em uma ampla variedade de dispositivos, incluindo televisões digitais, sistemas de broadcast direta digital, dispositivos de comunicação sem fio, assistentes digitais pessoais (PDAs), computadores laptop e desktop, câmeras digitais, dispositivos gravadores digitais, dispositivos de jogos de video, telefones de rádio celular ou via satélite, ou similares. Os dispositivos de vídeo digital implementam as técnicas de compressão de video, tal como MPEG-2, MPEG-4, ou H.264/MPEG-4 Codificação de Vídeo Avançada (AVC), para transmitir e receber vídeo digital com maior eficiência.
Em geral, as técnicas de compressão de vídeo realizam previsão espacial, estimativa de movimento e compensação de movimento para reduzir ou remover a redundância inerente aos dados de video. Em particular, a intracodificação se baseia na previsão espacial para reduzir ou remover a redundância espacial em video dentro de um determinado quadro de video. A intercodificação se baseia em previsão temporal para reduzir ou remover a redundância temporal em vídeo dentro de quadros adjacentes. Para a intercodificação, um codificador de vídeo realiza a estimativa de movimento para rastrear o movimento da combinação de blocos de vídeo entre dois ou mais quadros adjacentes. A estimativa de movimento gera vetores de movimento que indicam o deslocamento dos blocos e vídeo com relação aos blocos de vídeo correspondentes em um ou mais quadros de referência. A compensação de movimento utiliza o vetor de movimento para gerar um bloco de vídeo de previsão de um quadro de referência. Depois da compensação de movimento, um bloco de vídeo residual é formado pela subtração do bloco,de vídeo de previsão do bloco de vídeo original.
Um codificador de vídeo aplica os processos de transformada, quantização e codificação por entropia para reduzir ainda mais a taxa de bit do bloco residual produzido pelo, processo de codificação de vídeo. As técnicas de codificação por entropia são utilizadas nos estágios finais de um codificador/decodificador de vídeo (CODEC), e em várias outras aplicações de codificação, antes do armazenamento ou transmissão dos dados codificados. A codificação por entropia envolve geralmente a aplicação de códigos aritméticos ou códigos de comprimento variável (VLCs) para comprimir adicionalmente os coeficientes residuais produzidos pelas operações de transformada e quantização. Exemplos de técnicas de codificação por entropia incluem codificação aritmética binária adaptativa de contexto (CABAC) e codificação de comprimento variável adaptativa de contexto (CAVLC), que podem ser utilizadas como modos de codificação por entropia alternativos em alguns codificadores. Um codificador de vídeo realiza a decodificação por entropia para descomprimir a informação residual para cada um dos blocos, e reconstrói o vídeo codificado utilizando informação de movimento e a informação residual.
Resumo da Invenção
Em geral, essa descrição é direcionada às técnicas para a codificação de comprimento variável adaptativo de baixa complexidade e memória eficiente (VLC) de dados para uma variedade de aplicações, tal como codificação de dados de vídeo digital, imagem, áudio ou fala. ; Em um primeiro aspecto geral, as técnicas podem explorar as propriedades dos conjuntos particulares de palavras código para suportar estruturas de dados muito compactas. Em um segundo aspecto geral, as técnicas podem suportar;a codificação e decodificação adaptativa de baixa complexidade de seqüências binárias produzidas por fontes sem memória.
A descrição fornece, em um primeiro aspecto, um método compreendendo a geração de valores parciais das palavras código de . base para níveis de uma árvore de codificação especificando as palavras código de comprimento variável, gerando um indicador, de salto instruindo um decodificador a saltar um número de bits em uma seqüência de bits a ser decodificada antes de prosseguir para um nível selecionado de árvore de codificação, e armazenar os valores parciais e o indicador de salto em uma estrutura de dados em uma memória.
Em outro aspecto, a descrição fornece um meio legível por computador tangível compreendendo uma estrutura de dados que armazena os valores parciais das palavras código de base para niveis de uma árvore de codificação especificando as palavras código de comprimento variável, e um indicador de salto indicando a um decodificador para saltar um número de bits em uma seqüência de bits a ser 5 decodificada antes de prosseguir para um nivel selecionado da árvores de codificação.
Em um aspecto adicional, a descrição fornece um dispositivo compreendendo um processador configurado para gerar valores parciais das palavras código de base para 10 níveis de uma árvore de codificação especificando as palavras código de comprimento variável, e gerando um indicador de salto que instrui um decodificador a saltar um número de bits em uma seqüência de bits a ser decodificada antes de prosseguir para um nível selecionado da árvore de 15 codificação, e uma memória que armazena os valores parciais e/.o indicador de salto em uma estrutura de dados.
Em outro aspecto, a descrição fornece um dispositivo de decodificação compreendendo uma memória que armazena uma estrutura de dados compreendendo valores 20 parciais das palavras código de base para níveis de uma árvore de codificação especificando as palavras código de comprimento variável, e um indicador de salto instruindo um decodif icador a saltar um número de bits em uma seqüência de: bits a ser decodificada antes de prosseguir para um 25 nível selecionado da arvore de codificação, e um decodificador que acessa a memória para decodificar uma das palavras código a partir da seqüência de bits com base nos valores parciais e o indicador de salto na estrutura de dados armazenada.
Em um aspecto adicional, a descrição fornece um
método de decodificação compreendendo o acesso a uma estrutura de dados armazenada na memória, onde a estrutura de dados compreende valores parciais das palavras código de base para níveis de uma árvore de codificação especificando as palavras código de comprimento variável, e um indicador de salto instruindo um decodificador a saltar um número de bits em uma seqüência de bits a ser decodificada antes de prosseguir para um nível selecionado da árvore de codificação, e a decodificação de uma das palavras código a partir da seqüência de bits com base nos valores parciais e no indicador de salto na estrutura de dados armazenada.
Em outro aspecto, a descrição fornece um meio legível por computador tangível, compreendendo instruções para fazer com que um processador acesse uma estrutura de dados armazenada na memória, onde a estrutura de dados compreende valores parciais das palavras código de base para níveis de uma árvore de codificação especificando as palavras código de comprimento variável, e um indicador de salto instruindo um decodificador a saltar um número de bits em uma seqüência de bits a ser decodificada antes de prosseguir para um nível selecionado da árvore de codificação e decodificar uma das palavras código a partir da seqüência de bits com base nos valores parciais e no indicador de salto na estrutura de dados armazenada.
Em um aspecto adicional, a descrição fornece um método compreendendo a realização da codificação de comprimento variável de acordo com uma estrutura de código, onde a estrutura de código define grupos de palavras código em uma árvore de codificação, cada um dos grupos incluindo palavras código que representam valores possuindo as mesmas ponderações e as palavras código em cada um dos grupos sendo ordenadas de forma lexicográfica com relação aos valores representados pelas palavras código, e primeiro e segundo subgrupos de palavras código dentro de cada um dos grupos, onde o primeiro subgrupo inclui palavras código possuindo um primeiro comprimento e o segundo subgrupo inclui palavras código possuindo um segundo comprimento diferente do primeiro comprimento, e gerando um resultado de codificação de comprimento variável para pelo menos um dentre o armazenamento em memória, transmissão para um dispositivo ou apresentação para um usuário.
Em um aspecto adicional, a descrição fornece um meio legível por computador tangível compreendendo instruções para fazer com que um processador realize a codificação de comprimento variável de acordo com uma estrutura de código, onde a estrutura de código define grupos de palavras código em uma árvore de codificação, cada um dos grupos incluindo palavras código representando valores possuindo as mesmas ponderações e as palavras código em cada um dos grupos sendo ordenadas de forma lexicográfica com relação aos valores representados pelas palavras código, e os primeiro e segundo subgrupos das palavras código dentro de cada um dos grupos, onde o primeiro subgrupo inclui palavras código, possuindo um primeiro comprimento e o segundo subgrupo inclui palavras código possuindo um segundo comprimento diferente do primeiro comprimento, e gerando um resultado da codificação de comprimento variável para pelo menos um dentre um armazenamento em memória, transmissão para um dispositivo ou apresentação para um usuário.
Em um aspecto adicional, a descrição fornece um dispositivo compreendendo um processador configurado para realizar a codificação de comprimento variável de acordo com uma estrutura de código, onde a estrutura de código define grupos de palavras código em uma árvore de codificação, cada um dos grupos incluindo palavras código que representam os valores possuindo as mesmas ponderações e as palavras código em cada um dos grupos sendo ordenadas de forma lexicográfica com relação aos valores representados pelas palavras código, e os primeiro e segundo subgrupos de palavras código dentro de cada um dos grupos, onde o primeiro subgrupo inclui palavras código possuindo um primeiro comprimento e o segundo subgrupo 5 incluindo palavras código possuindo um segundo comprimento diferente do primeiro comprimento, e gerando um resultado da codificação de comprimento variável para pelo menos um dentre o armazenamento em memória, a transmissão para um dispositivo, ou apresentação para um usuário.
Em um aspecto adicional, a descrição fornece um
método compreendendo, para uma estrutura de código definindo os grupos de palavras código em uma árvore de codificação a especificação das palavras código de comprimento variável, onde cada um dos grupos inclui 15 palavras código representando valores possuindo os mesmos valores e as palavras código em cada um dos grupos sendo ordenadas de forma lexicográfica com relação aos valores representados pelas palavras código, os primeiro e segundo subgrupos das palavras código dentro de cada um dos grupos, 20 onde o primeiro subgrupo inclui palavras código possuindo um primeiro comprimento e o segundo subgrupo inclui palavras código possuindo um segundo comprimento diferente do primeiro comprimento, realizando a codificação de comprimento variável utilizando as palavras código de base 25 para cada um dos subgrupos, posições das palavras código dentro de cada um dos grupos, um número de palavras código dentro de cada um dos primeiros subgrupos, e comprimentos das palavras código dentro de cada um dos subgrupos, e gerando um resultado da codificação de comprimento variável 30 para pelo menos um dentre o armazenamento em memória, transmissão para um dispositivo, ou apresentação para um usuário. Em um aspecto adicional, a descrição fornece um dispositivo compreendendo, para uma estrutura de código, meios para definir os grupos de palavras código em uma árvore de codificação especificando palavras código de 5 comprimento variável, onde cada um dos grupos inclui palavras código representando valores possuindo as mesmas ponderações e palavras código em cada um dos grupos sendo ordenadas de forma lexicográfica com relação aos valores representados pelas palavras código, e primeiro e segundo 10 subgrupos de palavras código dentro de cada um dos grupos, onde o primeiro subgrupo inclui palavras código possuindo um primeiro comprimento e o segundo subgrupo inclui palavras código possuindo um segundo comprimento diferente do primeiro comprimento, meios para a realização da 15 codificação de comprimento variável utilizando palavras código de base para cada um dos subgrupos, posições das palavras código dentro de cada um dos grupos, um número de palavras código dentro de cada um dos primeiros subgrupos, e os comprimentos de palavras código dentro de cada um dos 20 subgrupos, e meios para a geração de um resultado da codificação de comprimento variável para pelo menos um dentre o armazenamento em memória, transmissão para um dispositivo ou apresentação para um usuário.
Em um aspecto adicional, a descrição fornece um 25 meio legivel por computador tangível compreendendo instruções para fazer com que o processador, para uma estrutura de código que define os grupos de palavras código em uma árvore de codificação especificando as palavras código de comprimento variável, onde cada um dos grupos 30 inclui palavras código representando valores possuindo as mesmas ponderações e as palavras código em cada um dos grupos são ordenadas de forma lexicográfica com relação aos valores representados pelas palavras código, e os primeiro e segundo subgrupos de palavras código dentro de cada um dos grupos, onde o primeiro subgrupo inclui palavras código possuindo um primeiro comprimento e um segundo subgrupo inclui palavras código possuindo um segundo comprimento diferente do primeiro comprimento, realize a codificação de comprimento variável utilizando as palavras código de base para cada um dos subgrupos, posicione as palavras código dentro de cada um dos grupos, um número de palavras código dentro de cada um dos primeiros subgrupos, e comprimentos das palavras código dentro de cada um dos subgrupos, e gere um resultado da codificação de comprimento variável para pelo menos um dentre o armazenamento em memória, transmissão para um dispositivo, ou apresentação para um usuário.
Em um aspecto adicional, a descrição fornece um dispositivo compreendendo, para uma estrutura de código definindo grupos de palavras código em uma árvore de codificação especificando palavras código de comprimento variável, onde cada um dos grupos inclui palavras código representando valores possuindo as mesmas ponderações e as palavras código em cada um dos grupos sendo ordenadas de forma lexicográfica com relação aos valores representados pelas palavras código, e os primeiro e segundo subgrupos das palavras código dentro de cada um dos grupos, onde o primeiro subgrupo inclui as palavras código possuindo um primeiro comprimento e um segundo subgrupo incluindo palavras código possuindo um segundo comprimento diferente do primeiro comprimento, um processador configurado para realizar a codificação de comprimento variável utilizando palavras código de base para cada um dos subgrupos, posicionando as palavras código dentro de cada um dos grupos, um número de palavras código dentro de cada um dos primeiros subgrupos, e comprimentos de palavras código dentro de cada um dos subgrupos, e gerando um resultado da codificação de comprimento variável para pelo menos um dentre o armazenamento em memória, transmissão para um dispositivo ou apresentação para um usuário.
5 Em outro aspecto, a descrição fornece um meio
legível por computador tangível compreendendo uma estrutura de dados para a codificação de comprimento variável utilizando uma estrutura de código de comprimento variável que define os grupos de palavras código em uma árvore de 10 codificação, cada um dos grupos incluindo palavras código que representam valores possuindo as mesmas ponderações e palavras código em cada um dos grupos sendo ordenadas de forma lexicográfica com relação aos valores representados pelas palavras código, e os primeiro e segundo subgrupos de 15 palavras código dentro de cada um dos grupos, onde o primeiro subgrupo inclui palavras código possuindo um primeiro comprimento e o segundo subgrupo inclui palavras código possuindo um segundo comprimento diferente do primeiro comprimento.
Em um aspecto adicional, a descrição fornece um
dispositivo de circuito integrado compreendendo uma memória armazenando uma estrutura de dados compreendendo valores parciais das palavras código de base para níveis de uma árvore de codificação especificando as palavras código de 25 comprimento variável, e um indicador de salto instruindo um decodificador a saltar um número de bits em uma seqüência de bits a ser decodificada antes de prosseguir para um nível selecionado de árvore de codificação, e um decodificador que acessa a memória para decodificar uma das 30 palavras chave a partir da seqüência de bits com base nos valores parciais e no indicador de salto na estrutura de dados armazenada. Em outro aspecto, a descrição fornece um aparelho de dispositivo de comunicação sem fio compreendendo uma memória armazenando uma estrutura de dados compreendendo valores parciais das palavras código de base para níveis de uma árvore de codificação especificando as palavras código de comprimento variável, e um indicador de salto instruindo um decodif icador para saltar um número de bits em uma seqüência de bits a ser decodificada antes de prosseguir para um nível selecionado da árvore de codificação, um decodificador que acessa a memória para decodificar uma das palavras código a partir da seqüência de bits com base nos valores parciais e o indicador de salto na estrutura de dados armazenada, um receptor para receber as palavras código de um codificador pela comunicação sem fio, e um dispositivo de saída que representa a saída para um usuário com base pelo menos em parte nas palavras código decodificadas,.
Em um aspecto adicional, a descrição fornece um dispositivo de circuito integrado compreendendo um processador configurado para realizar a codificação de comprimento variável de acordo com uma estrutura de código, onde a estrutura de código define os grupos de palavras código em uma árvore de codificação, cada um dos grupos incluindo palavras código que representam os valores possuindo as mesmas ponderações e as palavras código em cada um dos grupos sendo ordenadas de forma lexicográfica com relação aos valores representados pelas palavras código, e primeiro e segundo subgrupos de palavras código dentro de cada um dos grupos, onde o primeiro subgrupo inclui palavras código possuindo um primeiro comprimento e o segundo subgrupo inclui palavras código possuindo um segundo comprimento diferente do primeiro comprimento, e onde o processador é configurado para gerar um resultado da codificação de comprimento variável para pelo menos um dentre o armazenamento em memória, a transmissão para um dispositivo ou apresentação para um usuário.
Em outro aspecto, a descrição fornece um aparelho de dispositivo de comunicação sem fio compreendendo um processador configurado para realizar a codificação de comprimento variável de acordo com uma estrutura de código, onde a estrutura de código define os grupos de palavras código em uma árvore de codificação, cada um dos grupos incluindo palavras código representando valores possuindo as mesmas ponderações e as palavras código em cada um dos grupos sendo ordenadas de forma lexicográfica com relação aos valores representados pelas palavras código, e os primeiro e segundo subgrupos de palavras código dentro de cada um dos grupos, onde o primeiro subgrupo inclui palavras código possuindo um primeiro comprimento e o segundo subgrupo incluindo palavras código possuindo um segundo comprimento diferente do primeiro comprimento, e onde o processador é configurado para gerar um resultado da codificação de comprimento variável para pelo menos um dentre o armazenamento em memória, transmissão para um dispositivo ou apresentação para um usuário.
As técnicas descritas nessa descrição podem ser implementadas em hardware, software, firmware, ou qualquer combinação dos mesmos. Se for implementada em software, o software pode ser executado em um ou mais processadores, tal como um microprocessador, circuito integrado específico de aplicativo (ASIC) , conjunto de porta programável em campo (FPGA), ou processador de sinal digital (DSP), ou outros conjuntos de circuitos integrados equivalentes ou lógica discreta. 0 software que executa as técnicas pode ser inicialmente armazenado em um meio legível por computador e carregado e executado por um processador. De acordo, essa descrição também contempla os produtos de programa de computador compreendendo um meio legivel por computador que compreende instruções que fazem com que um processador realize qualquer uma dentre a variedade de técnicas como descrito nessa descrição.
Os detalhes de um ou mais aspectos da descrição são apresentados nos desenhos em anexo e na descrição abaixo. Outras características, objetivos e vantagens das técnicas descritas nessa descrição serão aparentes a partir da descrição e dos desenhos e a partir das reivindicações.
Breve Descrição dos Desenhos
A figura 1 é um diagrama de bloco ilustrando um sistema de codificação e decodificação de vídeo;
A figura 2 é um diagrama de bloco ilustrando um exemplo de um codificador de vídeo;
A figura 3 é um diagrama de bloco ilustrando um exemplo de um decodificador de vídeo;
A figura 4 é um diagrama ilustrando um exemplo de uma árvore de codificação binária;
A figura 5 é um gráfico ilustrando a taxa de redundância de um código de bloco adaptativo com um comportamento assintomático;
A figura 6 é um diagrama de uma árvore binária ilustrando os grupos de blocos, subgrupos e palavras código de base;
As figuras 7a e 7b são gráficos ilustrando a comparação das taxas de redundância de um código de bloco adaptativo com valores diferentes de p;
A figura 8 é um gráfico ilustrando a sensibilidade de redundância à assimetria dos dados de fonte;
A figura 9 é um fluxograma ilustrando um método de construção de codificação de comprimento variável de memória eficiente para distribuições monotônicas de acordo com um aspecto dessa descrição;
A figura 10 é um fluxograma ilustrando um método de codificação de símbolos utilizando códigos de
5 comprimento variável construídos de acordo com o método da figura 9;
A figura 11 é um fluxograma ilustrando um método para decodificação de códigos de comprimento variável construídos de acordo com o método da figura 9;
A figura 12 é um fluxograma ilustrando um método
para a construção de códigos de bloco adaptativos de acordo com outro aspecto dessa descrição;
A figura 13 é um fluxograma ilustrando um método para a codificação de blocos utilizando códigos de comprimento variável construídos de acordo com o método da figura 12;
A figura 14 é um diagrama de bloco ilustrando um método para a decodificação de códigos de comprimento variável construídos de acordo com o método da figura 12.
2 0 Descrição Detalhada
Em geral, essa descrição é direcionada a técnicas para a codificação de comprimento variável (VLC) adaptativa de baixa complexidade e memória eficiente de dados para uma variedade, de aplicações, tal como codificação de dados de 25 vídeo digital, imagem, áudio ou fala. Em alguns aspectos, as técnicas podem explorar as propriedades de conjuntos particulares de palavras código para suportar estruturas de dados muito compactas. Em outros aspectos, as técnicas podem suportar a codificação e decodificação adaptativa de 30 baixa complexidade de seqüências binárias produzidas por fontes sem memória. Apesar de as técnicas descritas nessa descrição poderem ser aplicáveis a uma ampla variedade de aplicações práticas, incluindo a compressão e codificação de dados em geral, a descrição se refere à codificação e decodificação de vídeo digital para fins de exemplo e ilustração.
De acordo com um primeiro aspecto geral dessa descrição, para suportar as estruturas de dados compactas, as técnicas descritas precisam se basear em qualquer esquema de construção de código particular. Por exemplo, esquemas Huffman, Shannon, Shannon-Fano, Gilbert-Moore ou outros esquemas de construção de código podem ser utilizados. Para esse primeiro aspecto geral, no entanto, considera-se que tal código seja construído para uma fonte com probabilidades monotonicamente crescentes dos símbolos a partir de uma alfabeto de registro de símbolos. Mais especificamente, é considerado que as palavras código possuem , comprimento monotonicamente decrescentes, ou comprimentos pelo menos não crescentes, e que as palavras código de mesmo comprimento possuem a mesma ordem lexicográfica como os símbolos no alfabeto de registro que representam.
A ordem lexicográfica desejada pode ser alcançada pela reordenação do alfabeto de registro. Para tais palavras código, os valores de palavra código de base pode ser computado para cada nível de uma árvore de codificação. Os valores de palavra código de base representam as palavras código canônicas menores em termos lexicográficos em cada nível da árvore de codificação. Os valores de palavra código de base e os índices de seus símbolos respectivos podem ser armazenados em um conjunto reordenado. Os índices podem ser armazenados como valores desviados para cada nível preenchido na árvore. Um processo de decodificação pode envolver a comparação de um armazenador de seqüência de bits com os valores de palavra código de base justificados para a esquerda seguidas por computação direta simples de um índice de um símbolo decodificado.
As propriedades acima podem ser utilizadas para descrever de forma singular tal código com uma estrutura de dados que possa ser adicionalmente comprimido para produzir uma estrutura de dados muito compacta que facilita a decodificação incrementada dos códigos de comprimento variável. Por exemplo, os valores de palavra código de base justificada para a esquerda normalmente terá grandes quantidades de zeros dianteiros da esquerda para a direita. Os números de zeros dianteiros são reduzidos de forma monotônica à medida que o processo move para as camadas mais profundas em uma árvore de codificação aplicável. Dessa forma, quando os bits são decodificados seqüencialmente começando com a primeira camada e movendo para baixo, alguns dos bits dianteiros zero podem ser pulados sem afetar a precisão do processo de decodificação.
Os zeros dianteiros podem ser removidos em incrementos fixos, por exemplo, incrementos de 8 bit, que é conveniente para a disposição de armazenamento temporário de seqüência de bits nos computadores convencionais de 8 bits/byte. Uma tabela adicional de um ou mais indicadores de salto pode ser fornecida para gerenciar esse processo. Como um exemplo, um indicador de salto direciona um decodificador a rolar para frente em um armazenador temporário de seqüência de bits por um incremento fixo de forma que os valores da palavra código de base diferentes possam ser distinguidos quando os zeros dianteiros são eliminados. Com a remoção dos zeros dianteiros, a largura do conjunto resultante dos valores de palavra código de base modificados pode ser substancialmente reduzida, conservando, dessa forma, a utilização de memória. Dessa forma, em um primeiro aspecto geral, a descrição contempla um método compreendendo a geração de valores parciais de palavras código de base para níveis de uma árvore de codificação especificando as palavras código de comprimento variável, gerando um indicador de salto instruindo um decodificador a saltar um número de bits em uma seqüência de bits a ser decodificada antes de prosseguir para um nível selecionado da árvore de codificação, e armazenando os valores parciais e o indicador de salto em uma estrutura de dados em uma memória. A estrutura de dados pode ser qualquer uma dentre uma ampla variedade de estruturas de dados, tal como tabelas, listas conectadas, árvores binárias, árvores radix, arquivos planos ou similares, e pode ser armazenada em qualquer um dentre uma variedade de diferentes dispositivos de memória, tal como muitas formas de memória de acesso randômico (RAM), memória de leitura apenas (ROM), ou ambas. A estrutura de dados pode ser armazenada em tal memória dentro de um codificador ou um decodificador. Por exemplo, um decodificador pode acessar a estrutura de dados, ou partes do conteúdo da estrutura de dados, a partir da memória associada com o decodificador para realizar a decodificação de comprimento variável das palavras código. de uma forma eficiente em termos de memória.
De acordo com esse primeiro aspecto geral, a descrição contempla adicionalmente um processador configurado para gerar valores parciais de palavras código de base para níveis de uma árvore de codificação 30 especificando as palavras código de comprimento variável, e gerando um indicador de salto que instrui um decodificador a saltar um número de bits em uma seqüência de bits a ser decodificada antes de prosseguir para um nível selecionado da árvore de codificação, além de uma memória que armazena os valores parciais e o indicador de salto em uma estrutura de dados. Tal informação pode ser armazenada em uma única estrutura de dados ou múltiplas estruturas de dados. De acordo, referência a uma estrutura de dados pode incluir uma ou mais estruturas de dados armazenando a informação contemplada nessa descrição. Um processador configurado pra acessar uma estrutura de dados para realizar a codificação de comprimento variável pode ser implementado dentro de um dispositivo fonte ou dispositivo de recebimento, ou dentro de um dispositivo separado que gera as estruturas de dados que definem as estruturas de código para uso por um codificador e/ou decodificador na realização da codificação de comprimento variável.
De acordo com essa técnica para alcançar as estruturas de dados compactas, consistente com um primeiro aspecto geral dessa descrição, cada comprimento de palavra código valido pode corresponder a um nivel com um nó externo em uma árvore de código. Como discutido acima, a estrutura de dados pode incluir valores parciais de palavras código de base e um ou mais indicadores de salto. Mais particularmente, em algumas modalidades, a estrutura de dados pode conter, para cada comprimento de palavra código válido, a seguinte informação: (a) um valor parcial da palavra código lexicográficamente menor (ou maior) no nivel atual da árvore de código, (b) o número de bits no valor parcial, (c) um valor do símbolo correspondente à palavra código lexicográficamente menor (ou maior), e (d) um indicador instruindo o decodificador a saltar um determinado número de bits antes de prosseguir para o próximo nível da árvore de código. De acordo, a estrutura de dados pode incluir adicionalmente valores para símbolos representados pelas palavras código de base e comprimentos dos valores parciais das palavras código de base, isso é, o número de bits em cada valor parcial de uma palavra código de base. As técnicas de codificação e decodificação podem utilizar essa estrutura de dados para identificar o nivel correspondente para uma palavra código ou simbolo decodificado. De acordo, a estrutura de dados pode ser armazenada na memória de um codificador de vídeo ou decodificador, codificador ou decodificador de imagem, codificador ou decodificador de áudio, ou codificador ou decodificador de fala, alguns dos quais podem ser construídos como CODECs combinados.
Exemplos das técnicas existentes para codificação e decodificação de códigos de comprimento variável são descritos em A. Moffat e 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, julho de 1973, 1046- 1047, e A. Brodnik e S. Carlsson, Sublinear Decoding of Huffman Codes Almost in Place, DIMACS Workshop on Codes and Trees: Algorithmic and Information Theoretic Approaches, outubro de 1998, Rutgers University, DIMACS Center, NJ. Em comparação com essas técnicas existentes, as técnicas descritas para se alcançar as estruturas de dados compactas podem oferecer determinadas vantagens.
Como um primeiro exemplo, uma estrutura de dados produzida pela técnica descrita pode utilizar uma quantidade muito menor de memória devido ao fato de apenas os valores parciais das palavras código lexieograficamente menores serem armazenados e utilizados, por exemplo, por um decodificador de vídeo. Como outro exemplo, a técnica descrita pode utilizar acesso incrementado aos dados de seqüência de bits, permitindo que um armazenador de seqüência de bit seja apresentado por um registro razoavelmente curto, e atualizado em quaisquer intervalos convenientes, por exemplo, através de um indicador de salto, reduzindo, adicionalmente, a complexidade da implementação.
Por exemplo, em algumas implementações, um
registro de 32 bits pode ser o suficiente mesmo para códigos muito longos. Adicionalmente, as atualizações podem ser feitas em intervalos de 8 bits. No geral, a técnica descrita pode reduzir de forma significativa a complexidade 10 da representação e codificação/decodificação dos códigos de comprimento variável, que pode permitir que os projetistas dos algoritmos de compressão utilizem livros código muito maiores e, dessa forma, muito mais eficientes.
De acordo com um segundo aspecto geral dessa descrição, para suportar a codificação e decodificação adaptativa de baixa complexidade de seqüências binárias produzidas pelas fontes sem memória, as técnicas descritas podem implementar códigos de bloco universal construídos para um conjunto de contextos identificado pelos números de bits diferentes de zero em bits anteriores em uma seqüência. Esse segundo aspecto geral pode ser fornecido ou praticado independentemente ou em conjunto com o primeiro aspecto geral descrito acima com relação à geração de estruturas de dados muito compactas. As técnicas para a codificação e decodificação adaptativa de baixa complexidade, de acordo com esse segundo aspecto geral, pode se basear em uma fórmula descrita para redundância assintomática de tais códigos, que refina a estimativa descrita em R. E. Krichevsky e V.K. Trof imov, The Performance of Universal Encoding, IEEE Trans. Information Theory, 27 (1981) 199-207.
As técnicas de acordo com esse segundo aspecto geral pode utilizar um conjunto de códigos Huffman projetados pra várias densidades estimadas e indexado pelos números de bits diferentes de zero em blocos anteriores (contextos) em uma seqüência. Pela utilização de blocos de tamanho até mesmo modestos de bits n = 8...16 (e utilizando 5 uma correspondência de l,5...5k bytes de memória) , tais técnicas podem alcançar o desempenho de compressão comparável ou superior a outros algoritmos existentes tal como o algoritmo Q-coder descrito em W.B. Pennebaker, J.L. Mitchell, G.G. Langdon, Jr., R.B. Arps, An overview of the 10 basic principies of the Q-Coder adaptive binary arithmetic coder, IBM J. Res. Dev., 32 (6) (1988) 717, que é utilizado no padrão de codificação de imagem JBIG, ou o algoritmo CABAC descrito em D. Marpe, H. Schwartz, e T. Wiegand, Context-Based Adaptive Binary Arithmetic Coding in the 15 H.264/AVC video compression standard, IEEE Trans. em CSVT, 13(7):620 636, julho de 2003, que é utilizado nos padrões ITU-T H.264/MPEG AVC para compressão de video.
A codificação e decodificação adaptativa de baixa complexidade, de acordo com esse segundo aspecto geral da 20 descrição, podem ser baseadas na realização de que, em um modelo sem memória, a probabilidade de um bloco de bits, ou sua estimativa, depender apenas de sua ponderação, (do número de bits diferentes de zero), e não de um padrão real de seus bits. Dessa forma, um conjunto de todos os blocos 25 possíveis de algum comprimento fixo pode ser dividido em diferentes grupos contendo blocos de mesma ponderação (e, consequentemente, mesma probabilidade). Pode ser assumido que cada grupo armazene blocos em uma ordem lexicográfica, naturalmente ou por reordenação.
É uma propriedade conhecida de códigos de
redundância mínima (tal como os códigos Huffman ou Shannon) que cada grupo de blocos equiprováveis possa incluir no máximo dois subgrupos, onde os blocos em cada um dos subgrupos são codificados por palavras código de mesmo comprimento. Sem restrição na generalidade, pode ser considerado adicionalmente que o comprimento das palavras código no primeiro subgrupo seja menor do que o comprimento das palavras código no segundo subgrupo. Visto que os blocos (ou palavras) dentro de um grupo seguem a ordem lexicográfica, os mesmos podem ser simplesmente divididos entre um subgrupo com comprimento de palavra código maior e um subgrupo com comprimento de palavra código menor. Um valor de indice indica a posição do bloco dentro de um grupo. O bloco lexicográficamente menor (ou palavra) em cada subgrupo recebe uma palavra código de base. Fornecida uma palavra código de base, as palavras código restantes em cada subgrupo podem ser prontamente computadas.
Dessa forma, de acordo com esse segundo aspecto geral da descrição, a codificação de comprimento variável pode ser realizada, por exemplo, por um codificador ou decodificador utilizando uma estrutura de código que define os grupos de blocos ou palavras de entrada e suas respectivas palavras código de saída em uma árvore de código, onde cada um dos grupos inclui palavras código que representam os blocos (ou palavras) possuindo as mesmas ponderações, e os primeiro e segundo subgrupos de palavras código dentro de cada um dos grupos, onde o primeiro subgrupo inclui palavras código possuindo um primeiro comprimento e o segundo subgrupo inclui palavras código compreende um segundo comprimento diferente do primeiro comprimento. Os blocos em cada um dos grupos são ordenados de forma lexicográf ica e então divididos em subgrupos, de forma que essa ordem lexicográf ica seja retida em cada um dos subgrupos. Ademais, as palavras código correspondentes a cada bloco dentro de um subgrupo são designadas de forma que também sigam a mesma ordem lexicográfica e facilitem a codificação e decodificação por computação direta.
Com base nessa disposição de blocos e seus grupos e subgrupos, as palavras código podem ser computadas diretamente utilizando-se um processo simplificado. Por exemplo, depois da obtenção de uma ponderação e um valor de indice para um bloco, se o valor de indice for inferior ao número máximo de blocos no primeiro subgrupo, então um primeiro subgrupo é selecionado para a localização da palavra código. Do contrário, o segundo subgrupo é selecionado para a localização da palavra código. Então, depois da recuperação da palavra código para o subgrupo selecionado, a palavra código é prontamente computada pela soma do valor da palavra código de base com um valor determinado com base. no valor de indice do bloco dentro do subgrupo selecionado. Para fins desse segundo aspecto geral da descrição, os termos blocos ou palavras podem ser utilizados de forma intercambiável para se referir geralmente às quantidades registradas a serem codificadas de acordo com um esquema de codificação. Um bloco ou palavra pode incluir uma seqüência de simbolos, que pode ser formada a partir de um alfabeto de entrada, tal como um alfabeto binário {0, 1}. As palavras código geralmente se referem a quantidades de saída designadas para os blocos (ou palavras) como resultado do esquema de codificação.
Esses e outros aspectos das técnicas descritas nessa descrição serão descritos em maiores detalhes abaixo. As técnicas podem ser utilizadas juntas ou independentemente, e podem ser implementadas em qualquer um dentre uma variedade de sistemas e dispositivos de codificação e decodificação, incluindo sistemas e dispositivos configurados para codificação e decodificação de dados de vídeo digital, imagem, áudio ou fala. Para fins de exemplo e ilustração, a descrição descreverá a aplicação de tais técnicas a codificação e decodificação de video digital, sem limitação quanto à aplicação prática geral da compressão e codificação de video digital, ou outras aplicações específicas a diferentes tipos de dados.
A figura 1 é um diagrama de bloco ilustrando um sistema de codificação e decodificação de vídeo 10. Como ilustrado na figura 1, o sistema 10 inclui um dispositivo fonte 12 que transmite vídeo codificado para um dispositivo receptor 14 através de um canal de comunicação 16. 0 dispositivo fonte 12 pode incluir uma fonte de vídeo 18, um codificador de vídeo 20 e um transmissor 22. O dispositivo receptor 14 pode incluir um receptor 24, um decodificador de vídeo 26 e um dispositivo de exibição de vídeo 28. O sistema 10 pode, ser configurado para aplicar as técnicas de VLC adaptativa de baixa complexidade e memória eficiente de dados de vídeo digital. Em particular, as técnicas VLC adaptativas de baixa complexidade e memória eficiente podem ser utilizadas para codificação por entropia dos coeficientes de bloco residual produzidos por um processo de codificação de vídeo previsível. As técnicas podem ser aplicadas aos esquemas de codificação de vídeo que codificam as posições de coeficientes de transformada diferentes de zero utilizando seqüências de zeros, ou a outros esquemas de codificação de vídeo.
No exemplo da figura 1, o canal de comunicação 16 pode compreender qualquer meio de comunicação sem fio ou com fio, tal como o espectro de radiofreqüência (RF) ou uma ou mais linhas de transmissão físicas, ou qualquer combinação de mídia com e sem fio. 0 canal 16 pode formar parte de uma rede com base em pacote, tal como a rede de área local, a rede de área ampla ou uma rede global tal como a Internet. 0 canal de comunicação 16 representa geralmente qualquer meio de comunicação adequado, ou coleção de diferentes meios de comunicação, para transmissão de dados de vídeo a partir do dispositivo fonte 12 para o dispositivo receptor 14.
O dispositivo fonte 12 gera vídeo para
transmissão para o dispositivo de destino 14. Em alguns casos, no entanto, os dispositivos 12, 14 podem operar de uma forma substancialmente simétrica. Por exemplo, cada um dos dispositivos 12, 14 pode incluir componentes de 10 codificação e decodificação de vídeo. Dessa forma, o sistema 10 pode suportar a transmissão de vídeo de uma via ou duas vias entre os dispositivos de vídeo 12, 14, por exemplo, para o sequenciamento de vídeo, broadcast de vídeo, ou videotelefonia. Para outras aplicações de 15 compressão e codificação de dados, os dispositivos 12, 14 podem ser configurados para enviar e receber, ou permutar, outros tipos de dados, tal como dados de imagem, fala ou áudio, ou combinações de dois ou mais dados de vídeo, imagem, fala e áudio. De acordo, a discussão das aplicações 20 de vídeo é fornecida para fins de ilustração e não deve ser considerada limitadora dos vários aspectos da descrição como descritos amplamente aqui.
A fonte de vídeo 18 pode incluir um dispositivo de captura de vídeo, tal como uma ou mais câmeras de vídeo,
um arquivo de vídeo contendo o vídeo capturado anteriormente, ou uma alimentação ao vivo de vídeo de um provedor de conteúdo de vídeo. Como uma alternativa adicional, a fonte de vídeo 18 pode gerar dados baseados em gráficos de computador como o vídeo fonte, ou uma 30 combinação de vídeo ao vivo e vídeo gerador por computador. Em alguns casos, se a fonte de vídeo 18 for uma câmera, o dispositivo fonte 12 e o dispositivo receptor 14 podem formar os chamados telefones câmera ou vídeo telefones. Dessa forma, em alguns aspectos, o dispositivo fonte 12, o dispositivo receptor 14 ou ambos podem formar um aparelho de dispositivo de comunicação sem fio, tal como um telefone móvel. Em cada caso, o vídeo capturado, capturado 5 previamente ou gerado por computador pode ser codificado pelo codificador de vídeo 20 para transmissão a partir do dispositivo fonte de vídeo 12 para o decodificador de vídeo
26 do dispositivo receptor de vídeo 14 através do transmissor 22, do canal 16 e do receptor 24. O dispositivo 10 de exibição 28 pode incluir qualquer um dentre uma variedade de dispositivos de exibição tal como um monitor de cristal líquido (LCD), monitor de plasma ou monitor de diodo de emissão de luz orgânico (OLED).
0 codificador de vídeo 20 e o decodificador de 15 vídeo 26 podem ser configurados para suportar a codificação de vídeo escalonável para a capacidade de escalonamento espacial, temporal e/ou da razão de sinal para ruído (SNR). Em alguns aspectos, o codificador de vídeo 20 e o decodificador de vídeo 22 podem ser configurados para 20 suportar a codificação de capacidade de escalonamento SNR de detalhamento fino (FGS) para SVC. O codificador 20 e o decodificador 26 podem suportar vários graus de capacidade de escalonamento pelo suporte de codificação, transmissão e decodif icação de uma camada base e uma ou mais camadas de 25 melhoria escalonável. Para a codificação de vídeo escalonável, uma camada base porta dados de vídeo com um nível mínimo de qualidade. Uma ou mais camadas de melhoria portam seqüência de bit adicional para suportar níveis espacial, temporal e/ou SNR maiores.
0 codificador de vídeo 20 e o decodificador de
vídeo 2 6 podem operar de acordo com um padrão de compressão de vídeo, tal como MPEG-2, MPEG-4, ITU-T H.263 ou ITU-T H.264/MPEG-4 AVC. Apesar de não ilustrado na figura 1 em alguns aspectos, o codificador de video 20 e o decodificador de vídeo 26 podem ser integrados com um codificador e decodificador de áudio, respectivamente, e incluem unidades MUX-DEMUX adequadas, ou outro hardware ou 5 software, para manusear a codificação e ambos o áudio e o vídeo em uma seqüência de dados comum ou seqüências de dados separadas. Se for aplicável, as unidades MUX-DEMUX podem se conformar ao protocolo multiplexador ITU H.233, ou outros protocolos tal como o protocolo de datagrama de 10 usuário (UDP).
O padrão H.264/MPEG-4 (AVC) foi formulado pelo Grupo de Especialistas de Codificação de Vídeo ITU-T (VCEG) juntamente com o Grupo de Especialistas de Imagem em Movimento ISO/IEC (MPEG) como o produto de uma parceria 15 coletiva conhecida, como Time de Vídeo Conjunto (JVT). O padrão H.2 64 é descrito na Recomendação ITU-T H.2 64 de codificação de vídeo avançada para serviços audiovisuais genéricos, pelo Grupo de Estudo ITU-T, e datado de março de 2005, que pode ser referido aqui como o padrão H.264 ou a 20 especificação H.264, ou o padrão ou especificação H.264/AVC.
O JVT continua a trabalhar em uma extensão SVC para H.264/MPEG-4 AVC. A especificação da extensão SVC em evolução está na forma de um Rascunho em Conjunto (JD) . O 25 Modelo de Vídeo Escalonável Conjunto (JSVM) criado pelo JVT implementa as ferramentas para uso no vídeo escalonável, que podem ser utilizadas dentro do sistema 10 para várias tarefas de codificação descritas nessa descrição. A informação detalhada referente à codificação de Capacidade 3 0 de Escalonamento SNR de Alto Detalhamento (FGS) pode ser encontrada nos documentos JD, por exemplo, SVC JD 6, Thomas Wiegand, Gary Sullivan, Julien Reichel, Heiko Schwarz, e Mathias Wien, "Joint Draft 6: Scalable Video Coding," JVT- 201, abril de 2006, Genebra, e em SVC JD 9, Thomas Wiegand, Gary Sullivan, Julien Reichel, Heiko Schwarz, e Mathias Wien, "Joint Draft 9 of SVC Amendment," JVT-V 201, janeiro de 2007, Marrakesh, Marrocos.
5 Em alguns aspectos, para broadcast de vídeo, as
técnicas descritas nessa descrição podem ser aplicadas à codificação de 'vídeo H.264 melhorada para a distribuição de serviços de vídeo em tempo real em sistemas de multicast de multimídia móvel terrestre (TM3) utilizando a 10 Especificação de Interface Aérea de Link de Avanço Apenas (FLO), "Forward Link Only Air Interface Specification for Terrestrial Mobile Multimedia Multicast," a ser publicada como Padrão Técnico TIA-1099 (a "Especificação FLO"), por exemplo, através de um servidor de broadcast de vídeo sem 15 fio ou aparelho de dispositivo de comunicação sem fio. A especificação FLO inclui exemplos definindo a sintaxe e semântica da seqüência de bits e processos de decodificação adequados para a Interface Aérea FLO. Alternativamente, o vídeo pode ser difundido de acordo com outros padrões tal 20 como DVB-H (broadcast de vídeo digital - portátil), ISDB-T (broadcast digital de serviços integrados - terrestre), ou DMB (broadcast de mídia digital) . Dessa forma, o dispositivo fonte 12 pode ser um terminal sem fio móvel, um servidor de sequenciamento de vídeo, ou um servidor de 25 broadcast de vídeo. No entanto, as técnicas descritas nessa descrição não estão limitadas a qualquer tipo particular de broadcast, multicast, ou sistema ponto a ponto. No caso de broadcast, o dispositivo fonte 12 pode efetuar broadcast de vários canais de dados de vídeo para múltiplos dispositivos 30 receptores, cada um dos quais pode ser similar ao dispositivo receptor 14 da figura 1.
0 codificador de vídeo 20 e o decodificador de vídeo 2 6 podem, cada um, ser implementados como um ou mais microprocessadores, processadores de sinal digital (DSPs), circuitos integrados específicos de aplicativo (ASICs), conjuntos de porta programável em campo (FPGAs), lógica discreta, software, hardware, firmware ou qualquer combinação dos mesmos. Dessa forma, cada um dentre o codificador de vídeo 20 e o decodificador de vídeo 26 pode ser implementado pelo menos parcialmente como um chip ou dispositivo de circuito integrado (IC), e incluindo em um ou mais codificadores ou decodificadores, qualquer um dos quais pode ser integrado como parte de um codificador/decodificador combinado (CODEC) em um dispositivo móvel respectivo, dispositivo de assinante, dispositivo de broadcast, servidor ou similar. Adicionalmente, o dispositivo fonte 12 e o dispositivo receptor 14 podem, cada um, incluir componentes de modulação, demodulação, conversão de frequência, filtragem e amplificador adequados para a transmissão e recepção de vídeo codificado, como aplicável, incluindo componentes sem fio de frequência de rádio (RF), e antenas suficientes para suportar a comunicação sem fio. Para facilitar a ilustração, no entanto, tais componentes não são ilustrados na figura 1.
Uma seqüência de vídeo inclui uma série de quadros de vídeo. O codificador de vídeo 20 opera em blocos de pixels dentro dos quadros de vídeo individuais a fim de codificar os dados de vídeo. Os blocos de vídeo podem ter tamanhos fixos ou variáveis, e podem diferir em tamanho de acordo com um padrão de codificação especificado. Cada quadro de vídeo inclui uma série de fatias. Cada fatia pode incluir uma série de macroblocos, que podem ser dispostos em sub-blocos. Como um exemplo, o padrão ITU-T H.2 64 suporta a intraprevisão em vários tamanhos de bloco, tal como 16 por 16, 8 por 8, 4 por 4 para componentes Iuma, e 8 por 8 para componentes chroma, além da interprevisão em vários tamanhos de bloco, tal como 16 por 16, 16 por 8, 8 por 16, 8 por 8, 8 por 4, 4 por 8 e 4 por 4 para componentes Iuma e tamanhos escalonados correspondentes 5 para componentes chroma.
Blocos de video menores podem fornecer melhor resolução, e podem ser utilizados para localizações de um quadro de video que inclui níveis mais altos de detalhe. Em geral, os macroblocos (MBs) e os vários sub-blocos podem 10 ser considerados blocos de vídeo. Adicionalmente, uma fatia pode ser considerada uma série de blocos de vídeo, tal como MBs e/ou sub-blocos. Cada fatia pode ser uma unidade decodificável independente. Depois da previsão, uma transformada pode ser realizada no bloco residual 8x8 ou 15 bloco residual 4x4, e uma transformada adicional pode ser aplicada aos coeficientes DC dos blocos 4x4 para os componentes chroma ou componente Iuma se o modo de previsão intra_16xl6 for utilizado.
O codificador de vídeo 20 e/ou o decodificador de vídeo 2 6 do sistema 10 da figura 1 pode ser configurado para empregar as técnicas para VLC adaptativa de baixa complexidade e memória eficiente como descrito nessa descrição. Em particular, o codificador de vídeo 20 e/ou o decodificador de vídeo 26 podem incluir um codificador por entropia e decodificador por entropia, respectivamente, que aplicam pelo menos algumas das técnicas para reduzir a utilização de memória, overhead de processamento, complexidade de processamento, consumo de largura de banda, espaço de armazenamento de dados, e/ou consumo de energia. A figura 2 é um diagrama de bloco ilustrando um
exemplo de um codificador de vídeo 2 0 como ilustrado na figura I. O codificador de vídeo 20 pode ser formado pelo menos em parte como um ou mais dispositivos de circuito integrado, que podem ser referidos coletivamente como um dispositivo de circuito integrado. Em alguns aspectos, o codificador de video 20 pode formar parte de um aparelho de dispositivo de comunicação sem fio ou um servidor de broadcast. O codificador de vídeo 20 pode realizar a intracodificação ou intercodificação de blocos dentro dos quadros de vídeo. A intracodificação se baseia na previsão espacial para redução ou remoção de redundância espacial em vídeo dentro de um determinado quadro de vídeo. A intercodificação se baseia na previsão temporal para redução ou remoção de redundância temporal em vídeo dentro de quadros adjacentes de uma seqüência de vide. Para a intercodificação, o codificador de vídeo 20 -realiza a estimativa de movimento para rastrear o movimento dos blocos de vídeo combinados.entre quadros adjacentes.
Como ilustrado na figura 2, o codificador de vídeo 20 recebe um bloco de vídeo atual 30 dentro de um quadro de vídeo a ser codificado. No exemplo da figura 2, codificador de vídeo 20 inclui a unidade de estimativa de 20 movimento 32, o armazenador de quadro de referência 34, a unidade de compensação de movimento 36, a unidade de transformada de bloco 38, a unidade de quantização 40, a unidade de quantização invertida 42, a unidade de transformada inversa 44 e a unidade de codificação por 25 entropia 46. A unidade de codificação por entropia 46 pode acessar uma ou mais estruturas de dados armazenadas em uma memória 45 para obter dados úteis na codificação. Um filtro de desbloqueio em circuito (não ilustrado) pode ser aplicado aos blocos de filtro para remover os artefatos de 30 bloqueio. 0 codificador de vídeo 20 também inclui um somador 48 e o somador 50. A figura 2 ilustra os componentes de previsão temporal do codificador de vídeo 20 para a intercodificação dos blocos de vídeo. Apesar de não ilustrado na figura 2 para facilitar a ilustração, o codificador de vídeo 20 também pode incluir componentes de previsão espacial para a intracodificação de alguns blocos de vídeo.
A unidade de estimativa de movimento 32 compara o bloco de vídeo 30 com os blocos em um ou mais quadros de vídeo adjacentes para gerar um ou mais vetores de movimento. O quadro adjacente ou quadros podem ser recuperados a partir do armazenador de quadro de referência 34, que pode compreender qualquer tipo de memória ou dispositivo de armazenamento de dados para armazenar blocos de vídeo reconstruídos a partir de blocos codificados previamente. A estimativa de movimento pode ser realizada para os blocos de tamanhos variáveis, por exemplo, 16x16, 16x8, 8x16, 8x8 ou tamanhos de bloco menores. A unidade de estimativa de movimento 32 identifica um ou mais blocos em quadros, adjacentes que combinam mais de perto com o bloco de vídeo atual 30, por exemplo, com base em um modelo de distorção de taxa, e determina o deslocamento entre os blocos em quadros adjacentes e o bloco de vídeo atual. Com essa base, a unidade de estimativa de movimento 32 produz um ou mais vetores de movimento (MV) que indicam a magnitude e trajetória de deslocamento entre o bloco de vídeo, atual 30 e um ou mais blocos coincidentes dos quadros de referência utilizados para codificar o bloco de vídeo atual 30.
Os vetores de movimento podem ter uma precisão de meio ou um quarto de pixel, ou mesmo uma precisão maior, permitindo que o codificador de vídeo 20 rastreie o movimento com maior precisão do que as localizações de pixel inteiro e obtenha uma melhor previsão de bloco. Quando os vetores de movimento com os valores de pixel fracionados forem utilizados, as operações de interpolação são realizadas na unidade de compensação de movimento 36. A unidade de estimativa de movimento 32 identifica as melhores divisões de bloco e vetor de movimento ou vetores de movimento para um bloco de video utilizando determinados critérios, tal como o modelo de distorção de taxa. Por exemplo, pode haver mais de um vetor de movimento no caso de previsão bidirecional. Utilizando-se as divisões de bloco resultantes e os vetores de movimento, a unidade de compensação de movimento 36 forma um bloco de vídeo de previsão.
0 codificador de vídeo 20 forma um bloco de vídeo residual pela subtração do bloco de vídeo de previsão produzido pela unidade de compensação de movimento 36 a partir do bloco de vídeo atual original 30 no somador 48. A unidade de transformada de bloco 38 aplica uma transformada, tal como a transformada de inteiro 4x4 ou 8x8 utilizada em H.264/AVC, em bloco residual, produzindo os coeficientes de bloco de transformada residuais. A unidade de quantização 40 quantiza os coeficientes de bloco de transformada residual para reduzir ainda mais a taxa de bit. A unidade de codificação por entropia 46 codifica por entropia os coeficientes quantizados para reduzir ainda mais a taxa de bit.
A unidade de codificação por entropia 46 opera como uma unidade VLC para aplicar a codificação VLC aos coeficientes de bloco quantizados. Em particular, a unidade de codificação por entropia .4 6 pode ser configurada para realizar a codificação VLC de coeficientes de bloco de vídeo digital utilizando técnicas VLC adaptativas de baixa complexidade e memória eficiente como descrito nessa descrição. Dessa forma,, os vários processos de codificação descritos nessa descrição podem ser implementados dentro da unidade de codificação por entropia 46 para realizar a codificação de dados de vídeo. Alternativamente, tal unidade de codificação por entropia 46 pode realizar os processos descritos nessa descrição para codificar qualquer um dentre uma variedade de dados, incluindo, mas não limitados a dados de vídeo, imagem, fala e áudio. Em geral, o decodificador de vídeo 26 realiza operações inversas, incluindo a decodificação VLC, para decodificar e reconstruir o vídeo codificado, como será descrito, por exemplo, com referência à figura 3.
A unidade de quantização invertida 42 e a unidade de transformada inversa 44 aplicam a quantização invertida e a transformada inversa, respectivamente, para reconstruir o bloco residual. O somador 50 adiciona o bloco residual reconstruído ao bloco de previsão de movimento compensado produzido pela unidade de compensação de movimento 36 para produzir um bloco de vídeo reconstruído para armazenamento no armazenador de quadro de referência 34. O bloco de vídeo reconstruído é utilizado pela unidade de estimativa de movimento 32 e a unidade de compensação de movimento 36 para codificar um bloco em um quadro de vídeo subsequente.
A figura 3 é um diagrama de bloco ilustrando um exemplo de um decodificador de vídeo 26. O decodificador de vídeo 2 6 pode ser formado pelo menos em parte como um ou mais dispositivos de circuito integrado, que podem ser referidos coletivamente como um dispositivo de circuito integrado. Em alguns aspectos, o decodificador de vídeo 26 pode formar parte de um aparelho de dispositivo de comunicação sem fio. O decodificador de vídeo 2 6 pode realizar a intradecodificação e a interdecodificação dos blocos dentro dos quadros de vídeo. Como ilustrado na figura 3, o decodificador de vídeo 26 recebe uma seqüência de bits de vídeo codificada que foi codificada pelo codificador de vídeo 20. No exemplo da figura 3, o decodificador de vídeo 26 inclui a unidade de decodificação por entropia 52, a unidade de compensação de movimento 54, a unidade de quantização invertida 56, a unidade de transformada inversa 58, e o armazenador de quadro de 5 referência 62. A unidade de decodificação por entropia 52 pode acessar uma ou mais estruturas de dados armazenadas em uma memória 51 para obter dados úteis na codificação. O decodificador de vídeo 26 também pode incluir um filtro de desbloqueio em circuito (não ilustrado) que filtra a saída 10 do somador 64. O decodificador de vídeo 26 também incluí o somador 64. A figura 3 ilustra os componentes de previsão temporal do decodificador de vide 2 6 para a interdecodificação dos blocos de vide. Apesar de não ser ilustrado na figura 3, o decodificador de vídeo 26 também 15 pode incluir componentes de previsão espacial para a intradecodificação de alguns blocos de vídeo.
A unidade de decodificação por entropia 52 recebe a seqüência de bits de vídeo codificada e decodifica a partir dos coeficientes residuais quantizados de seqüência 20 de bit, modo de codificação de macrobloco e informação de movimento, que pode incluir vetores de movimento e divisões de bloco. Dessa· forma, a unidade de decodificação por entropia 52 funciona como uma unidade de decodificação VLC. Por exemplo, a fim de decodificar os coeficientes residuais 25 quantizados a partir da seqüência de bits codificada, como a unidade de codificação por entropia 46 da figura 2, a unidade de decodificação por entropia 52 da figura 3 pode realizar a decodificação VLC adaptativa de baixa complexidade e memória eficiente dos coeficientes de bloco 30 de vídeo digital como descrito nessa descrição. No entanto, a unidade de decodificação por entropia 52 pode realizar a decodificação VLC de uma forma invertida com relação à unidade de codificação por entropia 4 6 da figura 2 a fim de recuperar os coeficientes de bloco quantizados a partir da seqüência de bits codificada. Dessa forma, os vários processos de decodificação descritos nessa descrição podem ser implementados dentro da unidade de decodificação por entropia 52 para realizar a decodificação dos dados de video. Alternativamente, tal unidade de decodificação por entropia 52 pode realizar os processos descritos nessa descrição para decodificar qualquer um dentre uma variedade de dados, incluindo, mas não limitado a dados e video, imagem, fala e áudio. Em qualquer caso, o resultado da codificação de comprimento variável realizada pela unidade de decodif icação por entropia 52 pode ser enviado para um usuário, armazenado na memória e/ou transmitido para outro dispositivo ou unidade de processamento.
A unidade de compensação de movimento 54 recebe s vetores de movimento e divisões de bloco e um ou mais dos quadros de referência reconstruídos a partir do armazenador de quadro de referência 62 para produzir um bloco de vídeo de previsão. A unidade de quantização invertida 56 quantiza de forma invertida, isso é, desquantiza, os coeficientes de bloco quantizados. A unidade de transformada inversa 58 aplica uma transformada inversa, por exemplo, um DCT invertido ou uma transformada de inteiro 4x4 ou 8x8 invertida, aos coeficientes para produzir blocos residuais. Os blocos de vídeo de previsão são então somados pelo somador 64 com os blocos residuais para formar blocos decodificados. Um filtro de desbloqueio (não ilustrado) pode ser aplicado para filtrar os blocos decodificados para remover os artefatos de bloqueio. Os blocos filtrados são então colocados no armazenador de quadro de referência 62, que fornece o quadro de referência para decodificação dos quadros de vídeo subsequentes e também produz o vídeo decodificado para o dispositivo de exibição 28 (figura 1). Codificação Eficiente em Termos de Memória de Códigos de Comprimento Variável
De acordo com um primeiro aspecto geral da descrição, um exemplo de uma técnica eficiente em termos de 5 memória para a codificação de comprimento variável para suportar as estruturas de dados compactas será descrito em maiores detalhes. A técnica não precisa se basear em qualquer esquema de construção de código em particular, tal como Huffman, Shannon, Shannon-Fano, Gilbert-Moore ou 10 outros códigos. A técnica considera, no entanto, que um código seja construído para uma fonte com probabilidades monotonicamente crescentes de símbolos. Mais
especificamente, é considerado que as palavras código possuem comprimentos monotonicamente decrescentes (ou pelo menos não crescentes), e que as palavras código de mesmo comprimento possuam a mesma ordem lexicográfica como símbolos no alfabeto de entrada que representam.
Essa técnica, como a plicada à codificação de vídeo ou outras aplicações, utiliza as propriedades acima 20 para descrever de forma singular tal código com uma estrutura de dados muito compacta. Como descrito anteriormente, a estrutura de dados pode conter, para cada comprimento de palavra código válido, isso é, o nível com nós externos em uma arvore de código, a seguinte 25 informa.ção:
a. um valor parcial da palavra código lexicográficamente menor (ou maior) no nível atual em uma árvore código;
b. um número de bits no valor parcial;
c. um valor de um símbolo correspondente à
palavra código lexicográficamente menor (ou maior); e d. um indicador que instrui um decodificador a saltar um número determinado de bits antes de prosseguir para o próximo nível da árvore de código.
antes de prosseguir para o próximo nível da 5 árvore código. Os processos de codificação e decodificação podem utilizar essa estrutura para identificar um nível de árvore de código correspondente a uma palavra código a ser produzida (ou decodificada) , e então computar diretamente o valor da palavra código (ou símbolo decodificado).
Essa técnica pode permitir o uso de uma
quantidade muito menor de memória para codificação e decodificação devido ao fato de apenas os valores parciais das palavras código lexicográficamente menores são armazenados. A estrutura de dados pode ser qualquer uma 15 dentre uma ampla variedade de estruturas de dados, tal como tabelas, listas conectadas, árvores binárias, árvores radix, arquivos planos ou similares, e pode ser armazenada em qualquer um dentre uma variedade de diferentes dispositivos de memória, tal como as muitas formas de RAM, 20 ROM ou ambas. A estrutura de dados pode ser armazenada em tal memória dentro de um codificador ou um decodificador, por exemplo, dentro da memória 45 ou memória 51 ilustradas nas figuras 2 e 3, respectivamente. Novamente, pelo menos alguns dos níveis da árvore de codificação incluem palavras 25 código dispostas em uma ordem lexicográfica com relação à ordem dos valores de símbolo representados pelas palavras código. De acordo, cada uma das palavras código de base é uma palavra código lexicográficamente menor em um nível correspondente na árvore de codificação. Adicionalmente, 30 essa técnica permite o uso de acesso incrementado aos dados de seqüência de bit, permitindo que um armazenador de seqüência de bit seja apresentado por um registro razoavelmente curto. Por exemplo, um registro de 32 bits pode ser suficiente, mesmo para código muito longos. O registro pode ser atualizado em intervalos convenientes (por exemplo, 8 bits), baixando adicionalmente a complexidade da implementação. No geral, em vários aspectos, a técnica pode ser capaz de reduzir de forma significativa a complexidade da representação e codificação/decodificação de códigos de comprimento variável, que podem permitir que os projetistas dos algoritmos de compressão utilizem livros código maiores e mais eficientes.
Uma discussão geral dos códigos de comprimento variável será fornecida agora para auxiliar na ilustração das técnicas descritas aqui. Os códigos de comprimento variável representam uma ferramenta fundamental na compressão de dados. Em geral, os códigos de comprimento variável são utilizados para representar seqüências de símbolos com alguma distribuição conhecida e tipicamente altamente desequilibrada. Tais seqüências podem ser representadas por seqüências binárias, ou códigos, de comprimento geral muito mais curto. A redução do comprimento é realizada pela substituição de símbolos de ocorrência mais freqüente por códigos mais curtos, e símbolos menos freqüentes por códigos mais longos.
Exemplos de códigos de comprimento variável utilizados na compressão de dados são os códigos Huffman, por exemplo, como descrito em D.A. Huffman. Um método de construção de códigos de redundância mínima. Proc. IRE, volume 40, PP. 1098-1101, setembro de 1952, códigos Shannon, por exemplo, como descrito em C. E. Shannon, A mathematical theory of communication, Bell Syst. Tech J. Vol. 27, PP. 379-423, julho de 1948, códigos Shannon-Fano, por exemplo, como descrito em R. M. Fano, The transmission of Information, Res. Lab. Electronics, Massachusetts Inst. of Technology, Cambridge, Mass. Tech. Rep. No. 65, 1949, e códigos Gilbert-Moore, por exemplo, como descrito em E. N. Gilbert e E. F. Moore, Variable-Length Binary Encodings, Bell Syst. Tech. J., Vol. 7, pp. 932-967, 1959 (também 5 algumas vezes referidos como códigos Shannon-Fano-Elias).
Os códigos descritos acima pertencem a uma classe de códigos sem prefixo, por exemplo, como descrito em T. Cover e J. Thomas, Elements of Information Theory, Wiley, 1991. A figura 4 é um diagrama ilustrando um exemplo de uma 10 árvore de codificação binária. Os códigos descritos acima podem ser convenientemente representados por uma árvore binária tal como a ilustrada na figura 4. Dessa forma, um codificador pode codificar os valores de símbolo consistentes com a árvore de codificação. Os valores de 15 acordo com a árvore podem representar qualquer um dentre uma variedade de dados, tal como dados de vídeo, dados de imagem, dados de fala ou dados de áudio. Cada nó interno em tal árvore corresponde a um dígito binário cujo valor igual a 0 força um movimento para a direita, e cujo valor igual a 20 um força um movimento para a esquerda do nó criança em uma árvore. 0 nó mais superior é chamado de no raiz, que é o nó a partir do qual a codificação/decodificação começa.
Cada nó externo em uma árvore é onde o processo de codificação/decodificação começa, produzindo uma palavra 25 código, isso é, como uma seqüência de bits do nó raiz para o nó atual, ou um valor decodificado de um símbolo associado com uma palavra código atual. Na árvore de codificação ilustrativa da figura 4, existem dezesseis palavras código correspondentes aos símbolos indexados 0 a 30 15. Nesse exemplo, a palavra código mais curta possui um comprimento de 1 bit, e as palavras código mais longas possuem comprimentos de 10 bits cada. 0 número de níveis contendo nós externos (palavras código) nessa árvore é igual a 7, isso é, os Io., 3o., 4o., 6o., 7o., 9o. e 10o. niveis.
Com referência adicional à figura 4, considera-se η o número de nós externos na árvore de codificação (e, de forma correspondente, o número de palavras código no código), considera-se L o comprimento da palavra código mais longa, e Ko número de niveis preenchidos com nós externos na árvore de codificação. A discussão a seguir utiliza a anotação O de P . Bachmann. Por exemplo, a expressão y(n) = 0(x(n)) indica a existência de alguma constante M > 0, de forma que | y() |<=M | x(n) | para todos os n suficientemente grandes.
Para se suportar o processo de codificação, um codificador ou decodificador, tal como uma unidade de codificação por entropia 46 ou unidade de decodificação por entropia 52, geralmente precisa armazenar uma árvore binária na memória do computador, tal como a memória 4 5 ou a memória 51. Adicionalmente, os processos de codificação e decodificação devem envolver um trajeto bit por bit (isso é, nó por nó) da árvore de codificação armazenada na memória. Dessa forma, tal implementação deve envolver o custo de armazenamento O(n), e pode assumir as etapas O(L). Não obstante, em alguns casos especiais, quando as arvores de codificação possuem alguma estrutura particular, pode haver mais formas efetivas de armazenamento de tais estruturas de código e realização das operações de codificação ou decodificação.
Por exemplo, considerando-se o código apresentado na árvore de codificação ilustrativa da figura 4, pode-se observar que as palavras código são não decrescentes em comprimento, e que todas as palavras código no mesmo nivel da árvore de codificação possuem valores adjacentes. Por exemplo, as palavras código no 4o. nivel da árvore na figura 4 são maiores do que as palavras código no 3o. nível da árvore, isso é, 0001 X 001, 010, 001 e 000. Adicionalmente, as palavras código no 3o. nível possuem 5 valores adjacentes de 011, 010, 011, 000. Dessa forma, ao invés de armazenar todos os códigos, pode ser suficiente se armazenar apenas a palavra código menor ou maior para cada nível da árvore de codificação, isso é, como uma palavra código base a partir da qual palavras código adjacentes 10 podem ser computadas.
A observação acima é crítica para a compreensão das técnicas de decodificação dos códigos de comprimento variável com base em sua conversão na chamada forma canônica, por exemplo, como descrito em A. Moffat e A. 15 Turpin, On the Implementation of Minimum-Redundancy Prefix Codes, IEEE Trans. Communications, 45 (10) (1997) 1200- 1207. Em termos simples, um código canônico possui uma distribuição não decrescente de comprimentos e mantém a ordem lexicográfica com relação aos índices designados para 20 seus nós. É bem simples se ilustrar que qualquer fonte determinada pode ser reordenada de forma que o código resultante tenha as propriedades acima.
Por exemplo, o código ilustrado na árvore de codificação da figura 4 representa um código reordenado 25 para uma fonte com uma distribuição não monotônica, como indicado na Tabela 1 abaixo. Especificamente, a Tabela 1 é um .exemplo de um código de comprimento variável canônico que foi reordenado.
Tabela 1
30
Exemplo de código de comprimento variável canônico Símbolo Probabi1idade índice de símbolo Comprimento Código após a reordenação de código 0 0,6561 15 1 1 1 0,0729 12 3 011 2 0,0729 13 3 010 3 0,0081 5 7 0000101 4 0,0729 14 3 001 5 0,0081 6 7 0000100 6 0,0081 10 6 000011 7 0,0009 1 10 0000000001 8 0,0729 11 4 0001 9 0,0081 7 7 0000011 10 0,0081 8 7 0000010 11 0,0009 2 9 000000011 12 0,0081 9 7 0000001 13 0,0009 3 9 000000010 14 0,0009 4 9 000000001 15 0,0001 0 10 0000000000 Na Tabela 1 acima, o símbolo 0 possui a maior probabilidade, seguido por 1 e 2. No entanto, o símbolo 3 tem uma probabilidade menor do que 4, e 4 e 8 possuem a mesma probabilidade que 1 e 2. Depois da reordenação, todas 5 as probabilidades de símbolo são monotonicamente crescentes (não decrescente) , e o resultado no código canônico ilustrado representado na árvore de codificação da figura 4. O chamado algoritmo Moffat-Turpin, como descrito em A. Moffat e A. Turpin, On the Implementation of Minimum- 10 p.edundancy Prefix Codes, IEEE Trans. Communications, 45 (10)(1997) 1200-1207, fornece uma técnica para a decodificação de códigos canônicos. As técnicas descritas nessa descrição podem fornecer aperfeiçoamentos sobre o algoritmo Moffat-Turpin. Outros algoritmos, tal como os 15 descritos em J.B. Connell, A. Huffman-Shannon-Fano Code, Proc. IEEE, julho de 1973, 1046-1047, e em A. Brodnik e S. Carlsson, Sublinear Decoding of Huffman Codes Almost in Place, DIMACS Workshop on Codes and Trees: Algorithmic and Information Theoretic Approaches, outubro de 1998, Ruters University, DIMACS Center, N.J., são similares ao algoritmo Moffat-Turpin, e também podem ser aperfeiçoados pela 5 utilização das técnicas descritas de forma similar.
O algoritmo Moffat-Turpin para decodificação de códigos de comprimento variável é descrito abaixo. Assumindo-se que um alfabeto de entrada A contenha n letras: Α = {αύ,...,αη_ι], a reordenação i: A —> — l} é aplicada
de forma que as probabilidades resultantes satisfaçam: P0 < P1 <... < pn_x . Então, um algoritmo de construção de redundância mínima Huffman ou outro pode ser aplicado, que designa comprimentos de palavras código Ii para cada índice
1<i<L, onde Lé o comprimento da palavra código maior. Como resultado, os "números de preenchimento" são produzidos como Hi1, isso é, o número de palavras código de comprimento 1.
Utilizando-se esses parâmetros, os chamados valores de "base" computados para cada nível na árvore são 2 0 como se segue:
"EL,"1*2"*" yL mk2‘-k 2l~i L-4 k=l+\ k Esses valores de palavra código de base representam as palavras código canônica lexicográficamente menores em cada nível da árvore. De acordo com um valor de palavra código de base de base[l], pode-se agora computar o valor da palavra
2 5 código j + Io. dentre Tnl palavras código de comprimento igual al:
base[l] + j Para a operação do decodificador, é mais conveniente se armazenar uma versão justificada para a esquerda do valor da palavra código de base como se segue:
Ij_base[ 1] = base[l]2w~l
onde W é o comprimento do armazenador de bit ou registro utilizado para manter a maior parte dos bits carregados recentes da seqüência de bits. Assume-se que W>= L .
Finalmente, em adição aos valores de palavra código de base, o decodificador Moffat-Turpin também armazena índices de símbolos respectivos no conjunto reordenado. Esses 10 índices são armazenados como valores de desvio [1] para cada nível preenchido na árvore. A estrutura ilustrativa completa mantida pelo algoritmo Moffat-Turpin para o código representado pela árvore da figura 4 é apresentada na Tabela 2 abaixo.
Tabela 2
Estrutura de Decodificador Moffat-Turpin para o código na
figura 4.
i Lj_base(i) Nível [i] Desvio [i] (W = 16) 0 1000000000000000 1 15 1 0010000000000000 3 12 2 0001000000000000 4 11 3 0000110000000000 6 10 4 0000001000000000 7 5 0000000010000000 9 2 6 oooooooooooooooo 10 0 O pseudocódigo ilustrativo para implementação do algoritmo de decodificação Moffat-Turpin utilizando a estrutura da Tabela 2 é apresentado abaixo na Tabela 3.
Tabela 3
5 Algoritmo Decodificador Moffat-Turpin
Linha Instrução Comentário 1 V = bitstream buffer obter últimos W bits da seqüência de bits 2 For(i=0; i<K;i++){ 3 if(lj base[i]<=V) buscar por nível 4 break; contendo palavra código atual 5 } 6 I=Ievel[i]; obter comprimento 7 scroll bitstream(1); rolar seqüência de bits por 1 bits 8 symbol=offset[i]+ decodificar ((V-base[i])>>(W-I)); símbolo A partir da Tabela 3 acima, pode-se observar que todo o processo de decodif icação envolve até K comparações (W- bit) do armazenador de seqüência de bit atual com os valores da palavra código de base justificada para a 10 esquerda, seguidos por computação direta simples de um indice de um símbolo decodificado. Pode-se observar também que o conjunto lj_base[] utilizado por tal estruturas exige 0(K*W)bits de memória, que pode ser um problema se as palavras código forem longas, visto que W deve ser 15 utilizado de forma queW>l. No exemplo da tabela 3, um decodificador recebe W bits da seqüência de bits e como V, e compara V com as
palavras código de base (Ij_base[i]) para níveis sucessivos i
da árvore de codificação. Quando uma palavra código de base 5 é encontrada e é menor ou igual a V , a busca pelo nível da palavra código é encerrada. Então, o decodificador determina o comprimento associado com o nível i, rola a seqüência de bits por 1 bits, e decodifica o símbolo. Em particular, o símbolo decodificado é determinado pela soma 10 do valor de desvio para o nível ie a diferença entre a palavra código V da seqüência de bits e a palavra código para o nível i, mudada para a direita por W-I bits.
Em uma configuração geral, quando a decodificação Moffat-Turpin é seguida, a consulta do mapeamento invertido Γ1 : -1} —»A . Nesse caso, a última operação se torna a
mais cara em termos de memória, visto que exige espaço 0(n). Em muitos casos práticos, no entanto, tais situações envolvendo comprimentos de funcionamento ou saídas de transformações ou previsões, as fontes que precisam ser 20 codificadas já estão ordenadas. Consequentemente, a memória utilizada pelo conjunto lj_base[] na estrutura Moffat Turpin se torna o fator principal no custo geral de armazenamento.
De acordo com um primeiro aspecto geral, as técnicas descritas nessa descrição fornecem refinamentos que 25 permitem a compressão adicional das estruturas de dados utilizadas no algoritmo Moffat-Turpin, ou outros algoritmos, e suportam a decodificação incrementada de códigos de comprimento variável. Os refinamentos serão agora discutidos em maiores detalhes. Com referência à 30 tabela 2, é evidente que os valores lj_base[l] possuem grandes quantidades de bits dianteiros da direita para a esquerda. Consequentemente, os valores parciais das palavras código de base representam a remoção de um número fixo de bits dianteiros das palavras código de base. Na maior parte dos casos, os bits dianteiros que são removidos serão zero. Tais números de zero são monotonicamente crescentes à medida que a árvore de codificação se estende para as camadas mais profundas. Dessa forma, se os bits forem decodificados seqüencialmente começando com a primeira camada da árvore de codificação e movendo para baixo, é possível se saltar alguns dos bits dianteiros iguais a zero sem afetar a correção da decodificação. Pulando-se pelo menos alguns dos zeros dianteiros, as técnicas descritas nessa descrição permitem estruturas de dados muito comprimidas e decodificação incrementada de códigos de comprimento variável.
Quando os bits dianteiros são removidos, no entanto, é possível que alguns códigos legítimos nos níveis mais baixos da árvore de codificação possam se estender para dentro da faixa de bits dianteiros que são removidos. De acordo, para se evitar perder tais códigos, uma tabela de indicadores de salto é fornecida. 0 indicador de salto instrui um decodificador para saltar um número de bits em uma seqüência de bits a ser decodificada antes de prosseguir para um nível selecionado da árvore de codificação. Em particular, o indicador de salto pode instruir o decodificador a saltar um número fixo de bits, por exemplo, 8 bits, na seqüência de bits de palavra código antes de prosseguir para o nível selecionado da árvore de codificação. Dessa forma, o valor parcial da palavra código de base no nível selecionado da árvore é baseado em uma mudança da palavra código de base pelo número fixo de bits. Sem a mudança, a palavra código de base no nível selecionado da árvore se estende pelo menos parcialmente para dentro do número removido de bits dianteiros. A tabela 4 abaixo ilustra uma implementação ilustrativa de um processo de codificação no qual os zeros dianteiros são removidos, de acordo com um aspecto dessa descrição, para comprimir adicionalmente a estrutura de dados utilizada para representar e processar as palavras código. No exemplo da tabela 4, os zeros dianteiros são removidos em incrementos de 8, que é conveniente para o gerenciamento do armazenador temporário de seqüência de bits nos computadores convencionais de 8 bits/byte. Para gerenciar a remoção dos zeros dianteiros, uma tabela adicional de indicadores (skip_8[i] ) é fornecida, como descrito abaixo. Dessa forma, a tabela 4 se conforma geralmente à tabela 2, mas remove os zeros dianteiros de cada uma das palavras código e adiciona a coluna de indicador de salto.
Tabela 4
Estrutura de Decodificador Moffat-Turpin Modificada
i r_lj_base[i] skip_8 [i] r_level[i] offset[i] (W = 8) 0 10000000 0 1 15 1 00100000 0 3 12 2 00010000 0 4 11 3 00001100 0 6 10 4 00000010 1 7 5 10000000 0 9-8=1 2 6 00000000 0 10-8=2 0 No exemplo da tabela 4, o valor r__lj_base(i) representa o valor da palavra código de base em cada posição de índice, o valor r_nível[i] indica o nível dentro da árvore de codificação para a posição de índice e o comprimento das palavras código nesse nível, o valor offset[i] indica o número de zeros dianteiros da direita para a esquerda para o valor de palavra código de base, e o valor skip_8[i] indica se um decodificador deve saltar 8 bits para o próximo valor de palavra código de base, com 1 designando um salto e 0 designando nenhum salto. Essa operação de salto atualiza periodicamente o armazenador de bit em intervalos selecionados para permitir que o decodificador identifique as palavras código que, do contrário, seriam perdidas quando os zeros dianteiros são removidos. Por exemplo, se os oito zeros dianteiros mais para a direita de uma palavra código justificada para a esquerda forem removidos, a palavra código que se estende para dentro dos oito bits mais para a direita seriam parcialmente ou completamente perdidos. De acordo, o salto de oito bits mais para a esquerda em resposta à indicação de salto moveria a palavra código para dentro da faixa de bits que não são removidos, preservando, assim, a palavra código para uso na decodificação.
Dessa forma, os indicadores de salto sinalizam quando o decodificador deve saltar para frente por um incremento de salto especificado para o próximo nível de código, por exemplo, 8 no exemplo da tabela 4. Como uma ilustração, na tabela 2, os valores de palavra código de base nas posições de índice 5 e 6 (três níveis 9 e 10) são 0000000010000000 e 0000000000000000, respectivamente. Quando os oito zeros dianteiros mais para a direita (justificados para a esquerda) são removidos desses valores de palavra código base, é necessário que o decodificador pule para frente oito bits de forma que o valor de palavra código de base real (0000000010000000) não seja perdido quando da remoção dos oito zeros dianteiros. Ao invés disso, o valor de palavra código de base real (00000010000000) é convertido em um valor de palavra código de base diferente (10000000) pulando-se os oito primeiros bits (00000000) e então removendo os oito zeros dianteiros mais para a direita.
Devido à remoção dos zeros dianteiros, a largura do conjunto lj_base[i] modificado é muito menor. No código da tabela 4, como um exemplo, a largura W do conjunto lj_base[i] modificado é W = 8 ao invés de W = 16 no caso da tabela 2. Um exemplo de uma implementação de um algoritmo que utiliza tal tabela de salto adicional para atualizar periodicamente o armazenador de bit é ilustrado abaixo na tabela 5. Um algoritmo construído como ilustrado na tabela pode ser configurado para suportar palavras código muito longas ou tabelas de valor de palavra código de base compactas (lj_base ) .
Tabela 5
Algoritmo Decodificador Moffat-Turpin Modificado
Linha Instrução Comentário 1 V=bitstream buffer; obter últimos W bits a partir da seqüência de bits 2 for(1=0;i<K;i++){ 3 se(lj base[i]<=V) buscar nivel 4 break; conter palavra código atual se (skip B[i]) deve-se saltar os próximos B bits? 6 V=Scroll bitstream(B); rolar a seqüência de bits por B bits 7 } 8 I=Ievel[i]; obter comprimento residual 9 scroll bitstream(l); rolar seqüência de bits por 1 bits symbol=offset[i]+((V- decodificar simbolo base[i])»(W-l)); Como ilustrado na tabela 5, o decodificador obtém os últimos W bits a partir da seqüência de bits, representada pelo valor Y= bitstream_buffer. O decodificador então busca os níveis i da árvore de codificação por um valor de palavra código de base lj base[i] que seja menor que ou igual à palavra código Vdo armazenador de seqüência de bits. Se o nível atual ida árvore corresponder a um nível de salto (skip_B[i]) , por exemplo, como indicado na tabela 5, então o decodificador rola a seqüência de bits para a direita por Bbits, por exemplo, 8 bits em algumas implementações, de forma que a palavra código no próximo nível buscado pelo decodificador possa ser retida ao invés de perdida pela remoção dos B zeros dianteiros mais para a direita.
Depois da determinação do comprimento residual
1 = levei[i] para as palavras código no nível atual da árvore, por exemplo, como indicado na tabela 5, o decodificador rola a seqüência de bits pelo comprimento 1 . Então, o decodificador computa diretamente o índice de símbolo com base na soma do desvio para o nível atual i e a diferença entre o conteúdo do armazenador de seqüência de bits Vea palavra código de base para o nível atual i, mudado para a direita por W-I bits.
0 decodificador decodifica uma palavra código a partir da seqüência de palavras código utilizando a estrutura de dados armazenada especificando os valores parciais das palavras código de base, o indicador de salto, os valores representados pela palavra código de base, e os comprimentos (isso é, o número de bits) dos valores parciais das palavras código de base. Em geral, um processador associado com um decodificador, tal como uma unidade de decodificação por entropia 52, busca os níveis da árvore de codificação por valor selecionado dentre os valores parciais das palavras código de base que são inferiores a ou iguais à palavra código da seqüência de bits de palavra código. O processador pula um número de bits na seqüência de bits da palavra código antes de prosseguir para um nível selecionado de árvore de codificação em resposta ao indicador de salto, e computa um dentre uma pluralidade de valores correspondentes à palavra código com base em uma diferença entre o valor selecionado dentre os valores parciais das palavras código de base que é inferior a ou igual à palavra código e a palavra código e um índice do valor selecionado dentre os valores parciais das palavras código de base que é inferior a ou igual à palavra código. O processador gera o resultado da decodificação para armazenamento na memória, a transmissão para um dispositivo diferente ou unidade de processamento, ou apresentação para um usuário. Por exemplo, os resultados decodificados podem ser utilizados para acionar o dispositivo de exibição 28 para apresentar o vídeo ou imagem e/ou um dispositivo de saída de áudio para apresentar a saída de áudio ou fala.
No exemplo da tabela 5, o decodificador realiza as atualizações incrementadas do armazenador de seqüência de bits através da operação de salto para reter as palavras código que do contrario seriam perdidas quando os zeros dianteiros são removidos. Adicionalmente, s valores de palavra código de base que o decodificador compara em cada nível de código podem ser muito mais curtos. A quantidade potencial de redução no comprimento do valor de palavra código de base será agora discutida. A fim de analisar a faixa dinâmica de tais quantidades no algoritmo modificado descrito nessa descrição, a diferença entre 2 níveis adjacentes é considerada como se segue: Ij^hasem-Ij-boseV + i^^^ma'-* t^'-|Σ»=μ«",*2'*Μ I2*"'"
=2W-I + y'*“ 2*'-*
■É-Jfc=/+1 *
Se i for o indice do próximo nível não vazio, então:
Ij _base[l] - ljbase[l + i] = 2r“' + ml+l 2w~{Ui)
Aqui, a quantidade principal de interesse é: mi+i2-1, que influencia essa diferença. Em um caso mais simples, quando i=l, é claro que essa diferença depende simplesmente do número de nós externos, e, dessa forma, W pode ser escolhido de forma que:
W > Inaxlog2(W1),
que nos casos mais práticos é uma quantidade significativamente menor que L . Essa diferença deve ser particularmente grande para distribuições altamente desequilibradas.
Por exemplo, se os símbolos de entrada forem blocos de m bits com probabilidades Bernoulli pm(l-p)m'k, então o nível mais preenchido deve conter aproximadamente
palavras código, o que significa que
^pmj
aproximadamente H(p)m bits devam ser utilizados para diferenciar entre as palavras código, onde H(p)é a função de entropia, por exemplo, como descrito em T. Cover e J. Thomas, Elements of Information Theory, Wiley, 1991.
Por outro lado, a palavra código mais longa nesse caso terá aproximadamente L «-log(min{/?"’(l-jp)'” A}) = -log(/>min)rn = H_^(p)m bits, onde é bem k
sabido que para as distribuições assimétricas:
# * > H(p)
onde H_^(p) é um caso especial de entropia Renyi, por exemplo, como descrito em W. Szpankowski, Average Case Analysis of Algorithms on Sequences. (Nova Iorque, John Wiley & Sons, 2001). Essa diferença pode ser arbitrariamente grande com p-> 0 ou p-> 1 .
Com base na discussão acima, segue-se que a técnica proposta deve ser eficiente no manuseio de estruturas de código assimétricas grandes. Tais estruturas são tradicionalmente difíceis de se manusear utilizando-se técnicas tradicionais/existentes, e em muitos casos os engenheiros recorrem à utilização de várias simplificações que afetam o desempenho de compressão dos códigos para torná-los mais práticos.
Por exemplo, códigos Golomb muito posaltares, por exemplo, como descrito em S. Golomb, "Run-length coding," IEEE Trans. Inform. Theory, vol. IT-12, pp. 399-401, julho de 1966, e R. Gallager e D. van Voorhis, "Optimal source codes. for geometrically distributed integer alphabets," IEEE Trans. Inform. Theory, vol. IT-21, pp.228-230, março 1975, representam códigos de comprimento variável com uma estrutura particularmente simples, mas são ideais apenas para uma classe de distribuições geométricas e apenas para valores contáveis dos parâmetros de tais distribuições. Os engenheiros tendem a utilizar os mesmos até mesmo para distribuições significativamente divergentes, motivados basicamente pelas considerações de complexidade. Tais soluções podem se tornar menos que ideal e muito difícil de se estender ou modificar devido às restrições de desempenho implícitas de tais códigos.
Outra solução associada com o desenho dos códigos Lynch-Davisson, como descrito em T.J.Lynch, Sequence time 5 coding for data compression, Proc. IEEE (Lett.), 54 (1966) 1490-1491, e L.D. Davisson, Comments on Sequence time coding for data compression, Proc. IEEE (Lett.), 54 (1966) 2010-2011, serve para dividir os códigos em duas partes onde apenas uma primeira é submetida à codificação de 10 comprimento variável, e a restante é transmitida como uma extensão utilizando um número fixo de bits. Infelizmente, existe uma perda de eficiência em tal divisão, algumas vezes tão grandes quanto 1,5-2 bits por símbolo.
Uma versão mais elaborada da técnica de divisão 15 de livro código foi desenvolvida sob o nome agrupamento de alfabeto, por exemplo, como descrito em Boris Ryabko, Jaakko Astola, Karen Egiazarian, Fast Codes for Large Alphabets, Communications in Information and Systems, v.3, no. 2, pp. 139-152 e Boris Ryabko, Jorma Rissanen, Fast 20 Adaptive Arithmetic Code for Large Alphabet Sources with Asymmetrical Distributions, IEEE Communications Letters, v. 7, no. 1, 2003, pp 33-35. No entanto, essa abordagem também vem à custa de alguma perda na eficiência de compressão.
Diferentemente das técnicas mencionadas acima, as 25 técnicas descritas nessa descrição podem ser configuradas para preservar totalmente a estrutura e a situação ideal do código, e, portanto, pode ser uma ferramenta útil para uma ampla variedade de aplicações práticas na compressão e codificação de dados, tal como na codificação e 30 decodificação de dados de vídeo digital, imagem, áudio ou fala. Codificação de Bloco Adaptativa Binária Um exemplo de uma técnica de baixa complexidade para a codificação de comprimento variável adaptativa de seqüências binárias produzidas pelas fontes sem memória, de acordo com um segundo aspecto geral dessa descrição, será agora descrito em maiores detalhes. Essa técnica descrição pode implementar os códigos de bloco universal construídos para um conjunto de contextos identificados pelos números de bits diferentes de zero em bits anteriores em uma seqüência. Esse segundo aspecto geral da descrição pode ser praticado ou fornecido independentemente ou em conjunto com o primeiro aspecto geral descrito acima com relação à geração de estruturas de dados muito compactas. As estruturas de dados podem ser qualquer uma dentre uma ampla variedade de estruturas de dados, tal como tabelas, listas conectadas, árvores binárias, árvores radix, arquivos planos ou similares, e podem ser armazenadas em qualquer um dentre uma variedade de diferentes dispositivos de memória, tal como muitas formas de memória de acesso randômico (RAM), memória de leitura apenas (ROM), ou ambas. A estrutura de dados pode ser armazenada em tal memória dentro de um codificador ou um decodificador. De acordo com esse segundo aspecto geral, uma técnica para codificação e decodificação adaptativa de baixa complexidade pode se base
2 5 pelo menos em parte em uma fórmula para a redundância assintomática de tais códigos, que refina a estimativa descrita em R.E. Krichevsky e V.K. Trofimov, The Performance of Universal Encoding, IEEE Trans. Information Theory, 27 (1981) 199-207.
Os algoritmos de compressão de dados convertem as
seqüências de entrada dos bits com alguma distribuição desconhecida em uma seqüência de bits decodificável. A compressão de dados é utilizada, por exemplo, no desenho de codecs de imagem e video, codificação escalonável (com base em fatia de bit) do espectro em codecs de adio, e outras aplicações, na maior parte desses casos, os bits a serem codificados são retirados dos valores produzidos por varias 5 ferramentas de processamento de sinal, tal como transformações, filtros de previsão, e similares, o que significa que já são bem descorrelacionados, e que a consideração da falta de memória de tal fonte seja justificada.
As implementações utilizadas mais comumente de
tais algoritmo adaptativo binário são tipicamente baseadas em códigos aritméticos, com algumas aproximações e atalhos aplicados para reduzir sua complexidade. Dois exemplos bem conhecidos de tais algoritmos são o algoritmo Q-coder 15 descrito em W.B. Pennebaker, J. L. Mitchell, G. G. Langdon, Jr., R.B. Arps, An overview of the basic principies of the Q-Coder adaptive binary arithmetic coder, IBM J. Res. Dev., 32(6) (1988) 717, que é utilizado no padrão de codificação de imagem JBIG, ou o algoritmo CABAC descrito em D. Marpe, 20 H. Schwartz, e T. Wiegand, Context-Based Adaptive Binary Arithmetic Coding no padrão de compressão de vídeo H.2 64/AVC, IEEE Trans. on CSVT, 13(7):620 636, julho de 2003, que é utilizado nos padrões ITU-T H.264/MPEG AVC para compressão de vídeo.
De acordo com esse segundo aspecto geral da
descrição, uma implementação alternativa utiliza um conjunto de códigos Huffman projetados para várias densidades estimadas e indexado pelos números de bits diferentes de zero em blocos anteriores (contextos) em uma 30 seqüência. Em termos de eficiência e implementação, tal técnica pode alcançar o desempenho de compressão desejável utilizando até mesmo os blocos de bits de tamanho modesto, por exemplo, n = 8...16, e utilizando as quantidades correspondentes de memória, por exemplo, 1,5 kbytes...5 kbytes.
Essa técnica pode ser considerada no contexto de uma fonte sem memória produzindo simbolos a partir de um alfabeto binário {0, 1} com as probabilidades pe q=l-pde forma correspondente. Se w for uma palavra de comprimento n produzida por essa fonte, então essa probabilidade é:
Pr(w) = pkqn-k
onde k denota o número de 1 nessa palavra. O valor de k também pode ser referido como a ponderação de w.
Um código de bloco φ é um mapeamento injetor
entre as palavras w de comprimento | w |= n e seqüências binárias (ou palavras código) φ(\ν)§·.
Φ: {0,1}” —> {0,1}*
onde as palavras código <|>(w) representam um conjunto decodificável de forma singular, por exemplo, como descrito em T. M. Cover e J. M. Thomas, Elements of Information Theory, (John Wiley & Sons, Nova Iorque, 1991).
Tipicamente, quando a fonte (isso é, sua probabilidade p) é conhecida, tal código tem sua designação eliminada para minimizar seu comprimento médio, ou, em termos relativos, sua redundância média:
Rfin,p) = - ΣρΓθφθ)| - H(p)
n \w\=„
Na equação acima, H(p)=-p Iog p-q Iog q denota a entropia da fonte.
Exemplos clássicos de códigos e algoritmos sugeridos para se solucionar esse problema incluem os códigos Huffman, Shannon, Shannon-Fano, e Gilbert-Moore e suas variações. 0 desempenho de tais códigos é bem estudado, e muitas técnicas de implementação prática úteis para tais códigos também foram reportadas.
Quando a fonte é desconhecida, a melhor opção
disponivel é se projetar um código universal φ* que minimiza o pior caso de redundância para uma classe de fontes, por exemplo, como descrito em B. M. Fitingof, Optimal Coding in the Case of Unknown and Changing Message 10 Statistics, Probl. Inform. Transm. 2, (2) (1965) 3{ll(em Russo) 1-7 (Tradução para o inglês)., L.D. Davisson, Universal Noiseless Coding, IEEE Trans. Inform. Theory, 19 (6) (1973), 783-795, e R. E. Krichevsky e V.K. Trofimov, The Perfomance of Universal Encoding, IEEE Trans. 15 Information Theory, 27(1981) 199-207, e como indicado abaixo:
Rr (ri) = inf sxvpR^n,p)
Φ P
Um exemplo de tal código pode ser construido utilizando-se as estimativas a seguir das probabilidades de palavras:
n ,..Λ Y(k + \l2)T(n-k + \l2)
IktVw)- ^rr .s
7CL(n + 1)
onde Γ(χ) é uma função Γ,& é a ponderação da palavra w, e 20 n é seu comprimento. A fórmula acima é descrita em R. E. Krichevsky e V. K. Trofimov, The Performance of Universal Encoding, IEEE Trans. Information Theory, 27(1981) 199-207, e garante uma convergência uniforme (em p) de probabilidades verdadeiras à medida que n se aproxima do 25 infinito ( n —> oo ) .
Em um a situação na qual o valor exato de um parâmetro da fonte não é conhecido, é possível se acessar uma seqüência de símbolos u produzida por essa fonte no passado. Tal seqüência pode ser referida como uma amostra e pode ser considerada como possuindo | u |= t bits de comprimento. A tarefa aqui é desenhar um conjunto de códigos φ*Μ, indexado por valores diferentes dessa amostra, de forma que a redundância média de pior caso resultante seja mínima, como indicado abaixo:
R An, t) = inf sup^Pr»)^ («> P)
P I u\=t
Tais códigos são chamados códigos de bloco universal adaptativo ou com base em amostra. Nessa descrição, as implementações particulares dos códigos de bloco adaptativos são descritas utilizando-se as estimativas de probabilidades a seguir das palavras w com uma amostra u:
p (d:;) pKr(W) T(k + s + \!2)T(n + t — k — s + 1/2) T(ZlH-I)
KT 1 PKT(u) T(s + H2)T(t-s + H2) Γ(« + 1)’
onde s é a ponderação de uma amostra u, e t é seu comprimento.
0 conceito e análise de códigos com base em amostra utilizando a função de estimador (1) imediatamente acima é descrito por R. E. Krichevsky e R. E. Krichevsky, Universal Data Compression and Retrieval. (Kluwer, Norwell, MA, 1993) . A taxa de redundância média de um código de bloco adaptativo é assintomática:
^ ^ N 1 , n + t
Iog·, (2)
ψ" 2 n t
onde n é um tamanho de bloco, e t é o tamanho das amostras. A partir da equação (2) acima, é evidente que
pela utilização das amostras de comprimento t = O(n), é possível se reduzir a taxa de redundância de tais códigos para 0(l/n), que combina a ordem da taxa de redundância dos 5 códigos de bloco para fontes conhecidas. No entanto, a fim de se ser capaz de compreender Toto o potencial de tais códigos, é necessário se conhecer uma expressão mais exata de sua redundância, incluindo termos afetados pela escolha do algoritmo de construção de código real, tal como 10 Huffman, Shannon ou similares.
descrição oferece o seguinte refinamento do teorema Krichevsky 2. Em particular, o teorema 1 abaixo reina a taxa de redundância média do teorema Krichevsky 2. Em 15 particular, o teorema 1 abaixo refina o teorema de taxa de redundância media para um código de blocos adaptativo φ*η como se segue:
código de bloco adaptativo φ*η tem o seguinte
onde n é um tamanho de bloco, e t é um tamanho de amostra, p, q = l-p são probabilidades de símbolos da fonte de entrada e onde:
De acordo com esse segundo aspecto geral, essa
Teorema I: A taxa de redundância media de um
comportamento assintomático (n,t->oo):
Rs (nO = EprO^* (n>p) =
M='
t + n i .
—— + A . (n,t,p) +
t Vu
\-Apq n 24pq t(t + n)
\ — 3pq (n + 2t) 24p2q2 t2(t + n)
(3A)
Δ . {n,t, p) = Yj Yj Pt(m) Pr(w)[|$, (w)| + IogPkt {w|w}]
\u\=t\w\=n é a redundância média do código φ*ιι com relação à distribuição estimada na equação (1) acima:
O comportamento exato de A^{n,t,p) é específico de
algoritmo. No entanto, para uma classe grande de técnicas de redundância mínima, que inclui os códigos Huffman e Shannon convencionais, esse termo é limitado em magnitude como se segue:
|Δ{«,/,5)|<1,
e exibe o comportamento oscilante, que pode ou não ser convergente em alguma constante dependendo do valor do parâmetro p. Além disso, para valores curtos de t e n, a redundância de tais códigos pode ser afetada pelo próximo termo a seguir:
1-4 pq n 24pq t(t + n)
que é uma função do parâmetro da fonte p . A figura 5 é um gráfico ilustrando a taxa de redundância de um código de bloco adaptativo com um comportamento assintomático, e representa essa quantidade. Para blocos/amostras curtos, o desempenho de tais códigos se torna sensível à assimetria da fonte. A prova desse teorema pode ser encontrada, por exemplo, em Asymptotic average redundancy of adaptive block codes, Y.A. Reznink, W. Szpankowski, Proceedings of IEEE International Symposium on Information Theory (ISIT), 2003.
Exemplos de algoritmos eficientes para implementação dos códigos descritos acima serão agora descritos. Em um modelo sem memória, a probabilidade de uma palavra w (ou sua estimativa) depender apenas de sua ponderação k, mas não um padrão real de seus bits. Dessa forma, considerando-se um conjunto de todas as possíveis palavras de n bits, pode-se dividir o conjunto em n + 1 grupos.
{0,1}” = Wnfi UlVfl lU...u IVtliU...u W„,n,
contendo palavras de mesma ponderação (k = 0,...,n), e a mesma probabilidade. Os tamanhos de tais grupos são \WnJ
Kk
Para conveniência adicional, é considerado que cada grupo Wnk armazene as palavras em uma ordem lexicográfica. O
valor Ink(w) denota o índice (posição) de uma palavra w em um grupo Wnk. A tabela 6 abaixo é um exemplo de um código construído para blocos de 4 bits com probabilidades Bernoulli : pkqn~k,p = 0,9.
Tabela 6
Exemplo de código construído para blocos de 4 bits com probabilidades Bernoulli : pkqn~k,p = 0,9.
Bloco W k 1Hlk(W) Pr(w) Comprimento Código Subgrupo <j)(w) 0000 0 0 0,6561 1 1 0 0001 1 0 0,0729 3 001 1 0010 1 1 0,0729 3 010 1 0011 2 0 0,0081 6 000011 3 0100 1 2 0,0729 3 011 1 0101 2 1 0,0081 7 0000001 4 0110 2 2 0,0081 7 0000010 4 0111 3 0 0,0009 9 000000001 5 1000 1 3 0,0729 4 0001 2 1001 2 3 0,0081 7 0000011 4 1010 2 4 0,0081 7 0000100 4 1011 3 1 0,0009 9 000000010 5 1100 2 5 0,0081 7 0000101 4 1101 3 2 0,0009 9 000000011 5 1110 3 3 0,0009 10 0000000001 6 1111 4 0 0,0001 10 0000000000 7
O código ilustrativo da tabela 6 será utilizado para descrever a estrutura de um mapeamento proposto entre as palavras no grupo Wnk e suas palavras código, de acordo
com determinados aspectos dessa descrição. O código foi construído utilizando-se uma modificação do algoritmo Huffman, no qual as etapas adicionais foram realizadas para se garantir que as palavras código localizadas no mesmo nível possuem a mesma ordem lexicográfica que os blocos de entrada que representam. É bem sabido que tal reordenação é possível sem qualquer perda de eficiência de compressão. Exemplos de algoritmos anteriores que utilizaram esse conceito de reordenação incluem códigos Huffman-Shannon- Fano e códigos canônicos descritos por Moffat e Turpin.
A figura 6 é um diagrama ilustrando uma árvore de codificação que apresenta a estrutura do código de bloco ilustrativo da tabela 6. Como esperado, cada grupo Wn,k consiste de no máximo dois subgrupos contendo palavras
código de mesmo comprimento. Em geral, a estrutura de código representada pela árvore de codificação da figura 6 e os códigos de bloco da tabela 6 definem os grupos de palavras código, e os primeiro e segundo subgrupos de palavras código dentro de cada um dos grupos. Cada um dos grupos inclui palavras código representando os valores possuindo as mesmas ponderações. O primeiro subgrupo inclui as palavras código possuindo um primeiro comprimento e o segundo subgrupo inclui palavras código possuindo um segundo comprimento diferente do primeiro comprimento. As palavras código em cada um dos grupos são ordenadas de forma lexicográfica com relação aos valores representados pelas palavras código para facilitar a codificação e decodificação por computação direta.
Um exemplo de um grupo é designado pela referencia numérica 66 na figura 6. Exemplos dos primeiro e segundo subgrupos são designados pelas referencias numéricas 68a, 68b, respectivamente na figura 6. Os grupos e subgrupos similares são fornecidos para cada ponderação dentro da árvore de codificação. Um grupo contém blocos possuindo omesma ponderação k . Um subgrupo contém blocos possuindo a mesma ponderação e o mesmo nivel de árvore de codificação. Isso vem do fato de todas as palavras em m grupo Wnk possuírem a mesma probabilidade e a chamada
propriedade irmã dos códigos Huffman. Essa observação é verdadeira para os códigos Shannon, os códigos Shannon generalizados e possivelmente outros algoritmos. Como mencionado acima, um grupo Wnk inclui no máximo dois
subgrupos contendo palavras código de mesmo comprimento, e podem ser representados como:
Wnsk =Wnxi KJ WnXM
onde / é o comprimento de código mais curto que pode ser designado para os blocos a partir do grupo Wnk . Ademais,
visto que as palavras dentro do grupo Wnk seguem a ordem lexicográf ica, então a divisão entre Wnkl e Wnkl+1 é simplesmente:
Wnjkjl = {w e Wnjc :InJt(w) <nk], Wn>w+1 ={we Wn, : Injc (w) >nk },
onde nk denota o tamanho de um subgrupo com palavras código mais curtas. Dessa forma, se um primeiro subgrupo possuir três palavras código com um comprimento de 3 e um segundo subgrupo no mesmo grupo possuir uma palavra código com um comprimento de 4, então nk(o tamanho do subgrupo com as palavras código mais curtas, isso é, o primeiro subgrupo) é igual a 3. Esse exemplo corresponde aos subgrupos no grupo associado com os niveis 3 e 4 da árvore de codificação da figura 6, onde o subgrupo 68a possui as palavras código 001, 010 e 011 com comprimentos de três cada, e o subgrupo 68b possui a palavra código 0001 com um comprimento de quatro.
As palavras código lexicograficamente menores em cada subgrupo podem ser referidas como as palavras código de base, por exemplo, como descrito acima com relação a um primeiro aspecto dessa descrição, e podem ser representadas como:
Bn,k,l = Í^Oo),
Bn,k,l+1 = </>(v>nk X
onde Wi é o bloco ino grupo Wnk . Note-se que, como
explicado acima, as palavras código restantes em ambos os subgrupos podem ser computadas como se segue:
^O,)
Bn jc l+i, se i <nk,
Bn,k,i+\+i-nk> se i>nk,
Como uma ilustração, é considerado que existe um primeiro subgrupo 68a com três palavras código de comprimento 3 e um segundo subgrupo 68b com uma palavra código de comprimento 4, por exemplo, como no exemplo dos niveis 3 e 4 da árvore de codificação da figura 6. Nesse caso, se a posição de um determinado bloco for i = 2, então i< nk (nksendo igual a 3) e a palavra código resultante é a palavra código de base aplicável +i . Nesse exemplo, a palavra código de base para o subgrupo é 001, e a palavra código resultante é 001 + 2 = 011. Para os niveis 3 e 4 da árvore de codificação da figura 6, se a posição da palavra código aplicável foi i>nk, então a palavra código estaria então no segundo subgrupo e seria igual à palavra código de base de 0000 + 1 - nk que é igual a 0000 + 4 - 3 = 0001.
As palavras código de base são definidas apenas pelos subgrupos não vazios, e o número de tais subgrupos S em uma árvore construída para os blocos de η bits está dentro de:
η +1 < S < 2n
Adicionalmente, múltiplos subgrupos podem residir no mesmo nível e o número de tais subgrupos colocalizados não pode ser superior a n+1. No nível 10 da árvore na figura 6, por exemplo, existem dois subgrupos correspondentes às palavras código 1110 e 1111. No entanto, esses subgrupos não pertencem ao mesmo grupo. Essa é uma diferença significativa de outros algoritmos, que designam palavras código de base singular para cada nível, mas então exigem que a tabela de reordenação 0(n2) grande funcione com os
ditos códigos. No presente caso, toda a estrutura tem 0(n2) de tamanho.
Em geral, essa estrutura de código define os grupos W e os subgrupos S . Cada um dos grupos inclui as palavras código que representam os valores possuindo as mesmas ponderações. As palavras código em cada um dos grupos são ordenadas de forma lexicográfica com relação aos valores representados pelas palavras código. Adicionalmente, o primeiro subgrupo em cada grupo inclui palavras código possuindo um primeiro comprimento e o segundo subgrupo inclui palavras código possuindo um segundo comprimento diferente do primeiro comprimento. A estrutura de código pode ser representada por uma estrutura de dados que pode ser acessada por um codificador para realizar a codificação de comprimento variável. A descrição contempla o uso de tal estrutura de código na codificação e decodificação de comprimento variável, além de um meio legível por computador compreendendo uma estrutura de dados que define tal estrutura de código.
De acordo com a discussão acima, um algoritmo simples para a computação direta dos códigos de bloco será descrito agora. Considera-se que os parâmetros nk(0<k<n) estão disponíveis, e que um nível 1 e a palavra código de base Bnkl pode ser obtida para cada subgrupo não vazio.
Então, o processo de codificação de um bloco w pode ser realizado essencialmente por um conjunto de etapas a seguir:
1. De acordo com um bloco w, obter sua ponderação k e índice Ink(w) .
2. Se Ink(w)<nk, selecionar o primeiro subgrupo Wnkl, do contrario, selecionar o segundo subgrupo Wn>kl+1 .
3. Então, recuperar a palavra código de base (Bn,k,i ouBn,k,i-i) para o subgrupo selecionado (Wn kl ou Wnkl+1) e
computar o código pertinente de acordo com a equação a seguir:
<z>0,) =
Bn,k,i+i> se i<nk,
Bn,k,M+i~nk> se i>nk,
De acordo com a equação acima, se a posição i = Ink(w)do bloco w no subgrupo selecionado (Wnkl ou Wnkl+1) é inferior ao número nk dos blocos no subgrupo, então a palavra código é Bn,k,i+i· Alternativamente, se a posição i do bloco w no subgrupo selecionado (WnkjlOuWnkw) é maior ou igual ao número nk de blocos no subgrupo, então a palavra código é
Bn,k,l+1 + i" nk ·
Como descrito anteriormente, como uma ilustração, para os níveis 3 e 4 da árvore de codificação da figura 6, o processo acima resulta em uma palavra código de 011 quando a posição de um determinado bloco é i = 2<nk, e uma palavra código de 0001 quando a posição de um determinado código de bloco é 3>nk. Nesse exemplo, nk é 3, isso é, o número de palavras código no primeiro subgrupo 68a para a ponderação k=l. A ordem da posição i prossegue de forma lexicográfica começando com a palavra código de base, por exemplo, de 0 a 3 no caso de ponderação k = l no exemplo da figura 6. Em particular, a posição 0 corresponde à palavra código de base 001, a posição 1 corresponde à palavra código 010, a posição 2 corresponde à palavra código 011, todas no primeiro subgrupo 68a (i<nk) e a posição 3 corresponde à palavra código 0001 no subgrupo 68b (i>nk).
Esse processo pode ser prontamente realizado garantindo-se que as palavras código localizadas no mesmo nível sejam reordenadas de forma que tenham a mesma ordem lexicográfica que os blocos de entrada que representam. Por exemplo, as palavras código descritas acima seguem a ordem lexicográfica dos blocos de entrada 0001, 0010, 0100 e 1000. Então, as palavras código lexicograficamente menores em cada subgrupo, por exemplo, 001 no subgrupo 68a ou 0001 no subgrupo 68b, podem ser utilizadas como as palavras código de base para fins de computação da palavra código descrita acima. 0 código de programa de linguagem C representando uma implementação ilustrativa de um processo para a construção direta dos códigos de bloco como descrito acima é apresentado na tabela 7 abaixo.
Tabela 7
Processo para a construção de direção dos códigos de bloco
/* «ncoáer struoture; */ tjfpedef Staroet í
unsigaad «borfc JakOM.] ; /* # Qf el»Mate ia first íask> subgroup */
unsígnad cia* sgflí+lj C2] /* CkiJ) -> subgroup iadsx mappíng */
unsIgnsct ckar IsnfSl s /* subgroup -> cede lsngth OappiBg *./
xmsignfiiá iat ba.eeCSI/* subgroup -> base eofeworá Bappiisg */
> EHC s
/+ block «ncoèez; */
onsigned 3sleck_®ne w, MC *enc:, BiTSTREM *fes)
ΐ
onsignsá i, j, k, Isji5 cod»;
k « 5 /* spliu w iat® (k.iadex) */
i m iadexCiijksw);
if (i >m @ne~>nk[k]> { /# fíaã subgroup coataiaing w */
i —* »ae->akÈk1; /» a.djtist indsx */
j - *ac->Sg[k] [13 , > eis»
j = *nc->sg[kj 10] j eeds = «ac->bas«, CjJ + i/* gsnerat® code */ Isn ' eac-í>len|jj 3
Ptit^bitsCcoiies leu, b») ; /* m>itis cod» t« hitetresun */
ESturn k;
>
No código de linguagem C acima, o valor k indica a ponderação de um bloco w, o valor i indica a posição (In,k(w)) do bloco dentro de um grupo com ponderação k, e nk[k]indica o número de palavras código no primeiro subgrupo do grupo com ponderação k. Se ifor maior que ou igual a nk[k], então i é decrementado para ajustar o índice, e o subgrupo é determinado para o segundo subgrupo (1) para a ponderação: aplicável k. Esse segundo subgrupo é identificado por j = sg[k][l] . Se i for inferior a nk[k], i não é decrementado e o subgrupo é determinado para o primeiro subgrupo (0) para a ponderação aplicável k. Esse primeiro subgrupo é identificado por j = sg[k][0] .
Então, a palavra código é gerada como uma soma da palavra código de base para o subgrupo aplicável j(base[j]) e o valor de i . Para o exemplo da figura 6, se o valor de i for 2, então o código será a soma da palavra código base 001 para o subgrupo 68a e o valor de i(2), que é igual a 001 + 010 = 011. Com referência à equação (13) acima, dependendo do subgrupo, a palavra código de base é Bnkjl ou
Bnk]+1 e o valor de ié i ou i-nk[k] . Dessa forma, o código
acima corresponde geralmente ao resultado fornecido pela equação (13). Depois da computação da palavra código (code), o comprimento (Ien) da palavra código é especificado como len[j], que é o comprimento de código para o subgrupo adequado, onde o segundo subgrupo possui um comprimento de código que é maior do que o do primeiro subgrupo. Então, o processo de codificação escreve os códigos na seqüência de bits através da operação put_bits (code, len, bs), que escreve o valor de code e Ien na seqüência de bit bs. A seqüência de bit é transmitida para decodificação por outro dispositivo. O processo retorna a ponderação k para o cálculo da próxima palavra código.
O processo de codificação destacado acima pode envolver a seleção de um dos grupos com base na ponderação do valor a ser codificado, seleção de um dos subgrupos com base na posição lexicográfica do valor a ser codificado com relação ao número de palavras código no primeiro subgrupo do grupo selecionado, seleção de uma das palavras código no subgrupo selecionado com base na palavra código de base para o subgrupo selecionado e posição lexicográfica do valor a ser codificado, e codificação do valor a ser codificado com a palavra código selecionada. As palavras código de base para cada um dos subgrupos, posiciona as palavras código dentro de cada um dos grupos, número de palavras código dentro de cada um dos primeiros subgrupos, e comprimentos das palavras código dentro de cada um dos subgrupos podem ser armazenados em uma estrutura de dados que pode ser acessada por um codificador para suportar a codificação de comprimento variável.
A partir de um ponto de vista de memória, um processo como ilustrado na tabela 7 só precisa de S palavras código de base (0(n)-bit de comprimento), n + 1 valores nk (0(n)-bit de comprimento), S comprimentos de código (0(logn)-bit de comprimento) e 2(n + l) Índices de subgrupo (0(logn)-bit de comprimento). Uma redução de memória adicional é possível pelo armazenamento de valores incrementados de palavras código de base como discutido em outro local nessa descrição. Visto que S = 0(n), toda a
estrutura de dados só precisa de 0(n2) bits. Em uma implementação particular ilustrada na tabela 7, considerando-se, por exemplo, que n- 20 e S= 32, o tamanho dessa estrutura de dados se torna 244 bytes. Isso é muito menos do que 220 palavras que seriam necessárias para apresentar esse código na forma de uma tabela direta. Para blocos razoavelmente curtos, por exemplo, n<12...16, a computação das ponderações e índices (functions weight (. ) e índex (.,.) no processo da tabela 7) pode ser uma questão de consulta única. Nesse caso, todo o processo de codificação pode precisar no máximo de uma comparação, duas adições e quatro consultas.
Para blocos maiores, a fórmula combinatória bem conhecida a seguir pode ser utilizada: 1 η,Á^ = ILwJ
M
JlL,-
onde Wj representa bits individuais da palavra w , e é
considerado que
0 para todos k>n . A fim de
se
implementar essa fórmula, pode-se computar previamente todos os coeficientes binomiais até o nivel η no triângulo de Pascal, ou se computar os mesmos dinamicamente, utilizando-se as seguintes identidades simples:
fn (n) e (n-k\ n — k M v* -υ η y k j η
A implementação com base em coeficientes previamente
n(n +1)
computados exige
= 0{n ) palavras (0(n3) bits) de
memória, e 0(n) adições. A computação dinâmica dos coeficientes exigirá O(n) adições, multiplicações e divisões. No entanto, todo o processo pode exigir apenas uns poucos registros e nenhuma memória estática. A discussão adicional de complexidade de computação de índice pode ser encontrada em T. Tjalkens, Implementation cost of the Huffman-Shannon-Fano code, em Proc. Data Compression Conference (DCC'05) (Snowbird, Utah, 29 a 31 de março de 2005) 123-132.
Um exemplo do desenho de um decodificador implementando as técnicas acima será descrito agora. Como um processo de codificação como descrito acima, um processo de decodificação pode fazer uso dos parâmetros nk, palavras código de base e comprimentos associados. Por motivos de conveniência, a discussão a seguir será baseada em versões justificadas para a esquerda dos valores de palavra código de base.
utí — d 0T~l
Dn,k,l ~ Dn,k,l^ '
onde T é o comprimento de uma palavra machine (T>maxl). Então, um processo de decodificação ilustrativo pode ser descrito como se segue:
1. Encontrar o subgrupo mais superior com B1^kl
sendo inferior a T bits na seqüência de bits;
2. Decodificar o índice de um bloco Ink(w) com
base na equação (13) acima; e 3. Produzir um bloco reconstruído utilizando sua
ponderação k e índice.
O : código de linguagem C representando uma implementação ilustrativa de um processo de decodificação como descrito acima é fornecido na tabela 8 abaixo. Tabela 8
Decodificação de códigos de bloco
/* decoder structure: */ typedei struct ■{
xmslgiusd Bhort nk[H+l]; /* # aí eleaents in firet Ca.,k) subgroup */
struct {uHsigned char k:7,J:l;> fcj[S]; /* subgroup -> (k,j) mappiag */ onsigned char Iea[53; /* subgreup -> coda IengtIi mappiag */
unsigtisd int. IjJbase [S]; /* subgroup -> Ieft-justified codesards */
> DEC;
/* bleck decoder: */
UQBlgaad bloc3í_dec Cseeigaed DEG BItSTSEÂM *be)
í
ulisígHed i s j, k, leu, vai; vai = bitstreaia„b«ff srÇbs);
for (j=ô; áec->lj Jwusé tjl>*al; j++> ; /* find a sxtbgroup */ Ien = dsc->len[j] ;
Bcroll_bitstreanClen, bs); /* skip decoded bit® */
i - Cval - dec->lj.fease(j|3) » (32-Iea); fc . dec->kj[jl.k; * /♦ get Sfeigbt »/
j = <fec->kjCj].j; /* get sub-group IMeac */
ií Cj) /* reconstruct lodex */
i += dec->uk [k] ;
»w = «ordCn.k.i); /* genexate i-tli word in {n,k> gzoup */
return k;
> O processo de decodificação ilustrativo ilustrado na tabela 8 faz uso das palavras código de base justificadas para a esquerda lj_base[S] . Durante a operação,
o processo de decodificação recebe o conteúdo vai do armazenador de seqüência de bits e identifica um subgrupo dentro da árvore de codificação possuindo uma palavra código de base correspondente ao conteúdo de armazenamento de seqüência de bit vai. Por exemplo, o processo continua para atravessar descendentemente através dos subgrupos em diferentes níveis na árvore de codificação desde que as palavras código de base sejam superiores à palavra código recebida vai. Quando um subgrupo com uma palavra código de base que é inferior a ou igual a vai é alcançado, no entanto, esse subgrupo é selecionado. Depois de encontrar o subgrupo adequado, o processo determina o comprimento do código para o subgrupo e então .rola a seqüência de bits por esse comprimento para saltar os bits decodificados e isolar a palavra código. O processo de decodificação determina a posição do índice i da palavra código dentro do subgrupo pela subtração do valor de palavra código de base do conteúdo de armazenamento de seqüência de bits.
Se a palavra código for 011 e a palavra código de base for 010, por exemplo, então o resultado dessa diferença é igual a 2, indicando que a palavra código está na posição 2 entre as possíveis posições 0, 1 e 2 no subgrupo. Para o exemplo de um registro de 32 bits de largura, essa diferença pode ser alterada para a direita por 32 menos o comprimento de código Ien . O processo de decodificação então recupera a ponderação pertinente k e o índice de subgrupo j , e reconstrói o índice i . O processo então gera a palavra i no grupo selecionado como a palavra código, e retorna a ponderaçãok . A expressão kj[j].k retorna a ponderação do subgrupo, e a expressão kh[j].j retorna o indice do subgrupo como um 0 ou um 1, indicando o primeiro subgrupo (0) ou o segundo subgrupo (1) para a ponderação determinado. Se o segundo subgrupo for selecionado de modo quej=l, então o índice i é ajustado pela adição do valor de nk[k] . Do contrário, o índice i não é ajustado se o primeiro subgrupo for selecionado. A função Word() retorna a palavra i no grupo n,k como o valor de palavra decodificada, por exemplo, utilizando a equação (13) acima. Em geral, um codificador pode realizar a
codificação de comprimento variável de acordo com a estrutura de código descrita acima, onde a estrutura de código define os grupos e subgrupos. Novamente, cada um dos grupos incluir palavras código representando valores possuindo as mesmas ponderações. As palavras código em cada um dos grupos são ordenadas lexicograficamente com relação aos valores representados pelas palavras código. Adicionalmente, o primeiro subgrupo em cada grupo inclui palavras código possuindo um primeiro comprimento e o segundo subgrupo inclui palavra código possuindo um segundo comprimento diferente do primeiro comprimento.
A estrutura de código pode ser representada por uma estrutura de dados que pode ser acessada por um codificador ou decodificador para realizar a codificação de comprimento variável. Como descrito acima, a estrutura de dados pode especificar as palavras código de base para cada um dos subgrupos, posições das palavras código dentro de cada um dos grupos, número de palavras código dentro de cada um dos primeiros subgrupos, e comprimentos de palavras código dentro de cada um dos subgrupos. Essa estrutura de dados pode ser armazenada em uma memória associada com um dentre um codificador de vídeo, um codificador de imagem, um codificador de áudio, um codificador de fala, um decodificador de video, um decodificador de imagem, um decodificador de áudio, ou um decodificador de fala, e acessada como necessário para suportar as operações de codificação.
Como descrito acima, um decodificador tal como uma unidade de decodificação por entropia 52 pode selecionar, em uma busca de cima para baixo da árvore de codificação, selecionando um primeiro dos subgrupos com uma palavra código de base que é inferior a ou igual à palavra código a ser decodificada. Então, o decodificador pode determinar a posição da palavra código a ser decodificada dentro do subgrupo selecionado, isso é, o índice de subgrupo, com base em uma diferença entre a palavra código a ser decodificada e a palavra código de base para o subgrupo selecionado. O decodificador determina a ponderação do valor representado pela palavra código a ser decodificada com base no grupo no qual o subgrupo selecionado reside, e determina a posição, isso é, o índice de grupo, da palavra código dentro do grupo no qual o subgrupo selecionado reside com base no fato de se o subgrupo selecionado é o primeiro subgrupo ou o segundo subgrupo para o grupo. O decodificador então seleciona um dos valores com base na ponderação do valor representado pela palavra código a ser decodificada e a posição da pai avra código dentro do grupo no qual o subgrupo selecionado reside, e a decodificação da palavra código a ser decodificada com o valor selecionado. O valor pode corresponder, por exemplo, a um dos códigos de bloco na tabela 6.
A estrutura de código e a estrutura de dados contempladas de acordo com esse aspecto da descrição podem suportar a eficiência em termos de overhead computacional, utilização de memória, e tempo de processamento. O processo de decodificação ilustrativo da tabela 8, por exemplo, exige entre IeS comparações e consultas para se encontrar um subgrupo, uma ou duas adições, uma operação de mudança, uma comparação adicional e três consultas adicionais. 0 número de etapas necessárias para se encontrar um subgrupo pode ser reduzido adicionalmente pela colocação das palavras código de base em uma árvore de busca binária ou utilizando uma tabela de consulta adicional, mas em ambos os casos à custa de memória adicional.
No final do processo de decodificação, como descrito acima, a ponderação k e o indice Ink(w)para uma palavra código são convertidos em valores reais (por exemplo, pela função Word() na tabela 8). Se os blocos forem razoavelmente curtos, isso pode ser realizado por uma única consulta. Do contrário, a palavra pode ser sintetizada pela utilização de uma fórmula de enumeração, por exemplo, como descrito em D. A. Huffman, A method for the construction of minimum-redundancy codes. Proc. IRE, 40 (setembro de 1952) 1098-1101. A partir de uma perspectiva de complexidade, esse processo é similar à computação de indice no codificador.
Utilizando-se os processos de codificação e decodificação descritos acima, um sistema para a codificação e decodificação adaptativas de blocos de dados podem ser definidas. Para esse exemplo, é considerado que os blocos de entrada podem ser codificados sob as condições a seguir:
1. Não existe qualquer contexto, isso é, um código universal é implementado; 2. O contexto é fornecido por um bloco observado previamente, isso é, t = n ; e
3. O contexto é determinado por dois blocos observados previamente, isso é, t = 2n .
Ao invés de utilizar os blocos reais como contexto, é suficiente (devido à natureza sem memória da fonte) se utilizar suas ponderações. Isso significa que, para t-bit amostras, é fornecido um conjunto de t+1 estruturas de código indexadas por suas ponderações s. Para economizar ainda mais espaço, a simetria de KT distribuições com relação a se k pode ser utilizada. Em particular, o processo pode substituir s=t-s e mudas os bits (isso é, forçar k = n-k) toda vez quando s>t/2. Dessa forma, só é necessário se definir t/2 + 1 tabelas. Nesse exemplo, a quantidade geral de memória necessária pelo código adaptativo se torna l + n/2 + l + n + l = l,5n + 3 tabelas. As estimativas de memória especificas para os tamanhos de bloco η = 8...20, são ilustradas na tabela 9 abaixo.
Tabela 9
Estimativas de utilização de memória [em bytes] para diferentes tamanhos de bloco
η max t max S Tamanho de uma tabela única Tabelas para todos os contextos 8 16 14 102 1530 12 . 24 ......19 14.0.......... ......... 2940 ------------------- 16 32 25 184 4968 40 29 216 7128
As tabelas acima foram geradas utilizando densidades estimadas KT e utilizando um algoritmo de construção de código Huffman modificado de acordo com essa descrição. Apresentado abaixo é um exemplo de código de computador para um programa implementando um codificador de bloco adaptativo como descrito nessa descrição.
f* bítstreairt.k; */
typedef strxict _BITSTSEAK BITSTRE®;
TOid bii;stre.aDi_opeii{BlTSTREiS.M *p, unsigaed. cli&r *pbs, unsignsd bit_oífset, iat r»act);
void bit;3tr«-am_ç.l<;ae<BIXSTEEAM *p, msigaed ciar **p_pbe, uiisígusd *pJ»it_o£í««t, iat «ri*-«) ·,
TOid putj>ite{un8ign«d bits, iat BXTSlBEiM *p); "aasig&ftti bitstrea»_buífer(BISTREAi4 »p);
wíd scrí}ll_bit.streaaiíiat l«a, EITSTREAH *p);
/'* blade.h: */
/κ «icOflwr fuactiana'. *f TOid blacte_<mc„ÍB.it. Cvoíd);
urisig»«tf blade_ene_0(unaigri ed toloci, BITSTfiEAH *bs) ■,.
BJisignM blade_sac_i(uasigaed block, uusign«d t-x. BITSTREAM »bs)>
nn&lg&eã blad8_eiií„2Cítnaigiied fcloclc.. uasignssd exí, «asigned <sx2, BXTSTKEAM *bs);
/*- decotier fuactioas: */ void bladô„dec„in.ít(veri<í};
TiiiSiigítètl bla.de_dec_0(i3iisígned *blotfc, BITSTREAM *fc») ;
«nsigued blade_deí:_l(ííaaigtied. *bloífc, imsigneã cx, BITSTREAM *bs);
uaisigaed blade_dec„2ft3»3igiied *bl.ix-ks misigned acl, uasigned cx2, BXTSlBEiK *bs);
/» felsde^lS.e: ímplemeitts 12-fcit BL&DE encoder/deceder */
#defis& H 12 /* bleek sise */ #def±ae SGS IS /* mas # <j£ subgrtraps */ }* «acoder stracture: *{ typedeí st.ruct {
wisigrtad siiort Ek flí+l] ;
imsigaed ciar le» [SG3];
imsigtted «liar ag [H+l] [2] ;
«Tisigiiftd Iivt bas» [S3S] , J BLADE JSHC;
/* # of AlemenT-s m iirst (11,fe) subgroup */ /* subgroBp -> code Iength mappiüg *■-/ /« -> sufegroup intJax mapping ♦/
/* suhgríjup -> base cftdüsoid mapping, */
/* w -> ík.index) aiappiag: vf
etatsic stru.ct. {unsigíied short. k;4, l:12j> w„ki[l<<íQ· /*
* BUDE eneíjíler;
* Rsturas:
* # v'f bits sst in euccdeO. pattern
IVflSignefl blad6_eiic (\mssigned v, BLADE_EHC *«ac, BITSTKEAM *bs)
imsigned i, j. fc, Isn, code;
Ic * w_kitw3
i * *Jti&] . i; if Ci >- «lie->.*!.·: [kj J < i -- eric~>iik.tk3 ; j = Ino-^gW LlJ ; } else
,i - «uc->Ss [k] [0] ; coás « enc->bassefj3 + i; Isa = eftc->leatj3 ; }>ut_bítís<N.:od<s.. leu, bs);
/* split w iato Çte,iinl®c) */
/* find subgroup contalsing ν */ /* adjust index */
/* gerisrate cotlf. */
ret.unt k;
/* ''lscoilisr strncture: */ tyj<e<tei stract £
«Jisigitad ir:t sgs; /* mjmber of subgroups */
irnsigoed Bhort ak Dt«3 ; A * of «lement® ia íirst (n,k) subgrcup */
«nsignsd cliar leu £SGS3; /* subgroup -> code leingtli mapping «/
atruct -Cunsigjied cker k:7,j:l;> kj [8G31; swbgrowp -> (k,j> Biai»ping */ unsiga«<l int Ij^bas* ÍSSS]; /'* subgrcmp ~> Ieft-iostified coáewords */ } BLADE_Í>EC:
/* Ck..in<iéx) -> a Mippia^!*/
static «asign«á shart [íf+l], _«[i«H3;
/*
* BLADE deccdstf:
* Returas:
* S of bits sat in enc«>4«4 pattôrn */
Hiisigaftíí tslade.dec (unssigaed *s, BLADE DEC *d«c, BITtiTREAM +te) -C
«Ϊ1 =Jigned i, j_. k, vai;
—-Viil - bitstream_t'Ut'fer(bs); ------
for j<ctec->s§s; j*+) /* íiael aubgronp */
if fds:;->lj.,base[i] vali brftakj Iert « dec->3 eu ] ;
scroll_bitstreaBi(len, bs) ; /* skip decísded bits */
í - (vai - de£->lj Js&se[j3) » (32-len); k « dec->lsjCj]-ls;
j [jj .3;
ií íj) /'* coiivert ι·» (n,k)~greap's iriífex *-/
χ des->iiktkj ;
*« - Ctí El]; /* produ!.-,ft reco'astruct«â block */
xsturn k;
> * íTe-eoraputed ELADE desader T,abl«5: V
etatic 3LADE_E>EC Γΐ+(ΙΓ/2+1ϊ + £Η>1)] = C
{ /* /IÍ> Cüiitéxt/ üíiiversal '^Aa\ */ 15,
0,12,66,92,496,792,924,792,485,122,66,12,1}, {3,3,7,7,10,10,11,11,12,12., 19,13,14 ,14,14} , «0,0},a2s0>,U.0},Ol,0>.{2,0íf-(t0,a},O,0>,íe>0},{3,i},{e.l>,í4,0>,{8,0>,{5,<í}.{6»0},-C7,0}>, {ΟϊΕΟΟΟΟΟΟΟ, OzCOOOOGCO, OxASOOOOOO, OxSOÜOSXíOU, 0x7F30000G, 9X6FOOOOOO, 0x83800000, 0x54400000, 0x40400000,0x48200000, <*i36«M)000 ,0x27300000, CaUDOOOOO.toOCeOOOOO, CKOOOOODOO} }. { /*- 412,0); */ 17,
-Cl,SiES,64,485,732,024,792,334,220,86,11,1}, {1,5,6,8,12,13,15,17,19,20,21,22,22,23,23,24.24}, {{0,0>,ί1,0},{1,1},{2,0>,{3,3},{3,1>,{4,0>,ΐ5,0},ίβ,0>,·{7<0},{8,0>,{8,1>,{9,0},{10,0},{1ΐΐθ><{11,1},{1Β<α>>ί ■CCkSOOOOGOO , 0x40000000,0x30000000, OiOFOOOOOO, teOEOOOOOO, 0x06200000, 0x02420000, ΟχΟΟΙΒβΟΟΟΟ, 0x0042w0,0x(mi0000,0x00089000,OxC«®4<XW,OrO<£<»COO,te^ b
< i* Cl2.1): *i 16,
{l, 12,17.220,485,732,924,340,495,220,66,10, i>, {2,5,8,8.11,13,15,16.17,18, Í8,19 ,1β,19,1β.20>, {{0t0>,{l,ü},í2,0>,{2,l},{3,0>,{4,0},{5,0},{í;,0};{7,0>,{7,í},<s,0>,{3<0},{ie,0}^ll,0},{i2,ü},íll,l>>, {tteCOOOOOOO, ΟζβΟΟΟΟΟΟΟ, Qx4FOOOOOO, 0χ3β80000β, ΟκΙΒΟΟΟΟΟΟ, OxOBSSOOOO, 0x05580000, OxOIBCOOCX», 0x01120000,OxOOÍ10000,OxOQ2B4000,QxOOa9COOO,OxOGG180CK>,0x00004000,0x(KK)Q2000,0jí00S{í0C00> }, { /* (12,2): «/ 16,
{1,12,se,£11,495,792,924,792.48«,220,66,12,1}, {3,6,8,10,li, 12,14,15,16,16,17,17.17,17,17},
•PheEoooowKi ,taBooooooo, ex«so»aooo, oaasmooooo, tsaww», 0*19300000, «xoaiooooi>,e&oseeÍ»&©,
0x02800000,ttxOOejSOOM;, OzOOI^ >,
< /» (12,3): ri 1β,
{1,12,30,220,49S,7»2,824,792.1»,220.8,12,1}, {4,6.8,»,10,12,13,14.14,14,14,14,14,15.15,18}, £{ο,ο},α,οί,{2,ο},{2,ΐ}.ί4,ο},{4,οΜ5,9},{β,ο}^
{ΟχΕΟΟΟΟΟΟΟ,0x00000000,GxA20000r«,<)x909ÍXKK>0, OKBSOOOOOO.tfctíüKÍOOflO.eiaiBSÍiOOO.OlíaEOOOOO, { /» (12,4j: */ 1S,
<1.12,66,220,406,303,»24,792,4ί·6, 219 .«β.1,1}. {S,7,B116,12,12.12,12.13,16,13,13,14,13.14,14},
«a.ôKa.oMa.oMs.cj.tt.tiMs.oMti.oj.m^^^
{íraF8000C>0-j, «xSOOOOOOO, «x BF&OOOOO ,0x88000000, OxSO 100000,Οχ662ΟΟΟΟΟ,0χ56ΕΟΟΟΟΟ,Οχ88ε6β&&Ο, 0x46880000,0x46480000, 0tíe6mW,OxlüA8O0O9,0xOOK>9OüO,O^ },
l i* (12,5) : */ 1S,
{1,12.66,220,435,792,BijS,702.380,220,88, 11,1}. {«,8,10,10,11,11,12,12,12,12.12.12,19,18,ÍS>, «0,0},{i,0},{2,í!},{12,SÍ,{3,»},m.Õ},M,0},{^^
{OxFCOOOOOO, OxFOOOOOOO, CzBFSOiSOOO ,OxDF400000, OxCâCSOOOO, 0x02-100000, SxA3SOOOOO,Ox71DO30SO, 0x52000000,0x30200000.0X2^Q0CHM,0x24400003,0x10480000,0x13000000,0x09000000} }, ■£ /* (12,β): */ 16,
{1,12,«β,47,496,792,924,792,496,SS.66,12,1}, {8,S.£>,9,11,11,11,11.12,12,12,12,12,12.13}, ««,0},{Ü.0í,«,0>,ai,0},{2,0>,O.0},{»,0},{ü>,0>,í3,lj,«,l},Ô,0},{6,0},t7.0},{8,0>,{«,0}>.
{OxFFOOO&OO ,OxFEtiOOOOO ,SxF&OOOOOO ,OxF200«tOO,OzEwi;00000, OxESKOOOflO ,ía^04MX>00,02B10(>0000, C&C63OO«X>,O:zBI)ÍX»O0O,C;s;SJEOOOSOO,Ox®^ í,
{" /* (24,0): */ 19,
{1,12,25,220.4&7,701,624,787,404,220,88,11,1}. {1,5,9,10,13,16.17,18,20,22,24,25,20,27 .28,80,51.32,82},
{{0 ,íi},{l ,0},{2,0},{2,1},-C3,Ü},{4,0},{4, !},{£ .ís} ,{5,1}, £6,03-, {7,0} ,{7,1}, í3,0Í,{:ís,l},{y ,0},{10;0},{1ί,0},{11,1},{12,0}}
{fixsooooooo, cscaoooonK) ,«xiseosooo ,0x0940000« ,Oi02^í»o,o*oo7stoooo,o»iM!7so<)oo, 0χ0012ϊ0&0,0κ00121000,
OxOÍJOSáOOOAixOOOOtíDüO.O^OOOSSàSO, OxOOQ^ ,OxOijOOOOOO} >,
I l* (24.1)ri 17,
£1,7,ββ.220,4BB.32S,924,732,496,4,Sb, 11 ;1>, íl,6,e,&,12,lS,lT,lS,2(.i,22>S'5.24,2S,2e,27,2S,28},
{0x80060800.0x48000000 ,6x34009060,0x13900000,0x06460000, 6*01820000, SrOOBFOOOO, 0x004*6000, 0x00160080,0χ0004β000,0ϊ0»008200,«χ0009ΐτΐβ0,0x90001200,0x00009180,0x00000020» 0χ£>0000910,0x00000000} >, { /* <24,2)s */ ITi
{1,ia,47.220,495,792,924,1,495,220,68,11,1}, «.5,8,3,11,14,18,18,19,20,21.22,23,24,24.25,25}.
•{•{δ,OJii-Ci ,0J-J-C2,0}, ^,lljíSfÔ},-£4,0},-IStOJ-J-Cef Ο},-C7jO},-C7 ,1},{8,0}*{9,0}»{ÍO,O},{ÍG»Í}^{11,O}^{1Í,Í},{1
íteCOOOOOOO, ΟχβΟΟΟΟΟΟΟ, 0x31000000, 0x27S00Ü ΟΟ,ΟεΟΟΟΟΟΟΟΟ, 0χ0444000>:^ 0x01200000,0x00450000. Οζ0044ΕΟΟΟ»0x00137000,0xOOO3F6OO,QxGOOOS8OO>0x00001400,0700000000,10x00000100,0x00000080,ÕxOOOOOOOOT },
-C /* <24,3): -*/ 17,
Cl,6,66,1,485,4,924,792,435,220,68,7,1}, -{2,5,8,8,10,11,13,14,15,16,18,19,20,21,21.22,22}.
«O.eí.íl.OJ.Íi.lJ.O.OJ.ÍS.OJ.iS.lJ.ÍÍ.Oi.fe^.íB.li.íe.Oi.í?,®},^,®},»,©},^»]®}^!!^^!!,!},^
{OxCGOOOííOG, 0*90000000, 0x78000000,0x36000000 ,OasSSCaOOOO, Oscl ΑβΟΟΟΟΟ, ΟχΟΑΕβΟΟΟΟ, OxOSOSCiOGO. ϋχ04Β0ίΚΦό, OxO 1140000, OxCKMEOOOO, 0x00102000,0x00026000,0x00005000,OxOOOÜISOO, 0x00000400,0x00000000} >, ί /* (24,4): »/ 15,
{l,t2,Se,220,495,10,934,792,495,230,88,7,1}, <3,6,8,10,12.13,14.18,18.17,18,10,19.20,20}. <<0,0},-Cl,0},<2,Q},<3,0},t4,0},ÍSJ0},{S,lJ,{e,0},{7>0},{8>0},ÍB,0})ílÔ,0},íllJ0},{ll,l},íl2,0}},
{ΟχΕΟΟΟΟΟΟΟ. ΟχΒΟΟΟΟΟΟΟ. OKSEOOOOOO, 03:37000000, 0x18100000, Ox 17C00000. OsOBSSOOOOÍ 0x04500000, 0x01380000,8x00488000,0x00098000,0x00014000 ,0x00006000, ÒxOOOOlOOO,0x00000000} }, { /* <24,S): */ 16,
{1,12,66,220,486,792,451,782,2,220,66,11,1}, {4,6,8,10,12,13,14,15,1«,16,17,17,18,18,19,150·,
€í0,0>,ci,0},{2,0j-,{3,0},í4,0},{s,0},{e,0},-c6,í},-c7,0},-{8,0},{e,l},{a,a},-ci0,0>,<ll,0},-cil»i}.{12,0}>,
{CbcFOOOOOOO, OxCOOOOOOO, ΟχΤΕΟΟΟΟΟΟ,0x47000000, 0*28100000, OxOFgOOOOO,0x08440000,0x04820000, OzOlTAOOCiO,0x01.780000,OxOOMSGÜO,OxOOiSSGOO,OxOOOSOOOO,0x00004000 ,Ox 00002000,0x00000000} }, i /* <24,6): */ 17,
Cl,8,68,220,2,792,924,7®2,495,220,59,12,i>, {4,8,7,8,9,10,11,12,13,14,18,16,1«,16,17,17,17}. «0,δ},{1,0},<1,1},<2,0},β,1},^,0},{4,0},«,1},ίδ,0},ίβ,0},{7,0^,ϊ8,0},{8,0},ί10,0},{10,1},αί,0},{12
{OxFGüOOOOG, 0:d>000ü000 , GxOSOOGüOO, 0x87000000, <te86800000 , 0x4F8OOOOè, 0x4F400ÍMX>, 0x30700000. 0x17606090,0x09400000, OjcOS 100090, OxOl 210000, 0x00460000. ÓxOOOAOOOO, 0*00068000, 0x00008000, ÕxGOOOOOGO} J { /* (24,7): »/ 15, " '
•Cl, 12,6<J, 220,405,62,924,792,485,230,66,8,1}, {5,7,0,10,11.12,13.13,14.15,15, ΙΕ, 18,15,16} .
«0,θ},{1,0},<2,θ},{8,0}·,<4,0},<δ,0},«,1},{β,<(}.{7,0>,{8,0},{9,0},ί10,0},ίΐ1,0},ίΐ2,θ},<11,ΐ}},
{OxFSOOOOOO, OxEOOOOOtiO, ΟκΒΡΟΟΟΘΟΟ, 0x88000000, 0x4.4 200000, 0*46400000, Ox2F700000, Or12800000, 0x06300000,0x02520000, OxÜO&WOOO,0x00160900, 0x00080000, 9x00940000. 0*90000000} }, < /* <24,S.): «/ 15,
{1,12,66,220,287,702,924,782,496,220.62,12,1}, {8,8,8,10,11,12,12,13,14,14.14,14.14.14.18}. {{0,0},{1 ,0},{2,0},{3,0} ,{4,0} ,{4, ί {5,0} ,{6,Ο},{7,OJ,{8,Ο},{0,0} ,-ClO,Ο},{li,0} j{l2,0} ,{10,1}}, {íteFCOOOOOO, OxFOOOCSOO», GxCFOOOOOO, 0x96000000, 0x74200000,0x67200000, 0x35.400000 ,OxlifCfl 0000, OxGCSOOOOO, 0:í04A40D00 , OxOl 340000,0x00300000, EkGOOCOOOO , 0x90080000,0x00000000} }, -C /* <24,05: */ 14,
{1,12,66,220,417,792,»24,792,485,220,66,12,1}, <7,8,β,11,11,12,12,13,13,13,13,18,13,14}, «9,0>.{1,δ},{2,β},{3,0},{4,0},{4,1},{δ,0},{6,0},{7,0},{8.0},{10,0},{ί1,0},ί12,β},ί9,0»,
{ΟκΕΕΟΟΟΟΟΟ , OkFXOOOOO, OxD 1OOOOOO, 0x65800000. 0x81800000, Oz7C8GOOOO, Οχ4ΒΟΟΟΟΟΟ, 0x28200000. Ox 15800000, 0x05880000, 0x03080000, 0x03780000, 0x03700000. 0x00000000} } , { /« (24,10): */ 16,
{1,12,06,220,221,782,823,702,495,220,66,12,1}, {7,9,10,11,11,12.12,12.Í2,12,12,13,18,13,15}, {{Ο, 0}, {1,0} ,{2,0}, <3,0}, {4,0}, {4,1}, {5 , 0}, {β , (!} ,{10, Ο}, {11,0} ,{12,0},{6,1},{7, 0} , {S jo},{», Ο}}, {OxFEOÔOOOQ, 0xF8000000, OkETSOOOOO, ΟχβΟΟΟΟΟΟΟ, 0x60800000. OxSFiOOOOis, OxgBCOQOOO. 0x34100000, OS2FFOOOOO ,OX2F300000,0z2F2QOO00,Oi2F18OD00,Ox 18S8OO0O,OxOSEOOOOO,0x00000000} >, { /* <24,11}: *( 14,
{1,12,23,220,««,702,924,792,495,230,86.12,1}, {8,10,10,11,11,11,11.12,12,12,12,12,12,18}, «0,0} ,«,«>,{2,0},{2,1},{3,0},Cll1OJ ,{12,0} ,{4,0},{5,0},{8,0} ,{8,0},{8,0},{10.0},{7,0}},
{ftxFFOOOOOO, OxFCOOOfHlO, ÔXF6400000, OxFOEfSOOOO, ΟχΒδβΟΟΟΟΟ, «sBSEOOOOO. OriKiCOOOCQ ,OxB4DOOOOO, 0x83500000,0x40-800000,0x2/,AOÜC-OO.OxlCEOOOtiO>Oxl8COOOOO(OxOOOGGO0O}'}, { /* (24,12J; +/ 14,
{1,12,68,220,486,792,604,792,4®,220,12,1}, {10,10,10,10,11,11,12,12,12,12,12,12,12,1», «0,0>,{1,δ},{11,0},{12,0},{2,0}.{ΐ0,0},{3,0},{4,0}·,{8,0},{β,0>,{7,δ},{8,0},{9,€0·,{β,1}},
•COxFFOOOOOO, OxFCCOOOOO , OxFOCüOOOO, OxF9SOOOOO, OxF1400000, OxESOOOOOO, OxDB40000v>, OxBOSOOOOO, OzSASOCOQO, OxSf.500000, Or39COOOOO, Ox 1 tSOOOOO, Ox 0D20C000, OzOOOOQOOO} }
/* -encoder-tables <compefc«d- -using- <$ecoâer"s- tafcles} ·; */ static BLâDB_EHCf [l+(S/2+f)+(Hti)] ; /* ínítialise «neodert */
wid folade„eM„±ait () <
unsIgned iat i Di+1]. j, k, If w;
/» init encí]:; *j
for Cj=O; j<l+(H/24-i)+0l+i); j++> {
for Ck-Oj k+·+} «mcM^ .akDtl - «tec„t[j3 ^nkDOi
for Ck=Oj k<=SGS; k++} {
efl^trjJ.sgide^tCjJ.kjW.kHfe^tCjj.kjiki.jJ - j;
«acwtEjl.JftB[kj « dec„tCj3«j«nEk];
enc„t EjJ .base[k] = d«c„t Ejl . j; j„baseCkJ » (32-decjt Cj3 . j*nEk]> ί
} '
/* init w_ki[}; ♦/
for Cj=Oj k<=Ií; k++) i£k] » 0;
for Csr=Oi w<(í«H)j w4+> {
for Ck=OiJ=O; j <M| j++> if (w & Cl«j>) k++; w..ki [vl. k k; wJciCwií.i « iDcJ; iík]
>
>
/* ínitialize ciecodsr; ■*/
vaíd blade„dsc„±3iit.() <
Stafic slwrt b£H+i1 « -Cl,Í2,68,220,485,792,924,792,495,220,66,12,1Ϊ ; ttasig»«sd int itH+i], j, k, w; /* init ki _v [j : */
for ' (j«0,k»0j k<-l; j4<^tkj ,k++) ' <ki_wDe3 - + j; i[kj « 0}ϊ for C^=Oj V<Ci«i;h s++> C
for Ck=5O>j=0; 1*+) if (w t Cl«|)) k++;
kiwv[k] Ei [k] ] » v;
í Ekl *+-,
> /* «nccsder-Vs fimctio&s */
uasigpied blaá*_#iic_0 (uBaigxted Wj BITSTREâH *bs) €
retuxn Ijliad«„«ac (w, eaac„t + 0, bs);
>
aasigaaâ. blaáe„«ac.„i CtmsigBed Ws imsígassd cx» BITSTREAM *bs) {
niisignsd r; ií fcx > H/2)
r = ff - {w ~<íl«K)-ljf «ac_f + 1 +· H ~ esc, tos);
else
r = blade_enc ζν, ene_t + i + cx, bs); r^turn r;
}
uiisigaed bliade„«ac„2 Cuttsigjied sr, u&sig&ed cxl, UEUsiípKNi cx2> BITSTREâíí {
rasigned cx = csl + cx2, rj if ίο: > N)
r = Ií - blade^ne. <w Í1«I}~1), encjfe ■+ i 4· (n/2 + i) + 2*N - cx» bs); eis·©
r = bladeweiic. (w, + i + (H/2 + i) + cs, bs);
rsturn r;
>
>
/* ssain.c - test prograsj aad. deao: */
fdeiirie M 1000 /* ssax f of blocks Iti test sequence */ «define Q 1000000 /* # of iterations */
/* fcest prograsK Int jsaiii {)
í'
/* in/out buffers: */
static uitsigned char iii_buffer [M*&/83 ;
Static imsignad char outjnrffer [M*M/8 + 1024];
static BITSTRE1H ia, tmtj
/* vars: */
unsigned char *pbs; i;ti.t bít„offset; unsigned int w, cx, cxi ~ 0, cx2 = 0; int i, j, k, doubls P1 h, c; /* irait BLADE-12 libraryi */ blini t ();
/■* sea» sourceg: */
for CpsO-Olj £<«0«ô81í j>+=(h0i> £
estiínate entropy: *J
h » - (p * l«g(p) + (í.-p) * log(l--p)> / Iog(2.5 j printf C5Xap=Kgj h-íígW, p, h);
/* try different # of bloeks: */
for Cfa=Ij m<H; ra++)
j
e ~ j
/* Jttabe Q XTiXis s */ for (1=0j KCJj í++) jE
/* gmerate test sequ«iic«; */ iaeBisfêt.íia„btiff«r:I 0, sizeof in^buffar) j bitstr«a»„Qpent&in, ín„büffer} O1 0); for (J3=O; j<H*aj j-M-) {
/* gefc & iMMSt bit frosffl ά pseudo-Beraoul-Ii seuxce: */ k - (Woable) raa.dC) / <á»a.bl«) RASELMÃX) > <i. - p> j /* lasert it in bitstreasu */ ptit_bi t ss <k, 1Ma > ;
}
bitstr«aa„closs (fein, Scpbs1 febit^of fset1); /* start «Jiccding; */
B3emsaet.(oMt.„Imffsrf Oi sàzeef out^baffex) j feitstr«ae„ep8n(&«Mrt;, otJt„biiff«r, 0, 0) ;; bitstiraaA^ope-n Cfcia, íxclraffer·» 0* i) í
/♦ roa the eacader:: */ - fç.T (J=Oj j<Btj j"N*} í
/* block to b« esacedeâ; */ » « {\msig»«sd)get,,Mts (líMa) j /* ehoe-se coBtest «rnd encode: */
if (j o)
czl ® blade„enc„0 Cwi &out>; no cantext */
eis* if <} == 1). .. .. ______________________
cx2 « {», Cxii éout}; /* ws» cxl */
else jC
ct ■ blsde„ene„2 Cw, cxl, cx2, &out)| /* «se cxl and c*2 */
scroll eantexts: *■/ cxl c>:2; cx 2 = cx;
>
>
/* elos® bit&treams; */
MtstraaawClose {feia Sfibst &bit„of fset, 0); bitstreaa„clos« (feout, èpbs, fcbit^offset, i)» ί* e«£B|mt« cedisg cost: */
c +» (double) CCpbs - ontjmffer) ♦ 8 + Mt.offset) / (deuble) Cm*®};
/* sfcart de c c»di ixg: */ bitstr«am„»pec in^buffer, ô, 1) j
Cteut3 «mtj»uff«r» β, i)
/* ru® tMs áecoderí */ for <j«0j j<mj j++) {
/* tlie GOirtext and decodet */
if (j » o)
cxl =· felad*„d®ej& Í&m, feout); /* no coatext */
«lae if Cj »» 1)
cx2 ■ biade„dec„i (ftw, cxl, feart.) /* use cxí */
else -C
cs = blade„tfec„2 (fe, czl, cz".:2 , feoat) ; /* use exi and <:x2 */ /* sGxoIl COiitexts t */ sxl * CX2j cx2 a csj
>
/* corapare »ità th® original bleck: */ if (w t<= getjbíts <N, feia)} ■£
printf("?%d, % j) } '
}
/* close Mtstrsams: */
Mtsfcr«affl„íil£>®« fepbs, &feifc_o£fs«t» 0)j
Mt©treasa_close (&oufc. fepfesu Mt Offssst4
>
/* prifit rssHlts! */ G /= (Cisuble)Q;
PriirtfCi5^diXgii % m*Nt (c-h)/L·); fflO®h(stdout) ;
>
}
returri Ij 1 -
Os resultados experimentais da avaliação do desempenho de um processo de codificação adaptativo como descrito aqui com o tamanho de bloco n = 16 serão agora descritos e comparados com outros algoritmos bem conhecidos. Em particular, o processo de codificação adaptativo é comparado com o algoritmo Q-coder descrito em W.B. Pennebaker, J. L. Mitchell, G. G. Langdon, Jr., R. B. Arps, An overview of the basic principies of the Q-Coder adaptive binary arithmetic coder, IBM J. Res. Dev. 32(6) (1988) 717, que é utilizado no padrão de codificação de imagem JBIG, e o algoritmo CABAC descrito em D. Marpe, H. Schwartz, e T. Wiegand, Context-Based Adaptive Binary Arithmetic Coding in the H.264/AVC video compression standard, IEEE Trans. on CSVT, 13(7):620-636, julho de 2003, que é utilizado nos padrões ITU-T H.264/MPEG AVC para compressão de video.
A fim de se conduzir os testes, as seqüências geradas por computador de bits foram utilizadas para simular as saidas de uma fonte Bernoulli binária com probabilidade p. Os comprimentos de tais seqüências variam de 16 a 1024 e, para cada comprimento particular Q = 1000000 amostras de tais seqüências foram geradas. As taxas de redundância relativa foram computadas como:
Taxa = (soma dos comprimentos de todos os códigos
produzidos para Q seqüências)/ Q-H(p)/H(p) Para o processo de codificação adaptativo descrito nessa descrição, a estrutura a seguir dos contextos foi utilizada:
1. primeiro bloco de 16 bits é codificado sem contexto (código universal);
2. segundo bloco é codificado utilizando primeiro bloco como seucontexto(código com t-16); e
3. terceiro e todos os blocos subsequentes são codificados utilizando dois blocos anteriores em uma seqüência como contextos (código com base em amostra com t = 32) .
As figuras 7a e 7b são gráficos ilustrando a comparação das taxas de redundância de um código de bloco adaptativo com as técnicas Q-coder e CABAC com valores diferentes de ρ. A figura 7a ilustra os resultados para ρ = 0,1 enquanto a figura 7b ilustra os resultados para p = 0,5 . A figura 8 é um gráfico ilustrando a sensibilidade da redundância à assimetria dos dados de fonte para o código de bloco adaptativo, técnicas Q-coder e CABAC. Os resultados do estudo experimental soa ilustrados nas figuras 7a, 7b e 8. As figuras 7a e 7b representam o número de bits codificados no eixo geométrico χ X (comprimento de código médio - entropia)/entropia no eixo geométrico y.
A figura 8 representa a probabilidade no eixo geométrico χ X (comprimento de código médio entropia)/Entropia no eixo geométrico y . Cada gráfico nas figuras 7a e 7b e 8 ilustra as representações para o Q- coder, CABAC e codificação adaptativa com os rótulos correspondentes. A partir dos resultados experimentais, pode-se observar que o código adaptativo descrito nessa descrição pode ter uma taxa muito mais rápida de convergência do que ambos os algoritmos Q-coder e CABAC. O processo de codificação adaptativa supera os algoritmos Q- coder e CABAC para seqüências mais curtas, e se torna comparável aos algoritmos Q-coder e CABAC quando o comprimento total dos bits codificados se aproxima de 1024. Como ilustrado adicionalmente na figura 8, depois de 160 bits codificados (ou então 16 blocos de bits), o processo de codificação adaptativo pode distribuir uma redundância mais baixa em comparação com os algoritmos Q-coder e CABAC. Esse comportamento é consistente com o Teorema 1 discutido acima.
A figura 9 é um fluxograma ilustrando um método para a construção de codificação de comprimento variável de memória eficiente para distribuições monotônicas de acordo com um primeiro aspecto geral dessa descrição. 0 método pode ser implementado por um processador associado com um codificador, decodificador, ou outro dispositivo para construir códigos para uso por uma unidade de codificação por entropia 46 e unidade de decodificação por entropia 52, como ilustrado nas figuras 2 e 3, e podem suportar a compressão e codificação de qualquer um dentre uma variedade de dados, incluindo, mas não limitados a dados de video, imagem, fala e áudio. Tal processador pode ser fornecido, por exemplo, dentro de um codificador ou decodificador, ou dentro de um sistema de computação de finalidade geral, por exemplo, para preparar uma estrutura de dados definindo os atributos de estrutura de código úteis na codificação de comprimento variável.
Como ilustrado na figura 9, o processador obtém um alfabeto de símbolos de entrada a serem codificados (70). Os símbolos possuem ponderações respectivas indicando a probabilidade ou freqüência de presença ou utilização dos símbolos em um determinado conjunto de dados ou seqüência. Depois da determinação das ponderações de símbolo pertinentes (72), o processo designa os índices para os símbolos com base em suas ponderações (74) e designa os códigos para os símbolos com base nos índices e ordem lexicográfica dos símbolos (76) . Dessa forma, os símbolos possuindo as mesmas ponderações podem ser ordenados lexicograficamente para facilitar as técnicas de codificação como descrito nessa descrição.
Os códigos podem ser organizados de acordo com uma estrutura de código representada por uma árvore de codificação binária. 0 processador identifica uma palavra código de base para cada nível na árvore de codificação (78) . A palavra código de base é a menor palavra código em um determinado nível na árvore e corresponde ao símbolo lexicograficamente mais anterior dentre os símbolos nesse nível na árvore. Para fornecer uma estrutura de dados compacta, o processador remove um número fixo B de bits dianteiros das palavras código de base para produzir palavras código de base parciais (80) . As palavras código de base podem ser formuladas como palavras código justificadas para a esquerda e os bits dianteiros podem ser os M bits dianteiros prosseguindo da direita para a esquerda nas palavras código justificadas para a esquerda. Em algumas implementações, o número de bits dianteiros que são removidos pode ser igual a 8. Em outras implementações, o número de bits dianteiros que são removidos pode ser inferior a ou superior a 8.
Para muitos níveis de árvore de codificação, os M bits dianteiros serão iguais a zero. Em alguns níveis, no entanto, os bits dianteiros podem formar todo ou parte do código de base para o nível respectivo na árvore. Nesses níveis selecionados, o processador gera indicadores de salto (82). Os indicadores de salto fornecem uma instrução para um decodificador para rolar a seqüência de bits por B bits de forma que o código base não seja perdido mediante a remoção dos Bbits dianteiros. 0 processo pode armazenar, em uma estrutura de dados, as palavras código de base parciais resultantes, comprimentos associados com as palavras código em níveis respectivos da árvore de codificação, desvios indicando os índices dos símbolos respectivos associados com as palavras código na árvore de codificação, e um ou mais indicadores de salto que indicam quando a seqüência de bits deve ser rolada por Bbits para impedir a perda de uma palavra código de base que se encontra pelo menos parcialmente dentro dos B bits dianteiros (84) . A estrutura de dados pode ser fornecida para a unidade de codificação por entropia 46 e a unidade de decodificação por entropia 52 para auxiliar na realização das operações de codificação e decodificação por entropia com os códigos variáveis construídos. A estrutura de dados pode assumir uma variedade de formas incluindo uma ou mais tabelas de consulta uni ou multidimensionais, listas de link, árvores binárias, árvores radix, arquivos planos, e similares.
A figura 10 é um fluxograma ilustrando um método de codificação de símbolos utilizando códigos de comprimento variável construídos de acordo com o método da figura 9, de acordo com o primeiro aspecto geral dessa descrição. Como ilustrado na figura 10, a unidade de codificação por entropia 46 recebe um símbolo (86), determina um índice para o símbolo (87), e compara o índice de símbolo com uma tabela de desvio para identificar um nível . correspondente na árvore de codificação. Em particular, a unidade de codificação por entropia 46 determinar se o índice de símbolo é superior e ou igual ao desvio para um nível determinado da árvore (88) . 0 índice de símbolo representa a ordem do símbolo dentre outros símbolos, classificado em ordem de ponderação, com os símbolos de mesma ponderação sendo ordenado lexicograficamente de forma consistente com o alfabeto de símbolo. 0 desvio é a diferença entre o comprimento do código ou códigos para o nível pertinente da árvore, e o comprimento máximo de código. Na árvore da figura 4, se o comprimento de código máximo for igual a 16, por exemplo, e o comprimento de código no nível 3 da árvore for igual a 3, então o desvio pertinente para a palavra código de base é igual a 12.
Se o índice símbolo não exceder o desvio para o nível atual da árvore, a unidade de codificação por entropia 4 6 prossegue descendentemente até o próximo nível (90) da árvore de codificação em uma busca de cima para baixo e repete a comparação do índice de símbolo com o desvio para esse próximo nível (88) . Quando a unidade de codificação por entropia 4 6 determina que o índice de símbolo é superior a ou igual ao desvio para um nível particular da árvore de codificação (88), a unidade de codificação por entropia computa a palavra código adequada para o símbolo. Em particular, a unidade de codificação por entropia 4 6 determina a palavra código para o símbolo para a soma da palavra código de base para o nível atual da árvore mais a diferença entre o índice de símbolo e o desvio para esse nível (92) .
Utilizando a árvore ilustrativa da figura 4, se o índice de símbolo for igual a 14, a unidade de codificação por entropia 4 6 determina que o código para o símbolo reside no nível 3 da árvore visto que 14 é maior que o desvio de 12 designado para a palavra código de base para esse nível. A unidade de codificação por entropia 4 6 então computa a palavra código como a palavra código de base (001) + (o índice de símbolo (14) - o desvio (12)), isso é, 001 + 2 = 001 + 010 = 011. Depois da configuração do código para o símbolo recebido (92), a unidade de codificação por entropia 46 envia a palavra código para a seqüência de bits (94) para transmissão, por exemplo, para um dispositivo de recepção com a unidade de decodificação por entropia 52. A unidade de codificação por entropia 4 6 então repete o processo para o próximo símbolo na seqüência de dados pertinente.
A figura 11 é um diagrama de bloco ilustrando um método de decodificação de códigos de comprimento variável construído de acordo com o método da figura 9, de acordo com o primeiro aspecto geral dessa descrição. O método ilustrado na figura 11 pode ser realizado utilizando um algoritmo idêntico ou similar ao que foi ilustrado na tabela 5. Em uma implementação ilustrativa, os códigos podem ser recebidos pela unidade de decodificação por entropia 52, e codificados por uma unidade de codificação por entropia 46 descrita com referência à figura 10. O método ilustrado na figura 11 pode fazer uso de técnicas de decodificação eficientes em termos de memória como descrito nessa descrição, e pode assumir a vantagem da estrutura de dados compacta com a qual tais códigos podem ser construídos. Como ilustrado na figura 11, a unidade de decodificação por entropia 52 recebe uma palavra código a partir de uma seqüência de bits de entrada (96). A palavra código pode ser obtida a partir de uma largura fixa W de bits recuperada de um armazenador de seqüência de bits. A palavra código pode ser justificada pela esquerda ou convertida em um formato justificado pela esquerda, e a largura W pode ser reduzida pela remoção de B bits dianteiros da palavra código da direita para a esquerda.
A unidade de decodificação por entropia 52 compara a palavra código com as palavras código de base para diferentes níveis de uma árvore de codificação, começando do nível superior e prosseguindo mais profundamente para dentro da árvore em uma busca de cima para baixo até que uma palavra código adequada seja encontrada. Em particular, a unidade de decodificação por entropia 52 pode determinar se a palavra código de base para o nível atual da árvore é inferior a ou igual à palavra código (98). Se não, a unidade de decodificação por entropia continua para baixo para o próximo nível da árvore (100) e repete a comparação (98) para a palavra código de base associada com o próximo nível. Depois de prosseguir para o próximo nível (100), no entanto, a unidade de decodificação por entropia 52 determina se uma indicação de salto (102) é associada com o nível atual. Se for esse o caso, a unidade de decodif icação por entropia 52 rola o armazenador de seqüência de bits por um incremento fixo (104) antes de prosseguir para o próximo nivel (100). Em particular, a unidade de decodificação por entropia 52 pode rolar o armazenador de seqüência de bit por M bits de forma que a palavra código não seja perdida pela queda de M bits dianteiros. Se não houver qualquer indicação de salto (102), a unidade de decodificação por entropia 52 simplesmente prossegue para o próximo nivel (100). Em qualquer caso, a unidade de decodificação por
entropia 52 novamente compara a palavra código com a palavra código de base para o nivel atual (98) . Quando a unidade de decodificação por entropia 52 encontra um nivel no qual a palavra código de base que é inferior a ou igual à palavra código (98), a unidade de decodificação por entropia 52 determina o comprimento residual das palavras código de base no nivel respectivo (106) e rola a seqüência de bits pelo comprimento residual (108). A unidade de decodificação por entropia 52 então computa o símbolo associado com a palavra código (110) com base no desvio para o nível, e a diferença entre a palavra código de base e a palavra código sendo decodificada.
Com referência à árvore da figura 4, por exemplo, se a palavra código for 0110000000000000, então a palavra código truncada parcial com 8 bits dianteiros eliminados é 01100000. Nesse caso, a unidade de decodificação por entropia 52 identificará a palavra código de base parcial no nível 3 (00100000) como sendo inferior a ou igual à palavra código, e identificará um comprimento residual igual a 3. A unidade de codificação por entropia 52 rola a seqüência de bits 3 à frente para receber a próxima palavra código. Adicionalmente, a unidade de decodificação por entropia 52 computa o símbolo para a palavra código pela adição do desvio para o nivel 3 à diferença entre a palavra código no armazenador de seqüência de bits e a palavra código de base para o nível. Por exemplo, a unidade de decodificação por entropia 52 computa um código como desvio[3]=12 mais a palavra código 01100000-00100000, que é equivalente a 12 mais 2 = 14. Nesse caso, 14 é o índice do símbolo representado pelo código 011.
O método ilustrado na figura 11 pode levar vantagem de uma estrutura de dados muito compacta e eficiência de memória significativa, como descrito em outro local nessa descrição. Como resultado disso, pela implementação de tal método, a unidade de decodificação por entropia 52 pode apresentar a eficiência aumentada, incluindo o overhead de processamento reduzido, a utilização de memória reduzida, e a velocidade de processamento aumentada, todos os quais podem ser desejáveis para um dispositivo de decodificação de vídeo, ou outros dispositivos configurados para a descompressão e decodificação de dados.
A figura 12 é um fluxograma ilustrando um método para a construção de códigos de bloco adaptativos de acordo com o segundo aspecto geral dessa descrição. O método da figura 12 pode ser implementado dentro de um processador dentro de um dispositivo de codificação ou um processador de finalidade geral para suportar a construção direta eficiente dos códigos de bloco adaptativo. Como ilustrado na figura 12, o processador obtém um conjunto de palavras (112) a ser codificado. Uma estrutura de dados representando a estrutura de código resultante pode ser armazenada na memória dentro de um dispositivo de codificação, dispositivo de decodificação, ou ambos. As palavras podem ser blocos de códigos binários. Depois da determinação de ponderações das palavras (114), o processador designa os grupos de palavra código para as palavras com base nas ponderações (116) . Os grupos de palavra código incluem palavras código para as palavras de mesma ponderação ke podem abranger dois niveis adjacentes de uma árvore de codificação, por exemplo, como ilustrado na figura 6.
Como ilustrado adicionalmente na figura 12, o processador designa os subgrupos para as palavras nos mesmos grupos com base nos comprimentos das palavras (118). Em particular, um grupo pode incluir um primeiro subgrupo e um segundo subgrupo. 0 primeiro subgrupo contém uma ou mais palavras código possuindo o mesmo comprimento e o mesma ponderação. Da mesma forma, o segundo subgrupo contém uma ou palavras código possuindo o mesmo comprimento e o mesma ponderação. No entanto, o comprimento das palavras código no primeiro subgrupo é inferior ao comprimento das palavras código no segundo subgrupo. Dessa forma, cada subgrupo inclui palavras código do mesma ponderação e ao mesmo nivel na árvore de codificação.
0 processador identifica uma palavra código de base para cada subgrupo (120). A palavra código de base é a menor palavra código em um subgrupo. No exemplo da figura 6, a palavra código de base para o subgrupo 68a é 001. No entanto, o subgrupo 68a inclui adicionalmente as palavras código 010 e 011, em adição à palavra código de base igual a 001. Nesse exemplo, as palavras código em um subgrupo são ordenadas em termos de ordem lexicográfica das palavras que representam, de forma que os códigos possam ser prontamente e diretamente computados de acordo com uma quantidade relativamente de computação.
0 número de elementos no primeiro subgrupo de cada grupo pode ser utilizado para computar as palavras código. Para essa finalidade, o processador armazena o número de elementos no primeiro subgrupo de cada grupo (122) e também armazena um mapeamento de Índice de grupo (124), um mapeamento de comprimento de código de subgrupo (12 6) e um mapeamento de palavra código de base de subgrupo (128) . O mapeamento de índice de grupo pode identificar a posição de uma palavra código para uma palavra em um grupo no qual a palavra código reside. O mapeamento de comprimento de código de subgrupo pode identificar o comprimento dos códigos dentro de um subgrupo em particular. 0 mapeamento de palavra código de base de subgrupo pode identificar a palavra código de base associada com cada subgrupo. Em geral, um código pode ser construído a partir da palavra código de base para um subgrupo em particular de acordo com o índice da palavra dentro do grupo. A informação armazenada pode ser armazenada em uma estrutura de dados que pode ser acessada por um codificador, decodificador ou ambos.
A figura 13 é um fluxograma ilustrando um método de codificação de blocos utilizando códigos de comprimento variável construídos de acordo com o método da figura 2, e de, acordo com o segundo aspecto geral dessa descrição. 0 método da figura 13 pode ser implementado, por exemplo, dentro de uma unidade de codificação por entropia tal como a unidade de codificação por entropia 4 6 da figura 2. O método ilustrado na figura 13 pode ser realizado utilizando-se um algoritmo idêntico ou similar ao ilustrado na tabela 7. Como ilustrado na figura 13, para codificar uma determinada palavra, a unidade de codificação por entropia 4 6 obtém sua ponderação (130) e índice de grupo (132) . Utilizando a ponderação da palavra, a unidade de codificação por entropia 4 6 determina o índice de grupo para a palavra (132) dentro de uma árvore de codificação aplicável. O índice de grupo Ink (w) especifica o índice (posição) de uma palavra w em um grupo Wnk que armazena as palavras em uma ordem lexicográfica.
A unidade de codificação por entropia 4 6 compara o indice de grupo com o número de elementos nkno primeiro subgrupo do grupo no qual a palavra código para a palavra de entrada reside. Em particular, a unidade de codificação por entropia 4 6 determina se o índice de grupo é maior que ou igual ao número de elementos no primeiro subgrupo (134). Se for, a unidade de codificação por entropia 4 6 seleciona o segundo subgrupo (138), isso é, o subgrupo 1, no grupo, e decrementa o valor de índice de grupo (140). Em particular, o valor de índice de grupo é decrementado pelo número de elementos no primeiro subgrupo nk . Se o índice de grupo não for superior a ou igual ao número de elementos no primeiro subgrupo (134), a unidade de codificação por entropia 46 seleciona o primeiro subgrupo (136), isso é, o subgrupo 0. Cada subgrupo possui sua própria palavra código de base. A unidade de codificação por entropia 4 6 obtém a palavra código de base para o subgrupo selecionado (142) e computa a palavra código com base na soma da palavra código de base e o valor de índice de grupo (144).
Com referência à árvore de codificação ilustrativa da figura 6, como uma ilustração, se for considerado que a ponderação da palavra a ser codificada é igual a 2, o valor de índice de grupo é igual a 2, e o número de elementos no primeiro subgrupo é igual a 3, por exemplo, correspondente ao grupo nos níveis 3 e 4 da árvore de codificação. Nesse caso, a unidade de codificação por entropia 4 6 seleciona o primeiro subgrupo (subgrupo 0) visto que o valor de índice de grupo (2) é inferior ao número de elementos (3) no primeiro subgrupo. Como resultado disso, a palavra código de base é 001. Para codificar a palavra, a unidade de codificação por entropia 4 6 adiciona o valor de indice de grupo de 2 à palavra código de base de 001, resultando em uma palavra código igual a 011.
Para o mesmo grupo, se o valor de indice de grupo for igual a 3, a unidade de codificação por entropia 4 6 seleciona o segundo subgrupo (subgrupo 1) . No entanto, a unidade de codificação por entropia 4 6 seria decrementada pelo valor de indice de grupo pelo número nk de elementos no primeiro subgrupo (subgrupo 0) . Nesse caso, o valor de indice de grupo de 3 seria reduzido por 3 até zero, e a palavra código seria computada como a palavra código de base de 0001 para o segundo subgrupo mais o valor de indice de grupo de 0, resultando em uma palavra código de 0001.
Em adição à computação da palavra código para a palavra de entrada, a unidade de codificação por entropia 4 6 pode obter o comprimento dos códigos no subgrupo selecionado (146). No exemplo acima, para o subgrupo 0 no nivel 3, o comprimento dos códigos seria igual a 3. A unidade de codificação de entropia envia a palavra código computada e o comprimento de código de subgrupo para a seqüência de bits para armazenamento e/ou transmissão para outro dispositivo, tal como um dispositivo de decodificação incluindo uma unidade de decodificação por entropia tal como a unidade de decodificação por entropia 52.
A figura 14 é um diagrama de bloco ilustrando um método para a decodificação de códigos de comprimento variável construídos de acordo com os métodos da figura 12 e da figura 13, e de acordo com o segundo aspecto geral dessa descrição. O método ilustrado na figura 14 pode ser realizado utilizando-se um algoritmo idêntico ou similar ao ilustrado na tabela 8. Os códigos de comprimento variável podem ser recebidos de um dispositivo de codificação tal como um dispositivo de codificação incluindo a unidade de codificação por entropia 46. Os códigos de comprimento variável podem ser recebidos e decodificados pela unidade de decodificação por entropia 52. Como ilustrado na figura 14, a unidade de decodificação por entropia 52 recebe uma palavra código da seqüência de bits de entrada (150) e compara a palavra código a uma palavra código de base de subgrupo. Em particular, a unidade de decodificação por entropia 52 pode buscar uma árvore de codificação aplicável para identificar uma palavra código de base de subgrupo justificada para a esquerda que é inferior ou igual ao conteúdo da palavra código obtida a partir de um armazenamento de seqüência de bit (152) .
Se a palavra código de base de subgrupo em um subgrupo em um determinado nivel na árvore não for inferior a ou igual à palavra código (152), então a unidade de decodificação por entropia 52 prossegue para o próximo subgrupo no próximo nivel (154) na árvore e repete a comparação. Esse processo continua com base interativa desde que a palavra código de base permaneça maior do que a palavra código recebida da seqüência de bits, isso é, até que a unidade de decodificação por entropia 52 alcance um nivel no qual a palavra código de base de subgrupo seja inferior a ou igual à palavra código. Na comparação da palavra código com as palavras código de base, a unidade de decodificação por entropia 52 pode utilizar valores incrementados parciais das palavras código de base para uma redução adicional da memória de acordo com o primeiro aspecto dessa descrição. Em particular, um número de bits dianteiros pode ser eliminado para aperfeiçoar a eficiência da memória como descrito anteriormente.
Quando alcança m nivel da árvore de codificação no qual uma palavra código de base de subgrupo é inferior a ou igual à palavra código, a unidade de decodificação por entropia 52 determina o comprimento de código para o subgrupo (156) e rola a seqüência de bits por esse comprimento para saltar os bits decodificados e isolar a palavra código. A unidade de decodificação por entropia 52 pode determinar a posição da palavra código no subgrupo utilizando a palavra código de base (158). Por exemplo, a unidade de decodificação por entropia 52 pode subtrair a palavra código de seqüência de bits da palavra código de base para produzir a diferença de posição entre a palavra código e a palavra código de base.
Como um exemplo, com referência à árvore de codificação da figura 6, se a palavra código de entrada for 0110000000000000, a unidade de decodificação por entropia 52 identificará a palavra código de base 0010000000000000 como a palavra código de base de subgrupo mais superior que é inferior a ou igual à palavra código. Essa palavra código de base é associada com o primeiro subgrupo no grupo nos níveis 3 e 4. Depois da determinação do comprimento de código (3) do subgrupo associado com a palavra código de base, a unidade de decodificação por entropia 52 pode rolar a seqüência de bits para saltar os bits decodificados. A unidade de decodificação por entropia 52 pode determinar o índice de grupo da palavra código pela subtração da palavra código de base da palavra código da seqüência de bits. Nesse exemplo, 011 menos 001 é igual a 010, que produz um valor de índice de grupo igual a 2.
A unidade de decodificação por entropia 52 também pode determinar a ponderação da palavra código (160), por exemplo, com base no nível do subgrupo dentro da árvore de codificação. Adicionalmente, a unidade de decodificação por entropia 52 pode determinar o índice de subgrupo (162), isso é, o índice do subgrupo selecionado dentro da árvore de codificação. Utilizando a ponderação, posição e Índice de subgrupo, a unidade de decodificação por entropia 52 determina o índice de palavra (164), decodificando, assim, a palavra código da seqüência de bits para produzir a palavra representada pela palavra código. Novamente, em algumas implementações, o método de decodificação realizado pela unidade de decodificação por entropia 52 pode corresponder ao processo ilustrado na tabela 8.
Os versados na técnica compreenderão que a informação e os sinais podem ser representados utilizando- se qualquer uma dentre uma variedade de diferentes tecnologias e técnicas. Por exemplo, dados, instruções, comandos, informação, sinais, bits, símbolos e chips que podem ser referidos por toda a descrição acima podem ser representados por voltagens, correntes, ondas
eletromagnéticas, partículas ou campos magnéticos, partículas ou campos óticos, ou qualquer combinação dos mesmos.
Os versados na técnica apreciarão adicionalmente que os vários blocos lógicos, módulos, circuitos e etapas de algoritmo ilustrativos descritos com relação às modalidades descritas aqui podem ser implementados como hardware eletrônico, software de computador, ou combinações de ambos. Para se ilustrar claramente essa capacidade de intercâmbio de hardware e software, vários componentes, blocos, módulos, circuitos e etapas ilustrativos foram descritos acima geralmente em termos de sua funcionalidade. Se tal funcionalidade é implementada como hardware ou software depende da aplicação em particular e das restrições de desenho impostas ao sistema como um todo. Versados na técnica podem implementar a funcionalidade des crita de várias formas para cada aplicação em particular, mas tais decisões de implementação não devem ser interpretadas como responsáveis pelo distanciamento do escopo da presente descrição.
As técnicas descritas aqui podem ser implementadas em hardware, software, firmware ou qualquer combinação dos mesmos. Tais técnicas podem ser implementadas em qualquer um dentre uma variedade de dispositivos tal como computadores de finalidade geral, aparelhos de dispositivo de comunicação sem fio, ou dispositivos de circuito integrado possuindo múltiplos usos incluindo a aplicação em aparelhos de dispositivo de comunicação sem fio ou outros dispositivos. Quaisquer características descritas como módulos ou componentes podem ser implementadas em conjunto em um dispositivo lógico integrado ou separadamente como dispositivos lógicos discretos, porem interoperáveis. Se implementadas em software, as técnicas podem ser realizadas pelo menos em parte por um meio de armazenamento de dados legível por computador compreendendo o código de programa incluindo instruções que, quando executadas, realizam um ou mais dos métodos descritos acima. 0 meio de armazenamento de dados legível por computador pode formar parte de um produto de programa de computador. 0 meio legível por computador pode compreender uma memória de acesso randômico (RAM) tal como uma memória de acesso randômico dinâmica sincronizada (SDRAM), uma memória de leitura apenas (ROM), uma memória de acesso randômico não volátil (NVRAM), uma memória de leitura apenas programável e eletricamente eliminável (EEPROM), memória FLASH, mídia de armazenamento de dados magnética ou ótica, e similares. As técnicas podem ser adicionalmente ou alternativamente realizadas pelo menos em parte por um meio de comunicação legível por computador que porta ou comunica código de programa na forma de instruções ou estruturas de dados e que podem ser acessados, lidos e/ou executados por um computador, tal como sinais ou ondas propagados.
0 código de programa pode ser executado por um ou mais processadores, tal como um ou mais processadores de sinal digital (DSPs) , microprocessadores de finalidade geral, um circuito integrado especifico de aplicativo (ASIC), um conjunto lógico programável em campo (FPGA), ou outro conjunto de circuito lógico integrado ou discreto equivalente. Um processador de finalidade geral pode ser um microprocessador, mas na alternativa, o processador pode ser qualquer processador, controlador, microcontrolador ou máquina de estado convencional. Um processador pode ser implementado também como uma combinação de dispositivos de computação, por exemplo, uma combinação de um DSP e um microprocessador, uma pluralidade de microprocessadores, um ou mais microprocessadores em conjunto com um núcleo DSP, ou qualquer outra configuração similar. De acordo, o termo "processador", como utilizado aqui pode se referir a qualquer estrutura acima ou qualquer outra estrutura adequada para implementação das técnicas descritas aqui. Adicionalmente, em alguns aspectos, a funcionalidade descrita aqui pode ser fornecida dentro de módulos de software dedicados ou módulos de hardware configurados para codificação e decodificação, ou incorporados em um codificador/decodificador de video combinado (CODEC).
Várias modalidades da descrição foram descritas. Essas e outras modalidades estão dentro do escopo das reivindicações a seguir.

Claims (91)

1. Método, compreendendo: a geração de valores parciais de palavras código de base para niveis de uma árvore de codificação 5 especificando as palavras código de comprimento variável; a geração de um indicador de salto instruindo um decodificador a saltar um número de bits em uma seqüência de bits a ser decodificada antes de prosseguir para um nivel selecionado da árvore de codificação; e o armazenamento de valores parciais e do indicador de salto em uma estrutura de dados em uma memória.
2. Método, de acordo com a reivindicação 1, compreendendo adicionalmente: a geração de valores representados pelas palavras código de base; a geração de comprimentos de valores parciais das palavras código de base; e o armazenamento de valores e os comprimentos na estrutura de dados na memória.
3. Método, de acordo com a reivindicação 1, compreendendo adicionalmente o armazenamento da estrutura de dados em ma memória de um dentre um decodif icador de video, um decodif icador de imagem, e decodif icador de áudio, ou um decodificador de fala.
4. Método, de acordo com a reivindicação 1, no qual alguns dos niveis da árvore de codificação incluem as palavras código dispostas em uma ordem lexicográfica com relação aos valores representados pelas palavras código, e cada uma das palavras código de base é uma palavra código lexicográficamente menor em um nivel correspondente na árvore de codificação.
5. Método, de acordo com a reivindicação 1, no qual os valores parciais das palavras código de base representam a remoção de um número fixo de bits dianteiros das palavras código de base.
6. Método, de acordo com a reivindicação 5, no qual o indicador de salto instrui o decodificador a saltar o número fixo de bits na seqüência de bits de palavra código antes de prosseguir para o nivel selecionado da árvore de codificação.
7. Método, de acordo com a reivindicação 5, no qual o valor parcial da palavra código de base no nivel selecionado da árvore é baseado em uma mudança da palavra código de base pelo número fixo de bits, e onde, sem a mudança, a palavra código de base no nivel selecionado da árvore se estende pelo menos parcialmente para dentro do número removido de bits dianteiros.
8. Método, de acordo com a reivindicação 1, compreendendo adicionalmente a decodificação de uma das palavras código a partir da seqüência de bits de palavra código utilizando a estrutura de dados armazenada, onde a decodificação compreende: a busca dos niveis da árvore de codificação por um valor selecionado dentre os valores parciais das palavras código de base que é inferior a ou igual à palavra código da seqüência de bits de palavra código; o salto de um número de bits na seqüência de bits de palavra código antes de prosseguir par o nivel selecionado da árvore de codificação em resposta ao indicador de salto; a computação de um dentre uma pluralidade de valores correspondentes à palavra código com base em uma diferença entre um valor selecionado dentre os valores parciais das palavras código de base que é inferior a ou igual à palavra código e a palavra código e um indice do valor selecionado dos valores parciais das palavras código de base que é inferior a ou igual à palavra código.
9. Método, de acordo com a reivindicação 8, compreendendo adicionalmente a apresentação da saida para um usuário com base pelo menos em parte no valor computado.
10. Método, de acordo com a reivindicação 1, compreendendo adicionalmente a codificação de valores com as palavras código consistentes com a árvore de codificação, onde os valores representados pelas palavras código representam pelo menos um dentre dados de video, dados de imagem, dados de fala ou dados de áudio.
11. Dispositivo, compreendendo: meios para a geração de valores parciais de palavras código de base para niveis de uma árvore de codificação especificando as palavras código de comprimento variável; meios para gerar um indicador de salto instruindo um decodif icador a saltar um número de bits em uma seqüência de bits a ser decodificada antes de prosseguir para um nivel selecionado da árvore de codificação; e meios para armazenar os valores parciais e o indicador de salto em uma estrutura de dados em uma memória.
12. Dispositivo, de acordo com a reivindicação 11, compreendendo adicionalmente: meios para gerar os valores representados pelas palavras código de base; meios para gerar os comprimentos dos valores parciais das palavras código de base; e meios para armazenar os valores e os comprimentos na estrutura de dados na memória.
13. Dispositivo, de acordo com a reivindicação11, compreendendo adicionalmente meios para armazenar a estrutura de dados em uma memória de um dentre um decodificador de video, um decodificador de imagem, um decodificador de áudio ou um decodificador de fala.
14. Dispositivo, de acordo com a reivindicação11, no qual alguns dos níveis da árvore de codificação incluindo as palavras código dispostas em uma ordem lexicográfica com relação aos valores representados pelas palavras código, e cada uma das palavras código de base é uma palavra código lexicográficamente menor em um nivel correspondente na árvore de codificação.
15. Dispositivo, de acordo com a reivindicação11, no qual os valores parciais das palavras código de base representam a remoção de um número fixo de bits dianteiros das palavras código de base.
16. Dispositivo, de acordo com a reivindicação15, no qual o indicador de salto instrui o decodificador a saltar o número fixo de bits na seqüência de bits da palavra código antes de prosseguir para o nível selecionado da árvore de codificação.
17. Dispositivo, de acordo com a reivindicação15,, no qual o valor parcial da palavra código de base no nível selecionado da árvore é baseado em uma mudança da palavra código de base pelo número fixo de bits, e onde, sem a mudança, a palavra código de base no nível selecionado da árvore se estende pelo menos parcialmente para dentro do numero removido de bits dianteiros.
18. Dispositivo, de acordo com a reivindicação 11, compreendendo adicionalmente meios para decodificar uma das palavras código da seqüência de bits da palavra código utilizando a estrutura de dados armazenada, onde os meios para decodificação compreendem: meios para buscar os níveis da árvore de codificação por um valor selecionado dentre os valores parciais das palavras código de base que é inferior a ou igual à palavra código da seqüência de bits de palavra código; meios para saltar um número de bits na seqüência de bits da palavra código antes de prosseguir para o nível selecionado da árvore de codificação em resposta ao indicador de salto; meios para computar um dentre uma pluralidade de valores correspondentes à palavra código com base em uma diferença entre o valor selecionado dos valores parciais das palavras código de base que é inferior a ou igual à palavra código e a palavra código e um índice do valor selecionado dentre os valores parciais das palavras código de base que é inferior a ou igual à palavra código.
19. Dispositivo, de acordo com a reivindicação 18, compreendendo adicionalmente meios para apresentação da saída para um usuário com base pelo menos em parte no valor computador.
20. Dispositivo, de acordo com a reivindicação 11,, compreendendo adicionalmente meios para codificar os valores com as palavras código consistentes com a árvore de codificação, onde os valores representados pelas palavras código representam pelo menos um dentre dados de vídeo, dados de imagem, dados de fala ou dados de áudio.
21. Meio legível por computador tangível, compreendendo uma estrutura de dados armazenando valores parciais das palavras código de base para os níveis de uma árvore de codificação especificando as palavras código de comprimento variável, e um indicador de salto instruindo um decodificador a saltar um número de bits em uma seqüência de bits a ser decodificada antes de prosseguir para um nível selecionado da árvore de codificação.
22. Meio legível por computador, de acordo com a reivindicação 21, no qual a estrutura de dados armazena adicionalmente valores representados pelas palavras código de base, e comprimentos de valores parciais das palavras código de base.
23. Meio legível por computador, de acordo com a reivindicação 21, no qual alguns níveis da árvore de codificação incluem palavras código dispostas em uma ordem lexicográfica com relação aos valores representados pelas palavras código, e cada uma das palavras código de base é uma palavra código lexicográficamente menor em um nível correspondente na árvore de codificação.
24. Meio legível por computador, de acordo com a reivindicação 21, no qual os valores parciais das palavras código de base representam a remoção de um número fixo de bits dianteiros das palavras código de base.
25. Meio legível por computador, de acordo com a reivindicação 24, no qual o indicador de salto instrui o decodificador a saltar o número fixo de bits na seqüência de bits da palavra código antes de prosseguir para o nível selecionado da árvore de codificação.
26. Meio legível por computador, de acordo com a reivindicação 24, no qual o valor parcial da palavra código de base. no nível selecionado da árvore é baseado em uma mudança da palavra código de base pelo número fixo de bits, e onde, sem a mudança, a palavra código de base no nível selecionado da árvore se estende pelo menos parcialmente para dentro do número removido de bits dianteiros.
27. Meio legível por computador, de acordo com a reivindicação 24, no qual os valores representados pelas palavras código representam pelo menos um dentre os dados de vídeo, dados de imagem, dados de fala ou dados de áudio.
28. Dispositivo, compreendendo: um processador configurado para gerar valores parciais das palavras código de base para níveis de uma árvore de codificação especificando as palavras código de comprimento variável, e gerar um indicador de salto instruindo um decodificador a saltar um número de bits em uma seqüência de bits a ser decodificada antes de prosseguir para um nível selecionado da árvore de codificação; e uma memória que armazena os valores parciais e o indicador de salto em uma estrutura de dados.
29. Dispositivo, de acordo com a reivindicação 28, no qual o processador gera valores representados pelas palavras código de base, e gera comprimentos de valores parciais das palavras código de base e a memória armazena os valores e comprimentos na estrutura de dados.
30. Dispositivo, de acordo com a reivindicação 28, no qual o dispositivo compreende um dentre um decodificador de vídeo, um decodificador de imagem, um decodificador de áudio, ou um decodificador de fala.
31. Dispositivo, de acordo com a reivindicação 28, no qual alguns dos níveis da árvore de codificação incluem palavras código dispostas em uma ordem lexicográfica com relação aos valores representados pelas palavras código, e cada uma das palavras código de base é uma palavra código lexicograficamente menor em um nível correspondente na árvore de codificação.
32. Dispositivo, de acordo com a reivindicação 28, no qual os valores parciais das palavras código de base representam a remoção de um número fixo de bits dianteiros das palavras código de base.
33. Dispositivo, de acordo com a reivindicação32, no qual o indicador de salto instrui o decodificador a saltar o número fixo de bits na seqüência de bits da palavra código antes de prosseguir para o nivel selecionado da árvore de codificação.
34. Dispositivo, de acordo com a reivindicação32, no qual o valor parcial da palavra código de base no nivel selecionado da árvore é baseado em uma mudança da palavra código de base pelo número fixo de bits, e onde, sem a mudança, a palavra código de base no nivel selecionado da árvore se estende pelo menos parcialmente para dentro do número removido de bits dianteiros.
35. Dispositivo, de acordo com a reivindicação28, compreendendo adicionalmente um decodificador que decodifica uma das palavras código da seqüência de bits de palavra código utilizando a estrutura de dados armazenada, onde o decodificador: busca os niveis da árvore de codificação por um valor selecionado dentre os valores parciais das palavras código de base que seja inferior a ou igual à palavra código da seqüência de bits de palavra código; pula um número de bits na seqüência de bits da palavra código antes de prosseguir para o nivel selecionado de árvore de codificação em resposta ao indicador de salto; computa um dentre uma pluralidade de valores correspondentes à palavra código com base em uma diferença entre o valor selecionado dentre os valores parciais das palavras código de base que é inferior a ou igual à palavra código e a palavra código e um indice dos valores selecionados dentre os valores parciais das palavras código de base que sejam inferiores a ou iguais à palavra código.
36. Dispositivo, de acordo com a reivindicação35, compreendendo adicionalmente um dispositivo de saida que apresenta a saida para um usuário com base pelo menos em parte no valor computado.
37. Dispositivo, de acordo com a reivindicação28, no qual os valores representados pelas palavras código representam pelo menos um dentre dados de video, dados de imagem, dados de fala ou dados de áudio.
38. Dispositivo, de acordo com a reivindicação28, compreendendo adicionalmente um receptor sem fio que recebe as palavras código de um codificador pela comunicação sem fio.
39. Dispositivo de decodificação, compreendendo: uma memória armazenando uma estrutura de dados compreendendo valores parciais de palavras código de base para niveis de uma árvore de codificação especificando palavras código de comprimento variável, e um indicador de salto instruindo um decodificador a saltar um número de bits em uma seqüência de bits a ser decodificada antes de prosseguir para um nivel selecionado de árvore de codificação; e um decodif icador que acessa a memória para decodificar uma das palavras código a partir da seqüência de bits com base nos valores parciais e o indicador de salto:na estrutura de dados armazenada.
40. Dispositivo, de acordo com a reivindicação39, no qual o decodificador: buscar os niveis da árvore de codificação por um valor selecionado dentre os valores parciais das palavras código de base que seja inferior a ou igual à palavra código da seqüência de bits de palavra código; saltar um número de bits no fluxo de palavras códigos antes de proceder para o nivel de árvore de codificação selecionado em resposta ao indicador de salto e; computar um dentre uma pluralidade de valores correspondentes à palavra código com base em uma diferença entre o valor selecionado dentre os valores parciais das palavras código de base que seja inferior a ou igual à palavra código e a palavra código e um índice dos valores selecionados dentre os valores parciais das palavras código de base que sejam inferiores a ou iguais à palavra código.
41. Dispositivo, de acordo com a reivindicação 40, compreendendo adicionalmente um dispositivo de saída que representa a saída para um usuário com base pelo menos em parte no valor computado.
42. Dispositivo, de acordo com a reivindicação 41, no qual a estrutura de dados compreende valores representados pelas palavras código de base, e comprimentos dos valores parciais das palavras código de base.
43. Dispositivo, de acordo com a reivindicação 39, no qual o dispositivo de decodificação compreende um dispositivo de decodificação de multimídia e o decodificador inclui um dentre um decodificador de vídeo, um decodificador de imagem, um decodificador de áudio ou um decodificador de fala.
44. Dispositivo, de acordo com a reivindicação 39, no qual alguns dos níveis da árvore de codificação incluem palavras código dispostas em uma ordem lexicográfica com relação aos valores representados pelas palavras código, e cada uma das palavras código de base é uma palavra código lexicográficamente menor em um nível correspondente na árvore de codificação.
45. Dispositivo, de acordo com a reivindicação 39, no qual os valores parciais das palavras código de base representam a remoção de um número fixo de bits dianteiros das palavras código de base.
46. Dispositivo, de acordo com a reivindicação45, no qual o decodificador pula o número fixo de bits na seqüência de bits da palavra código em resposta ao indicador de salto antes de prosseguir para o nivel selecionado da árvore de codificação.
47. Dispositivo, de acordo com a reivindicação45, no qual o valor parcial da palavra código de base no nivel selecionado da árvore é baseado em uma mudança da palavra código de base pelo número fixo de bits, e onde, sem a mudança, a palavra código de base no nivel selecionado da árvore se estende pelo menos parcialmente para dentro do número removido de bits dianteiros.
48. Dispositivo, de acordo com a reivindicação39, compreendendo adicionalmente um receptor para receber as palavras código de um codificador pela comunicação sem f io.
49. Método de decodificação, compreendendo: o acesso a uma estrutura de dados armazenada na memória, onde a estrutura de dados compreende valores parciais das palavras código de base para níveis de uma árvore de codificação especificando as palavras código de comprimento variável, e um indicador de salto instruindo um decodif icador a saltar um número de bits em uma seqüência de bits a ser decodificada antes de prosseguir para um nível selecionado da árvore de codificação; e a decodificação de uma das palavras código a partir da seqüência de bits com base nos valores parciais e o indicador de salto na estrutura de dados armazenada.
50. Método, de acordo com a reivindicação 49, no qual a decodificação,compreende: a busca nos níveis da árvore de codificação por um valor selecionado dentre os valores parciais das palavras código de base que seja inferior a ou igual à palavra código a partir da seqüência de bits de palavra código; o salto de um número de bits na seqüência de bits de palavra código antes de prosseguir para o nível selecionado da árvore de codificação em resposta ao indicador de salto; e a computação de uma pluralidade de valores correspondentes à palavra código com base em uma diferença entre o valor selecionado dentre os valores parciais das palavras código de base que é inferior a ou igual à palavra código e a palavra código e um índice dos valores selecionados dentre os valores parciais das palavras código de base que é inferior a ou igual à palavra código.
51. Método, de acordo com a reivindicação 49, compreendendo adicionalmente a apresentação da saída para um usuário com base pelo menos em parte no valor computado.
52. Método, de acordo com a reivindicação 49, no qual a estrutura de dados compreende os valores representados pelas palavras código de base e comprimentos dos valores parciais das palavras código de base.
53. Método, de acordo com a reivindicação 49, no qual a decodificação compreende a decodificação das palavras código para obtenção de valores representativos de pelo menos um dentre os dados de vídeo, dados de imagem, dados de áudio e dados de fala.
54. Método, de acordo com a reivindicação 4 9, no qual alguns dos níveis da árvore de codificação incluem palavras código dispostas em uma ordem lexicográfica com relação aos valores representados pelas palavras código, e cada uma das palavras código de base é uma palavra código lexicograficamente menor em um nivel correspondente na árvore de codificação.
55. Método, de acordo com a reivindicação 4 9, no qual os valores parciais das palavras código de base representam a remoção de um número fixo de bits dianteiros das palavras código de base.
56. Método, de acordo com a reivindicação 55, no qual o decodificador pula o número fixo de bits na seqüência de bits de palavra código em resposta ao indicador de salto antes de prosseguir para o nivel selecionado da árvore de codificação.
57. Método, de acordo com a reivindicação 55, no qual o valor parcial da palavra código de base no nivel selecionado da árvore é baseado em uma mudança da palavra código de . base pelo número fixo de bits, e onde, sem a mudança, a palavra código de base no nivel selecionado da árvore se estende pelo menos parcialmente para dentro do número removido de bits dianteiros.
58. Método, de acordo com a reivindicação 49, compreendendo adicionalmente o recebimento de palavras código de um codificador pela comunicação sem fio.
59. Dispositivo de decodificação, compreendendo: meios para armazenar uma estrutura de dados compreendendo valores parciais de palavras código de base para niveis de uma árvore de codificação especificando as palavras código de comprimento variável, e um indicador de salto instruindo um decodificador a saltar um número de bits em uma seqüência de bits a ser decodificada antes de prosseguir para um nivel selecionado da árvore de codificação; e meios para decodificar uma das palavras código da seqüência de bits com base nos valores parciais e o indicador de salto na estrutura de dados armazenada.
60. Dispositivo, de acordo com a reivindicação 59, no qual os meios de decodificação compreendem: meios para buscar os níveis da árvore de codificação por um valor selecionado dentre os valores parciais das palavras código de base que seja inferior a ou igual à palavra código da seqüência de bits da palavra código; meios para saltar um número de bits na seqüência de bits de palavra código antes de prosseguir para o nível selecionado da árvore de . codificação em resposta ao indicador de salto; e meios para computar um dentre uma pluralidade de valores correspondendo à palavra código com base em uma diferença entre o valor selecionado dentre os valores parciais das palavras código de base que é inferior a ou igual à palavra Codigoi e a palavra código e um índice do valor; selecionado dentre os valores parciais das palavras código de base que é inferior a ou igual à palavra código.
61. Dispositivo, de acordo com a reivindicação 59, compreendendo adicionalmente meios para apresentar a saída para um usuário com base pelo menos em parte no valor computado.
62. Dispositivo, de acordo com a reivindicação 59, . no, qual a estrutura de dados compreende valores representados pelas palavras código de base, e comprimentos dos valores parciais das palavras código de base.
63. Dispositivo, de acordo com a reivindicação 59, no qual os meios para decodif icação compreendem, meios para a decodificação das palavras código para obtenção de valores representativos de pelo menos um dentre os dados de vídeo, dados de imagem, dados de áudio e dados de fala.
64. Dispositivo, de acordo com a reivindicação 59, no qual alguns dos níveis da árvore de codificação incluem palavras código dispostas em uma ordem lexicográfica com relação aos valores representados pelas palavras código, e cada uma das palavras código de base é uma palavra código lexicograficamente menor em um nivel correspondente na árvore de codificação.
65. Dispositivo, de acordo com a reivindicação59, no qual os valores parciais das palavras código de base representam a remoção de um número fixo de bits dianteiros das palavras código de base.
66. Dispositivo, de acordo com a reivindicação65, no qual os meios para a decodif icação pula o número fixo de bits na seqüência de bits da palavra código em resposta ao indicador de salto antes de prosseguir para o nivel selecionado da árvore de codificação.
67. Dispositivo, de acordo com a reivindicação65, no qual o valor parcial da palavra código de base no nivel selecionado da árvore é baseado em uma mudança da palavra código de base pelo número fixo de bits, e onde, sem a mudança, a palavra código de base no nivel selecionado da árvore se estende pelo menos parcialmente para dentro do número removido de bits dianteiros.
68. Dispositivo, de acordo com a reivindicação59, compreendendo adicionalmente meios para receber as palavras código a partir de um codificador pela comunicação sem fio.
69. Meio legivel por computador tangível compreendendo instruções para fazer com que o processador: acesse uma estrutura de dados armazenada na memória, onde a estrutura de dados compreende valores parciais das palavras código de base para níveis de uma árvore de codificação especificando as palavras código de comprimento variável, e um indicador de salto instruindo um decodificador a saltar um número de bits em um seqüência de bits a ser decodificada antes de prosseguir para um nivel selecionado da árvore de codificação; e decodifique uma das palavras código a partir da seqüência de bits com base nos valores parciais e o indicador de salto na estrutura de dados armazenada.
70. Meio legivel por computador, de acordo com a reivindicação 69, no qual as instruções fazem com que o processador: busque os níveis da árvore de codificação por um valor selecionado dentre os valores parciais das palavras código de base que seja inferior a ou igual à palavra código a partir da seqüência de bits da palavra código, pule um número de bits na seqüência de bits de palavra código antes de prosseguir para o nível selecionado da árvore de codificação em resposta ao indicador de salto; e compute um dentre uma pluralidade de valores correspondentes à palavra código com base em uma diferença entre o valor selecionado dentre os valores parciais das palavras código de base que seja inferior a ou igual à palavra código e a palavra código e um índice do valor selecionado dentre os valores parciais das palavras código de base que seja inferior a ou igual à palavra código.
71. Meio legível por computador, de acordo com a reivindicação 69, compreendendo adicionalmente instruções para fazer com que o processador controle um dispositivo de saída para apresentar a saída para um usuário com base pelo menos em parte no valor computado.
72. Meio legível por computador, de acordo com a reivindicação 69, no qual a estrutura de dados compreende valores representados pelas palavras código de base, e comprimentos de valores parciais das palavras código de base.
73. Meio legivel por computador, de acordo com a reivindicação 69, no qual a instrução faz com que o processador decodifique as palavras código para obter valores representativos de pelo menos um dentre os dados de video, dados de imagem, dados de áudio e dados de fala.
74. Meio legivel por computador, de acordo com a reivindicação 69, no qual alguns dos niveis da árvore de codificação incluem palavras código dispostas em uma ordem lexicográfica com relação aos valores representados pelas palavras código, e cada uma das palavras código de base é uma palavra código lexicograficamente menor em um nivel correspondente na árvore de codificação.
75. Meio legivel por computador, de acordo com a reivindicação 69, no qual os valores parciais das palavras código de base representam a remoção de um número fixo de bits dianteiros das palavras código de base.
76. Meio legivel por computador, de acordo com a reivindicação 75, no qual as instruções fazem com que o processador pule o número fixo de bits na seqüência de bits de palavra código em resposta ao indicador de salto antes de prosseguir para o nivel selecionado da árvore de codificação.
77. Meio legivel por computador, de acordo com a reivindicação 75, no qual o valor parcial da palavra código de base no nivel selecionado da árvore é baseado em uma mudança da palavra código de base pelo número fixo de bits e onde sem a mudança a palavra código de base no nivel selecionado da árvore se estende pelo menos parcialmente para dentro do número removido dos bits dianteiros.
78. Aparelho de dispositivo de comunicação sem fio, compreendendo: uma memória armazenando uma estrutura de dados que compreende valores parciais das palavras código de base para os níveis de uma árvore de codificação especificando as palavras código de comprimento variável, e um indicador de salto instruindo um decodificador a saltar um número de bits em uma seqüência de bits a ser decodificada antes de prosseguir para um nível selecionado da árvore de codificação; um decodificador que acessa a memória para decodificar uma das palavras código a partir da seqüência de bits com base nos valores parciais e o indicador de salto na estrutura de dados armazenada; um receptor para receber as palavras código de um codificador pela comunicação sem fio; e um dispositivo de saída que representa a saída para um usuário com base pelo menos em parte nas palavras código decodificadas.
79. Aparelho, de acordo com a reivindicação 78, no qual o decodificador: busca os níveis da árvore de codificação por um valor selecionado dentre os valores parciais das palavras código de base que seja inferior a ou igual à palavra código da seqüência de bits de palavra código; pula um número de bits na seqüência de bits da palavra código antes de prosseguir para o nível selecionado da árvore de codificação em resposta ao indicador de salto; θ computa um dentre uma pluralidade de valores correspondentes à palavra código com base em uma diferença entre o valor selecionado dentre os valores parciais das palavras código de base que seja inferior a ou igual à palavra código e a palavra código e um índice do valor selecionado dentre os valores parciais das palavras código de base que seja inferior a ou igual à palavra código.
80. Aparelho, de acordo com a reivindicação 78, no qual a estrutura de dados compreende valores representados pelas palavras código de base, e comprimentos dos valores parciais das palavras código de base.
81. Aparelho, de acordo com a reivindicação 78, no qual o decodificador inclui um dentre um decodificador de video, um decodificador de imagem, um decodificador de áudio ou um decodificador de fala.
82. Aparelho, de acordo com a reivindicação 78, no qual alguns dos níveis da árvore de codificação inclui palavras de código dispostas em uma ordem lexicográfica com relação aos valores representados pelas palavras código, e cada uma das palavras código de base é uma palavra código lexicograficamente menor em um nível correspondente na árvore de codificação.
83. Aparelho, de acordo com a reivindicação 78, no qual os valores parciais das palavras código de base representam a remoção de um número fixo de bits dianteiros a partir das palavras código de base, onde o decodificador pula o número fixo de bits na seqüência de bits da palavra código em resposta ao indicador de salto antes de prosseguir para o nível selecionado da árvore de codificação.
84. Aparelho, de acordo com a reivindicação 83, no qual o valor parcial da palavra código de base no nível selecionado da árvore é baseado em uma mudança da palavra código de base pelo número fixo de bits, e onde, sem a mudança, a palavra código de base no nível selecionado da árvore se estende pelo menos parcialmente para dentro do número removido de bits dianteiros.
85. Dispositivo de circuito integrado, compreendendo: uma memória armazenando uma estrutura de dados que compreende valores parciais das palavras código de base para os niveis de uma árvore de codificação especificando palavras código de comprimento variável, e um indicador de salt o instruindo um decodificador a saltar um número de bits em uma seqüência de bits a ser decodificada antes de prosseguir para um nivel selecionado da árvore de codificação; e um decodificador que acessa a memória para decodificar uma das palavras código a partir da seqüência de bits com base nos valores parciais e no indicador de salto na estrutura de dados armazenada.
86. Dispositivo de circuito integrado, de acordo com a reivindicação 85, no qual o decodificador: busca os níveis da árvore de codificação por um valor selecionado dentre os valores parciais das palavras código de base que seja inferior a ou igual à palavra código da seqüência de bits de palavra código; pula um número de bits na seqüência de bits de palavra código antes de prosseguir para o nível selecionado da árvore de codificação em resposta ao indicador de salto; e computa um dentre uma pluralidade de valores correspondentes à palavra código com base em uma diferença entre o valor selecionado dos valores parciais das palavras código de base que seja inferior a ou igual à palavra código e a palavra código e um índice do valor selecionado dent re os valores parciais das palavras código de base que seja inferior a ou igual à palavra código.
87. Dispositivo de circuito integrado, de acordo com a reivindicação 85, no qual a estrutura de dados compreende valores representados pelas palavras código de base, e comprimentos dos valores parciais das palavras código de base.
88. Dispositivo de circuito integrado, de acordo com a reivindicação 85, no qual o decodificador inclui um dentre um decodificador de video, um decodificador de imagem, um decodificador de áudio ou um decodificador de fala.
89. Dispositivo de circuito integrado, de acordo com a reivindicação 85, no qual alguns dos niveis da árvore de codificação incluem palavras código dispostas em uma ordem lexicográfica com relação aos valores representados pelas palavras código, e cada uma das palavras código de base é uma palavra código lexicográficamente menor em um nivel correspondente na árvore de codificação.
90. Dispositivo de circuito integrado, de acordo com a reivindicação 85, no qual os valores parciais das palavras código de base representam a remoção de um número fixo de bits dianteiros das palavras código de base, onde o decodificador pula o número fixo de bits na seqüência de bits de palavra código em resposta ao indicador de salto antes de prosseguir para o nivel selecionado da árvore de codificação.
91. Dispositivo de circuito integrado, de acordo com a reivindicação 90, no qual o valor parcial da palavra código de base no nivel selecionado da árvore é baseado em uma mudança da palavra código de base pelo número fixo de bits, e onde, sem a mudança, a palavra código de base no nivel selecionado da árvore se estende pelo menos parcialmente para dentro do número removido de bits dianteiros.
BRPI0718618-5A 2006-11-14 2007-11-09 Codificação de memória eficiente de códigos de comprimento variável. BRPI0718618A2 (pt)

Applications Claiming Priority (7)

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
US11/840,362 US7545293B2 (en) 2006-11-14 2007-08-17 Memory efficient coding of variable length codes
PCT/US2007/084270 WO2008061008A2 (en) 2006-11-14 2007-11-09 Memory efficient coding of variable length codes

Publications (1)

Publication Number Publication Date
BRPI0718618A2 true BRPI0718618A2 (pt) 2014-01-07

Family

ID=39277954

Family Applications (1)

Application Number Title Priority Date Filing Date
BRPI0718618-5A BRPI0718618A2 (pt) 2006-11-14 2007-11-09 Codificação de memória eficiente de códigos de comprimento variável.

Country Status (12)

Country Link
US (1) US7545293B2 (pt)
EP (1) EP2092649B1 (pt)
JP (1) JP4897887B2 (pt)
KR (1) KR101108465B1 (pt)
CN (1) CN101578769B (pt)
AT (1) ATE494663T1 (pt)
BR (1) BRPI0718618A2 (pt)
CA (1) CA2668222C (pt)
DE (1) DE602007011811D1 (pt)
ES (1) ES2358551T3 (pt)
TW (1) TWI369136B (pt)
WO (1) WO2008061008A2 (pt)

Families Citing this family (47)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20070274385A1 (en) * 2006-05-26 2007-11-29 Zhongli He Method of increasing coding efficiency and reducing power consumption by on-line scene change detection while encoding inter-frame
WO2008027192A2 (en) * 2006-08-25 2008-03-06 Thomson Licensing Methods and apparatus for reduced resolution partitioning
DE102007043083A1 (de) * 2007-09-10 2009-03-12 Continental Automotive Gmbh Verfahren und Vorrichtung zum Codieren von Datenworten
US8228991B2 (en) * 2007-09-20 2012-07-24 Harmonic Inc. System and method for adaptive video compression motion compensation
US8126929B2 (en) * 2008-03-27 2012-02-28 International Business Machines Corporation Method and apparatus for encoding list of variable length structures to support bi-directional scans
KR20090129926A (ko) * 2008-06-13 2009-12-17 삼성전자주식회사 영상 부호화 방법 및 그 장치, 영상 복호화 방법 및 그 장치
WO2010027324A1 (en) * 2008-09-08 2010-03-11 Scalado Ab Method for indexing images and for reading an index of an image
US8379727B2 (en) * 2008-09-26 2013-02-19 General Instrument Corporation Method and apparatus for scalable motion estimation
US8671327B2 (en) 2008-09-28 2014-03-11 Sandisk Technologies Inc. Method and system for adaptive coding in flash memories
JP5537551B2 (ja) * 2008-09-28 2014-07-02 ラマト アット テル アビブ ユニバーシティ リミテッド フラッシュメモリにおける適応符号化用の方法およびシステム
US8004431B2 (en) * 2008-12-09 2011-08-23 Qualcomm Incorporated Fast parsing of variable-to-fixed-length codes
US20100303354A1 (en) * 2009-06-01 2010-12-02 Qualcomm Incorporated Efficient coding of probability distributions for image feature descriptors
US9078009B2 (en) 2010-02-19 2015-07-07 Skype Data compression for video utilizing non-translational motion information
US9609342B2 (en) 2010-02-19 2017-03-28 Skype Compression for frames of a video signal using selected candidate blocks
US9313526B2 (en) 2010-02-19 2016-04-12 Skype Data compression for video
US9819358B2 (en) * 2010-02-19 2017-11-14 Skype Entropy encoding based on observed frequency
US7990297B1 (en) * 2010-02-26 2011-08-02 Research In Motion Limited Encoding and decoding methods and devices employing dual codesets
CN101841705A (zh) * 2010-03-12 2010-09-22 西安电子科技大学 基于自适应模板的视频无损压缩方法
US8479082B2 (en) * 2010-04-07 2013-07-02 Indian Institute Of Technology Delhi Packet error correction in networks
CA2799763A1 (en) 2010-07-13 2012-01-19 Research In Motion Limited Methods and devices for data compression using context-based coding order
WO2012019297A1 (en) * 2010-07-28 2012-02-16 Research In Motion Limited Method and device for compression of binary sequences by grouping multiple symbols
US8625902B2 (en) 2010-07-30 2014-01-07 Qualcomm Incorporated Object recognition using incremental feature extraction
US8885704B2 (en) * 2010-10-01 2014-11-11 Qualcomm Incorporated Coding prediction modes in video coding
US9172963B2 (en) * 2010-11-01 2015-10-27 Qualcomm Incorporated Joint coding of syntax elements for video coding
US8634668B2 (en) * 2011-02-25 2014-01-21 Sony Corporation Method of compression of digital images using a fixed number of bits per block
WO2012122495A1 (en) * 2011-03-10 2012-09-13 Huawei Technologies Co., Ltd. Using multiple prediction sets to encode extended unified directional intra mode numbers for robustness
US20130121410A1 (en) * 2011-11-14 2013-05-16 Mediatek Inc. Method and Apparatus of Video Encoding with Partitioned Bitstream
RU2500073C1 (ru) * 2012-08-29 2013-11-27 Федеральное государственное унитарное предприятие "Центральный научно-исследовательский институт связи" (ФГУП ЦНИИС) Адаптивный декодер произведения кодов размерности 3d
US9860558B2 (en) 2012-09-28 2018-01-02 Intel Corporation Inter-layer intra mode prediction
KR102445274B1 (ko) * 2012-10-01 2022-09-20 지이 비디오 컴프레션, 엘엘씨 향상 레이어에서 변환 계수 블록들의 서브블록-기반 코딩을 이용한 스케일러블 비디오 코딩
US9491460B2 (en) * 2013-03-29 2016-11-08 Qualcomm Incorporated Bandwidth reduction for video coding prediction
US9626184B2 (en) 2013-06-28 2017-04-18 Intel Corporation Processors, methods, systems, and instructions to transcode variable length code points of unicode characters
US9337862B2 (en) * 2014-06-09 2016-05-10 Tidal Systems, Inc. VLSI efficient Huffman encoding apparatus and method
GB2530312B (en) * 2014-09-19 2016-09-14 Imagination Tech Ltd Data compression
EP3306924A1 (en) 2016-10-05 2018-04-11 Thomson Licensing Method and device for context-adaptive binary arithmetic coding a sequence of binary symbols representing a syntax element related to picture data
US10609421B2 (en) 2018-07-12 2020-03-31 Google Llc Context derivation for coefficient coding
US10547869B2 (en) 2017-12-08 2020-01-28 Google Llc Template-based entropy coding of quantized transform coefficients
US11275568B2 (en) 2019-01-14 2022-03-15 Microsoft Technology Licensing, Llc Generating a synchronous digital circuit from a source code construct defining a function call
US11106437B2 (en) * 2019-01-14 2021-08-31 Microsoft Technology Licensing, Llc Lookup table optimization for programming languages that target synchronous digital circuits
US11093682B2 (en) 2019-01-14 2021-08-17 Microsoft Technology Licensing, Llc Language and compiler that generate synchronous digital circuits that maintain thread execution order
US11144286B2 (en) 2019-01-14 2021-10-12 Microsoft Technology Licensing, Llc Generating synchronous digital circuits from source code constructs that map to circuit implementations
US11113176B2 (en) 2019-01-14 2021-09-07 Microsoft Technology Licensing, Llc Generating a debugging network for a synchronous digital circuit during compilation of program source code
US11362671B2 (en) * 2019-03-25 2022-06-14 Ariel Scientific Innovations Ltd. Systems and methods of data compression
US11070229B1 (en) * 2019-05-19 2021-07-20 Pliops Codeword generator
IL294187A (en) 2019-12-23 2022-08-01 Ariel Scient Innovations Ltd Methods and systems for information compression
EP4078957A4 (en) * 2020-02-12 2024-01-03 Google LLC MULTI-CONTEXT ENTROPIC CODING FOR GRAPH COMPRESSION
US11695965B1 (en) 2022-10-13 2023-07-04 Fraunhofer-Gesellschaft Zur Foerderung Der Angewandten Forschung E.V. Video coding using a coded picture buffer

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0311883A (ja) * 1989-06-09 1991-01-21 Hitachi Ltd 可変長符号の復号化方式とファクシミリ装置、および静止画像伝送システム
US5226082A (en) * 1992-07-02 1993-07-06 At&T Bell Laboratories Variable length decoder
US5400075A (en) * 1993-01-13 1995-03-21 Thomson Consumer Electronics, Inc. Adaptive variable length encoder/decoder
JP3220598B2 (ja) * 1994-08-31 2001-10-22 三菱電機株式会社 可変長符号テーブルおよび可変長符号化装置
KR100207428B1 (ko) 1996-05-14 1999-07-15 전주범 허프만 코드 변환에 적응적인 고속 가변장 복호화 장치 및 방법
US5696507A (en) * 1996-05-31 1997-12-09 Daewoo Electronics Co., Inc. Method and apparatus for decoding variable length code
US6188797B1 (en) * 1997-05-27 2001-02-13 Apple Computer, Inc. Decoder for programmable variable length data
JP2003273746A (ja) * 2002-03-18 2003-09-26 Mitsubishi Electric Corp 可変長符号復号装置
JP4197262B2 (ja) * 2002-03-27 2008-12-17 パナソニック株式会社 可変長符号化方法、可変長復号化方法、記憶媒体、可変長符号化装置、可変長復号化装置、及びビットストリーム

Also Published As

Publication number Publication date
JP2010509893A (ja) 2010-03-25
JP4897887B2 (ja) 2012-03-14
ES2358551T3 (es) 2011-05-11
TW200838323A (en) 2008-09-16
DE602007011811D1 (de) 2011-02-17
CN101578769B (zh) 2012-11-21
CA2668222C (en) 2011-11-29
KR101108465B1 (ko) 2012-04-12
TWI369136B (en) 2012-07-21
EP2092649B1 (en) 2011-01-05
WO2008061008A3 (en) 2008-07-10
ATE494663T1 (de) 2011-01-15
KR20090091167A (ko) 2009-08-26
CA2668222A1 (en) 2008-05-22
CN101578769A (zh) 2009-11-11
EP2092649A2 (en) 2009-08-26
WO2008061008A2 (en) 2008-05-22
US20080111721A1 (en) 2008-05-15
US7545293B2 (en) 2009-06-09

Similar Documents

Publication Publication Date Title
BRPI0718618A2 (pt) Codificação de memória eficiente de códigos de comprimento variável.
JP4897888B2 (ja) メモリ効率の良い(memoryefficient)適応形ブロックコーディング
JP5313362B2 (ja) 可変長固定長コードの高速パーシング
RU2426227C2 (ru) Кодирование кодов переменной длины с эффективным использованием памяти
JP2010509893A5 (pt)
JP2010509895A5 (pt)
JP6469652B2 (ja) ビデオコード化プロセスにおける係数レベルコード化のためのライスパラメータ更新
ES2844549T3 (es) Inicialización del parámetro de Rice para la codificación de niveles de coeficiente en un proceso de codificación de vídeo
US7626522B2 (en) Data compression using variable-to-fixed length codes
BR112016021138B1 (pt) Codificação de nível de coeficiente em um processo de codificação de vídeo

Legal Events

Date Code Title Description
B06A Patent application procedure suspended [chapter 6.1 patent gazette]
B11B Dismissal acc. art. 36, par 1 of ipl - no reply within 90 days to fullfil the necessary requirements