BRPI0712984A2 - redução de erros durante computação de transformada de coseno discreta inversa - Google Patents

redução de erros durante computação de transformada de coseno discreta inversa Download PDF

Info

Publication number
BRPI0712984A2
BRPI0712984A2 BRPI0712984-0A BRPI0712984A BRPI0712984A2 BR PI0712984 A2 BRPI0712984 A2 BR PI0712984A2 BR PI0712984 A BRPI0712984 A BR PI0712984A BR PI0712984 A2 BRPI0712984 A2 BR PI0712984A2
Authority
BR
Brazil
Prior art keywords
coefficient
coefficients
butterfly
matrix
module
Prior art date
Application number
BRPI0712984-0A
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
Family has litigation
First worldwide family litigation filed litigation Critical https://patents.darts-ip.com/?family=38624012&utm_source=google_patent&utm_medium=platform_link&utm_campaign=public_patent_search&patent=BRPI0712984(A2) "Global patent litigation dataset” by Darts-ip is licensed under a Creative Commons Attribution 4.0 International License.
Application filed by Qualcomm Inc filed Critical Qualcomm Inc
Publication of BRPI0712984A2 publication Critical patent/BRPI0712984A2/pt

Links

Classifications

    • 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/625Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using transform coding using discrete cosine transform [DCT]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations
    • G06F17/14Fourier, Walsh or analogous domain transformations, e.g. Laplace, Hilbert, Karhunen-Loeve, transforms
    • G06F17/147Discrete orthonormal transforms, e.g. discrete cosine transform, discrete sine transform, and variations therefrom, e.g. modified discrete cosine transform, integer transforms approximating the discrete cosine transform
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/42Methods or arrangements for coding, decoding, compressing or decompressing digital video signals characterised by implementation details or hardware specially adapted for video compression or decompression, e.g. dedicated software implementation
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/44Decoders specially adapted therefor, e.g. video decoders which are asymmetric with respect to the encoder
    • H04N19/45Decoders specially adapted therefor, e.g. video decoders which are asymmetric with respect to the encoder performing compensation of the inverse transform mismatch, e.g. Inverse Discrete Cosine Transform [IDCT] mismatch
    • 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
    • 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

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Multimedia (AREA)
  • Signal Processing (AREA)
  • Mathematical Physics (AREA)
  • Discrete Mathematics (AREA)
  • Pure & Applied Mathematics (AREA)
  • Mathematical Optimization (AREA)
  • Mathematical Analysis (AREA)
  • Computational Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Data Mining & Analysis (AREA)
  • Software Systems (AREA)
  • Databases & Information Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Algebra (AREA)
  • Complex Calculations (AREA)
  • Compression Or Coding Systems Of Tv Signals (AREA)
  • Compression, Expansion, Code Conversion, And Decoders (AREA)
  • Compression Of Band Width Or Redundancy In Fax (AREA)

Abstract

REDUçãO DE ERROS DURANTE COMPUTAçãO DE TRANSFORMADA DE COSENO DISCRETA INVERSA. Técnicas são descritas para reduzir erros de arredondamento durante computação da transformada de coseno discreta usando cálculos de ponto-fixo. De acordo com estas técnicas, uma transformada de coseno discreta inversa de um vetor de coeficientes é calculada usando uma série de operações de estrutura de borboleta em um número de pontos fixos. A seguir, um valor de polarização de ponto médio e um valor de polarização suplementar são adicionados a um coeficiente DC da matriz de coeficientes escalonados. A seguir, uma transformada de coseno discreta inversa é aplicada a matriz resultante dos coeficientes escalonados. Valores na matriz resultante são então deslocados para a direita de forma a derivar uma matriz de valores de componente de pixel. Como descrito aqui, a adição do valor de polarização suplementar para o coeficiente DC reduz erros de arredondamento atribuídos a este deslocamento para a direita. Como resultado, uma versão final de um arquivo de mídia digital descompactado usando estas técnicas pode quase remontar uma versão original de um arquivo de mídia digital.

Description

"REDUÇÃO DE ERROS DURANTE COMPUTAÇÃO DE TRANSFORMADA DE
COSENO DISCRETA INVERSA".
Este pedido reivindica o beneficio do Pedido Provisório U.S. No. 60/816.697, depositado em 26 de junho de 2006, Pedido Provisório U.S. No. 60/841.362, depositado em 30 de agosto de 2006, Pedido Provisório U.S. No. 60/847.194, depositado em 25 de setembro de 2006, Pedido Provisório U.S. No. 60/829.669, depositado em 16 de outubro de 2006, e Pedido Provisório U.S. No. 60/869.530, depositado em 11 de dezembro de 2006, todo conteúdo de tais é ijncorporado por meio deste em referência.
Campo da Invenção
A invenção refere-se a gráficos de computador e multimídia, e particularmente à compressão de gráficos, imagens, e informação de vídeo.
Descrição da Técnica Anterior
Muitos dos padrões existentes de codificação de imagem e vídeo empregam técnicas de compressão a fim de permitir imagens e vídeo em alta resolução para serem armazenados ou transmitidos como arquivos ou fluxos de dados relativamente compactos. Tais padrões de codificação incluem o JPEG (Joint Photographic Experts Group), MPEG (Moving Pictures Experts Group)-1, MPEG-2, MPEG-4 parte 2, H.261, H.263, e outros padrões de codificação de imagem ou vídeo.
De acordo com muitos destes padrões, os quadros de vídeo são comprimidos usando codificação "espacial". Estes quadros podem ser quadros originais (isto é, quadros- i) ou podem ser quadros residuais gerados por um processo de codificação temporal que use compensação de movimento. Durante a codificação espacial, os quadros quebram-se em blocos de tamanhos iguais de pixels. Por exemplo, um quadro não-comprimido pode quebrar-se em um conjunto de blocos 8x8 de pixels. Para cada bloco de pixels, os componentes de pixel são separados em matrizes de valores de componentes de pixel. Por exemplo, cada bloco de pixels pode ser dividido em uma matriz de valores de componentes de pixel de Y, em uma matriz de valores de componentes de pixel de U, e em uma matriz de valores de componentes de pixel de V. Neste exemplo, os valores de componentes de pixel de Y indicam que valores de luminância e valores de componentes de pixel de U e de V representam valores do crominância.
Além disso, durante a codificação espacial, uma transformada de co-seno discreta direta (FDCT) é aplicada a cada matriz de valores de componentes de pixel em um quadro que esteja sendo codificado. Uma FDCT de uma dimensão ideal é definida por:
<formula>formula see original document page 3</formula>
onde s é o arranjo de N valores originais, t é o arranjo de N valores transformados, e os coeficientes c são dados por:
<formula>formula see original document page 3</formula>
para 1 ≤ k ≤ N-I.
Uma FDCT de duas dimensões ideal é definida pela
fórmula:
<formula>formula see original document page 3</formula>
onde s é o arranjo de N valores originais, t é o arranjo de N valores transformados, e c(i,j) é dado por c(i,j)=c(i)c(j), e com c(k) definido como no caso de uma dimensão. Uma matriz de coeficientes é produzida quando o bloco de valores de componentes de pixel é transformado usando a FDCT. Esta matriz de coeficientes pode então ser quantizada e codificada usando, por exemplo, códigos Huffman ou aritméticos. Um fluxo de bits de video representa o resultado combinado de realizar este processo em todos os blocos de valores de componentes de pixel em uma série dos quadros de video em uma série não-comprimida de quadros de video.
Um quadro de video não-comprimido pode ser derivado a partir de um fluxo de bits de video invertendo este processo. Em particular, a cada matriz de coeficientes no fluxo de bits é descomprimida e os valores descomprimidos são dequantizados a fim de derivar matrizes de coeficientes transformados. Uma transformada de co-seno discreta inversa ("IDCT") é aplicada então a cada matriz de coeficientes transformados a fim de derivar matrizes de valores* de componente de pixel. Uma IDCT de uma dimensão ideal é definida por:
<formula>formula see original document page 4</formula>
onde s é o arranjo de N valores originais, t é o arranjo de N valores transformados, e os coeficientes c são dados por:
C(0) = √1/N, c(k) = √2/n
para 1 ≤ k ≤ N-1.
Uma IDCT bidimensional ideal é definida pela fórmula:
<formula>formula see original document page 4</formula> As matrizes resultantes de valores de componentes de pixel são remontadas então em blocos de pixels e estes blocos de pixels são remontados para formar um quadro decodificado. Se o quadro decodificado é um quadro-i, o quadro é decodificado agora completamente. Entretanto, se o quadro não-comprimido é um quadro preditivo ou bi-preditivo, o quadro decodificado é meramente um quadro residual decodificado. Um quadro terminado é gerado construindo um quadro reconstruído usando vetores de movimento associados com o quadro decodificado e então adicionando o quadro reconstruído ao quadro residual decodificado.
Sob circunstâncias ideais, nenhuma informação é perdida usando uma FDCT para codificar ou uma IDCT para decodificar um bloco de valores de componentes de pixel. Conseqüentemente, sob estas circunstâncias ideais, uma versão decodificada de um quadro de vídeo é idêntica à versão original do quadro de vídeo. Entretanto, computar uma FDCT ou uma IDCT pode ser computacionalmente difícil porque a computação de FDCTs e IDCTs envolvem o uso de números reais e de números significativos de operações de multiplicação. Por este motivo, os números reais usados em FDCTs e IDCTs são aproximados freqüentemente usando números limitados da precisão. Erros de arredondamento resultam de usar números limitados de precisão para representar valores de número real. Além disso, quantização e dequantização podem contribuir erros adicionais.
Os erros no processo de compressão e de descompressão podem resultar em diferenças significativas entre o quadro não-comprimido original e o quadro não- comprimido final. Por exemplo, cores no quadro não- comprimido final podem diferir de cores no quadro não- comprimido original. Além disso, erros causados por uma má combinação entre a implementação do codificador das IDCTs e a implementação do decodificador da IDCT podem acumular durante a codificação e decodificação das seqüências de quadros previstos. Estes erros acumulados são referidos geralmente como "variação de IDCT".
Resumo da Invenção
Técnicas são descritas para aproximar computação de uma transformada de co-seno discreta inversa usando cálculos de ponto fixo. De acordo com estas técnicas, as matrizes de coeficientes escalonados são geradas multiplicando coeficientes nas matrizes de coeficientes codificados por fatores de escala. Em seguida, as matrizes de coeficientes polarizados são geradas adicionando os valores de polarização de ponto médio e valores de polarização suplementares aos coeficientes das matrizes de coeficientes escalonados. A aritmética de ponto fixo é usada então para aplicar uma transformada às matrizes resultantes de coeficientes polarizados. Os valores nas matrizes resultantes são então deslocados a direita a fim de derivar matrizes de valores de componentes de pixel. As matrizes de valores de componentes de pixel são combinadas então para criar matrizes de pixels. As matrizes de pixels geradas por estas técnicas assemelham-se muito a matrizes de pixels descomprimidas usando a transformada de co-seno discreta inversa ("IDCT") ideal.
Em um aspecto, um método compreende usando uma série de operações de estrutura de borboleta (butterfly) em números de ponto fixo para aplicar uma transformada a um vetor de coeficientes de fonte a fim de gerar um vetor de coeficientes transformados. Os coeficientes transformados no vetor de coeficientes transformados são aproximações de valores que seriam produzidos transformando o vetor de coeficientes de fonte usando uma transformada de co-seno discreta inversa ideal. 0 método também compreende fazer com que uma unidade de apresentação de mídia emita os sinais audíveis ou visíveis baseados em coeficientes transformados no vetor de coeficientes transformados. As diferenças entre os resultados gerados por uma das operações de estrutura de borboleta e os resultados que seriam gerados por uma operação de estrutura de borboleta equivalente usando aritmética de precisão ilimitada são centradas em torno de zero e as diferenças positivas e as diferenças negativas são de magnitudes aproximadamente iguais.
Em um outro aspecto, um dispositivo compreende um módulo de transformada inversa que usa uma série de operações de estrutura de borboleta em números de ponto fixo para aplicar uma transformada a um vetor de coeficientes de fonte a fim de gerar um vetor de coeficientes transformados. Os coeficientes transformados no vetor de coeficientes transformados são aproximações de valores que seriam produzidos transformando o vetor de coeficientes de fonte usando uma transformada de co-seno discreta inversa ideal. Uma unidade de apresentação de mídia é capaz de apresentar os sinais audíveis ou visíveis baseados em coeficientes transformados no vetor de coeficientes transformados. As diferenças entre os resultados gerados por uma das operações de estrutura de borboleta e os resultados que seriam gerados por uma operação de estrutura de borboleta equivalente usando aritmética de precisão ilimitada são centradas em torno de zero e as diferenças positivas e as diferenças negativas são de magnitudes aproximadamente iguais.
Em um outro aspecto, um dispositivo compreende meios para usar uma série de operações de estrutura de borboleta em números de ponto fixo para aplicar uma transformada a um vetor de coeficientes de fonte a fim de calcular um vetor de coeficientes transformados. Os coeficientes transformados no vetor de coeficientes transformados são aproximações de valores que seriam produzidos transformando o vetor de coeficientes de fonte usando uma transformada de co-seno discreta inversa ideal. Uma unidade de apresentação de mídia é capaz de apresentar sinais audíveis ou visíveis baseados nos coeficientes transformados no vetor de coeficientes transformados. As diferenças entre os resultados gerados por uma das operações de estrutura de borboleta e os resultados que seriam gerados por uma operação de estrutura de borboleta equivalente usando aritmética de precisão ilimitada são centradas em torno de zero e as diferenças positivas e as diferenças negativas são de magnitudes aproximadamente iguais.
Em um outro aspecto, um meio legível por computador compreende instruções. Quando executadas, as instruções fazem com que um processador use uma série de operações de estrutura de borboleta em números de ponto fixo para aplicar uma transformada a um vetor de coeficientes a fim de gerar um vetor de coeficientes transformados. Os coeficientes transformados no vetor de coeficientes transformados são aproximações de valores que seriam produzidos transformando o vetor de coeficientes de fonte que usam uma transformada de co-seno discreta inversa ideal. As instruções também fazem com o processador faça com que uma unidade de apresentação de mídia emita os sinais audíveis ou visíveis baseados em valores transformados no vetor de valores transformados. As diferenças entre os resultados gerados por uma das operações de estrutura de borboleta e os resultados que seriam gerados por uma operação de estrutura de borboleta equivalente usando aritmética de precisão ilimitada são centradas em torno de zero e as diferenças positivas e as diferenças negativas são de magnitudes aproximadamente iguais.
Em alguns casos, o meio legível por computador pode fazer parte de um produto de programa de computador, que possa ser vendido aos fabricantes e/ou ser usado em um dispositivo. O produto de programa de computador pode incluir o meio legível por computador, e em alguns casos, pode também incluir materiais de empacotamento.
Os detalhes de um ou mais exemplos são demonstrados nos desenhos que os acompanham e na descrição abaixo. Outros recursos, objetos e vantagens da invenção serão aparentes a partir da descrição e desenhos, e a partir das reivindicações.
Breve Descrição das Figuras
FIG. 1 é um diagrama de blocos que ilustra um dispositivo exemplar que codifica e decodifica arquivos de mídia.
FIG. 2 é um diagrama de blocos que ilustra detalhes exemplares de um módulo de codificação.
FIG. 3 é um diagrama de blocos que ilustra detalhes exemplares de um módulo de decodificação.
FIG. 4 é um fluxograma que ilustra uma operação exemplar do módulo de codificação.
FIG. 5 é um fluxograma que ilustra uma operação exemplar do módulo de decodificação.
FIG. 6 é um diagrama de blocos que ilustra detalhes exemplares de um módulo de transformada de co-seno discreta inversa ("IDCT").
FIG. 7 é um fluxograma que ilustra uma operação exemplar do módulo IDCT. FIG. 8 é um diagrama de blocos que ilustra detalhes exemplares de um módulo de transformada de co-seno discreta direta ("FDCT").
FIG. 9 é um fluxograma que ilustra uma operação exemplar do módulo FDCT.
FIG. 10 é um diagrama de fluxo que ilustra uma primeira transformada exemplar de uma dimensão.
FIG. 11 é um diagrama de fluxo que ilustra uma segunda transformada exemplar de uma dimensão.
FIG. 12 é um diagrama de fluxo que ilustra uma transformada exemplar de uma dimensão escalonada usada pelo módulo IDCT.
Descrição Detalhada da Invenção
A FIG. 1 é um diagrama de blocos que ilustra um dispositivo exemplar 2 que codifica e decodifica arquivos de midia. O dispositivo 2 pode compreender um computador pessoal, um rádiotelefone móvel, um servidor, uma aparelhagem de rede, um computador integrado em um veiculo, uma plataforma de videogame, um dispositivo de videogame portátil, uma estação de trabalho de computador, um quiosque de computador, sinalização digital, um computador mainframe, um set-top box de televisão, um telefone de rede, um assistente digital pessoal, uma plataforma de videogame, um tocador de midia móvel, um tocador de midia local, projetor de video digital, um tocador de midia pessoal (por exemplo, um iPod) , ou um outro tipo de dispositivo eletrônico.
O dispositivo 2 pode incluir uma fonte de midia 4 para gerar dados de midia. A fonte de midia 4 pode compreender uma câmera fotográfica de imagens ou de video digital para capturar dados de imagem. A fonte de midia 4 pode ser montada no dispositivo 2 ou pode ser anexada ao dispositivo 2 como um dispositivo periférico. A fonte de mídia 4 pode também compreender um microfone para gravar dados de áudio. A fonte de mídia 4 pode fornecer dados de mídia a um processador 6. O processador 6 pode compreender um processador de sinal digital ("DSP"), um microprocessador, ou algum outro tipo de circuito integrado.
Quando o processador 6 recebe dados de mídia da fonte de mídia 4, um módulo de codificação 8 pode codificar os dados de mídia. 0 módulo de codificação 8 pode compreender o software executado pelo processador 6. Alternativamente, o módulo de codificação 8 pode compreender o hardware especializado dentro do processador 6 que codifica os dados de mídia. Em ainda outra alternativa, o módulo de codificação 8 pode compreender qualquer combinação de software e hardware para codificar os dados de mídia.
O módulo de codificação 8 pode armazenar os dados de mídia codificados em um repositório de mídia 10. 0 repositório de mídia 10 pode compreender memória Flash, memória de acesso aleatório, um drive de disco rígido, ou algum outro tipo de unidade de armazenamento de dados volátil ou não-volátil.
Um módulo de decodificação 12 pode recuperar dados de mídia codificados a partir de repositório de mídia 10. O módulo de decodif icação 12 pode compreender o software executado pelo processador 6. Alternativamente, o módulo de decodificação 12 pode compreender hardware especializado dentro do processador 6 que decodifica os dados de mídia codificados. Em ainda outra alternativa, módulo de decodificação 12 pode compreender uma combinação de software e hardware que colaboram para decodificar os dados de mídia codificados. Um acionador de apresentação 13 no dispositivo 2 faz com que uma unidade de apresentação de midia 14 apresente os dados de midia decodificados pelo módulo de decodificação 12. Por exemplo, a unidade de apresentação de midia 14 pode compreender um monitor de computador que apresenta dados de midia de imagem ou video. Em um outro exemplo, a unidade de apresentação de midia 14 pode compreender um dispositivo de saida de áudio (por exemplo, um alto-falante) que apresenta dados de áudio de midia. A unidade de apresentação de midia 14 pode ser integrada no dispositivo 2 ou pode ser conectada através de um link cabeado ou sem fio ao dispositivo 2 como um dispositivo periférico. O acionador de apresentação 13 pode compreender um acionador de dispositivo ou outro software, uma unidade de hardware ou firmware, ou algum outro mecanismo que faz com que a unidade de apresentação de midia 14 apresente dados de midia.
O dispositivo 2 pode também compreender uma interface de rede 16. A interface de rede 16 pode facilitar uma comunicação entre o dispositivo 2 e uma rede e computador através de um link cabeado ou sem fio. Por exemplo, a interface de rede 16 pode facilitar uma comunicação entre o dispositivo 2 e uma rede de telefonia móvel. O dispositivo 2 pode receber arquivos de midia através da interface de rede 16. Por exemplo, o dispositivo 2 pode receber fotografias, videoclips, streaming de video (por exemplo, televisão, de videoconferência, filmes), clipes de áudio (por exemplo, ringtones, músicas, arquivos MP3), streaming de áudio (por exemplo, estações de rádio digitais, chamadas de voz, etc.) através da interface de rede 16. Quando a interface de rede 16 recebe um fluxo de bits de arquivo de midia ou video, a interface de rede 16 pode armazenar o fluxo de bits de arquivo de mídia ou vídeo no repositório de mídia 10.
Um sinal de vídeo pode ser descrito em termos de uma seqüência da figuras, que incluem quadros (uma figura inteiro), ou campos (por exemplo, uma figura que compreenda linhas ímpares ou pares de um quadro). Ademais, cada quadro ou campo pode incluir duas ou mais fatias, ou sub-partes do quadro ou do campo. Como usado aqui, sozinho ou em combinação com outras palavras, o termo "quadro" pode referir uma figura, um quadro, um campo ou uma fatia desses.
Quando o módulo de codificação 8 codifica uma série de quadros de vídeo, o módulo de codificação 8 pode começar selecionando um dos quadros de vídeo para ser "quadros-i." Por exemplo, o módulo de codificação 8 pode selecionar cada oitavo quadro como um quadro-i. Os Quadros- i são quadros que não referenciam outros quadros. Após ter selecionado os quadros-i, o módulo de codificação 8 usa a "codificação espacial" para codificar os quadros-i. Além disso, o módulo de codificação 8 pode usar a "codificação temporal" para codificar os quadros restantes.
Para usar a codificação espacial para codificar um quadro, o módulo de codificação 8 pode quebrar os dados de quadro em blocos de pixels. Por exemplo, o módulo de codificação 8 pode quebrar os dados de quadro em blocos de pixels que são oito pixels de largura e de oito pixels de altura (isto é, cada bloco de pixels contém 64 pixels).O módulo de codificação 8 pode então separar valores de componentes de pixel dos pixels em cada bloco de pixels em matrizes separadas de valores de componentes de pixel. Os valores de componentes de pixel de um pixel são os valores que caracterizam a aparência do pixel. Por exemplo, cada pixel pode especificar um valor de componentes de pixel de Y, um valor de componentes de pixel de Cr, e um valor de componentes de pixel de Cb. 0 valor de componentes de pixel de Y indica a luminância do pixel, o valor de componentes de pixel de Cr indica a crominância vermelha do pixel, e o valor de componentes de pixel de Cb indica a crominância azul do pixel. Neste exemplo, quando o módulo de codificação 8 separa os valores de componentes de pixel de um bloco de pixels, o módulo de codificação 8 pode obter uma matriz de valores de componentes de pixel de Y, uma matriz de valores de componentes de pixel de Cr, e uma matriz de valores de componentes de pixel de Cb.
Após separar os valores de componentes de pixel em matrizes de valores de componentes de pixel, o módulo de codificação 8 gera uma matriz de coeficientes transformados para cada uma das matrizes de valores de componentes de pixel. O módulo de codificação 8 pode gerar uma matriz de coeficientes transformados para uma matriz de valores de componentes de pixel primeiramente gerando uma matriz de coeficientes ajustados por valores de componentes de pixel deslocando a esquerda em uma matriz de valores de componentes de pixel. O módulo de codificação 8 usa então a aritmética de ponto fixo para aplicar repetidamente uma transformada de uma dimensão à matriz de coeficientes ajustados, gerando desse modo uma matriz de coeficientes. Em algumas implementações, o módulo de codificação 8 pode então gerar a matriz de coeficientes transformados escalonando a matriz de coeficientes transformados por um conjunto de fatores de escala. Cada um destes fatores de escala é um valor inteiro. Os fatores de escala foram selecionados de tal maneira que os fatores dentro da transformada de uma dimensão podem ser aproximados usando números racionais simples. Nas implementações que não usam escalonamento, a matriz de coeficientes gerada aplicando a transformada é a matriz de coeficientes transformados.
Cada coeficiente na matriz de coeficientes transformados aproxima um valor correspondente em uma matriz de valores que seriam produzidos aplicando uma transformada de co-seno discreta direta bidimensional ideal ("FDCT") à matriz de coeficientes codificados. Uma FDCT de uma dimensão ideal é definida por:
<formula>formula see original document page 15</formula>
onde s é o arranjo de N valores originais, t é o arranjo de N valores transformados, e os coeficientes c são dados por:
<formula>formula see original document page 15</formula>
para 1< k < N-I.
Uma FDCT bidimensional ideal é definida pela fórmula:
<formula>formula see original document page 15</formula>
onde s é o arranjo de N valores originais, t é o arranjo de N valores transformados, e c(i,j) é dado por c(i,j)=c(i)c(j), e com c(k) definido como no caso de uma dimensão.
Após derivar uma matriz de coeficientes transformados, o módulo de codificação 8 gera uma matriz de coeficientes quantizados quantizando os coeficientes na matriz de coeficientes transformados. Quantizar os coeficientes transformados pode reduzir a quantidade de informação associada com os coeficientes de alta freqüência na matriz de coeficientes transformados. Após ter gerado a matriz de coeficientes quantizados, o módulo de codificação 8 pode aplicar um esquema de codificação de entropia à matriz de coeficientes quantizados. Por exemplo, o módulo de codificação 8 pode aplicar um esquema de codificação Huffman aos coeficientes quantizados na matriz de coeficientes. Quando o módulo de codificação 8 aplica o esquema de codificação de entropia a cada uma das matrizes de coeficientes quantizados, o módulo de codificação 8 pode emitir as matrizes codificadas como parte de um fluxo de bits de video.
Para usar codificação temporal para codificar um quadro, o módulo de codificação 8 pode dividir o quadro em "macroblocos". Dependendo do padrão de codificação usado, estes macroblocos podem ser de tamanho fixo ou variável e podem ser sobrepostos ou não-sobrepostos. Por exemplo, cada macrobloco pode ser um bloco de pixels 16x16. Para cada macrobloco no quadro, o módulo de codificação 8 pode tentar identificar um macrobloco de fonte em um ou mais quadros de referência. Dependendo do padrão de codificação, os quadros de referência podem ser quadros-i, quadros preditivos, ou quadros bi-preditivos. Se o módulo de codificação 8 pode identificar um macrobloco de fonte em um quadro de referência, o módulo de codificação 8 grava um vetor de movimento para o macrobloco. O vetor de movimento inclui um valor de χ que indica o deslocamento horizontal do macrobloco relativo ao macrobloco de fonte identificado e a um valor de y que indica o deslocamento vertical do macrobloco relativo ao macrobloco de fonte identificado. Se o módulo de codificação 8 é incapaz de identificar um macrobloco de fonte para o macrobloco, o módulo de codificação 8 não pode ser exigido para gravar um vetor de movimento para o macrobloco. Em seguida, o módulo de codificação 8 gera um quadro "reconstruído". 0 quadro reconstruído contém o quadro que resultaria de mover os macroblocos dos quadros de referência de acordo com os vetores de movimento gravados para o quadro atual. Após gerar o quadro reconstruído, o módulo de codificação 8 subtrai valores de componentes de pixel em cada pixel do quadro reconstruído dos valores de componentes de pixel correspondentes em pixels correspondentes do quadro atual, tendo por resultado um quadro "residual". 0 módulo de codificação 8 pode então usar um esquema de codificação de entropia para comprimir os vetores de movimento para os macroblocos do quadro atual. Em adição, o módulo de codificação 8 usa a técnica de codificação espacial descrita acima para comprimir o quadro residual.
O módulo de decodificação 12 pode realizar um processo similar como o módulo de codificação 8, mas em reverso. Por exemplo, a fim de realizar um processo espacial de decodificação, o módulo de decodificação 12 pode aplicar um esquema de decodificação de entropia a cada matriz codificada de coeficientes quantizados em um fluxo de bits vídeo codificado. O módulo de decodificação 12 pode então dequantizar coeficientes em cada matriz de coeficientes quantizados, gerando desse modo uma matriz de coeficientes dequantizados para cada matriz de coeficientes quantizados. Para cada matriz de coeficientes quantizados, o módulo de decodif icação 12 gera uma matriz de coeficientes escalonados escalonando a matriz de coeficientes quantizados.
Após ter gerado a matriz de coeficientes escalonados, o módulo de decodificação 12 gera uma matriz de coeficientes polarizados adicionando um valor de polarização de ponto médio e um valor de polarização suplementar ao coeficiente DC da matriz. O coeficiente DC da matriz é um coeficiente que é igual ao valor médio dos outros coeficientes na matriz. Tipicamente, o coeficiente DC é o coeficiente no canto esquerdo superior da matriz. Como descrito em detalhe abaixo, a adição dos valores de polarização ao coeficiente DC pode reduzir erros de arredondamento quando o módulo de decodificação 12 desloca a direita valores produzidos aplicando a fatoração da transformada de co-seno discreta inversa a cada linha e coluna da matriz. Estes erros de arredondamento podem ser atribuíveis ao fato de que estes deslocamentos a direita são substitutos para operações de divisão computacionalmente mais caras e que as operações de deslocamento a direita na aritmética de ponto fixo não produzem sempre os mesmos resultados que operações de divisão.
Depois que o módulo de decodif icação 12 gera a matriz de coeficientes polarizados, o módulo de decodificação 12 usa a aritmética de ponto fixo para gerar uma matriz de coeficientes transformados para a matriz de coeficientes polarizados. O módulo de decodificação 12 gera a matriz de coeficientes transformados repetidamente aplicando uma transformada de uma dimensão à matriz de coeficientes polarizados. Por exemplo, o módulo de decodificação 12 pode gerar uma matriz de coeficientes intermediários aplicando a transformada de uma dimensão a cada vetor de linha da matriz de coeficientes polarizados. Neste exemplo, o módulo de decodif icação 12 pode então gerar a matriz de coeficientes transformados aplicando a transformada de uma dimensão a cada vetor de coluna na matriz de coeficientes intermediários.
O módulo de decodif icação 12 pode aplicar esta transformada de uma dimensão usando uma série de "operações de estrutura de borboleta". Geralmente, uma "operação de estrutura de borboleta" refere-se a uma operação em que um primeiro valor intermediário é produzido multiplicando um primeiro valor de entrada por uma primeira constante, um segundo valor intermediário é produzido multiplicando o primeiro valor de entrada por uma segunda constante, um terceiro valor intermediário é produzido multiplicando um segundo valor de entrada pela primeira constante, um guarto valor intermediário é produzido multiplicando o segundo valor de entrada pela segunda constante, um primeiro valor de saída é produzido adicionando o primeiro valor intermediário e o terceiro valor intermediário, e um segundo valor de saída é produzido adicionando o segundo valor intermediário e o negativo do quarto valor intermediário. Em uma operação de borboleta, as constantes podem ser qualquer número racional ou irracional, incluindo um. As operações de estrutura de borboleta exemplar são mostradas nas transformadas ilustradas nos exemplos das figuras 10, 11, e 12.
Nos sistemas que têm números limitados de bits disponíveis para representar números, pode ser pouco prático realizar multiplicações por constantes irracionais nas operações de estrutura de borboleta. Por este motivo, o módulo de decodificação 12 pode aproximar multiplicações por constantes irracionais multiplicando valores pelas frações racionais que aproximam as constantes irracionais. A fim de multiplicar eficientemente um valor por uma fração racional, o módulo de decodificação 12 pode multiplicar o valor pelo numerador da fração racional e então deslocar a direita os valores resultantes pelo Iog2 do denominador da fração racional. Como mencionado acima, operações de deslocamento a direita podem causar erros de arredondamento porque operações de deslocamento a direita na aritmética de ponto fixo não produzem sempre os resultados que são iguais às operações de divisão correspondentes. Como explicado em detalhe abaixo, o módulo de decodificação 12 pode usar numeradores negativos em algumas das frações racionais a fim de reduzir erros de arredondamento. 0 uso de numeradores negativos pode prevenir a necessidade de adicionar os valores de polarização de ponto médio antes dos valores de deslocamento a direita. Isto pode ser vantajoso porque adicionar os valores de polarização de ponto médio pode adicionar a complexidade desnecessária à aplicação da transformada de co-seno discreta inversa.
Quando o módulo de decodificação 12 gerou a matriz de coeficientes transformados, o módulo de decodificação 12 gera uma matriz de coeficientes ajustados pelo deslocamento a direita de cada coeficiente na matriz de coeficientes transformados por um número de posições iguais ao número de bits adicionados aplicando a transformada mais o número de bits adicionados pelo escalonamento dos coeficientes da matriz de coeficientes dequantizados. O módulo de decodificação 12 pode então gerar uma matriz de coeficientes de corte (clipped) ao cortar os coeficientes na matriz de coeficientes ajustados. Cortar os coeficientes na matriz de coeficientes ajustados modifica os coeficientes ajustados tais que estejam dentro da faixa permitida para um valor de componentes de pixel. Portanto, a matriz de coeficientes cortados pode ser caracterizada como uma matriz de valores de componentes de pixel.
Após gerar a matriz de valores de componentes de pixel, o módulo de decodif icação 12 pode gerar um bloco de pixels combinando a matriz de valores de componentes de pixel com as matrizes que armazenam outros valores de componentes de pixel para o bloco de pixels. Em seguida, o módulo de decodificação 12 pode combinar blocos de pixels em um quadro de video.
A fim de decodificar um quadro preditivo, o módulo de decodificação 12 pode usar a técnica espacial de decodificação descrita acima para decodificar as matrizes de coeficientes quantizados na imagem residual para o quadro preditivo. Além disso, o módulo de decodificação 12 pode usar o esquema de decodif icação de entropia para decodificar os vetores de movimento do quadro preditivo. Em seguida, o módulo de decodificação 12 pode gerar um quadro reconstruído ao "mover" macroblocos dos quadros de referência do quadro preditivo de acordo com os vetores de movimento. Após gerar o quadro reconstruído, o módulo de decodificação 12 adiciona valores de componentes de pixel em cada pixel do quadro residual decodificado aos valores de componentes de pixel correspondentes em pixels correspondentes do quadro reconstruído. 0 resultado desta adição é o quadro preditivo reconstruído.
As técnicas descritas nesta revelação podem fornecer diversas vantagens. Por exemplo, a redução de erros de arredondamento durante a computação de transformada de co-seno discreta e transformada de co-seno discreta inversa pode reduzir os erros visíveis em dados de imagem e pode reduzir erros audíveis em dados de áudio. Além disso, porque estas técnicas podem se aplicar aos cálculos de ponto fixo, estas técnicas podem ser aplicadas em dispositivos menores, menos complexos, tais como telefones móveis, assistentes digitais pessoais, e reprodutores multimídia pessoais. Em particular, as técnicas podem ser aplicadas utilizando números de ponto fixo que possuem um número muito limitado de bits em suas parcelas de mantissa (por exemplo, três bits) enquanto ainda cumprem com as exigências de precisão especificadas pelo IEEE (Institute of Electrical and Electronics Engineers) padrão 1180, o conteúdo inteiro deste é incorporado aqui em referência. Além disso, estas técnicas podem ser aplicadas a formatos que incluem as recomendações H.2 61, H.263, H.264, T.81 (JPEG) do ITU-T (International Telecommunication Union Standardization Sector), assim como os formatos de midia MPEG (Moving Pictures Experts Group)- 1, MPEG-2, e MPEG-4 parte 2 MEC/ISO (International Organization for Standardization).
A FIG. 2 é um diagrama de blocos que ilustra detalhes exemplares do módulo de codificação 8. 0 módulo de codificação 8 pode compreender um conjunto de "módulos". Estes módulos podem compreender subconjuntos de instruções de software do módulo de codificação 8. Alternativamente, estes módulos podem compreender hardware de propósito especial. Em uma outra alternativa, estes módulos podem compreender instruções de software e hardware de propósito especial.
Como ilustrado no exemplo da FIG. 2, o módulo de codificação 8 inclui um módulo de controle de quadro 20 que controla se o módulo de codificação 8 processa um quadro de video como um quadro-i, um quadro preditivo, ou um quadro bi-preditivo. Por exemplo, quando o módulo de codificação 8 recebe um quadro de video, o módulo de controle de quadro 20 pode determinar se um flag de fluxo de bits associado com o quadro de video indica que o quadro é um quadro-i, um quadro preditivo, ou um quadro bi-preditivo. Se o módulo de controle de quadro 20 determina que o flag de fluxo de bits indica que o quadro é um quadro-i, o módulo de controle de quadro 20 pode fazer com que o quadro de video seja processado por um conjunto de módulos que realizam imediatamente a codificação espacial no quadro de video. Por outro lado, se o módulo de controle de quadro 20 determina que o quadro é um quadro preditivo ou um quadro bi-preditivo, o módulo de controle de quadro 20 pode fazer com que o quadro de vídeo seja processado por um conjunto de módulos que realizam a codificação temporal.
O módulo de codificação 8 inclui uma série de módulos para aplicar a codificação espacial aos quadros de vídeo. Estes módulos incluem um módulo divisor de bloco 22, um módulo de extração de componente 24, um módulo de transformada direta 26, um módulo de quantização 28, e um módulo de codificação de entropia 30. O módulo divisor de bloco 22 pode receber quadros de vídeo não-codifiçados a partir da fonte de mídia 4, interface de rede 16, ou outra fonte. Quando o módulo divisor de bloco 22 recebe um quadro de vídeo não-codifiçado, o módulo divisor de bloco 22 pode separar o quadro em blocos de pixels. O módulo divisor de bloco 22 pode fornecer blocos de pixels a um módulo de extração de componente 24.
Quando o módulo da extração componente 24 recebe um bloco de pixels, o módulo de extração de componente 24 pode converter valores de componentes de pixel de cada pixel em um formato diferente de cor. Por exemplo, o módulo de extração de componente 24 pode converter cada pixel de um formato de cor Vermelho-Verde-Azul (RGB) ao formato de cor YCrCb. Após converter os pixels no bloco ao formato diferente de cor, o módulo de extração de componente 24 pode separar os valores de componentes de pixel dos pixels no bloco em matrizes de valores de componentes de pixel. Por exemplo, o módulo de extração de componente 24 pode extrair uma matriz de valores de Y, uma matriz de valores de Cr, e uma matriz de valores de Cb de um bloco de pixels. Os valores de Y especificam o brilho de pixels, os valores de Cr especificam a crominância vermelho dos pixels, e os valores de Cb especificam a crominância azul dos pixels. Quando o módulo de extração de componente 24 extraiu as matrizes de valores de componentes de pixel, o módulo de extração de componente 24 pode fornecer cada uma das matrizes separadamente a um módulo de transformada direta 26.
Quando o módulo de transformada direta 2 6 recebe uma matriz de valores de componentes de pixel, o módulo de transformada direta 26 gera uma matriz de coeficientes transformados. Cada coeficiente nesta matriz de coeficientes escalonados aproxima um coeficiente que é produzido usando uma transformada de co-seno discreta direta ideal para transformar a matriz de valores de componentes de pixel.
O módulo de transformada direta 26 usa aritmética de ponto fixo para aplicar uma transformada de uma dimensão às matrizes de valores de componentes de pixel. Usar a aritmética de ponto fixo pode ser vantajosa em algumas circunstâncias. Por exemplo, dispositivos menores, tais como telefones móveis não puderam incluir uma unidade de ponto flutuante exigida para executar a aritmética de ponto flutuante. O módulo de transformada direta 26 pode começar um processo de gerar a matriz de coeficientes escalonados deslocando a esquerda cada um dos valores de componentes de pixel. Por exemplo, o módulo de transformada direta 26 pode gerar uma matriz de coeficientes ajustados deslocando a esquerda cada um dos valores de componentes de pixel por um número de bits de precisão (isto é, o número de bits de mantissa) de representações de ponto fixo de números que o módulo de transformada direta 26 usa quando aplica a transformada de uma dimensão mais um número de bits de precisão removidos escalonando os coeficientes transformados que resultam da aplicação da transformada. Após deslocamento a esquerda de cada um dos valores de componentes de pixel, o módulo de transformada direta 26 pode realizar a transformada em cada um dos vetores de linha da matriz de coeficientes ajustados. Realizando uma transformada de co-seno discreta em cada um dos vetores de linha da matriz de coeficientes ajustados gera uma matriz de coeficientes intermediários. Em seguida, o módulo de transformada direta 26 pode realizar a transformada em cada um dos vetores de coluna da matriz de coeficientes intermediários. Realizar a transformada em cada um dos vetores de coluna da matriz de coeficientes intermediários resulta em uma matriz de coeficientes transformados.
Após gerar a matriz de coeficientes transformados, o módulo de transformada direta 26 escalona coeficientes transformados em posições diferentes na matriz de coeficientes transformados por fatores de escala diferentes. Como descrito abaixo, o módulo de decodificação 12 pode usar os recíprocos destes fatores de escala na aplicação de uma transformada inversa. Quando o módulo de transformada direta 26 terminou escalonamento dos coeficientes transformados pelos fatores de escala, o módulo de transformada direta 26 pode emitir a matriz resultante de coeficientes escalonados ao módulo de quantização 28.
Quando o módulo de quantização 28 recebe uma matriz de coeficientes do módulo de transformada direta 26, o módulo de quantização 28 pode quantizar os coeficientes escalonados. O módulo de quantização 28 pode quantizar os coeficientes escalonados em uma variedade de maneiras dependendo do padrão de codificação que está sendo empregado. Por exemplo, de acordo com o padrão MPEG-4 parte 2, o módulo de quantização 28 pode usar a seguinte matriz de quantização para quantizar coeficientes em uma matriz de coeficientes escalonados para um quadro-i: <table>table see original document page 26</column></row><table>
Além disso, neste exemplo, o módulo de quantização 28 pode usar a seguinte matriz de quantização para quantizar coeficientes em uma matriz de coeficientes escalonados para um quadro preditivo ou bi-preditivo:
<table>table see original document page 26</column></row><table>
Depois que o módulo de quantização 28 gera uma matriz de coeficientes quantizados, o módulo de codificação de entropia 30 pode comprimir a matriz de coeficientes quantizados usando um esquema de codificação de entropia. Para comprimir a matriz de coeficientes quantizados usando um esquema de codificação de entropia, o módulo de codificação de entropia 30 pode organizar os coeficientes quantizados em um vetor tomando um padrão de ziguezague dos coeficientes. Ou seja, o módulo de codificação de entropia 30 pode arranjar todos os coeficientes quantizados na matriz bidimensional de coeficientes quantizados em um vetor de uma dimensão de coeficientes quantizados em um previsível. 0 módulo de codificação de entropia 30 pode então aplicar um esquema de codificação de entropia, tal como a codificação Huffman ou a codificação aritmética, ao vetor de coeficientes quantizados.
O módulo de codificação 8 também inclui um ou mais módulos para realizar a codificação temporal dos quadros de vídeo. Como ilustrado no exemplo da FIG. 2, o módulo de codificação 8 inclui um módulo de estimação de movimento 32, um módulo de geração de quadro reconstruído 34, e um módulo de geração de quadro residual 36. O módulo de estimação de movimento 32 tenta identificar um macrobloco de fonte em uma imagem de referência para cada macrobloco em um quadro de vídeo atual. O módulo de estimação de movimento 32 pode tentar identificar um macrobloco de fonte para um macrobloco no quadro atual procurando pelos macroblocos na imagem de referência que contêm pixels similares como o macrobloco. 0 módulo de estimação de movimento 32 pode procurar áreas de tamanhos diferentes de acordo com padrões de codificação diferentes de modo a identificar macrobloco de fonte para um macrobloco no quadro atual. Por exemplo, o módulo de estimação de movimento 32 pode procurar por um macrobloco de fonte dentro de uma área que tem 32 pixels de largura por 32 pixels de altura, com o macrobloco atual no centro da área de busca. Quando o módulo de estimação de movimento 32 identifica um macrobloco de fonte para um macrobloco no quadro atual, o módulo de estimação de movimento 32 calcula um vetor de movimento para o macrobloco no quadro atual. O vetor de movimento para o macrobloco no quadro atual especifica um valor χ que indica a diferença na posição horizontal entre o macrobloco de fonte identificado e o macrobloco do quadro atual. Depois que o módulo de estimação de movimento 32 calculou um vetor de movimento ou foi incapaz de identificar um macrobloco de fonte para cada macrobloco no quadro atual, o módulo de estimação de movimento 32 pode fornecer os vetores de movimento calculados para o quadro atual ao modulo de geração de quadro reconstruído 34.
O módulo de geração de quadro reconstruído 34 pode usar os vetores de movimento e os quadros de referência para gerar um quadro reconstruído. 0 módulo de geração de quadro reconstruído 34 pode gerar o quadro reconstruído aplicando os vetores de movimento para cada macrobloco no quadro atual aos macroblocos de fonte nos quadros de referência. De fato, o módulo de geração de quadro reconstruído 34 cria um quadro em que os macroblocos dos quadros de referência foram "movidos" às posições indicadas pelos vetores de movimento correspondentes do quadro atual.
O módulo de geração de quadro residual 36 pode gerar o quadro residual subtraindo valores de componentes de pixel no quadro reconstruído dos valores componentes correspondentes do pixel no quadro atual. Geralmente, o quadro residual inclui menos informação do que o quadro reconstruído ou o quadro atual. Depois que o módulo de geração de quadro residual 36 gera o quadro residual, o módulo de geração de quadro residual 36 fornece o quadro residual ao módulo divisor de bloco 22 a fim de começar o processo espacial de codificar o quadro residual. Além disso, o módulo de estimação de movimento 32 pode fornecer os vetores de movimento para o quadro atual ao módulo de codificação de entropia 30 a fim de comprimir os vetores de movimento. Depois que o quadro residual é espacialmente codificado e o módulo de codificação de entropia 30 ter codificado os vetores de movimento, o módulo de saída de fluxo 38 pode formatar o quadro residual espacialmente codificado e os vetores de movimento codificados como parte de um fluxo de bits video.
A FIG. 3 é um diagrama de blocos que ilustra detalhes exemplares do módulo de decodificação 12. 0 módulo de decodificação 12 pode compreender um módulo de decodificação de entropia 44, um módulo de dequantização 46, um módulo de transformada inversa 48, um módulo de reconstrução de pixel 50, um buffer de quadro 51, um módulo combinador de bloco 52, um módulo de controle de quadro 53, um módulo de armazenamento de quadro de referência 54, um módulo de geração de quadro reconstruído 56, e um módulo de geração de quadro preditivo 58. Alguns ou todos estes módulos podem compreender subconjuntos das instruções de software do módulo de decodificação 12. Alternativamente, alguns ou todos estes módulos podem compreender um hardware de propósito especial ou firmware. Em outra alternativa, estes módulos podem compreender instruções de software e hardware de propósito especial ou firmware.
Quando o módulo de decodificação 12 recebe um fluxo de bits que contém um quadro de vídeo, o módulo de decodificação de entropia 44 pode aplicar um esquema de decodificação de entropia às matrizes de coeficientes quantizados no quadro de vídeo. O fluxo de bits pode incluir um valor que indique ao módulo de decodificação de entropia 44 que esquema de decodificação de entropia aplicar às matrizes de coeficientes quantizados no fluxo de bits. Além disso, o módulo de decodificação de entropia 44 pode aplicar os mesmos ou um esquema diferente de decodificação de entropia para decodificar os vetores de movimento do quadro de vídeo.
Depois que o módulo de decodificação de entropia 44 aplica o esquema de decodificação de entropia às matrizes de coeficientes quantizados no arquivo de vídeo, um módulo de dequantização 4 6 pode dequantizar os coeficientes em cada uma das matrizes de coeficientes quantizados. Dependendo do padrão de codificação, o módulo de dequantização 46 pode dequantizar os coeficientes em uma variedade de maneiras. Por exemplo, de acordo com o padrão MPEG-4 parte 2, o módulo de dequantização 4 6 pode usar as duas matrizes de quantização alistadas acima em duas maneiras diferentes. Primeiramente, o módulo de dequantização 46 pode usar estas matrizes de quantização para realizar a dequantização estilo H.263. Na dequantização estilo H.263, o módulo de dequantização 46 obtém coeficientes reconstruídos F"[v] [u] a partir de valores quantizados QF[v] [u] como se segue:
<formula>formula see original document page 30</formula>
que envolve apenas uma multiplicação pelo quantiser_scale,
e
Segundo, o módulo de dequantização 46 pode usar estas matrizes de quantização para realizar dequantização estilo MPEG-1/2. Na dequantização estilo MPEG-1/2, o módulo de dequantização usa matrizes de ponderação adicionais W[w] [v] [u] onde w indica que matriz de ponderação está sendo usada:
<formula>formula see original document page 30</formula>
onde: <formula>formula see original document page 31</formula>
Quando o módulo de transformada inversa 4 8 recebe uma matriz de coeficientes dequantizados, o módulo de transformada inversa 4 8 gera uma matriz de componentes de pixel. Como descrito em detalhe abaixo, o módulo de transformada inversa 48 gera a matriz de valores de componentes de pixel ao primeiro escalonar cada coeficiente na matriz de coeficientes dequantizados, adicionando um valor de polarização ao coeficiente DC da matriz, aplicando uma série de transformadas de co-seno discretas de uma dimensão, deslocamento a direita os valores resultantes, cortando os valores deslocados a direita, e emitindo então os valores cortados.
Depois que o módulo de transformada inversa 48 emite uma matriz de valores de componentes de pixel, módulo de reconstrução de pixel 50 pode gerar uma matriz de pixels combinando a matriz de valores de componentes de pixel com as matrizes de valores de componentes de pixel associados com as posições equivalentes dentro de um quadro de video. Por exemplo, o módulo de reconstrução de pixel 50 pode receber uma matriz de valores de componentes de pixel de Y, uma matriz de valores de componentes de pixel de Cb, e uma matriz de valores de componentes de pixel de Cr provenientes do módulo de transformada inversa 48. Cada uma destas três matrizes pode incluir componentes de pixel para um único bloco 8x8 de pixels. Cada um dos pixels pode incluir um valor de componente de pixel de Y, um valor de componente de pixel de Cb, e um valor de componente de pixel de Cr. Após ter gerado a matriz de pixels, o módulo de reconstrução de pixel 50 pode fornecer o bloco de pixels ao módulo combinador de bloco 52. Quando o módulo combinador de bloco 52 recebe um bloco de pixels, o módulo combinador de bloco 52 pode proteger o bloco de pixels até que o módulo combinador de bloco 52 recebe algum ou todos os blocos de pixels em um quadro de video. Após receber um ou mais dos blocos de pixels, o módulo combinador de bloco 52 pode combinar os blocos de pixels em um quadro de video e pode emitir o quadro de video ao buffer de quadro 51. 0 quadro de video pode ser armazenado no buffer de quadro 51 até que esteja indicado pela unidade de apresentação de midia 14. Além disso, o módulo combinador de bloco 52 pode emitir o quadro de video a um módulo de armazenamento de quadro 54. Os quadros de video no módulo de armazenamento de quadro 54 podem ser usados como quadros de referência para a reconstrução de quadros preditivos e bi-preditivos. Além disso, os quadros de video no módulo de armazenamento de quadro 54 podem ser os quadros residuais que são usados na reconstrução de quadros preditivos e bi-preditivos.
A fim de reconstruir um quadro preditivo ou bi- preditivo, o módulo de decodificação 12 inclui o módulo de geração de quadro reconstruído 56. 0 módulo de geração de quadro reconstruído 56 recebe os vetores de movimento decodificados do módulo de decodificação de entropia 44. Além, o módulo de geração de quadro reconstruído 56 recupera os quadros de referência do quadro atual do módulo de armazenamento de quadro 54. 0 módulo de geração de quadro reconstruído 56 então "move" os macroblocos de suas posições nos quadros de referência nas posições indicadas pelos vetores de movimento. Um quadro reconstruído resulta de mover os macroblocos desse modo. Depois que o módulo de geração de quadro reconstruído 56 gera o quadro reconstruído, o módulo de geração de quadro reconstruído 56 fornece o quadro reconstruído ao módulo de geração de quadro preditivo 58.
Quando o módulo de geração de quadro preditivo 58 recebe um quadro temporário, o módulo preditivo de geração de quadro 58 pode recuperar do módulo de armazenamento de quadro 54 um quadro residual para o quadro atual. Após recuperar o quadro residual, o módulo de geração de quadro preditivo 58 pode adicionar valores de componentes de cor correspondentes em cada pixel do quadro residual e do quadro reconstruído. Um quadro de vídeo reconstruído resulta desta adição. Em seguida, o módulo de geração de quadro preditivo 58 pode emitir este quadro reconstruído ao buffer de quadro 51 para eventual exibição na unidade de apresentação de mídia 14.
A FIG. 4 é um fluxograma que ilustra uma operação exemplar do módulo de codificação 8. Embora a operação descrita na FIG. 4 seja descrita na forma seqüencial, deve- se notar que a operação pode ser executada em uma forma encadeada.
Inicialmente, o módulo de codificação 8 recebe uma seqüência dos quadros de vídeo não-codifiçados (60). Por exemplo, o módulo de codificação 8 pode receber uma seqüência de quadros não-codifiçados sob a forma de conjuntos de pixels da fonte de mídia 4. Quando o módulo de codificação 8 recebe a seqüência de quadros não- codif içados, o módulo de controle de quadro 20 no módulo de codificação 8 pode determinar se um quadro atual na seqüência de quadros não-codifiçados deve ser codificada como um quadro-i ou como um quadro preditivo ou bi- preditivo (62).
Se o módulo de controle de quadro 20 determina que o quadro atual deve ser codificado como um quadro-i, o módulo divisor de bloco 22 no módulo de codificação 8 pode dividir o quadro atual em blocos de pixels (64). Por exemplo, o módulo de codificação 8 pode dividir o quadro atual em blocos 2x2, 4x4, ou 8x8 de pixels.
Após ter separado o quadro atual em blocos de pixels, o módulo de extração de componente 24 pode separar os valores de componentes de pixel em cada um dos blocos de pixels (66) . Em conseqüência, pode haver três blocos de valores de componentes de pixel para cada bloco de pixels: um bloco de valores de Y para representar o brilho dos pixels, um bloco de valores de Cb para representar a crominância azul dos pixels, e um bloco de valores de Cr para representar a crominância vermelha dos pixels.
O módulo de transformada direta 26 no módulo de codificação 8 pode então gerar uma matriz de coeficientes escalonados para cada uma das matrizes de valores de componentes de pixel (68). Os coeficientes nestas matrizes de coeficientes escalonados são aproximações de valores que seriam produzidos usando uma transformada de co-seno discreta direta bidimensional ideal nas respectivas matrizes das matrizes de valores de componentes de pixel.
Depois que o módulo de transformada direta 26 gera as matrizes de coeficientes escalonados para cada uma das matrizes de componentes de pixel, módulo de quantização 28 no módulo de codificação 8 pode quantizar os coeficientes em cada uma das matrizes de coeficientes escalonados (70) . Uma vez que o módulo de quantização 28 quantizou os coeficientes em cada matriz de coeficientes escalonados, o módulo de codificação de entropia 30 pode realizar um processo de codificação de entropia em cada uma das matrizes de coeficientes quantizados (72). Por exemplo, o módulo de codificação 8 pode aplicar um esquema de codificação Huffman ou um esquema de codificação aritmética a cada matriz dos coeficientes quantizados. 0 processo de codificação de entropia adicionalmente comprimiu os dados. Entretanto, os processos de codificação de entropia não conduzem à perda de informação. Após realizar o processo de codificação de entropia em cada matriz de coeficientes quantizados, o módulo de saída de fluxo 38 no módulo de codificação 8 pode adicionar as matrizes codificadas de coeficientes quantizados a um fluxo de bits para a seqüência de quadros de vídeo (74). Depois que o módulo de saída de fluxo 38 adiciona as matrizes codificadas ao fluxo de bits, o módulo de controle de quadro 20 pode determinar se o quadro atual era o último quadro de vídeo da seqüência de quadros (76) . Se o quadro atual é o último quadro da seqüência de quadros ("SIM" de 76), o módulo de codificação 8 terminou a codificação da seqüência de quadros (78). Por outro lado, se o quadro atual não é o último quadro da seqüência de quadros ("NÃO" de 7 6), o módulo de codificação 8 pode realizar loop-back e determinar se um quadro atual novo deve ser codificado como um quadro-i (62).
Se o quadro atual não deve ser codificado como um quadro-i ("NÃO" de 62), o módulo de estimação de movimento 32 no módulo de codificação 8 pode dividir o quadro atual em um conjunto de macroblocos (80) . Em seguida, o módulo de estimação do movimento 32 pode tentar identificar um macrobloco de fonte em um ou mais quadros de referência para cada um dos macroblocos no quadro atual (82) . O módulo de estimação de movimento 32 pode então calcular um vetor de movimento para cada um dos macroblocos no quadro atual para que o módulo de estimação de movimento 32 fosse capaz de identificar um macrobloco de fonte (84). Depois que o módulo de estimação de movimento 32 calcula os vetores de movimento, o módulo de geração de quadro reconstruído 34 usa os vetores de movimento para gerar um quadro reconstruído ao "mover" os macroblocos identificados nos quadros de referência nas posições indicadas pelos vetores de movimento (86) . 0 módulo de geração de quadro residual 36 pode então gerar um quadro residual para o quadro atual subtraindo os valores de componentes de pixel no quadro reconstruído a partir de valores de componentes de pixel correspondentes no quadro atual (88). Depois que o módulo de geração de quadro residual 36 gera o quadro residual, o módulo de codificação de entropia 30 pode usar um esquema de codificação de entropia para codificar os vetores de movimento para o quadro atual (90) . Além disso, a codificação espacial pode ser aplicada ao quadro residual aplicando etapas (66) a (74) ao quadro residual.
A FIG. 5 é um fluxograma que ilustra um funcionamento exemplar do módulo de decodificação 12.
Embora a operação descrita na FIG. 5 seja descrita na forma seqüencial, deve-se notar que a operação pode ser realizada em uma forma encadeada.
Inicialmente, o módulo de decodificação 12 recebe um quadro de vídeo codificado (100). Após receber o quadro de vídeo codificado, o módulo de decodificação de entropia 44 no módulo de decodificação 12 pode realizar um processo de decodificação de entropia em blocos de dados dentro do quadro codificado (102). O módulo de decodificação de entropia 44 pode realizar um processo de decodificação de entropia que é equivalente ao processo de codificação de entropia usado para codificar o quadro. Por exemplo, se o módulo de codificação 8 usa a codificação Huffman para codificar o quadro, o módulo de decodificação de entropia 44 usa decodificação Huffman para decodificar o quadro. Em conseqüência de aplicar o processo de decodificação de entropia a cada bloco de dados no quadro, o módulo de decodificação de entropia 44 produziu um conjunto de matrizes de coeficientes quantizados. Em seguida, o módulo de dequantização 46 no módulo de decodificação 12 pode dequantizar os coeficientes em cada uma das matrizes de coeficientes quantizados (104). Após dequantizar cada coeficiente nas matrizes de coeficientes quantizados, o módulo de transformada inversa 48 no módulo de decodificação 12 gera matrizes de valores de componentes de pixel (106). Os valores de componentes de pixel em uma da matriz de valores de componentes de pixel são aproximações de valores correspondentes que seriam produzidos transformando uma das matrizes dos coeficientes quantizados usando uma transformada de co-seno discreta inversa bidimensional ideal.
Quando o módulo de transformada inversa 4 8 computou uma matriz de valores de componentes de pixel para cada uma das matrizes de coeficientes, módulo de reconstrução de pixel 50 no módulo de decodificação 12 pode combinar matrizes apropriadas de valores de componentes de pixel a fim de criar blocos de pixels (108). Por exemplo, o módulo de decodificação 12 pode combinar um bloco de valores de Y com um bloco associado de valores de Cr e um bloco associado de valores de Cb a fim de criar um bloco de pixels de YCrCb. Depois que o módulo de reconstrução de pixel 50 criou os blocos de pixels, o módulo combinador de bloco 52 pode recombinar os blocos de pixels em um quadro de video (110) .
Em seguida, o módulo de controle de quadro 53 no módulo de decodificação 12 pode determinar se o quadro atual é um quadro-i (114) . Se o quadro atual é um quadro-i ("SIM" de 114), o módulo de combinador de bloco 52 pode emitir o quadro de video ao buffer de quadro 51 (114). De um lado, se o quadro atual não é um quadro-i (isto é, o quadro atual é um quadro preditivo ou bi-preditivo) ("NÃO" de 114), o módulo de decodif icação de entropia 44 usa um esquema de decodificação de entropia para decodificar os vetores de movimento do quadro atual (116). Em seguida, o módulo de geração de quadro reconstruído 56 usa os vetores de movimento decodificados e um ou mais quadros de referência no módulo de armazenamento de quadro 54 para gerar um quadro reconstruído (118). 0 módulo de geração de quadro preditivo 58 pode então usar o quadro reconstruído e o quadro gerado pelo módulo combinador de bloco 52 para gerar um quadro reconstruído (120).
A FIG. 6 é um diagrama de blocos que ilustra detalhes exemplares do módulo de transformada inversa 48. Como ilustrado no exemplo da FIG. 6, o módulo de transformada inversa 48 pode compreender um módulo de entrada 140. O módulo de entrada 140 pode receber uma matriz de coeficientes do módulo de dequantização 46. Por exemplo, o módulo de entrada 140 pode receber um ponteiro que indica uma localização em um módulo de memória de dispositivo 2 que armazena a matriz de coeficientes. Alternativamente, o módulo de entrada 140 pode incluir estruturas de dados internos que armazenam a matriz de coeficientes.
Quando o módulo de entrada 140 recebe uma matriz de coeficientes dequantizados, o módulo de entrada 140 pode fornecer a matriz de coeficientes a um módulo de escalonamento 142 no módulo de transformada inversa 48. O módulo de escalonamento 142 gera uma matriz de coeficientes escalonados escalonando cada coeficiente na matriz de coeficientes dequantizados. O módulo de escalonamento 142 pode escalonar os coeficientes na matriz de coeficientes dequantizados ao deslocar a esquerda cada coeficiente por um número de bits de mantissa usados um módulo de transformada inversa 146 para representar representações de ponto fixo de números. Os bits de mantissa são aqueles bits que estão ao lado esquerdo do ponto base (isto é, a parcela fracionária do número). Desta maneira, o módulo de escalonamento 142 converte eficazmente as representações dos coeficientes na matriz de coeficientes dequantizados em representações de ponto fixo com o número apropriado de bits de mantissa. Por exemplo, se o módulo de transformada inversa 14 6 usa os números de ponto fixo que incluem três bits de mantissa, o módulo de escalonamento 142 gera a matriz de coeficientes escalonados ao deslocar a esquerda cada um dos coeficientes na matriz de coeficientes dequantizados em três posições.
Depois que o módulo de escalonamento 142 gera a matriz de coeficientes escalonados, o módulo de polarização de coeficiente 144 pode gerar uma matriz de coeficientes polarizados adicionando um valor de polarização de ponto médio e um valor de polarização suplementar ao coeficiente DC da matriz de coeficientes escalonados. Como discutido acima, o coeficiente DC da matriz é tipicamente o coeficiente na posição esquerda superior da matriz. Geralmente, o coeficiente DC representa um valor médio dos outros coeficientes na matriz.
O valor de polarização suplementar é um valor que causa erros positivos e erros negativos a serem, em média, iguais em magnitude e serem, em média, simétricos em torno de zero simétrico. Por exemplo, o valor de polarização suplementar pode ser um valor de polarização de sinal adaptativo que é igual a zero quando o coeficiente DC é não-negativo e igual a um negativo quando o coeficiente DC é negativo. A fim de adicionar um valor de polarização de sinal adaptativo ao coeficiente DC em um processador de 16 bits, o módulo de polarização de coeficiente 144 pode usar a seguinte fórmula: <formula>formula see original document page 40</formula> (1)
Na fórmula (1), o termo (l«(P+2)) é adicionado para fornecer a polarização de ponto médio. P é uma constante referindo-se ao número de bits de mantissa de ponto fixo (isto é, bits à direita do ponto base) usados na transformada realizada pelo módulo de transformada de vetor inversa 14 6. 0 número 2 é adicionado a P porque módulo de deslocamento a direita 148 pode deslocar a direita todos os coeficientes em (P + 3), onde o número Λ3' vem dos bits de precisão adicionados realizando a transformada de co-seno discreta inversa. Para elaborar este ponto, se um número χ é gerado pelo deslocamento a esquerda de 1 por (P+2) e um número ζ é gerado pelo deslocamento a direita de χ por (P + 3), a seguir ζ = 1/2. (se feito do contrário, 2p+2/2p+3 = 2°/21 = 1/2). Assim, adicionar (1«(P+2)) ao coeficiente DC é equivalente a adicionar (l«(P+3))/2 ao coeficiente DC.
Na fórmula (1), o termo (DC_coef f icient»15) desloca a direita o coeficiente DC de 16 bits em 15 posições. O bit um restante indica o sinal do coeficiente DC. Por exemplo, suponha que o coeficiente DC era Obllll 1100 0011 0101. Neste exemplo, com extensão de sinal, deslocamento a direita do coeficiente DC por 15 posições conduz ao valor Obllll 1111 1111 1111 (decimal, -1). Similarmente, se o coeficiente DC era ObOlll 1111 1111 1111, deslocamento a direita do coeficiente DC por 15 posições conduz ao valor de 0b0000 0000 0000 0000 (decimal,0).
Em um outro exemplo, o valor de polarização suplementar pode ser um valor de polarização excitante. O valor de polarização excitante é um valor que é igual a -1 ou 0. A fim de adicionar um valor de polarização excitante em sinal ao coeficiente DC em um processador de 16 bits, o módulo IDCT 34 pode usar a seguinte fórmula:
DC coefficient = DC_coefficient + (1«(P + 2)) + excitação(-l | 0). (2)
Na fórmula (2) , P indica o número de bits de mantissa no DC_coef f iciente. 0 termo (l«(P+2)) adiciona polarização de ponto médio. A excitação do termo (-1 I 0) indica que o módulo IDCT 34 seleciona -1 ou 0 em uma base pseudo- aleatória.
O módulo de polarização de coeficiente 144 pode também adicionar o valor de polarização de ponto médio e o valor de polarização suplementar a cada um dos coeficientes AC na matriz de coeficientes escalonados. Os coeficientes AC de uma matriz são todos os coeficientes na matriz à exceção do coeficiente DC. Adicionar o valor de polarização de ponto médio e o valor de polarização escalonado a cada um dos coeficientes AC pode ainda reduzir erros de arredondamento.
Após o módulo de polarização de coeficiente 144 gerar a matriz de coeficientes polarizados, o módulo de transformada de vetor inversa 146 gera uma matriz de coeficientes transformados usando a aritmética de ponto fixo para aplicar repetidamente uma transformada de uma dimensão à matriz de coeficientes polarizados. Por exemplo, o módulo de transformada de vetor inversa 146 pode gerar uma matriz de valores intermediários usando a aritmética de ponto fixo para aplicar uma transformada de uma dimensão a cada vetor de linha de coeficientes na matriz de coeficientes polarizados. Em seguida, o módulo de transformada de vetor inversa 146 pode computar a matriz de coeficientes transformados usando a aritmética de ponto fixo para aplicar a transformada de uma dimensão a cada vetor de coluna na matriz de valores intermediários. Transformadas de uma dimensão exemplares são ilustradas nas Figuras 10 e 11 abaixo.
Depois que o módulo de transformada de vetor inversa 146 gera a matriz de coeficientes transformados, módulo de deslocamento a direita 148 pode gerar uma matriz de coeficientes ajustados pelo deslocamento a direita cada um dos coeficientes na matriz de coeficientes transformados por um número de posições iguais ao número de bits adicionados durante a aplicação da transformada e durante o escalonamento. Por exemplo, se aplicar a transformada resulta em três bits adicionais e escalonar os coeficientes adiciona três bits adicionais, o módulo de deslocamento a direita 148 pode deslocar a direita cada um dos coeficientes por seis (3 + 3) posições.
Módulo de deslocamento a direita 148 pode realizar o este deslocamento a direita como um substituto para dividir cada um dos coeficientes por 2b, onde b é igual ao número de bits adicionais adicionados pelo módulo de transformada de vetor inversa 14 6 mais o número de bits adicionados à parcela da mantissa de coeficientes pelo módulo de escalonamento 142 durante escalonamento. As diferenças entre dados de imagem de fonte e dados de imagem de resultado podem ocorrer devido à diferença entre xn/2b e xn>>b, onde xn é um coeficiente na matriz na posição n. Algumas destas diferenças podem ocorrer devido a erros de arredondamento atribuíveis ao fato na precisão limitada da aritmética de ponto fixo, (xn>>b) não iguala (xn/2b) para todos os valores de xn. Por exemplo, o módulo de codificação 8 pode usar dezesseis números de ponto fixo de bit e xn = 63 (0000 0000 0011 1111 em binário) e b = 6. Neste exemplo, deslocar 0000 0000 0011 1111 à direita por seis posições resulta no valor binário de 0000 0000 0000 0000. Assim, 63 » 6 = 0. Portanto, 63/26 = 31/64 = 0, 984375. A diferença entre 0 e 0, 984 pode resultar a uma diferença visível entre a imagem de fonte e a imagem de resultado.
Adicionar valores de polarização ao coeficiente DC reduz as diferenças devido a erros de arredondamento. Por exemplo, o módulo de polarização de coeficiente 144 pode adicionar um valor de polarização de ponto médio c a xn. O valor de polarização de ponto médio c pode igualar 2b/2 = 2(b-1) . Por exemplo, se b = 6, então c = 26/2 = 64/2 = 32. Neste exemplo, se xn = 63, então 63 + 32 = 95 (ObOOOO 0000 0101 1111). 95 deslocado a direita por 6 posições = 1 (ObOOOO 0000 0000 0001 em binário) . O valor 1 produzido após adicionar o valor de polarização de ponto médio é mais perto do valor correto de 0, 984375 do que o valor 0 produzido sem adicionar o valor de polarização de ponto médio.
Além do que a adição de valor de polarização de ponto médio c, o módulo de polarização de coeficiente 144 pode também adicionar um valor de polarização suplementar ao coeficiente DC. Por exemplo, o módulo de polarização de coeficiente 144 pode adicionar um valor de polarização adaptável em sinal d(xn) . O valor de polarização adaptável em sinal d(xn) pode igualar a -1 quando xn é negativo e pode igualar a 0 de outra maneira. Adicionar o valor de polarização adaptável em sinal d(xn) pode conduzir a valores que são melhores aproximações do que valores sem valor de polarização adaptável em sinal d(xn). Por exemplo, sem valor de polarização adaptável em sinal d(xn), a função (xn+c)>>b não é simétrico em torno de 0. Por exemplo, se xn = 32, b = 6, e c = 32, então (xn+c)>>b = 1. Entretanto, se xn = -32, b = 6, e c = 32, então (xn+c)»b = 0. Esta falta de simetria em torno de zero pode conduzir a erros progressivamente maiores ao calcular quadros de vídeo preditivos sucessivos. Além disso, diferenças entre xn»b e xn/2b são maiores quando xn é maior que zero do que quando xn é menor que zero. Isto pode também produzir erros.
O valor de polarização adaptável em sinal d(xn) pode corrigir estes problemas. Por exemplo, suponha que xn = 32, b = 6, c = 32, então d(xn) = 0. Assim, (xn + c + d(xn))>>b = 1. Agora, suponha que xn = -32, b = 6, c = 32, então d (xn) = -1. Assim, (xn + c + d(xn))»b = -1. Este exemplo ilustra que a função (xn + c + d(xn))»b é agora simétrico em torno de 0 e não produz diferenças que são maiores quando xn é maior que zero do que quando (xn) é menor que zero.
Em uma implementação exemplar, o módulo de polarização de coeficiente 144 pode adicionar um valor de polarização excitante e em vez de adicionar valor de polarização adaptável em sinal d. Quando o módulo de polarização de coeficiente 144 pode selecionar ou o valor 0 ou o valor -1 a ser o valor de e em uma polarização pseudo- aleatória. De modo a selecionar o valor do valor de polarização excitante e, o módulo de polarização de coeficiente 144 pode incluir as seguintes instruções:
#define IBl 1
#define IB2 2
#define IB5 16
#define IB18 131072
#define MASK (IB1+IB2+IB5)
static unsigned long iseed = OxAAAAAAAA; int ditherBit() {
if (iseed & IB18) {
iseed = ((iseed Λ MASK)«1) | IBl; return 1;
} else {
iseed «= 1; return 0;
Muitos padrões de codificação de vídeo usam o que é conhecido como um grupo de imagens ("GOP") . Um GOP compreende um quadro-i e um conjunto de quadros preditivos e/ou quadros bi-preditivos que referenciam o quadro-i e/ou outros quadros preditivos ou bi-preditivos dentro do GOP. Por exemplo, um arquivo de mídia pode incluir um quadro-i que é codificado usando um conjunto de matrizes de coeficiente. Para produzir uma seqüência de vídeo, o módulo de decodificação 12 pode produzir os quadros preditivos baseados neste quadro-i. Erros causados ao decodificar o quadro-i são refletidos em um quadro preditivo baseado no quadro-i. Além disso, erros causados ao decodificar o quadro preditivo são incorporados em um quadro preditivo seguinte. Se os erros causados ao decodificar os quadros não são simétricos em torno de zero ou tendem a ter grande magnitude positiva ou negativa, estes erros podem rapidamente aumentar ou diminuir os valores de valores de componentes de pixel em quadros preditivos sucessivos. Por exemplo, se os erros tendem a ter grande erro positivo, estes erros podem adicionar até em quadros preditivos sucessivos, resultando em valores de componentes de pixel que são mais elevados do que os valores de componentes de pixel corretos. Em conseqüência, pixels em quadros preditivos sucessivos dentro de um GOP podem impropriamente mudar a cor ou brilho. Isto é sabido como erro de variação (drift error) . Para evitar erro de variação que é muito severo, apenas um número de quadros limitado pode ser gerado a partir de um quadro-i. Devido ao arredondamento, erros podem ser maiores em magnitude quando realizando a transformada usando números de ponto fixo que têm números limitados de bits de mantissa (por exemplo, três bits de mantissa) do que quando realizando a transformada usando os números que têm maior precisão. Assim, o erro de variação pode ser especialmente problemático quando realizando a transformada usando números de ponto fixo que têm números limitados de bits de mantissa.
Selecionar o valor do valor de polarização excitante e em uma base pseudo-aleatória significa que cada quadro preditivo tem uma possibilidade igualmente provável de ter os erros que têm grande magnitude positiva ou erros que têm grande magnitude negativa. Assim, dentro de um grupo de imagens, os erros positivos e os erros negativos tendem a ser iguais em magnitude e tendem a ser simétricos em torno de zero. Porque os erros positivos e os erros negativos são, em média, simétricos em torno de zero e os erros positivos e os erros negativos são, em média, iguais em magnitude, os erros não são prováveis de serem propagados e exagerados em quadros preditivos subseqüentes. Isto é porque erros com magnitude positiva são prováveis de cancelar erros com magnitude negativa em um outro quadro, e vice-versa. Assim, porque o valor de polarização excitante tende a fazer a erros simétricos em torno de zero e tende a fazer erros positivos e erros negativos iguais em magnitude, há provavelmente de ter menos erro de variação durante um GOP. Por este motivo, mais imagens podem ser incluídas em um GOP. Porque mais imagens podem ser incluídas em um GOP, a seqüência de vídeo total pode ter uma taxa melhor da compressão. Do mesmo modo, adicionar o valor de polarização adaptável em sinal conduz a erros dentro de cada quadro que tendem a ser iguais em magnitude e que tendem a ser simétricos em torno de zero. Em conseqüência, estes erros não são propagados e exagerados em quadros preditivos subseqüentes. Depois que módulo de deslocamento a direita 148 desloca a direita os coeficientes, um módulo de corte (clipping) 150 pode "cortar" os coeficientes a fim de restringir os coeficientes a uma faixa máxima permissivel de valores de componentes de pixel. Por exemplo, em uma imagem típica JPEG um valor de componente de cor pode variar de -256 a 255. Se a matriz de coeficientes fosse incluir um coeficiente igual a 270, o módulo de corte 150 restringiria este coeficiente a faixa máxima permissivel reduzindo o coeficiente a 255. Depois que o módulo de corte 150 termina de cortar os coeficientes, estes coeficientes podem representar valores de componentes de pixel. Quando o módulo de corte 150 termina de cortar os coeficientes na matriz, o módulo de corte 150 pode fornecer a matriz de coeficientes cortados a um módulo de saída 152.
Quando o módulo de saída 152 receber uma matriz de coeficientes (que são agora valores de componentes de pixel), o módulo de saída 152 pode emitir a matriz de valores de componentes de pixel ao módulo de reconstrução de pixel 50.
A FIG. 7 é um fluxograma que ilustra uma operação exemplar do módulo de transformada inversa 34. Inicialmente, o módulo de entrada 140 recebe uma matriz de coeficientes dequantizados (170). Quando o módulo de entrada 140 recebe a matriz de coeficientes dequantizados, o módulo de escalonamento 142 pode escalonar cada valor na matriz de coeficientes dequantizados, gerando desse modo uma matriz de coeficientes escalonados (172). Por exemplo, o módulo de escalonamento 142 pode realizar operações que multiplicam cada coeficiente na matriz de coeficientes dequantizados por valores posicionados equivalentemente em uma matriz de fatores de escala. Depois que o módulo de escalonamento 142 gera a matriz de coeficientes escalonados, o módulo de polarização de coeficiente 144 pode adicionar um valor de polarização de ponto médio e um valor de polarização suplementar ao coeficiente DC da matriz de coeficientes escalonados, gerando desse modo uma matriz de coeficientes polarizados (174). Depois que o módulo de polarização de coeficiente 144 adiciona o valor de polarização ao coeficiente DC da matriz, o módulo de transformada de vetor inverso 146 pode determinar se um contador de linha é menor do que um contador de linha máximo (176). Inicialmente, o contador de linha pode ser ajustado a zero. 0 contador de linha máximo pode ser um valor estático que é igual ao número de linhas na matriz de coeficientes. Por exemplo, se a matriz de coeficientes inclui oito linhas, o contador de linha máximo é igual a oito.
Se o contador de linha é menor do que o contador de linha máximo ("SIM" de 176), o módulo de transformada de vetor inversa 146 pode usar aritmética de ponto fixo para aplicar uma transformada de uma dimensão em um vetor de linha da matriz de coeficientes indicados pelo contador de linha (178). Quando o módulo de transformada de vetor inversa 14 6 aplica a transformada em um vetor de linha da matriz de coeficientes, o módulo de transformada de vetor inversa 146 pode substituir os coeficientes originais no vetor de linha de coeficientes com um vetor de coeficientes intermediários. Depois que o módulo de transformada de vetor inversa 14 6 aplica a transformada em um vetor de linha da matriz de coeficientes, o módulo de transformada de vetor inversa 14 6 pode incrementar o contador de linha (180). O módulo de transformada de vetor inversa 146 pode então realizar loop-back e outra vez determinar se o contador de linha é menor do que o contador de linha máximo (176).
Se o contador de linha não é menor do que (isto é, é superior ou igual a) o contador de linha máximo ("NÃO" de 176), o módulo de transformada de vetor inversa 146 pode determinar se um contador de coluna é menor do que um contador máximo de coluna (182). Inicialmente, o contador de coluna pode ser ajustado em zero. 0 contador máximo de coluna pode ser um valor estático que é igual ao número de colunas na matriz de coeficientes. Por exemplo, se a matriz de coeficientes inclui oito colunas, o contador máximo de coluna é igual a oito.
Se o contador de coluna é menor do que o contador máximo de coluna ("SIM" de 182), o módulo de transformada de vetor inversa 146 pode aplicar a transformada de uma dimensão em um vetor de coluna da matriz de coeficientes intermediários indicados pelo contador de coluna (184). Quando o módulo de transformada inversa 34 aplica a transformada em um vetor de coluna de coeficientes intermediários, o módulo de transformada inversa 34 substitui os coeficientes intermediários no vetor de coluna com um vetor de coeficientes transformados.
Depois que o módulo de transformada de vetor inversa 14 6 aplica a transformada em um vetor de coluna da matriz de coeficientes, o módulo de transformada de vetor inversa 146 pode incrementar o contador de coluna (186). 0 módulo de transformada de vetor inversa 14 6 pode então realizar loop-back e outra vez determinar se o contador de coluna é menor do que o contador máximo de coluna (182).
Se o contador de coluna não é menor do que (isto é, é superior ou igual a) o contador máximo de coluna ("NÃO" de 182), módulo de deslocamento a direita 148 pode deslocar a direita cada um dos coeficientes transformados na matriz (188). Quando o módulo de deslocamento a direita 148 desloca a direita um coeficiente, o módulo de deslocamento a direita 148 pode deslocar o coeficiente à direita por um determinado número de posições. 0 resultado do deslocamento a direita de cada um dos segundos coeficientes intermediários na matriz é uma matriz de valores ajustados. Depois que módulo de deslocamento a direita 148 desloca a direita cada um dos coeficientes transformados, o módulo de corte 150 pode cortar os coeficientes ajustados a fim de assegurar que os coeficientes ajustados estejam dentro de uma faixa apropriada para os valores de componentes de pixel (190). Por exemplo, o módulo de corte 150 pode cortar os coeficientes ajustados a fim de assegurar que os coeficientes ajustados estejam dentro da faixa -256 a 255.
Quando o módulo de corte 150 termina de cortar os coeficientes ajustados, o módulo de saida 152 pode emitir a matriz resultante dos valores de componentes de pixel (192).
A FIG. 8 é um diagrama de blocos que ilustra detalhes exemplares do módulo de transformada direta 26. Como ilustrado no exemplo da FIG. 8, o módulo de transformada direta 26 compreende um módulo de entrada 210 que recebe uma matriz de valores de componentes de pixel do módulo de extração de componente 24. Quando o módulo de entrada 210 recebe uma matriz de valores de componentes de pixel, o módulo de entrada 210 pode fornecer a matriz de pixel valores de componentes a um módulo de deslocamento a esquerda 212. O módulo de deslocamento a esquerda 212 pode deslocar todos os valores de componentes de pixel na matriz de valores de componentes de pixel à esquerda pelo número de bits de mantissa usados nos valores que um módulo de transformada de vetor direta 214 usa enquanto realizando a transformada direta menos o número de bits de mantissa removidos realizando a transformada direta. Por exemplo, se dez bits de mantissa são usados nos valores enquanto realizando a transformada direta e três bits de mantissa são removidos realizando a transformada de co-seno discreta direta, o módulo de deslocamento a esquerda 212 pode deslocar os valores de componentes de pixel à esquerda por sete posições. Em um outro exemplo, se três bits de mantissa são usados nos valores enquanto realizando a transformada direta e três bits de mantissa são removidos realizando a transformada direta, o módulo de deslocamento a esquerda 212 pode deslocar os valores de componentes de pixel à esquerda por zero posições.
Depois que o módulo de deslocamento a esquerda 212 desloca os valores de componentes de pixel, o módulo de transformada de vetor direta 214 pode aplicar uma transformada direta a cada vetor de coluna na matriz de valores de componentes de pixel a fim de produzir uma matriz de valores intermediários. Em seguida, o módulo de transformada direta 214 pode aplicar a transformada direta a cada vetor de linha na matriz de valores intermediários a fim de produzir uma matriz de coeficientes transformados. Quando o módulo de transformada de vetor direta 214 aplica a transformada direta a um vetor, o módulo de transformada de vetor direta 214 pode aplicar a transformada direta descrita na FIG. 12, abaixo. Note que a transformada descrita na FIG. 12, abaixo, é uma transformada reversa descrita na FIG. 11.
Depois que o módulo de transformada de vetor direta 214 produz a matriz de coeficientes transformados, um módulo de escalonamento 216 pode aplicar fatores de escala a cada coeficiente transformado na matriz de coeficientes transformados. O módulo de escalonamento 216 pode aplicar reciprocas dos fatores de escala usados pelo módulo de escalonamento 142 no módulo de transformada inversa 48. Por exemplo, se um ou mais valores foram fatorados fora da transformada a fim de melhorar a eficiência da transformada, estes valores podem se tornar a base de uma matriz de fatores de escala. Os coeficientes na matriz de coeficientes transformados podem ser corrigidos multiplicando coeficientes por estes valores.
A fim de diminuir erros de arredondamento, um módulo de polarização de coeficiente 218 no módulo de transformada direta 26 pode adicionar um valor de polarização de ponto médio e um valor de polarização suplementar a coeficientes na matriz de coeficientes escalonados. Adicionar um valor de polarização adaptável em sinal ou um valor de polarização excitante aos coeficientes na matriz de coeficientes transformados tem um efeito similar como quando o módulo de polarização de coeficiente 144 no módulo de transformada inversa 48 adiciona um valor de polarização adaptável em sinal ou um valor de polarização excitante. Isto é, a adição dos valores de polarização ao coeficiente causa erros positivos e erros negativos a serem, em média, iguais em magnitude e serem, em média, aproximadamente simétrico em torno de zero. Estes erros representam diferenças entre os valores que resultam de deslocar a direita representações de ponto fixo de precisão limitadas de coeficientes na matriz de coeficientes escalonados por uma primeiro magnitude e resultados de dividir os coeficientes na matriz de coeficientes escalonados por 2 elevado à potência da primeira magnitude, sem consideração a precisão.
Depois que o módulo de polarização de coeficiente 218 gera a matriz de coeficientes polarizados, um módulo de deslocamento a direita 220 no módulo de transformada 26 pode gerar uma matriz de coeficientes de saída por deslocamento a direita de coeficientes na matriz de coeficientes polarizados. Módulo de deslocamento a direita 220 pode deslocar a direita cada coeficiente na matriz de coeficientes polarizados pelo número de bits de mantissa nos coeficientes da matriz de coeficientes polarizados mais o número de bits adicionados aos coeficientes realizando a transformada.
A seguinte equação sumariza os efeitos do módulo de escalonamento 216, módulo de polarização de coeficiente 218, e módulo de deslocamento a direita 220 na matriz de coeficientes transformados quando o módulo de polarização de coeficiente 218 adiciona um valor de polarização adaptável em sinal:
F[v][u] = (F'[v][u] * S[v][u] + (1«(P+Q) - ((F'[v][u]>=0)?0:l))» (P+Q)
onde ν = 0..7, u = 0..7; onde S [v] [u] é uma entrada na matriz de fatores de escala, F é a matriz de coeficientes escalonados, F1 é a matriz de coeficientes transformados, P indica o número de bits de mantissa nos coeficientes na matriz de coeficientes transformados, e Q indica o número de bits adicionados a coeficientes na matriz de coeficientes transformados aplicando a transformada.
A seguinte equação sumariza os efeitos do módulo de escalonamento 216, o módulo de polarização de coeficiente 218, e módulo de deslocamento a direita 220 na matriz de coeficientes transformados quando o módulo de polarização de coeficiente 218 adiciona um valor de polarização excitante:
F [v] [u] = (F1 [v] [u] *S [v] [u] + (1«19) - (excitação (0:1) ) »20 onde ν = 0..7, u = 0..7; onde S[v][u] é uma entrada na matriz de fatores de escala, F é a matriz de coeficientes escalonados, e F1 é a matriz de coeficientes transformados.
Depois que o módulo de escalonamento 216 gera a matriz de coeficientes escalonados, um módulo de saida 222 pode emitir a matriz de coeficientes ao módulo de quantização 28.
A FIG. 9 é um fluxograma que ilustra uma operação exemplar do módulo de transformada direta 26. Inicialmente, o módulo de entrada 210 recebe uma matriz de valores de componentes de pixel (230). Quando o módulo de entrada 140 recebe a matriz de valores de componentes de pixel, o módulo de deslocamento a esquerda 212 pode gerar uma matriz de coeficientes ajustados pelo deslocamento a esquerda de cada valor na matriz de valores de componentes de pixel (232). Por exemplo, o módulo de deslocamento a esquerda 212 pode deslocar todos os coeficientes à esquerda por dez posições. Neste exemplo, o módulo de deslocamento a esquerda 212 pode deslocar todos os coeficientes à direita por dez posições porque o módulo de transformada de vetor direta 214 pode usar a aritmética de ponto fixo em que os números são codificados usando dez bits na parcela fracionária. Assim, ao deslocar os coeficientes à esquerda por dez posições, o módulo de deslocamento a esquerda 212 efetivamente converte os valores de componentes de pixel em números de ponto fixo com dez bits de mantissa.
Após deslocar a esquerda cada valor de componente de pixel na matriz de valores ajustados, o módulo de transformada de vetor direta 214 pode determinar se um contador de coluna é menor do que um contador de linha máximo (234). Inicialmente, o contador de coluna pode ser ajustado em zero. O contador máximo de coluna pode ser um valor estático que é igual ao número de colunas na matriz de coeficientes ajustados. Por exemplo, se a matriz de coeficientes ajustados inclui oito colunas, o contador máximo de coluna é igual a oito.
Se o contador de coluna é menor do que o contador máximo de coluna ("SIM" de 234), o módulo de transformada de vetor direta 214 pode computar uma transformada de uma dimensão direta em um vetor de coluna indicado pelo contador de coluna (236). Quando o módulo de transformada de vetor direta 214 computa a transformada direta em um vetor de coluna da matriz de coeficientes ajustados, o módulo de transformada de vetor direta 214 substitui os coeficientes ajustados originais no vetor de coluna com os coeficientes intermediários. Depois que o módulo de transformada de vetor direta 214 computa a transformada direta em um vetor de coluna da matriz de coeficientes ajustados, o módulo de transformada de vetor direta 214 pode incrementar o contador de coluna (238). O módulo de transformada de vetor direta 214 pode então realizar Ioop- back e outra vez determinar se o contador de coluna é menor do que o contador máximo de coluna (234).
Se o contador de coluna não é menor do que (isto é, é superior ou igual a) o contador máximo de coluna ("NÃO" de 234), o módulo de transformada de vetor direta 214 pode determinar se um contador de linha é menor do que um contador de linha máximo (240). Inicialmente, o contador de linha pode ser ajustado em zero. 0 contador de linha máximo pode ser um valor estático que é igual ao número de vetores de linha na matriz dos coeficientes. Por exemplo, se a matriz dos coeficientes inclui oito linhas, o contador de linha máximo é igual a oito.
Se o contador de linha é menor do que o contador de linha máximo ("SIM" de 240), o módulo de transformada de vetor direta 214 pode computar uma transformada de co-seno discreta de uma dimensão em um vetor de linha indicado pelo contador de linha (242). Porque o módulo de transformada de vetor direta 214 já computou a transformada direta nos vetores de linha da matriz, a matriz de coeficientes contém agora coeficientes intermediários. Quando o módulo de transformada de vetor direta 214 computa a transformada direta em um vetor de linha de coeficientes intermediários, o módulo de transformada de vetor direta 214 substitui os coeficientes intermediários no vetor de coluna com os coeficientes transformados.
Depois que o módulo de transformada de vetor direta 214 computa a transformada de co-seno discreta em um vetor de linha da matriz de coeficientes, o módulo de transformada de vetor direta 214 pode incrementar o contador de linha (244). O módulo de transformada de vetor direta 214 pode então realizar loop-back e outra vez determinar se o contador de linha é menor do que o contador de linha máximo (240).
Se o contador de linha não é menor do que (isto é, é superior ou igual a) o contador de linha máximo ("NÃO" de 240), o módulo de escalonamento 216 pode escalonar cada coeficiente transformado na matriz de coeficientes transformados (246). Depois que o módulo de escalonamento 216 gera a matriz de coeficientes escalonados, o módulo de polarização de coeficiente 218 pode gerar uma matriz de coeficientes polarizados adicionando um ou mais valores de polarização a coeficientes na matriz de coeficientes escalonados (248) . Por exemplo, o módulo de polarização de coeficiente 218 pode adicionar um valor de polarização de ponto médio e um valor de polarização suplementar adaptável em sinal ou excitante a cada coeficiente na matriz de coeficientes escalonados. Em seguida, o módulo de deslocamento a direita 220 pode deslocar a direita cada coeficiente na matriz de coeficientes polarizados (250) . Módulo de deslocamento a direita 220 pode gerar uma matriz de coeficientes ajustados pelo deslocamento a direita de cada coeficiente pelo número de bits de mantissa em cada um dos coeficientes mais o número de bits adicionados ao coeficiente aplicando a transformada. Depois que módulo de deslocamento a direita 220 gerou a matriz de coeficientes ajustados, módulo de saida 222 pode emitir a matriz resultante dos coeficientes ajustados (252).
A FIG. 10 é um diagrama que ilustra uma primeira transforma de uma dimensão exemplar 260. Como ilustrado no exemplo da FIG. 10, a transformada 2 60 pode tomar como valores de entrada X0 a X7. Os valores X0 com X7 podem representar coeficientes de uma linha ou coluna de uma matriz de coeficiente de entrada. A transformada 260 pode emitir valores de xo a X7. Quando valores Xo a X7 são valores em uma linha de coeficientes em uma matriz de coeficiente de entrada, valores xo a x7 podem representar uma linha de valores intermediários. Quando valores X0 a X7 são valores em uma coluna de coeficientes, valores xo a X7 podem representar uma coluna de valores de componente de pixel deslocados. Como ilustrado no exemplo da FIG. 10, círculos que abrangem símbolos "+" indicam operações de adição e círculos que abrangem símbolos "X" indicam operações de multiplicação. Combinações de letra/número indicam os valores pelo qual um valor é multiplicado. Por exemplo, na linha x2 o símbolo "Al" é posicionado sobre um círculo que abrange um símbolo "X". Isto indica que o valor na linha X2 é multiplicado pelo valor Al.
A transformada 260 inclui um conjunto de "operações de estrutura de borboleta." Uma "operação de estrutura de borboleta" pode ser uma estrutura de software ou de hardware em que um primeiro valor de saída u é calculado multiplicando um primeiro valor de entrada χ por um primeiro fator C para criar um primeiro valor intermediário, multiplicando um segundo valor de entrada y por um segundo fator S para criar um segundo valor intermediário, e adicionando então o primeiro valor intermediário e o segundo valor intermediário. Nesta "operação de estrutura de borboleta" mais complexa, um segundo valor de saída ν pode ser calculado multiplicando o segundo valor de entrada y pelo primeiro fator para criar um terceiro valor intermediário, multiplicando o primeiro valor de entrada χ pelo segundo fator S para criar um quarto valor intermediário, e subtraindo então o terceiro valor intermediário do quarto valor intermediário. As seguintes fórmulas sumarizam o resultado matemático de uma "operação de estrutura de borboleta":
u = x*C + y*S;
ν = x*S - y*C.
A operação de estrutura de borboleta 264 ilustra uma operação de estrutura de borboleta usada na transformada 260. As operações de estrutura de borboleta têm este nome devido ao fato de que as operações de estrutura de borboleta parecem ter duas "asas" por causa do cruzamento de valores do primeiro valor de entrada com o segundo valor de entrada e do segundo valor de entrada com o primeiro valor de entrada.
Como usado na transformada 260, o primeiro fator Ceo segundo fator S podem ser números irracionais. Por
exemplo, C pode ser igual a V2cos(3π/8) e S pode ser igual a √2 cos(3π/8) . Porque o módulo de transformada de vetor inversa 146 pode usar a aritmética de ponto fixo em registradores de 16 bits e porque CeS são freqüentemente valores irracionais, pode ser computacionalmente inconveniente multiplicar valores da entrada χ e y por C e por S. Por este motivo, o módulo de transformada de vetor inversa 14 6 pode usar aproximações do número racional a C e S. Estas aproximações de inteiro podem ser da forma (C'/2j) e (S'/2k), onde C' e S' são versões "inteiradas" de C e S,
e j e k são inteiros. Por exemplo, deixe C = V2 cos(3π/8). No exemplo, o módulo de transformada de vetor inversa 14 6 pode usar os valores de inteiro C'=2217 e j=12 para
aproximar 4Ϊ cos(37i/8) porque 2217/212 = 0, 541259766 e
√2 cos(3π/8) ~ 0, 5411961... . Neste exemplo, é claro que 0,5411961 é aproximadamente igual a 0,541259766. Assim, cálculos da forma:
u = x*C + y*S; ν = x*S - y*C
podem ser substituído por cálculos da forma:
u' = x* (C' /2j) + y* (S' /2k) ;
v' = x* (S' /2k) - y* (C' /2j) .
A fim de simplificar mais estes cálculos, as operações de divisão por "2? e por 2k podem ser substituídas por operações de deslocamento a direita bit-a-bit por j e k posições, denotadas usando o símbolo ">>":
u" = ((x*C')»j) + ((y*S')»k);
v" = ((x*S')»k) - ( (y*C' ) >>j ) .
Entretanto, como discutido acima com respeito a adicionar os valores de polarização ao coeficiente DC, substituindo uma operação de divisão por uma operação de deslocamento a direita bit-a-bit pode conduzir a diferenças entre u' eu'' e v' e v' ' . Adicionar os valores de polarização de ponto médio em termos nestes cálculos pode reduzir as diferenças entre u' eu'' e entre v' e v' ' . Quando os valores de polarização de ponto médio são adicionados os cálculos podem tomar a forma:
u"' = ( (x*C' + (l«( j-1) )»j) + ( (y*S' + (1« (k-1) ) »k) ;
v"' = ( (x*S' + (l«(k-l) )»k) - ( (y*C' + (l«(j-l) ) »j ) .
Quando a adição de valores de polarização de ponto médio puder resultar nas diferenças entre u e u' ' ' e ν e v' ' ' sendo menores do que as diferenças entre u e u' ' ' e ν e v" ' , a adição de valores de polarização de ponto médio pode adicionar complexidade computacional a uma operação de estrutura de borboleta. Além disso, a adição de valores de polarização de ponto médio pode fazer a computação de u' ' ' e v''' pouco prática ao usar a aritmética de ponto fixo em registradores de 16 bits. A adição de valores de polarização de ponto médio pode fazer a computação de u'' ' e v' ' ' pouco prática porque a adição de valores de polarização de ponto médio ocorre antes do deslocamento a direita, e, conseqüentemente pode conduzir a overflow de registrador.
A diferença média entre ν = x*S - y*C e v' ' = ((x*S')»k) - ((y*C')»j) é aproximadamente zero. Em outras palavras, a média de todos os valores (v'' - v) para todos os valores χ e y é aproximadamente igual a zero. Além disso, a diferença média entre ν = x*S-y*C e v'' ' = ( (x*S' + (1« (k-1) ) »k) - ( (y*C' + (1« (j-1))»j ) é também aproximadamente zero. Isto é porque v'' e v'' ' são sempre aproximadamente iguais. v'' e v' ' ' são sempre aproximadamente iguais porque quando j é igual a k, o valor de polarização de ponto médio é cancelado pela subtração:
v" ' = ( (x*C' + m)>>j) - ( (y*S' + m)>>k) = (x*C' + m)/2j - (y*S' + m)/2k = (x*C')/2j + (m/2j) - (y*S')/2k - (m/2k) = (x*C')/2j - (y*S')/2k « v" = ((x*C')>>j) " ((y*S')>>k)
onde m representa o valor de polarização de ponto médio. Como este exemplo ilustra, subtrair (m/2k) de (m/2j) quando j é igual a k cancela o valor de polarização de ponto médio m. Porque a diferença média entre ν e v'' é aproximadamente zero, o módulo de transformada de vetor inversa 146 não introduz sistematicamente polarização positiva ou negativa nos valores gerados calculando v'' em vez de v'' ' e porque v' ' e v' ' ' são aproximadamente iguais, o módulo de transformada de vetor inversa 146 pode usar v'' em vez de v' " .
A diferença média entre u = x*C + y*S e u' ' ' = ( (x*C' + (1<<(j-l))>>j) + ( (y*S' + (l<<(k-l))>>k) é também aproximadamente igual a zero. Ao mesmo tempo, a diferença entre u = x*C + y*S eu'' = ((x*C')»j) + ((y*S')»k) não é aproximadamente igual a zero. Especialmente, a diferença média entre u e u'' é aproximadamente -1/2. Assim, u'' e u'' ' não são aproximadamente iguais, u'' e u'' ' não são aproximadamente iguais porque os valores de polarização de ponto médio não são cancelados, mesmo quando j é igual a k:
u'" = ( (x*C' + m)»k) + ( (y*S' + m) »k) * ( (x*C' + m)/2j) + ( (y*S' + m)/2k) = ((x*C')/2j) + (m/2j) + ((y*S')/2k) + (m/2k) = ((x*C')/2j) + ((y*S')/2k) + (m/2j) + (m/2k) + u" = ((x*C')»j) + ((y*S')»k). Porque u'' não é aproximadamente igual a u' ' ' , u' ' não pode ser usado no lugar de u' ' ' . Tentativa de usar u'' no lugar de u''' pode resultar em diferenças significativas de u.
Para evitar a complexidade e problemas de overflow associados adicionando valor de polarização de ponto médio a cada cálculo, a seguinte fórmula pode ser usada no lugar de u''' eu'':
u" " = ((x*C')»j) - ((y * -S')»k).
u" " é igual a u' ' salvo que em u'''', uma versão negativa de S' é usada e ( (y * -S)»k) é subtraído. Como u'' ' , n'''' não adiciona valores de polarização de ponto médio.
Entretanto, ao contrário de u''', diferenças entre u' ' ' ' e u são centradas em torno de 0. Porque diferenças entre u" " e u são centradas em torno de zero, erros de arredondamento não são ampliados com a aplicação de operações subseqüentes de estrutura de borboleta. Por esta razão, o módulo de transformada de vetor inversa 146 pode usar u" " para calcular u em uma operação de estrutura de borboleta. Por esta razão, quando j é igual a k, operações de estruturas de borboleta usadas pelo módulo de transformada de vetor inversa 14 6 para aplicar a transformada 260 podem ter a seguinte forma:
u"" = ((x*C')»j) - ((y * -S')»k);
ν'" = ((x*S')»k) - ((y*C')»j).
Conseqüentemente, diferenças entre resultados gerados por este tipo de operação de estrutura de borboleta e resultados que seriam gerados por uma operação de estrutura de borboleta equivalente usando aritmética de precisão ilimitada são centradas em torno de zero e têm uma magnitude positiva ou negativa de 1 ou menos. Alternativamente, quando j é igual a k, o módulo de transformada de vetor inversa 146 pode usar as operações de estrutura de borboleta em que deslocamentos a direita foram adiados para o fim da operação de estrutura de borboleta:
u' = x*(C'/2k) + y*(S'/2k);
( (x*C' ) /2k) + ((y*S')/2k) = ((x*C') + (y*S' ))/2k * u* = ( ( (x*C') + (y*S' ) + (1<< (k-1) ) )>>k; v' = x*(S'/2k) - y*(C'/2j) =
((x*S')/2k) - ((y*C')/2k) = ((x*S')/2k) + ( (-1) (y*C' ) /2k) = ( (x*S' ) /2k) + ((y * -Cf ) /2k) = ((x*S' ) + (y * -C'))/2k ≈ v* = ((x*S') + (y * -C') + (1<< (k-1) ) ) >>k.
Adiar os deslocamentos a direita para o fim da operação de estrutura de borboleta pode reduzir o número total de operações de deslocamento necessárias para realizar a operação de estrutura de borboleta e pode melhorar a precisão. Além disso, instruções de acumular multiplicação de 4 modos, disponíveis nos mais modernos processadores de sinal digital e processador de múltiplos dados de instrução única de 16 bits ("SIMD"), podem ser usados para computar eficientemente u* e v*.
Operações de multiplicação podem ser computacionalmente custosas em relação a adição, subtração, e operações de deslocamento bit-a-bit. Por esta razão, pode ser mais simples usar uma série de operações de adição, subtração e de deslocamento bit-a-bit que têm o mesmo efeito que uma operação de multiplicação. Por exemplo, suponha que C'=2217. Neste exemplo, r = x*C' pode ser substituído pelas seguintes etapas:
x2 = (x<<3) - x;
x3 = χ + (x2<<6) ;
x4 = x3 - x2;
r = x3 + (x4<<2) .
Neste exemplo, x2, x3 e x4 são valores intermediários. Para ilustrar isso, considere o exemplo onde χ = 1:
7 = (1<<3)-1;
449 = 1 + (7<<6) ;
442 = 449 - 7;
2217 = 449 + (442<<2) .
2217 = (1*2217) = (x*2217, onde χ = 1).
Neste exemplo, 1*2217 = 2217 e o valor produzido por essas operações em seqüência quando χ = 1 é 2217.
A seguinte tabela sumariza um conjunto exemplar de aproximações de valor de inteiro que o módulo de transformada de vetor inversa 146 pode usar para fatores constantes A1, A2, B1, B2, C1, C2, D1, e D2.
Tabela 1: Aproximações de Fator Constante Exemplar Usadas na Transformam 260
<table>table see original document page 64</column></row><table> <table>table see original document page 65</column></row><table>
Na tabela 1, valores na coluna "Valor inteiro" aproxima os valores na coluna "Valor original" quando divididos por 212 = 4096. Por exemplo, 2217/4096 =
0,541259766 e √2cos(3u/8) = 0,5411961. Similarmente, 5352/4096 = 1, 30664062 e √2sen(3;r/8) = 1, 30656296. As fórmulas na coluna "Algoritmo para computar produtos" sumarizam métodos que o módulo de transformada de vetor inversa 14 6 pode usar no lugar de operações de multiplicação pelos valores inteiros correspondentes.
A FIG. 11 é um diagrama que ilustra um segundo algoritmo exemplar 270. Como na FIG. 10, os valores Xo, Xi, X2, X3, X4, X5, X6 e X7 representam coeficientes de entrada e valores xo, Χ1, x2, X4, X5, X6 e X7 representam valores de saida. O valor associado com uma linha após um circulo que abrange um símbolo " + " é o resultado de adicionar os valores associados com as setas que apontam para dentro do circulo. O valor associado com uma linha após um circulo que abrange um símbolo "x" é o resultado de multiplicar o coeficiente posicionado próximo ao círculo e valores associados com as linhas que passam através dos círculos. O símbolo "-" próximo a uma seta representa uma negação do valor associado com a seta. Por exemplo, se o valor "10" é associado com uma seta antes de um símbolo "-", o valor "- 10" é associado com a seta após o símbolo "-". Além disso, deve-se notar que as técnicas descritas acima para reduzir o erro de arredondamento usando coeficientes negativados e subtração podem ser usadas no algoritmo 190.
Na transformada 270, os valores de α =
<formula>formula see original document page 66</formula>
podem ser aproximados usando frações racionais. Por exemplo, os valores de α, β, γ, ε e ζ podem ser aproximados usando as aproximações de inteiro listadas na Tabela 2 abaixo.
Tabela 2: Aproximações de Valor Constante Exemplar Usadas na Transformada 270
<table>table see original document page 66</column></row><table> <table>table see original document page 67</column></row><table>
Na tabela 2, valores na coluna "Aproximação de inteiro" representa a versão inteirada dos valores na
coluna "Valor original". Por exemplo, V2 cos (3π/8)~ 0,5411961 e 8867/16384 = 0,5411987304 6875. As equações na coluna "Algoritmo para computar produtos" da Tabela 2 representam algoritmos pelos quais o módulo de transformada de vetor inversa 14 6 pode usar no lugar de operações de multiplicação pelos valores na coluna "Aproximação de inteiro".
A FIG. 12 é um fluxograma que ilustra uma transformada exemplar 200 que pode ser usada pelo módulo de transformada de vetor direta 214. Na FIG. 12, os valores X0, X1, X2, X3, X4, X5, X6 e X7 representam coeficientes de saida e valores xO, xl, x2, x3, x4, x5, x6 e x7 representam valores de entrada. Além disso, deve-se notar que as técnicas descritas acima para reduzir o erro de arredondamento usando coeficientes negativados e subtração podem ser usadas na transformada 270.
No exemplo da FIG. 12, os valores de α =
√2 cos (3π/8) , β = √2 sen (3π/8) , γ = √2 cos (π/16) , δ =
√2 sen (π/16), ε = √2 cos (3π/16) , e ζ = √2 sen (3π/16) podem ser aproximados usando frações racionais. Por exemplo, os valores de de α, β, γ, δ, ε, e ζ podem ser aproximados usando as aproximações de inteiro listadas na Tabela 2.
As técnicas descritas aqui podem ser implementadas em hardware, software, firmware, ou qualquer combinação desses. Quaisquer características descritas como módulos ou componentes podem ser implementadas junto em um dispositivo de lógica integrado ou separada como dispositivos de lógica discretos, mas inter-operáveis. Se implementado em software, as técnicas podem ser realizadas pelo menos em parte por um meio legível por computador que compreende instruções que, quando executadas, realiza um ou mais dos métodos descritos acima. 0 meio legível por computador pode formar parte de um produto de programa de computador, que possa incluir materiais de empacotamento. 0 meio legível por computador pode compreender a memória de acesso aleatório (RAM) como a memória de acesso aleatório dinâmico síncrona (SDRAM), memória apenas de leitura (ROM), memória de acesso aleatório não-volátil (NVRAM) , memória de apenas leitura eletricamente programável apagável (EEPROM), memória Flash, mídia de armazenamento de dados magnética ou ótica, e semelhantes. As técnicas adicionalmente, ou alternativamente, podem ser realizadas pelo menos em parte por um meio de comunicação legível por computador que porta ou comunica código sob a forma de instruções ou estruturas de dados e que possam ser acessadas, lidas, e/ou executadas por um computador. O código pode ser executado por um ou mais processadores, tais como um ou mais processadores de sinal digital (DSPs), microprocessadores de propósito geral, circuitos integrados de aplicação especifica (ASICs) , arranjos de lógica programáveis em campo (FPGAs), ou outros circuitos integrados ou conjunto de circuitos de lógica discreto equivalentes. Assim sendo, o termo "processador" como usado aqui pode referir a qualquer uma da estrutura antecedente ou qualquer outra estrutura apropriada para implementação das técnicas descritas aqui. Além disso, em alguns aspectos, a funcionalidade descrita aqui pode ser fornecida dentro de módulos de software dedicados ou de módulos de hardware configurados para codificação e decodificação, ou incorporados em um codificador- decodificador (CODEC) de video combinado. As várias modalidades da invenção foram descritas. Estas e outras modalidades estão dentro do escopo das seguintes reivindicações.

Claims (61)

1. Um método compreendendo: usar uma série de operações de estrutura de borboleta em números de ponto fixo para aplicar uma transformada a um vetor de coeficientes de fonte de modo a gerar um vetor de coeficientes transformados; em que coeficientes transformados no vetor de coeficientes transformados são aproximações de valores que seriam produzidos transformando o vetor de coeficientes de fonte usando uma transformada de co-seno discreta inversa ideal; e fazer uma unidade de apresentação de midia emitir sinais audíveis ou visíveis com base em coeficientes transformados no vetor de coeficientes transformados, em que diferenças entre resultados gerados por uma das operações de estrutura de borboleta e resultados que seriam gerados por uma operação de estrutura de borboleta equivalente usando aritmética de precisão ilimitada são centrados em torno de zero e diferenças positivas e diferenças negativas são de magnitudes aproximadamente iguais.
2. O método, de acordo com a reivindicação 1, em que usar a série das operações de estrutura de borboleta compreendem realizar uma operação de estrutura de borboleta da forma: <formula>formula see original document page 70</formula> em que u e ν são números de ponto fixo resultantes, em que C, S, k e k' são inteiros constantes, em que χ e y são variáveis de ponto fixo, e em que C/2k e S/2k' são aproximações de números racionais de constantes irracionais.
3. O método, de acordo com a reivindicação 2, em que o vetor de coeficientes de fonte consistem de oito coeficientes: x0, x1, x2, x3,x4,x5,x6 e X7; em que o vetor de coeficientes transformados consiste de oito coeficientes: z0, ζχ, z2, z3, z4, z5, Z6 e z7; e realizar qualquer uma das operações de estrutura de borboleta compreende: realizar uma primeira operação de estrutura de borboleta em que x=x0, Y=x4, C=1, S=1, u=x0' e v=x4'; realizar uma segunda operação de estrutura de borboleta em que x=x2, y=X6, C=α, S=β, u=X6' e v=x2' ; realizar uma terceira operação de estrutura de borboleta em que X=X7, y=Xi, C=I, S=I, u=x7' e V=X1' ; realizar uma quarta operação de estrutura de borboleta em que <formula>formula see original document page 71</formula> realizar uma quinta operação de estrutura de borboleta em que <formula>formula see original document page 71</formula> realizar uma sexta operação de estrutura de borboleta em que <formula>formula see original document page 71</formula> realizar uma sétima operação de estrutura de borboleta em que x=x4' , y=x2' , C=1, S=1, u=x4' ' e v=x2' ' ; realizar uma oitava operação de estrutura de borboleta em que <formula>formula see original document page 71</formula> realizar uma nona operação de estrutura de borboleta em que<formula>formula see original document page 71</formula> realizar uma décima operação de estrutura de borboleta em que x=x0' ' , y=x7' ' ' , C=7, S=7, u=z0 e v=z7; realizar uma décima primeira operação de estrutura de borboleta em que x=x4' ' , y=xs' ' , C=1, S=1, u=Z1 e v=z6; realizar uma décima segunda operação de estrutura de borboleta em que x=x2'' , y=X3' ' , C=1, S=1, u=z2 e v=z5; e realizar uma décima terceira operação de estrutura de borboleta em que x=x6'' , y=x1'' ' , C=1, S=1, u=Z3 e v=z4.
4. O método, de acordo com a reivindicação 3, em que α, β, γ, δ, ε e z são aproximações dos valores irracionais <formula>formula see original document page 72</formula> respectivamente.
5. O método, de acordo com a reivindicação 4, em que <formula>formula see original document page 72</formula>
6. O método, de acordo com a reivindicação 2, em que usar a série de operações de estrutura de borboleta compreende usar série de operações de deslocamento, adição e subtração que produzem valores resultantes que aproximam valores que resultariam realizando operações de multiplicação nas operações de estrutura de borboleta.
7. O método, de acordo com a reivindicação 1, em que o método compreende adicionalmente: gerar uma matriz de coeficientes escalonados escalonando cada coeficiente em uma matriz de coeficientes de entrada; gerar uma matriz de coeficientes polarizados que inclui o vetor de coeficientes de fonte adicionando um ou mais valores de polarização a um coeficiente DC da matriz de coeficientes escalonados; usar a série de operações de estrutura de borboleta em números de ponto fixo para aplicar a transformada a cada vetor de linha na matriz de coeficientes de modo a gerar uma matriz de coeficientes intermediários; usar a série de operações de estrutura de borboleta em números de ponto fixo para aplicar a. transformada a cada vetor de coluna na matriz de coeficientes intermediários de modo a gerar uma matriz de coeficientes transformados; e gerar uma matriz de valores de componentes de pixel deslocando a direita coeficientes na matriz de coeficientes transformados por uma primeira magnitude.
8. O método, de acordo com a reivindicação 7, em que gerar a matriz de coeficientes polarizados compreende adicionar um valor de polarização de ponto médio ao coeficiente DC da matriz de coeficientes escalonados; e em que o valor de polarização de ponto médio é igual a 2(P+T-1), onde P é igual à primeira magnitude e T é um número de bits adicionados realizando a transformada.
9. O método, de acordo com a reivindicação 8, em que gerar a matriz de coeficientes polarizados compreende adicionar um valor de polarização suplementar ao coeficiente DC da matriz de coeficientes escalonados, em que a adição do valor de polarização suplementar ao coeficiente DC faz com que erros positivos e erros negativos sejam, em média, iguais em magnitude e sejam, em média, simétricos em torno de zero, e em que os erros representam diferenças entre valores que resultam de deslocar a direita representações de ponto fixo de precisão limitadas de coeficientes na matriz de coeficientes transformados pela primeira magnitude e resulta de dividir os coeficientes na matriz de coeficientes transformados por 2P, onde P é igual à primeira magnitude, sem considerar a precisão.
10. O método, de acordo com a reivindicação 9, em que o valor de polarização suplementar é igual a -1 quando o coeficiente DC é negativo e igual a 0 quando o coeficiente DC é não-negativo.
11. O método, de acordo com a reivindicação 9, em que o método compreende adicionalmente selecionar, em uma base pseudo-aleatória, um valor que é igual a -1 ou 0; e em que adicionar o valor de polarização suplementar compreende adicionar o valor selecionado.
12. O método, de acordo com a reivindicação 7, em que gerar a matriz de coeficientes escalonados compreende deslocar a esquerda cada coeficiente na matriz de coeficientes de entrada por uma segunda magnitude; em que usar a série de operações de estrutura de borboleta para aplicar a transformada faz com que cada coeficiente na matriz de coeficientes transformados inclua um número de bits extra de precisão medidos por uma terceira magnitude; e em que a primeira magnitude é igual à segunda magnitude mais a terceira magnitude.
13. O método, de acordo com a reivindicação 12, em que a segunda magnitude é igual a um número de bits de mantissa dos números de ponto fixo usados enquanto aplicando a transformada.
14. O método, de acordo com a reivindicação 13, em que a segunda magnitude é três; e em que, dada a matriz de coeficientes de entrada, os valores de componentes de pixel satisfazem requerimentos de precisão do padrão do Instituto de Engenheiros Eletricistas e Eletrônicos (IEEE) 1180.
15. O método, de acordo com a reivindicação 7, em que o método compreende adicionalmente: construir pixels que incluem valores de componentes de pixel na matriz de valores de componentes de pixel; e fazer com que uma unidade de display exiba os pixels.
16. 0 método, de acordo com a reivindicação 1, em que os números de ponto fixo são números de ponto de fixo de 16 bits.
17. Um dispositivo compreendendo: um módulo de transformada inversa que usa uma série de operações de estrutura de borboleta em números de ponto fixo para aplicar uma transformada a um vetor de coeficientes de fonte de modo a gerar um vetor de coeficientes transformados; em que coeficientes transformados no vetor de coeficientes transformados são aproximações de valores que seriam produzidos transformando o vetor de coeficientes de fonte usando uma transformada de co-seno discreta inversa ideal; em que uma unidade de apresentação de midia é capaz de apresentar sinais audíveis ou visíveis com base em coeficientes transformados no vetor de coeficientes transformados; em que diferenças entre resultados gerados por uma das operações de estrutura de borboleta e resultados que seriam gerados por uma operação de estrutura de borboleta equivalente usando aritmética de precisão ilimitada são centrados em torno de zero e diferenças positivas e diferenças negativas são de magnitudes aproximadamente iguais.
18. O dispositivo, de acordo com a reivindicação 17, em que a operação dentre as operações de estrutura de borboleta realizada pelo módulo de transformada inversa é da forma: u= ((x*C)>>k)-((y*-S)>>k'); ν = ((x*S)>>k')-((y*C)>>k); em que u e ν são valores de ponto fixo resultantes, em que C, S, k e k' são inteiros constantes, em que χ e y são variáveis de ponto fixo, e em que C/2k e S/2k' são aproximações de números racionais de constantes irracionais.
19. O dispositivo, de acordo com a reivindicação 18, em que o vetor de coeficientes de fonte consistem de oito coeficientes: x0, x1, X2, X4, X5, X6, e x7; em que o vetor de coeficientes transformados consiste de oito coeficientes: Z0, Ζ1, Z2, Z3, Z4, Z5, Zq e Z7; e em que o módulo de transformada inversa realiza as operações de estrutura de borboleta ao: realizar uma primeira operação de estrutura de borboleta em que x=x0, Y=X4, C=1, S=1, u=x0' e v=x4'; realizar uma segunda operação de estrutura de borboleta em que x=x2, Y=X6, C=α, S=β, u=X6' e v=X2'; realizar uma terceira operação de estrutura de borboleta em que χ=χ7, y=x1, C=1, S=1, u=x7' e V=X1'; realizar uma quarta operação de estrutura de borboleta em que x= 1/√2*x1', y=x5, C=1, S=1, u=x1'' e v=x5' ; realizar uma quinta operação de estrutura de borboleta em que x=1/√2*x7', y=x3, C=1, S=1, u=x7'' e V=X3'; realizar uma sexta operação de estrutura de borboleta em que χ=χ0' , y=X6', C=1, S=1, u=xo'' e v=x6'' ; realizar uma sétima operação de estrutura de borboleta em que x=x4' , y=X2', C=I, S=I, u=x4'' e v=x2'' ; realizar uma oitava operação de estrutura de borboleta em que x=xi' ' , Y=X7' ' , C=ζ, S=8, u=xi' ' ' e v=x7' ' ' ; realizar uma nona operação de estrutura de borboleta em que X=X3' , y=xs' , C=ô, S=y, u=xs' ' e v=x3' ' ; realizar uma décima operação de estrutura de borboleta em que x=xo' ' , y=x7'' ' , C=I, S=I, u=z0 e v=z7; realizar uma décima primeira operação de estrutura de borboleta em que x=x4' ' , y=x5'' , C=I, S=I, U=Zi e v=z6; realizar uma décima segunda operação de estrutura de borboleta em que x=x2'' , y=x3'' , C=I, S=I, u=z2 e v=z5; e realizar uma décima terceira operação de estrutura de borboleta em que X=X6' ' , y=Xi' ' ' , C=I, S=I, u=z3 e v=z4.
20. 0 dispositivo, de acordo com a reivindicação -19, em que α, β, γ, δ, ε e ζ são aproximações dos valores irracionais √2 cos (3π/8 ), √2 sen (3π/8 ) , √2 cos (π/16) , √2 sen (π/16) , √2 cos (3π/16) e √2 sen (3π/16) , respectivamente.
21. O dispositivo, de acordo com a reivindicação -20, em que a=8867/16384, β=21407/16384, γ=5681/4096, δ=565/2048, ε=9633/8192, ζ=12873/16384.
22. O dispositivo, de acordo com a reivindicação -19, em que o módulo de transformada inversa realiza as operações de estrutura de borboleta usando uma série de operações de deslocamento, adição e subtração que produzem valores resultantes que aproximam valores que resultariam realizando operações de multiplicação nas operações de estrutura de borboleta.
23. O dispositivo, de acordo com a reivindicação -18, o dispositivo compreende adicionalmente: um módulo de escalonamento que gera uma matriz de coeficientes escalonados escalonando cada coeficiente em uma matriz de coeficientes de entrada; um módulo de polarização de coeficiente que gera uma matriz de coeficientes polarizados que inclui o vetor de coeficientes de fonte adicionando um ou mais valores de polarização a um coeficiente DC da matriz de coeficientes escalonados; e em que o módulo de transformada de inversa gera uma matriz de coeficientes intermediários usando a série de operações de estrutura de borboleta para aplicar a transformada a cada vetor de linha na matriz de coeficientes polarizados; em que o módulo de transformada gera uma matriz de coeficientes transformados usando a série de operações de estrutura de borboleta para aplicar a transformada a cada vetor de coluna na matriz de coeficientes intermediários; e um módulo de deslocamento a direita que gera uma matriz de valores de componentes de pixel deslocando a direita coeficientes na matriz de coeficientes transformados por uma primeira magnitude, em que também o módulo de transformada inversa usa a série de operações de estrutura de borboleta para aplicar a transformada ao vetor de coeficientes de fonte.
24. O dispositivo, de acordo com a reivindicação 23, em que o módulo de polarização de coeficiente adiciona um valor de polarização de ponto médio ao coeficiente DC da matriz de coeficientes escalonados, em que o valor de polarização de ponto médio é igual a 2(P+T-1), onde P é igual à primeira magnitude e T é um número de bits adicionados realizando a transformada.
25. O dispositivo, de acordo com a reivindicação 23, em que o módulo de polarização de coeficiente adiciona um valor de polarização suplementar ao coeficiente DC da matriz de coeficientes escalonados, em que a adição do valor de polarização suplementar ao coeficiente DC faz com que erros positivos e erros negativos sejam, em média, iguais em magnitude e sejam, em média, simétricos em torno de zero, e em que os erros representam diferenças entre valores que resultam de deslocar a direita representações de ponto fixo de precisão limitadas de coeficientes na matriz de coeficientes transformados pela primeira magnitude e resulta de dividir os coeficientes na matriz de coeficientes transformados por 2P, onde P é igual à primeira magnitude, sem considerar a precisão.
26. O dispositivo, de acordo com a reivindicação 25, em que o valor de polarização suplementar é igual a -1 quando o coeficiente DC é negativo e igual a 0 quando o coeficiente DC é não-negativo.
27. O dispositivo, de acordo com a reivindicação 25, em que o módulo de polarização de coeficiente seleciona, em uma base pseudo-aleatória, um valor que é igual a -1 ou 0; e em que o módulo de polarização de coeficiente adiciona o valor selecionado como o valor de polarização suplementar.
28. 0 dispositivo, de acordo com a reivindicação 23, em que o módulo de escalonamento escalona cada coeficiente na matriz de coeficientes de entrada deslocando a esquerda cada coeficiente na matriz de coeficientes de entrada por uma segunda magnitude; em que o módulo de transformada inversa faz com que cada coeficiente na matriz de coeficientes transformados inclua um número de bits extra de precisão medidos por uma terceira magnitude; e em que a primeira magnitude é igual à segunda magnitude mais a terceira magnitude.
29. 0 dispositivo, de acordo com a reivindicação 28, em que a segunda magnitude é igual a um número de bits de mantissa dos números de ponto fixo usados enquanto aplicando a transformada.
30. Um dispositivo compreendendo: meios para usar uma série de operações de estrutura de borboleta em números de ponto fixo para aplicar uma transformada a um vetor de coeficientes de fonte de modo a calcular um vetor de coeficientes transformados; em que coeficientes transformados no vetor de coeficientes transformados são aproximações de valores que seriam produzidos transformando o vetor de coeficientes de fonte usando uma transformada de co-seno discreta inversa ideal; em que uma unidade de apresentação de mídia é capaz de apresentar sinais audíveis ou visíveis com base nos coeficientes transformados no vetor de coeficientes transformados; em que diferenças entre resultados gerados por uma das operações de estrutura de borboleta e resultados que seriam gerados por uma operação de estrutura de borboleta equivalente usando aritmética de precisão ilimitada são centrados em torno de zero e diferenças positivas e diferenças negativas são de magnitudes aproximadamente iguais.
31. O dispositivo, de acordo com a reivindicação -30, em que os meios para usar uma série de operações de estrutura de borboleta compreendem um conjunto de meios para realizar uma operação de estrutura de borboleta, em que cada um dos meios para realizar uma operação de estrutura de borboleta compreende meios para realizar uma operação de estrutura de borboleta da forma: u= ( (x*C)>>k) - ( (y*-S)>>k) ; ν = ( (x*S)>>k) - ( (y*C)>>k) ; em que u, ν, χ e y são números de ponto fixo, em que χ e y são valores de entrada e u e ν são valores de saída; e em que C, S e k são inteiros.
32. O dispositivo, de acordo com a reivindicação -31, em que o vetor de coeficientes de fonte consistem de oito coeficientes: X0, X1, X2, X3, X4, X5, X6 e x7; em que o vetor de coeficientes transformados consiste de oito coeficientes: Zo, Z1, Z2, z3, Z4, Z5, Ζ6 e z7; e em que o conjunto de meios para realizar as operacoes de estrutura de borboleta compreende: meios para realizar uma quinta operação de estrutura de borboleta em que <formula>formula see original document page 82</formula> meios para realizar uma sexta operação de estrutura de borboleta em que <formula>formula see original document page 82</formula> meios para realizar uma sétima operação de estrutura de borboleta em que <formula>formula see original document page 82</formula> meios para realizar uma oitava operação de estrutura de borboleta em que <formula>formula see original document page 82</formula> meios para realizar uma nona operação de estrutura de borboleta em que <formula>formula see original document page 82</formula> que o conjunto de meios para realizar as estrutura de borboleta compreende: meios para realizar uma primeira operação de borboleta em que <formula>formula see original document page 82</formula> meios para realizar uma segunda operação de borboleta em que <formula>formula see original document page 82</formula> meios para realizar uma terceira operação de borboleta em que <formula>formula see original document page 82</formula> meios para realizar uma quarta operação de borboleta em que <formula>formula see original document page 82</formula> meios para realizar uma décima operação de estrutura de borboleta em que x=x0'' , y=x7'' ' , C=I, S=I, U=Z0 e v=z7; meios para realizar uma décima primeira operação de estrutura de borboleta em que x=x4' ' , y=xs' ' , C=I, S=I, U=Zi e v=z6; meios para realizar uma décima segunda operação de estrutura de borboleta em que x=x2' ' , y=X3' ' , C=I, S=I, u=Z2 e ν=ζ5; e meios para realizar uma décima terceira operação de estrutura de borboleta em que X=Xer ' , y=Xi' ' ' , C=I, S=I, u=Z3 e v=z4.
33. O dispositivo, de acordo com a reivindicação -32, em que α, β, γ, δ, ε e ζ são aproximações dos valores irracionais λ/2 cos(37i/8), λ/2 sen (3π/8) , λ/2 cos (π/16) , λ/2 sen(π/16), λ/2 cos(37t/16) e λ/2 sen (3π/16) , respectivamente.
34. O dispositivo, de acordo com a reivindicação -33, em que «=8867/16384, β=21407/16384, γ=5681/4096, δ=565/2048, ε=9633/8192, ζ=12873/16384.
35. O dispositivo, de acordo com a reivindicação -31, em que os meios para usar a série de operações de estrutura de borboleta realizam as operações de estrutura de borboleta usando uma série de operações de deslocamento, adição e subtração que produzem valores resultantes que aproximam valores que resultariam realizando operações de multiplicação nas operações de estrutura de borboleta.
36. O dispositivo, de acordo com a reivindicação -30, em que o dispositivo compreende adicionalmente: meios para gerar uma matriz de coeficientes escalonados escalonando cada coeficiente em uma matriz de coeficientes de entrada; meios para gerar uma matriz de coeficientes polarizados que inclui o vetor de coeficientes de fonte adicionando um ou mais valores de polarização a um coeficiente DC da matriz de coeficientes escalonados; e meios para gerar uma matriz de coeficientes intermediários usando a série de operações de estrutura de borboleta para aplicar a transformada a cada vetor de linha na matriz de coeficientes polarizados; meios para gerar uma matriz de coeficientes transformados usando a série de operações de estrutura de borboleta para aplicar a transformada a cada vetor de coluna na matriz de coeficientes intermediários; e meios para gerar uma matriz de valores de componentes de pixel deslocando a direita coeficientes na matriz de coeficientes transformados por uma primeira magnitude, em que ou os meios para gerar a matriz de coeficientes intermediários ou os meios para gerar a matriz de coeficientes transformados compreendem os meios para usar a série de operações de estrutura de borboleta para aplicar a transformada ao vetor de coeficientes de fonte.
37. O dispositivo, de acordo com a reivindicação -36, em que os meios para gerar a matriz de coeficientes polarizados compreendem meios para adicionar um valor de polarização de ponto médio ao coeficiente DC da matriz de coeficientes escalonados, em que o valor de polarização de ponto médio é igual a 2(P+T-1), onde P é igual à primeira magnitude e T é um número de bits adicionados realizando a transformada.
38. O dispositivo, de acordo com a reivindicação -36, em que os meios para gerar a matriz de coeficientes polarizados compreendem meios para adicionar um valor de polarização suplementar ao coeficiente DC da matriz de coeficientes escalonados, em que a adição do valor de polarização suplementar ao coeficiente DC faz com que erros positivos e erros negativos sejam, em média, iguais em magnitude e sejam, em média, simétricos em torno de zero, e em que os erros representam diferenças entre valores que resultam de deslocar a direita representações de ponto fixo de precisão limitadas de coeficientes na matriz de coeficientes transformados pela primeira magnitude e resulta de dividir os coeficientes na matriz de coeficientes transformados por 2P, onde P é igual à primeira magnitude, sem considerar a precisão.
39. O dispositivo, de acordo com a reivindicação 38, em que o valor de polarização suplementar é igual a -1 quando o coeficiente DC é negativo e igual a 0 quando o coeficiente DC é não-negativo.
40. O dispositivo, de acordo com a reivindicação -38, em que o dispositivo compreende meios para selecionar, em uma base pseudo-aleatória, um valor que é igual a -1 ou 0; e em que os meios para adicionar o valor de polarização suplementar adiciona o valor selecionado como o valor de polarização suplementar.
41. O dispositivo, de acordo com a reivindicação -36, em que os meios para gerar a matriz de coeficientes escalonados compreendem meios para escalonar cada coeficiente na matriz de coeficientes de entrada deslocando a esquerda cada um dos coeficiente na matriz de coeficientes de entrada por uma segunda magnitude; em que os meios para usar a série de operações de estrutura de borboleta para aplicar a transformada faz com que cada coeficiente na matriz de coeficientes transformados inclua um número de bits extra de precisão medidos por uma terceira magnitude; e em que a primeira magnitude é igual à segunda magnitude mais a terceira magnitude.
42. O dispositivo, de acordo com a reivindicação -41, em que a segunda magnitude é igual a um número de bits de mantissa dos números de ponto fixo usados enquanto aplicando a transformada.
43. O dispositivo, de acordo com a reivindicação -42, em que a segunda magnitude é três; e em que, dada a matriz de coeficientes de entrada, os valores de componentes de pixel satisfazem requerimentos de precisão do padrão do Instituto de Engenheiros Eletricistas e Eletrônicos (IEEE) 1180.
44. O dispositivo, de acordo com a reivindicação -0, em que o dispositivo compreende adicionalmente meios para construir pixels que incluem valores de componentes de pixel na matriz de valores de componentes de pixel; e em que o dispositivo compreende adicionalmente meios para fazer com que uma unidade de display exiba os pixels.
45. Odispositivo, de acordo com a reivindicação -0, em que os números de ponto fixo são números de ponto de fixo de 16 bits.
46. Um meio legível por computador compreendendo instruções que quando executadas fazem um processador: usar uma série de operações de estrutura de borboleta em números de ponto fixo para aplicar uma transformada a um vetor de coeficientes de modo a gerar um vetor de coeficientes transformados; em que coeficientes transformados no vetor de coeficientes transformados são aproximações de valores que seriam produzidos transformando o vetor de coeficientes de fonte usando uma transformada de co-seno discreta inversa ideal; fazer com que uma unidade de apresentação de mídia para emitir sinais audíveis ou visíveis com base em valores transformados no vetor de valores transformados, em que diferenças entre resultados gerados por uma das operações de estrutura de borboleta e resultados que seriam gerados por uma operação de estrutura de borboleta equivalente usando aritmética de precisão ilimitada são centrados em torno de zero e diferenças positivas e diferenças negativas são de magnitudes aproximadamente iguais.
47. O meio legível por computador, de acordo com a reivindicação 44, em que as instruções que fazem o processador realizar as operações de estrutura de borboleta fazem o processador realizar uma operação de estrutura de borboleta da forma: u=((x*C)>>k)-((y*-S)>>k'); v=((x*S)>>k')-((y*C)>>k); em que u e ν são números de ponto fixo resultantes, em que C, S, k e k' são inteiros constantes, em que χ e y são variáveis de ponto fixo, e em que C/2k e S/2k' são aproximações de números racionais de constantes irracionais.
48. O meio legível por computador, de acordo com a reivindicação 47, em que o vetor de coeficientes de fonte consistem de oito coeficientes: x0, x1, x2, x3, x4, x5, x6 e X7; em que o vetor de coeficientes transformados consiste de oito coeficientes: zo, Ζχ, z2, Z3, z4, z5, z6 e z7; e em que as instruções que fazem o processador usar a série de operações de estrutura de borboleta fazem o processador programável: realizar uma primeira operação de estrutura de borboleta em que x=xo, Y=X4, C=1, S=1, u=x0' e v=x4'; realizar uma segunda operação de estrutura de borboleta em que X=X2, Y=x6, C=a, S=β, u=x6' e v=x2' ; realizar uma terceira operação de estrutura de borboleta em que x=x7, y=x1, C=1, S=1, u=x7' e V=X1'; realizar uma quarta operação de estrutura de borboleta em que x= 1', y=xs, C=1, S=1, U=X1'' e V=X5' ; realizar uma quinta operação de estrutura de borboleta em que <formula>formula see original document page 88</formula> realizar uma sexta operação de estrutura de borboleta em que <formula>formula see original document page 88</formula> realizar uma sétima operação de estrutura de borboleta em que x=x4', y=x2' , C=1, S=1, u=x4'' e v=x2'' ; realizar uma oitava operação de estrutura de borboleta em que X=X1' ' , y=X7' ' , C=ζ, S=ε, U=X1' ' ' e v=x7' ' ' ; real1zar uma nona operação de estrutura de borboleta em que x=x3' , Y=Xs' , C=ô, S =?, u=x5' ' e v=x3' ' ; real1zar uma déc1ma operação de estrutura de borboleta em que x=xo'' , y=xj'' ' , C=1, S=1, u=z0 e v=z7; real1zar uma déc1ma pr1me1ra operação de estrutura de borboleta em que X=X4'', y=x5'' , C=1, S=1, u=Z1 e ?= z6; real1zar uma déc1ma segunda operação de estrutura de borboleta em que X=X2' ' , Y=X3' ' , C=1, S=1, u=Z2 e v=z5; e real1zar uma déc1ma terce1ra operação de estrutura de borboleta em que x=x6'' , y=x1' ' ' , C=1, S=1, u=z3 e V=Z4.
49. O me1o legível por computador, de acordo com a re1v1nd1cação 48, em que a, ß, ?, d, e e z são aprox1mações dos valores 1rrac1ona1s V2cos(3p/8), V2 sen (3p/8 ) , -Jl cos (p/16), a/2 sen (p/16), V2 cos(3p/16) e ?/2 sen(37t/16), respect1vamente
50. O me1o legível por computador, de acordo com a re1v1nd1cação 49, em que a=8867/16384, ß=21407/16384, ?=5681/4096, d=565/2048, e=9633/8192, z=12873/16384.
51. O me1o legível por computador, de acordo com a re1v1nd1cação 47, em que as 1nstruções que fazem o processador usar a sér1e de operações de estrutura de borboleta fazem o processador programável mult1pl1car valores na operação de estrutura de borboleta usando uma sér1e de operações de deslocamento, ad1ção e subtração que produzem valores resultantes que aprox1mam valores que resultar1am real1zando operações de mult1pl1cação.
52. O me1o legível por computador, de acordo com a re1v1nd1cação 46, em que as 1nstruções ad1c1onalmente fazem o processador programável: gerar uma matriz de coeficientes escalonados escalonando cada coeficiente em uma matriz de coeficientes de entrada; gerar uma matriz de coeficientes polarizados que inclui o vetor de coeficientes de fonte adicionando um ou mais valores de polarização a um coeficiente DC da matriz de coeficientes escalonados; usar a série de operações de estrutura de borboleta em números de ponto fixo para aplicar a transformada a cada vetor de linha na matriz de coeficientes de modo a gerar uma matriz de coeficientes intermediários; usar a série de operações de estrutura de borboleta em números de ponto fixo para aplicar a transformada a cada vetor de coluna na matriz de coeficientes intermediários de modo a gerar uma matriz de coeficientes transformados; e gerar uma matriz de valores de componentes de pixel deslocando a direita coeficientes na matriz de coeficientes transformados por uma primeira magnitude.
53. O meio legível por computador, de acordo com a reivindicação 52, em que as instruções que fazem o processador gerar a matriz de coeficientes polarizados fazem o processador adicionar um valor de polarização de ponto médio ao coeficiente DC da matriz de coeficientes escalonados; e em que o valor de polarização de ponto médio é igual a 2(P+T~1>, onde P é igual à primeira magnitude e T é um número de bits adicionados realizando a transformada.
54. O meio legível por computador, de acordo com a reivindicação 52, em que as instruções que fazem o processador gerar a matriz de coeficientes polarizados fazem o processador adicionar um valor de polarização suplementar ao coeficiente DC da matriz de coeficientes escalonados, em que a adição do valor de polarização suplementar ao coeficiente DC faz com que erros positivos e erros negativos sejam, em média, iguais em magnitude e sejam, em média, simétricos em torno de zero, e em que os erros representam diferenças entre valores que resultam de deslocar a direita representações de ponto fixo de precisão limitadas de coeficientes na matriz de coeficientes transformados pela primeira magnitude e resulta de dividir os coeficientes na matriz de coeficientes transformados por 2P, onde P é igual à primeira magnitude, sem considerar a precisão.
55. O meio legível por computador, de acordo com a reivindicação 54, em que o valor de polarização suplementar é igual a -1 quando o coeficiente DC é negativo e igual a 0 quando o coeficiente DC é não-negativo.
56. O meio legível por computador, de acordo com a reivindicação 54, em que as instruções fazem adicionalmente o processador selecionar, em uma base pseudo-aleatória, um valor que é igual a -1 ou 0; e em que as instruções que fazem o processador adicionar o valor de polarização suplementar fazem o processador adicionar o valor selecionado como o valor de polarização suplementar.
57. O meio legível por computador, de acordo com a reivindicação 52, em que as instruções que fazem o processador gerar a matriz de coeficientes escalonados fazem o processador deslocar a esquerda cada coeficiente na matriz de coeficientes de entrada por uma segunda magnitude; em que as instruções que fazem o processador usar a série de operações de estrutura de borboleta fazem com que cada coeficiente na matriz de coeficientes transformados inclua um número de bits extra de precisão medidos por uma terceira magnitude; e em que a primeira magnitude é igual à segunda magnitude mais a terceira magnitude.
58. O meio legível por computador, de acordo com a reivindicação 57, em que a segunda magnitude é igual a um número de bits de mantissa dos números de ponto fixo usados enquanto aplicando a transformada.
59. O meio legível por computador, de acordo com a reivindicação 58, em que a segunda magnitude é três; e em que, dada a matriz de coeficientes de entrada, os valores de componentes de pixel satisfazem requerimentos de precisão do padrão do Instituto de Engenheiros Eletricistas e Eletrônicos (IEEE) 1180.
60. O meio legível por computador, de acordo com a reivindicação 52, em que as instruções fazem adicionalmente o processador: construir pixels que incluem valores de componentes de pixel na matriz de valores de componentes de pixel; e exibir os pixels em uma unidade de display.
61. O meio legível por computador, de acordo com a reivindicação 46, em que os números de ponto fixo são números de ponto de fixo de 16 bits.
BRPI0712984-0A 2006-06-26 2007-06-26 redução de erros durante computação de transformada de coseno discreta inversa BRPI0712984A2 (pt)

Applications Claiming Priority (11)

Application Number Priority Date Filing Date Title
US81669706P 2006-06-26 2006-06-26
US60/816,697 2006-06-26
US84136206P 2006-08-30 2006-08-30
US60/841,362 2006-08-30
US84719406P 2006-09-25 2006-09-25
US60/847,194 2006-09-25
US82966906P 2006-10-16 2006-10-16
US60/829,669 2006-10-16
US86953006P 2006-12-11 2006-12-11
US60/869,530 2006-12-11
PCT/US2007/072088 WO2008002897A2 (en) 2006-06-26 2007-06-26 Reduction of errors during computation of inverse discrete cosine transform

Publications (1)

Publication Number Publication Date
BRPI0712984A2 true BRPI0712984A2 (pt) 2012-04-03

Family

ID=38624012

Family Applications (1)

Application Number Title Priority Date Filing Date
BRPI0712984-0A BRPI0712984A2 (pt) 2006-06-26 2007-06-26 redução de erros durante computação de transformada de coseno discreta inversa

Country Status (10)

Country Link
US (2) US8385424B2 (pt)
EP (2) EP2035958A2 (pt)
JP (3) JP5086343B2 (pt)
KR (2) KR101013344B1 (pt)
CN (2) CN102007489B (pt)
BR (1) BRPI0712984A2 (pt)
CA (2) CA2653692C (pt)
IN (1) IN2014MN01239A (pt)
TW (2) TWI373255B (pt)
WO (2) WO2008002881A2 (pt)

Families Citing this family (40)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8385424B2 (en) * 2006-06-26 2013-02-26 Qualcomm Incorporated Reduction of errors during computation of inverse discrete cosine transform
US8699810B2 (en) * 2006-06-26 2014-04-15 Qualcomm Incorporated Efficient fixed-point approximations of forward and inverse discrete cosine transforms
US8300698B2 (en) * 2006-10-23 2012-10-30 Qualcomm Incorporated Signalling of maximum dynamic range of inverse discrete cosine transform
US8819095B2 (en) * 2007-08-28 2014-08-26 Qualcomm Incorporated Fast computation of products by dyadic fractions with sign-symmetric rounding errors
US8731062B2 (en) * 2008-02-05 2014-05-20 Ntt Docomo, Inc. Noise and/or flicker reduction in video sequences using spatial and temporal processing
US9378751B2 (en) * 2008-06-19 2016-06-28 Broadcom Corporation Method and system for digital gain processing in a hardware audio CODEC for audio transmission
US8755515B1 (en) 2008-09-29 2014-06-17 Wai Wu Parallel signal processing system and method
NO332205B1 (no) * 2008-12-30 2012-07-30 Cisco Systems Int Sarl Implementering av entropikoding/dekoding av transformasjonskoeffisientdata til videokompressjonssystemer i datamaskininnretninger
US8879632B2 (en) 2010-02-18 2014-11-04 Qualcomm Incorporated Fixed point implementation for geometric motion partitioning
JP2013524730A (ja) * 2010-04-12 2013-06-17 クゥアルコム・インコーポレイテッド 幾何学的動き区分のための固定小数点実装形態
US9185422B2 (en) 2010-07-15 2015-11-10 Qualcomm Incorporated Variable localized bit-depth increase for fixed-point transforms in video coding
BR112013007023A2 (pt) 2010-09-28 2017-07-25 Samsung Electronics Co Ltd método de codificação de vídeo e método de decodificação de vídeo
US9824066B2 (en) * 2011-01-10 2017-11-21 Qualcomm Incorporated 32-point transform for media data coding
US20120183047A1 (en) * 2011-01-18 2012-07-19 Louis Joseph Kerofsky Video decoder with reduced dynamic range transform with inverse transform clipping
US20120183048A1 (en) * 2011-01-18 2012-07-19 Louis Joseph Kerofsky Video decoder with reduced dynamic range transform with multiple clipping
US9807395B2 (en) * 2011-01-18 2017-10-31 Dolby International Ab Video decoder with reduced dynamic range transform with inverse transform shifting memory
AU2016219700B2 (en) * 2011-01-18 2018-06-28 Dolby International Ab Video decoder with reduced dynamic range transform with inverse transform shifting memory
US20120183045A1 (en) * 2011-01-18 2012-07-19 Louis Joseph Kerofsky Video decoder with reduced dynamic range transform including clipping
KR20120098499A (ko) * 2011-02-25 2012-09-05 삼성전자주식회사 영상의 변환 방법 및 장치, 및 영상의 역변환 방법 및 장치
US9326001B2 (en) * 2011-03-22 2016-04-26 International Business Machines Corporation Scalable image distribution in virtualized server environments
TWI601419B (zh) 2011-06-30 2017-10-01 三星電子股份有限公司 視訊解碼方法
CN103959780B (zh) * 2011-12-15 2017-10-13 寰发股份有限公司 量化电平截取装置及方法
WO2013086724A1 (en) 2011-12-15 2013-06-20 Mediatek Singapore Pte. Ltd. Method of clippling transformed coefficients before de-quantization
WO2013109471A1 (en) * 2012-01-19 2013-07-25 Vid Scale, Inc. System and method of video coding quantization and dynamic range control
US9131210B2 (en) * 2012-03-16 2015-09-08 Texas Instruments Incorporated Low-complexity two-dimensional (2D) separable transform design with transpose buffer management
AU2013264361B2 (en) 2012-05-25 2017-01-05 Sun Patent Trust Image encoding method, image encoding device, image decoding method, image decoding device, and image encoding/decoding device
CA2841112C (en) 2012-05-25 2019-09-17 Panasonic Corporation Moving picture coding and decoding using context adaptive binary arithmetic coding with fixed probability for some sample adaptive offset parameters
WO2013175736A1 (ja) 2012-05-25 2013-11-28 パナソニック株式会社 動画像符号化方法、動画像符号化装置、動画像復号方法、動画像復号装置、および、動画像符号化復号装置
WO2013183232A1 (ja) 2012-06-04 2013-12-12 パナソニック株式会社 動画像符号化方法、動画像符号化装置、動画像復号方法、および、動画像復号装置
KR20130137951A (ko) * 2012-06-08 2013-12-18 한국전자통신연구원 초고해상도 영상 코덱을 위한 역변환 방법
US8806489B2 (en) 2012-07-05 2014-08-12 International Business Machines Corporation Virtual machine image distribution network
US9648332B2 (en) * 2013-10-28 2017-05-09 Qualcomm Incorporated Adaptive inter-color component residual prediction
JP6102707B2 (ja) * 2013-12-05 2017-03-29 Nttエレクトロニクス株式会社 デジタル符号化装置
US9432696B2 (en) 2014-03-17 2016-08-30 Qualcomm Incorporated Systems and methods for low complexity forward transforms using zeroed-out coefficients
US9516345B2 (en) * 2014-03-17 2016-12-06 Qualcomm Incorporated Systems and methods for low complexity forward transforms using mesh-based calculations
US10057587B2 (en) * 2015-01-31 2018-08-21 Qualcomm Incorporated Coding escape pixels for palette mode coding
KR101644039B1 (ko) * 2015-06-11 2016-07-29 에스케이텔레콤 주식회사 고정소수점 연산 방법 및 고정소수점 연산 장치
JP2020098986A (ja) * 2018-12-17 2020-06-25 キヤノン株式会社 画像符号化装置及び画像復号装置及びそれらの制御方法及びプログラム
MX2022006797A (es) * 2019-12-06 2022-09-12 Fraunhofer Ges Forschung Intraprediccion basada en matriz con ajustes de modo global.
EP3849089A1 (en) * 2020-01-09 2021-07-14 Microsoft Technology Licensing, LLC Encoding for data recovery in storage systems

Family Cites Families (62)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US3120605A (en) * 1959-09-02 1964-02-04 Technion Res & Dev Foundation General purpose transistorized function generator
US3982112A (en) * 1974-12-23 1976-09-21 General Electric Company Recursive numerical processor
JP2811369B2 (ja) * 1989-01-27 1998-10-15 ドルビー・ラボラトリーズ・ライセンシング・コーポレーション 高品質オーディオ用短時間遅延変換コーダ、デコーダ、及びエンコーダ・デコーダ
US5129015A (en) * 1990-04-19 1992-07-07 Ricoh Company Ltd. Apparatus and method for compressing still images without multiplication
DE9016732U1 (de) 1990-12-11 1992-04-09 Robert Bosch Gmbh, 70469 Stuttgart Elektrisches Gerät, insbesondere Schalt- und Steuergerät für Kraftfahrzeuge
US5122875A (en) 1991-02-27 1992-06-16 General Electric Company An HDTV compression system
RU2096955C1 (ru) 1991-03-01 1997-11-27 Е.И.Дюпон Де Немур Энд Компани Вододиспергируемая гранулированная пестицидная композиция, получаемая методом экструзии, и способ ее получения
JPH0530470A (ja) * 1991-07-19 1993-02-05 Sony Corp デイジタルビデオ信号の記録および/または再生方法
US5285402A (en) * 1991-11-22 1994-02-08 Intel Corporation Multiplyless discrete cosine transform
US5539836A (en) * 1991-12-20 1996-07-23 Alaris Inc. Method and apparatus for the realization of two-dimensional discrete cosine transform for an 8*8 image fragment
TW224553B (en) 1993-03-01 1994-06-01 Sony Co Ltd Method and apparatus for inverse discrete consine transform and coding/decoding of moving picture
EP0648051B1 (en) * 1993-03-31 1999-02-03 Sony Corporation Signal processor
JP2816295B2 (ja) * 1993-05-21 1998-10-27 鐘紡株式会社 離散コサイン変換方法および離散コサイン変換回路
RU2122295C1 (ru) 1994-04-29 1998-11-20 Виктор Павлович Дворкович Способ покадрового сжатия изображений
US6549666B1 (en) * 1994-09-21 2003-04-15 Ricoh Company, Ltd Reversible embedded wavelet system implementation
US5701263A (en) 1995-08-28 1997-12-23 Hyundai Electronics America Inverse discrete cosine transform processor for VLSI implementation
US6026183A (en) * 1995-10-27 2000-02-15 Texas Instruments Incorporated Content-based video compression
JP3302870B2 (ja) * 1995-12-11 2002-07-15 三菱電機株式会社 センサのバイアス誤差推定装置
US5825927A (en) * 1996-01-16 1998-10-20 Hitachi America, Ltd. Methods and apparatus for encoding video data in a manner that is well suited for decoding by regular or downconverting decoders
US5754456A (en) 1996-03-05 1998-05-19 Intel Corporation Computer system performing an inverse cosine transfer function for use with multimedia information
US6020838A (en) * 1996-12-23 2000-02-01 National Instruments Corporation System and method for generating a sigma-delta correction circuit using matrix calculation of linearity error correction coefficients
DE59801516D1 (de) 1997-01-31 2001-10-25 Siemens Ag Verfahren und anordnung zur codierung und decodierung eines digitalisierten bildes
TW376628B (en) * 1997-05-06 1999-12-11 Holtek Semiconductor Inc Method of accelerating JPEG quantization calculation in image compression
US6134270A (en) * 1997-06-13 2000-10-17 Sun Microsystems, Inc. Scaled forward and inverse discrete cosine transform and video compression/decompression systems employing the same
JP3524747B2 (ja) * 1998-01-30 2004-05-10 三洋電機株式会社 離散コサイン変換回路
WO1999039303A1 (en) 1998-02-02 1999-08-05 The Trustees Of The University Of Pennsylvania Method and system for computing 8x8 dct/idct and a vlsi implementation
TW395135B (en) 1998-03-03 2000-06-21 Nat Science Council A high throughput and regular architecture of 2-D 8x8 DCT/IDCT using direct form
US6539058B1 (en) * 1998-04-13 2003-03-25 Hitachi America, Ltd. Methods and apparatus for reducing drift due to averaging in reduced resolution video decoders
US6792149B1 (en) 1998-05-07 2004-09-14 Sarnoff Corporation Method and apparatus for resizing an image frame including field-mode encoding
US6310919B1 (en) * 1998-05-07 2001-10-30 Sarnoff Corporation Method and apparatus for adaptively scaling motion vector information in an information stream decoder
KR20000013653A (ko) 1998-08-12 2000-03-06 이종하 정/역 최적화 정수형 여현변환장치 및 그 방법
EP0990992A3 (de) 1998-09-28 2002-02-13 Siemens Aktiengesellschaft Diskreter/invers-diskreter Cosinus-Transformationsvorrichtung und Anordnung
GB2347038A (en) 1999-02-18 2000-08-23 Nokia Mobile Phones Ltd A video codec using re-transmission
US6167092A (en) * 1999-08-12 2000-12-26 Packetvideo Corporation Method and device for variable complexity decoding of motion-compensated block-based compressed digital video
US6529634B1 (en) 1999-11-08 2003-03-04 Qualcomm, Inc. Contrast sensitive variance based adaptive block size DCT image compression
KR100683380B1 (ko) * 2000-02-21 2007-02-15 주식회사 팬택앤큐리텔 영상 압축 부호화를 위한 변환 및 역변환 방법 및 장치
JP2001318910A (ja) * 2000-02-29 2001-11-16 Sony Corp 逆離散コサイン変換装置
DE10116204A1 (de) 2000-08-12 2002-02-21 Bosch Gmbh Robert Verfahren zur ganzzahligen Approximation von Transformationskoeffizienten sowie Coder und Decoder
KR100357689B1 (ko) * 2000-11-13 2002-10-19 삼성전자 주식회사 일관된 화질을 가지는 실시간 가변 비트율 엠펙 비디오전송 시스템
US6859815B2 (en) 2000-12-19 2005-02-22 Koninklijke Philips Electronics N.V. Approximate inverse discrete cosine transform for scalable computation complexity video and still image decoding
US6799192B1 (en) * 2001-01-09 2004-09-28 Apple Computer, Inc. Method and apparatus for inverse discrete cosine transform
US6873655B2 (en) * 2001-01-09 2005-03-29 Thomson Licensing A.A. Codec system and method for spatially scalable video data
US8374237B2 (en) * 2001-03-02 2013-02-12 Dolby Laboratories Licensing Corporation High precision encoding and decoding of video images
JP2002374531A (ja) 2001-06-15 2002-12-26 Victor Co Of Japan Ltd 復号装置
US7082450B2 (en) * 2001-08-30 2006-07-25 Nokia Corporation Implementation of a transform and of a subsequent quantization
US6909753B2 (en) * 2001-12-05 2005-06-21 Koninklijke Philips Electronics, N.V. Combined MPEG-4 FGS and modulation algorithm for wireless video transmission
US7007055B2 (en) * 2002-03-12 2006-02-28 Intel Corporation Method of performing NxM Discrete Cosine Transform
US20030215011A1 (en) 2002-05-17 2003-11-20 General Instrument Corporation Method and apparatus for transcoding compressed video bitstreams
US7379956B2 (en) * 2002-07-14 2008-05-27 Apple Inc. Encoding and decoding data arrays
KR100376060B1 (en) * 2002-10-25 2003-03-17 Humax Co Ltd Method and system for re-setting image size using inverse discrete cosine transform
US7792891B2 (en) * 2002-12-11 2010-09-07 Nvidia Corporation Forward discrete cosine transform engine
CN1326397C (zh) * 2003-06-02 2007-07-11 杭州高特信息技术有限公司 一种dct快速变换结构
TWI224931B (en) * 2003-07-04 2004-12-01 Mediatek Inc Scalable system for inverse discrete cosine transform and method thereof
TWI257054B (en) * 2003-09-03 2006-06-21 Mediatek Inc Rapid and low cost of inverse discrete cosine transform system and method thereof
KR20060135613A (ko) 2003-09-24 2006-12-29 텍사스 인스트루먼츠 인코포레이티드 8×8 변환 및 양자화
GB0323038D0 (en) * 2003-10-02 2003-11-05 Koninkl Philips Electronics Nv Method and apparatus for improved inverse transform calculation
JP3951036B2 (ja) 2003-11-27 2007-08-01 インターナショナル・ビジネス・マシーンズ・コーポレーション 動的小数点方式、動的小数点演算方法、並びに2次元逆離散コサイン変換方法及びその装置
US20050196055A1 (en) * 2004-03-04 2005-09-08 Sheng Zhong Method and system for codifying signals that ensure high fidelity reconstruction
US7730116B2 (en) * 2004-12-14 2010-06-01 Stmicroelectronics, Inc. Method and system for fast implementation of an approximation of a discrete cosine transform
US8385424B2 (en) 2006-06-26 2013-02-26 Qualcomm Incorporated Reduction of errors during computation of inverse discrete cosine transform
US8699810B2 (en) * 2006-06-26 2014-04-15 Qualcomm Incorporated Efficient fixed-point approximations of forward and inverse discrete cosine transforms
US8300698B2 (en) * 2006-10-23 2012-10-30 Qualcomm Incorporated Signalling of maximum dynamic range of inverse discrete cosine transform

Also Published As

Publication number Publication date
CN102016829B (zh) 2015-10-14
CA2653692A1 (en) 2008-01-03
IN2014MN01239A (pt) 2015-07-03
WO2008002881A2 (en) 2008-01-03
CN102007489B (zh) 2014-04-23
EP2035959B1 (en) 2020-06-17
KR100982156B1 (ko) 2010-09-14
TWI373255B (en) 2012-09-21
JP2010505154A (ja) 2010-02-18
JP2013211011A (ja) 2013-10-10
CA2653693C (en) 2013-07-23
KR101013344B1 (ko) 2011-02-14
JP5269782B2 (ja) 2013-08-21
TW200814792A (en) 2008-03-16
WO2008002897A3 (en) 2011-01-06
JP2010501911A (ja) 2010-01-21
EP2035959A2 (en) 2009-03-18
US20070299897A1 (en) 2007-12-27
US8606023B2 (en) 2013-12-10
CN102007489A (zh) 2011-04-06
CN102016829A (zh) 2011-04-13
CA2653692C (en) 2013-07-30
US8385424B2 (en) 2013-02-26
CA2653693A1 (en) 2008-01-03
EP2035958A2 (en) 2009-03-18
WO2008002881A3 (en) 2011-01-06
KR20090027670A (ko) 2009-03-17
JP5661836B2 (ja) 2015-01-28
WO2008002897A2 (en) 2008-01-03
KR20090016732A (ko) 2009-02-17
US20070297504A1 (en) 2007-12-27
TW200814738A (en) 2008-03-16
TWI382767B (zh) 2013-01-11
JP5086343B2 (ja) 2012-11-28

Similar Documents

Publication Publication Date Title
BRPI0712984A2 (pt) redução de erros durante computação de transformada de coseno discreta inversa
US8699810B2 (en) Efficient fixed-point approximations of forward and inverse discrete cosine transforms
RU2439682C2 (ru) Уменьшение ошибок во время вычисления обратного дискретного косинусного преобразования
JP5129248B2 (ja) 順方向および逆離散コサイン変換の効率的な固定小数点近似
RU2417423C2 (ru) Эффективные аппроксимации с фиксированной запятой прямого и обратного дискретных косинусных преобразований
BRPI0712997A2 (pt) redução de erros durante computação de transformada de co-seno discreta inversa

Legal Events

Date Code Title Description
B15K Others concerning applications: alteration of classification

Ipc: G06F 17/14 (2006.01), H04N 19/44 (2014.01), H04N 1

B07A Application suspended after technical examination (opinion) [chapter 7.1 patent gazette]
B09B Patent application refused [chapter 9.2 patent gazette]
B12B Appeal against refusal [chapter 12.2 patent gazette]
B08F Application dismissed because of non-payment of annual fees [chapter 8.6 patent gazette]

Free format text: REFERENTE A 13A ANUIDADE.

B08K Patent lapsed as no evidence of payment of the annual fee has been furnished to inpi [chapter 8.11 patent gazette]

Free format text: EM VIRTUDE DO ARQUIVAMENTO PUBLICADO NA RPI 2594 DE 24-09-2020 E CONSIDERANDO AUSENCIA DE MANIFESTACAO DENTRO DOS PRAZOS LEGAIS, INFORMO QUE CABE SER MANTIDO O ARQUIVAMENTO DO PEDIDO DE PATENTE, CONFORME O DISPOSTO NO ARTIGO 12, DA RESOLUCAO 113/2013.