BRPI0712997A2 - redução de erros durante computação de transformada de co-seno discreta inversa - Google Patents

redução de erros durante computação de transformada de co-seno discreta inversa Download PDF

Info

Publication number
BRPI0712997A2
BRPI0712997A2 BRPI0712997-1A BRPI0712997A BRPI0712997A2 BR PI0712997 A2 BRPI0712997 A2 BR PI0712997A2 BR PI0712997 A BRPI0712997 A BR PI0712997A BR PI0712997 A2 BRPI0712997 A2 BR PI0712997A2
Authority
BR
Brazil
Prior art keywords
coefficients
matrix
coefficient
values
coefficient matrix
Prior art date
Application number
BRPI0712997-1A
Other languages
English (en)
Inventor
Harinath Garudadri
Yuriy Reznik
Original Assignee
Qualcomm Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Qualcomm Inc filed Critical Qualcomm Inc
Priority claimed from PCT/US2007/072039 external-priority patent/WO2008002881A2/en
Publication of BRPI0712997A2 publication Critical patent/BRPI0712997A2/pt

Links

Landscapes

  • Complex Calculations (AREA)
  • Compression Or Coding Systems Of Tv Signals (AREA)

Abstract

REDUçãO DE ERROS DURANTE COMPUTAçãO DE TRANSFORMADA DE COSENO DISCRETA INVERSA. São descritas técnicas para reduzir erros de arredondamento durante computação de transformada de coseno discreta utilizando cálculos de ponto fixo. De acordo com essas técnicas, uma transformada de co-seno discreta, uma matriz de coeficientes escalonados é calculada multiplicando coeficientes em uma matriz de coeficientes por fatores de escalonamento. 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. Então, uma transformada de coseno discreta inversa é aplicada à matriz resultante de coeficientes escalonados. Os valores na matriz resultante são então deslocados a direita para derivar uma matriz de valores de componente de pixel. Como descrito aqui, a adição do valor de polarização suplementar ao coeficiente DC reduz erros de arredondamento atribuíveis a esse deslocamento a direita. Como resultado, uma versão final de um arquivo de mídia digital descomprimido utilizando essas técnicas pode lembrar mais estreitamente uma versão original de um arquivo de mídia digital.

Description

"REDUÇÃO DE ERROS DURANTE COMPUTAÇÃO DE TRANSFORMADA DE CO-
SENO DISCRETA INVERSA"
Esse pedido reivindica o beneficio do pedido provisional US número 60/816.697, depositado em 26 de junho de 2006, pedido provisional US número 60/841.362, depositado em 30 de agosto de 2006, pedido provisional US número 60/847.194, depositado em 25 de setembro de 2006, pedido provisional US número 60/829.669, depositado em 16 de outubro de 2006, e pedido provisional US número .60/869.530, depositado em 11 de dezembro de 2006, cujos teores integrais são incorporados aqui a titulo de referência. Campo Técnico
A revelação refere-se a multimídia e gráficos de computador, e particularmente à compressão de gráficos, imagens e informações de vídeo. Fundamentos
Muitos padrões de codificação de vídeo e imagem existentes empregam técnicas de compressão para permitir que imagens de resolução alta e vídeo sejam armazenados ou transmitidos como fluxos de dados ou arquivos relativamente compactos. Tais padrões de codificação incluem Joint Photographic Experts Group (JPEG), Moving Pictures Experts Group (MPEG)-I, MPEG-2, MPEG-4 parte 2, H.261, H.263, e outros padrões de codificação de vídeo ou imagem.
De acordo com muitos desses padrões, quadros de vídeo são comprimidos utilizando codificação "espacial". Esses quadros podem ser quadros originais (isto é, quadros- i) ou podem ser quadros residuais gerados por um processo de codificação temporal que utiliza compensação de movimento. Durante codificação espacial, quadros são divididos em blocos de pixels de tamanho igual. Para cada bloco de pixels, componentes de pixel são separados em matrizes de valores de componente de pixel. Por exemplo, cada bloco de pixels pode ser dividido em uma matriz de valores de componente de pixel Y, uma matriz de valores de componente de pixel U, e uma matriz de valores de componente de pixel V. Nesse exemplo, valores de componente de pixel Y indicam valores de luminância e valores de componente de pixel UeV representam valores de crominância.
Além disso, durante codificação espacial, uma transformada de co-seno discreta direta (FDCT) é aplicada a cada matriz de valores de componente de pixel em um quadro que está sendo codificado. Uma FDCT unidimensional ideal é definida por:
<formula>formula see original document page 3</formula>
onde s é a disposição de valores originais N, t é a disposição de valores transformados N, e os coeficientes c são dados por
c(0)=yfVN,c(k) = j2ÍN
para 1 < k < N - 1. Uma FDCT bidimensional ideal é definida pela
fórmula: <formula>formula see original document page 3</formula>
onde s é a disposição de valores originais N, t é a disposição de valores transformados N, e c(i,j) é dado por c(i,j) = c(i)c(j), e com c(k) definido como no caso unidimensional.
Uma matriz de coeficientes é produzida quando o bloco de valores de componente de pixel é transformado utilizando a FDCT. Essa matriz de coeficientes pode ser então quantificada e codificada utilizando, por exemplo, códigos aritméticos ou Huffman. Um fluxo de bits de video representa o resultado combinado de executar esse processo em todos os blocos de valores de componente de pixel em uma série de quadros de video em uma série não comprimida de quadros de video.
Um quadro de video não comprimido pode ser derivado de um fluxo de bits de video por reverter esse processo. Em particular, cada matriz de coeficientes no fluxo de bits é descomprimida e os valores descomprimidos são dequantizados para derivar matrizes de coeficientes transformados. Uma transformada de co-seno discreta inversa ("IDCT") é então aplicada a cada matriz de coeficientes transformado para derivar matrizes de valores de componente de pixel. Uma IDCT unidimensional ideal é definida por:
<formula>formula see original document page 4</formula>
onde s é a disposição de valores originais N, t é a disposição de valores transformados N e os coeficientes c são dados por
<formula>formula see original document page 4</formula>
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 componente de pixel são então montadas novamente em blocos de pixels e esses blocos de pixels são remontados para formar um quadro decodificado. Se o quadro decodificado for um quadro-i, o quadro está agora totalmente decodificado. Entretanto, se o quadro não comprimido for um quadro preditivo ou bi- preditivo, o quadro decodificado é meramente um quadro residual decodificado. Um quadro completo é gerado pela construção de um quadro reconstruído utilizando vetores de movimento associados ao quadro decodificado e então adicionando o quadro reconstruído ao quadro residual decodificado.
Sob circunstâncias ideais, nenhuma informação é perdida utilizando uma FDCT para codificar ou uma IDCT para decodificar um bloco de valores de componente de pixel. Conseqüentemente, sob essas circunstâncias ideais, uma versão decodificada de um quadro de vídeo é idêntica à versão original do quadro de vídeo. Entretanto, a computação de uma FDCT ou uma IDCT pode ser difícil em termos computacionais porque a computação de FDCTs e IDCTs envolve o uso de números reais e números significativos de operações de multiplicação. Por esse motivo, números reais utilizados em FDCTs e IDCTs são freqüentemente aproximados utilizando números de precisão limitados. Erros de arredondar resultam a partir do uso de números de precisão limitada para representar valores de número real. Além disso, a quantização e dequantização podem contribuir erros adicionais.
Erros no processo de compressão e 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 das cores no quadro não comprimido original. Além disso, erros causados por um descasamento entre a implementação das IDCTs pelo codificador e a implementação da IDCT pelo decodificador podem acumular durante a codificação e decodificação de seqüências de quadros previstos. Esses erros acumulados são comumente mencionados como "derivação de IDCT".
SUMÁRIO São descritas técnicas para reduzir erros de arredondamento durante computação de transformada de co- seno discreta utilizando cálculos de ponto fixo. De acordo com essas técnicas, uma matriz de coeficientes de escalonamento é calculada multiplicando coeficientes em uma matriz de coeficientes por fatores de escalonamento. 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 co-seno discreta inversa é aplicada à matriz resultante de coeficientes escalonados. Valores na matriz resultante são então deslocados a direita para derivar uma matriz de valores de componente de pixel. Como descrito aqui, a adição do valor de polarização suplementar ao coeficiente de DC reduz erros de arredondamento atribuíveis a esse deslocamento a direita. Como resultado, uma versão final de um arquivo de mídia digital descomprimido utilizando essas técnicas pode lembrar mais estreitamente uma versão original de um arquivo de mídia digital.
Em um aspecto, um método compreende gerar uma matriz de coeficientes polarizados por adição de um ou mais valores de polarização a um coeficiente de uma matriz de coeficientes de fonte. O método também compreende gerar uma matriz de coeficientes transformados utilizando aritmética de ponto fixo para repetidamente aplicar uma transformada unidimensional para coeficientes na matriz de coeficientes polarizados. Além disso, o método compreende gerar uma matriz de coeficientes de saída por deslocar a direita coeficientes na matriz de coeficientes transformados. Coeficientes na matriz de coeficientes de saída são aproximações de valores que seriam produzidos por transformar a matriz de coeficientes de fonte utilizando uma transformada de co-seno discreta inversa ideal. 0 método também compreende fazer com que uma unidade de apresentação de midia transmita sinais audíveis ou visíveis com base na matriz de valores de saída. Δ adição dos valores de polarização ao coeficiente 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. Os erros representam diferenças entre valores que resultam de representações de coeficientes, de ponto fixo com precisão limitada de deslocamento a direita, na matriz de coeficientes transformados por uma primeira magnitude e resulta da divisão dos coeficientes na matriz de coeficientes transformados por 2 elevada a potência da primeira magnitude, sem considerar a precisão. Em outro aspecto, um dispositivo compreende um módulo de polarização de coeficiente que gera uma matriz de coeficientes polarizados por adição de um ou mais valores de polarização a um coeficiente da matriz de coeficientes de fonte. 0 dispositivo também compreende um módulo de transformada inversa que gera uma matriz de coeficientes transformados utilizando aritmética de ponto fixo para repetidamente aplicar uma transformada unidimensional a coeficientes na matriz de coeficientes polarizados. Além disso, o dispositivo compreende um módulo de deslocamento a direita que gera uma matriz de coeficientes de saída por coeficientes de deslocamento a direita na matriz de coeficientes transformados. Coeficientes na matriz de coeficientes de saída são aproximações de valores que seriam produzidas por transformação da matriz de coeficientes de fonte utilizando uma transformada de co- seno discreta inversa, ideal. O dispositivo também compreende um acionador de apresentação que faz com que uma unidade de apresentação de mídia transmita sinais audíveis ou visíveis com base na matriz de coeficientes de saída. A adição dos valores de polarização ao coeficiente faz com que erros positivos e erros negativos seja, em média, iguais em magnitude e sejam, em média simétricos em torno de zero. Os erros representam diferenças entre valores que resultam de representações de coeficientes, de ponto fixo com precisão limitada de deslocamento a direita, na matriz de coeficientes transformados por uma primeira magnitude e resulta da divisão dos coeficientes na matriz de coeficientes transformados por 2 elevada a potência da primeira magnitude, sem considerar a precisão.
Em outro aspecto, um dispositivo compreende mecanismos para gerar uma matriz de coeficientes polarizados por adição de um ou mais valores de polarização a um coeficiente de uma matriz de coeficientes de fonte. 0 dispositivo também compreende mecanismos para gerar uma matriz de coeficientes transformados utilizando aritmética de ponto fixo para aplicar repetidamente uma transformada unidimensional a coeficiente na matriz de coeficientes polarizados. Além disso, o dispositivo compreende mecanismos para gerar uma matriz de coeficientes de saída por coeficientes de deslocamento a direita na matriz de coeficientes transformados. Coeficientes na matriz de coeficientes de saída são aproximações de valores que seriam produzidas por transformação da matriz de coeficientes de fonte utilizando uma transformada de co- seno discreta inversa, ideal. 0 dispositivo também compreende mecanismos para fazer com que uma unidade de apresentação de mídia transmita sinais audíveis ou visíveis com base na matriz de valores de saída. A adição dos valores de polarização ao coeficiente 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. Os erros representam diferenças entre valores que resultam de representações de coeficientes, de ponto fixo com precisão limitada de deslocamento a direita, na matriz de coeficientes transformados por uma primeira magnitude e resulta da divisão dos coeficientes na matriz de coeficientes transformados por 2 elevada a potência da primeira magnitude, sem considerar a precisão.
Em outro aspecto, a invenção é dirigida a um meio legível por computador compreendendo instruções. Após execução as instruções fazem com que um processador gere uma matriz de coeficientes polarizados pela adição de um ou mais valores de polarização a um coeficiente de uma matriz de coeficientes de fonte. As instruções também fazem com que o processador gere uma matriz de coeficientes transformados utilizando aritmética de ponto fixo para aplicar repetidamente uma transformada unidimensional a coeficientes na matriz de coeficientes polarizados. Além disso, após fazer com que o processador gere uma matriz de coeficientes de saída por coeficientes de deslocamento a direita na matriz de coeficientes transformados. Coeficientes na matriz de coeficientes de saída são aproximações de valores que seriam produzidos por transformação da matriz de coeficientes de fonte utilizando uma transformada de co-seno discreta inversa, ideal. As instruções também fazem com que uma unidade de apresentação de mídia transmita sinais audíveis ou visíveis com base na matriz de valores de saída. A adição dos valores de polarização ao coeficiente 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. Os erros representam diferenças entre valores que resultam de representações de coeficientes, de ponto fixo com precisão limitada de deslocamento a direita, na matriz de coeficientes transformados por uma primeira magnitude e resulta da divisão dos coeficientes na matriz de coeficientes transformados por 2 elevada a potência da primeira magnitude, sem considerar a precisão.
Em outro aspecto, um método compreende gerar uma matriz de coeficientes ajustados por deslocamento a esquerda de cada coeficiente em uma matriz de coeficientes de fonte. 0 método também compreende gerar uma matriz de coeficientes transformados utilizando aritmética de ponto fixo para aplicar repetidamente uma transformada unidimensional a coeficientes na matriz de coeficientes ajustados. Além disso, o método compreende gerar uma matriz de coeficientes escalonados por escalonar cada coeficiente na matriz de coeficientes transformados. Além disso, o método compreende gerar uma matriz de coeficientes polarizados por adição de um ou mais valores de polarização a um ou mais coeficientes na matriz de coeficientes escalonados. 0 método também compreende gerar uma matriz de coeficientes de saida por coeficientes de deslocamento a direita na matriz de coeficientes polarizados por uma primeira magnitude. A matriz de coeficientes de fonte representa dados de midia. Coeficientes na matriz de coeficientes de saida são aproximações de valores que seriam produzidos por transformação da matriz de coeficientes de fonte utilizando uma transformada de co- seno discreta direta ideal. A adição dos valores de polarização ao coeficiente 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. Os erros representam diferenças entre valores que resultam de representações de coeficientes, de ponto fixo com precisão limitada de deslocamento a direita, na matriz de coeficientes polarizados por uma primeira magnitude e resulta da divisão dos coeficientes na matriz de coeficientes polarizados por 2 elevada a potência da primeira magnitude, sem considerar a precisão.
Em outro aspecto, um dispositivo compreende um módulo de deslocamento a esquerda que gera uma matriz de coeficientes ajustados por deslocamento a esquerda de cada coeficiente em uma matriz de coeficientes de fonte. O dispositivo também compreende um módulo de transformada direta que gera uma matriz de coeficientes transformados utilizando aritmética de ponto fixo para repetidamente aplicar uma transformada unidimensional a coeficientes na matriz de coeficientes ajustados. Além disso, o dispositivo compreende um módulo de escalonamento que gera uma matriz de coeficientes escalonados por escalonar cada coeficiente na matriz de coeficientes transformados. O dispositivo também compreende um módulo de polarização de coeficiente que gera uma matriz de coeficientes polarizados por adição de um ou mais valores de polarização a um ou mais coeficientes na matriz de coeficientes escalonados. Além disso, o dispositivo compreende um módulo de deslocamento a direita que gera uma matriz de coeficientes de saida por coeficiente de deslocamento a direita na matriz de coeficientes polarizados por uma primeira magnitude. A matriz de coeficientes de fonte representa dados de midia. Coeficientes na matriz de coeficientes de saida são aproximações de valores que seriam produzidos por transformar a matriz de coeficientes de fonte utilizando uma transformada de co-seno discreta direta, ideal. A adição dos valores de polarização ao coeficiente 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. Os erros representam diferenças entre valores que resultam de representações de coeficientes, de ponto fixo com precisão limitada de deslocamento a direita, na matriz de coeficientes polarizados por uma primeira magnitude e resulta da divisão dos coeficientes na matriz de coeficientes polarizados por 2 elevada a potência da primeira magnitude, sem considerar a precisão.
Em outro aspecto, um dispositivo compreende mecanismos para gerar uma matriz de coeficientes ajustados por deslocamento a esquerda cada coeficiente em uma matriz de coeficientes de fonte. 0 dispositivo também compreende mecanismos para gerar uma matriz de coeficientes transformados utilizando aritmética de ponto fixo para repetidamente aplicar uma transformada unidimensional a coeficientes na matriz de coeficientes ajustados. Além disso, o dispositivo compreende mecanismos para gerar uma matriz de coeficientes escalonados por escalonar cada coeficiente na matriz de coeficientes transformados. O dispositivo também compreende mecanismos para gerar uma matriz de coeficientes polarizados por adição de um ou mais valores de polarização a um ou mais coeficientes na matriz de coeficientes escalonados. Além disso, o dispositivo compreende mecanismos para gerar uma matriz de coeficientes de saída por coeficiente de deslocamento a direita na matriz de coeficientes polarizados por uma primeira magnitude. A matriz de coeficientes de fonte representa dados de mídia. Coeficientes na matriz de coeficientes de saída são aproximações de valores que seriam produzidos por transformação da matriz de coeficientes de fonte utilizando uma transformada de co-seno discreta direta, ideal. A adição dos valores de polarização ao coeficiente 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. Os erros representam diferenças entre valores que resultam de representações de coeficientes, de ponto fixo com precisão limitada de deslocamento a direita, na matriz de coeficientes polarizados por uma primeira magnitude e resulta da divisão dos coeficientes na matriz de coeficientes polarizados por 2 elevada a potência da primeira magnitude, sem considerar a precisão.
Em outro aspecto, um meio legível por computador compreende instruções. As instruções fazem com que um processador programável gere uma matriz de coeficientes ajustados por deslocar a esquerda cada coeficiente em uma matriz de coeficientes de fonte. As instruções também fazem com que o processador gere uma matriz de coeficientes transformados utilizando aritmética de ponto fixo para aplicar repetidamente uma transformada unidimensional a coeficientes na matriz de coeficientes ajustados. Além disso, as instruções fazem com que o processador gere uma matriz de coeficientes escalonados por escalonar cada coeficiente na matriz de coeficientes transformados. Além disso, as instruções fazem com que o processador gere uma matriz de coeficientes polarizados por adição de um ou mais valores de polarização a um ou mais coeficientes na matriz de coeficientes escalonados. As instruções também fazem com que o processador gere uma matriz de coeficientes de saída por deslocar a direita coeficientes na matriz de coeficientes polarizados por uma primeira magnitude. A matriz de coeficientes de fonte representa dados de mídia. Coeficientes na matriz de coeficientes de saída são aproximações de valores que seriam produzidas pela transformação da matriz de coeficientes de fonte utilizando uma transformada de co-seno discreta direta ideal. A adição dos valores de polarização ao coeficiente 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. Os erros representam diferenças entre valores que resultam de representações de coeficientes, de ponto fixo com precisão limitada de deslocamento a direita, na matriz de coeficientes polarizados por uma primeira magnitude e resulta da divisão dos coeficientes na matriz de coeficientes polarizados por 2 elevada a potência da primeira magnitude, sem considerar a precisão.
Em alguns casos, o meio legível por computador pode fazer parte de um produto de programa de computador, que pode ser vendido a fabricantes e/ou utilizado em um dispositivo. O produto de programa de computador pode incluir o meio legível por computador, e em alguns casos, também pode incluir materiais de empacotamento.
Os detalhes de um ou mais exemplos são expostos nos desenhos em anexo e na descrição abaixo. Outras características, objetos, e vantagens da invenção serão evidentes a partir da descrição e desenhos, e a partir das reivindicações.
BREVE DESCRIÇÃO DOS DESENHOS
A figura 1 é um diagrama de blocos que ilustra um dispositivo exemplar que codifica e decodifica arquivos de mídia.
A figura 2 é um diagrama de blocos que ilustra detalhes exemplares de um módulo de codificação.
A figura 3 é um diagrama de blocos que ilustra detalhes exemplares de um módulo de decodificação.
A figura 4 é um fluxograma que ilustra uma operação exemplar do módulo de codificação.
A figura 5 é um fluxograma que ilustra uma operação exemplar do módulo de decodificação.
A figura 6 é um diagrama de blocos que ilustra detalhes exemplares de um módulo de transformada de co-seno discreta inversa (mIDCT"). A figura 7 é um fluxograma que ilustra uma operação exemplar do módulo IDCT.
A figura 8 é um diagrama de blocos que ilustra detalhes exemplares de um módulo de transformada de co-seno discreta direta ("FDCT").
A figura 9 é um fluxograma que ilustra uma operação exemplar do módulo FDCT.
A figura 10 é um diagrama de fluxo que ilustra uma primeira transformada unidimensional exemplar. A figura 11 é um diagrama de fluxo que ilustra uma segunda transformada unidimensional exemplar.
A figura 12 é um diagrama de fluxo que ilustra uma transformada unidimensional escalonada, exemplar, utilizada pelo módulo IDCT. DESCRIÇÃO DETALHADA
A figura 1 é um diagrama de blocos que ilustra um dispositivo exemplar 2 que codifica e decodifica arquivos de mídia. 0 dispositivo 2 pode compreender um computador pessoal, um radiotelefone móvel, um servidor, um aparelho de rede, um computador integrado em um veículo, uma plataforma de video gaming, um dispositivo de video game portátil, uma estação de trabalho de computador, um quiosque de computador, signage digital, um computador de grande porte, um set-top box de televisão, um telefone de rede, um assistente pessoal digital, uma plataforma de video game, um tocador de mídia móvel, um tocador de mídia nativo, projetor de vídeo digital, um tocador de mídia pessoal (por exemplo, um iPod), ou outro tipo de dispositivo eletrônico. O dispositivo 2 pode incluir uma fonte de mídia 4 para gerar dados de mídia. A fonte de mídia 4 pode compreender um vídeo digital ou câmera de foto fixa para capturar dados de imagens. A fonte de mídia 4 pode ser embutida no dispositivo 2 ou pode ser fixada ao dispositivo 2 como um dispositivo periférico. A fonte de mídia 4 também pode compreender um microfone para gravar dados de áudio. A fonte de mídia 4 pode fornecer dados de mídia para um processador 6. 0 processador 6 pode compreender um processador de sinais digitais ("DSP"), um microprocessador, ou algum outro tipo de circuito integrado.
Quando o processador 6 recebe dados de mídia a partir 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 hardware especializado no processador 6 que codifica os dados de mídia. Ainda em 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.
0 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, uma unidade de disco rígido, ou algum outro tipo de unidade de armazenagem de dados voláteis ou não voláteis.
Um módulo de decodificação 12 pode recuperar dados de mídia codificados a partir do repositório de mídia 10. 0 módulo de decodificação 12 pode compreender software executado pelo processador 6. Alternativamente, o módulo de decodificação 12 pode compreender hardware especializado no processador 6 que decodifica os dados de mídia codificados. Ainda em outra alternativa, o 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 mídia 14 apresente dados de mídia decodificados pelo módulo de decodificação 12. Por exemplo, a unidade de apresentação de mídia 14 pode compreende um monitor de computador que apresenta dados de mídia de vídeo ou imagem. Em outro exemplo, a unidade de apresentação de mídia 14 pode compreender um dispositivo de saída de áudio (por exemplo, um alto-falante) que apresenta dados de mídia de áudio. A unidade de apresentação de mídia 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. 0 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 mídia 14 apresente dados de mídia.
O dispositivo 2 também pode compreender uma interface de rede 16. A interface de rede 16 pode facilitar a comunicação entre o dispositivo 2 e uma rede de computador via um link cabeado ou sem fio. Por exemplo, a interface de rede 16 pode facilitar a comunicação entre o dispositivo 2 e uma rede de telefone móvel. O dispositivo 2 pode receber arquivos de mídia através da interface de rede .16. Por exemplo, o dispositivo 2 pode receber fotografias, video clips, video de fluxo contínuo (por exemplo, televisão, videoconferência, filmes), clips de áudio (por exemplo, ringtones, músicas, arquivos MP3), áudio de fluxo contínuo (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 arquivo de mídia ou fluxo de bits de vídeo, a interface de rede 16 pode armazenar o arquivo de mídia ou fluxo de bits de vídeo no repositório de mídia 10. Um sinal de vídeo pode ser descrito em termos de uma seqüência de imagens, que inclui quadro (uma imagem inteira) , ou campos (por exemplo, uma imagem que compreende linhas ímpares ou pares de um quadro). Além disso, cada quadro ou campo pode incluir duas ou mais fatias, ou sub- porções do quadro ou campo. Como utilizado aqui, individualmente ou em combinação com outras palavras, o termo "quadro" pode se referir a uma imagem, um quadro, um campo ou uma fatia do mesmo.
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 iniciar por selecionar uns dos quadros de video para serem "quadros-i". Por exemplo, o módulo de codificação 8 pode selecionar todo oitavo quadro como um quadro-i. Quadros-i são quadros que não referenciam outros quadros. Após selecionar os quadros-i, o módulo de codificação 8 utiliza "codificação espacial" para codificar os quadros-i. Além disso, o módulo de codificação 8 pode utilizar "codificação temporal" para codificar os quadros restantes.
Para utilizar codificação espacial para codificar um quadro, o módulo de codificação 8 pode dividir os dados de quadro em blocos de pixels. Por exemplo, o módulo de codificação 8 pode dividir os dados de quadro em blocos de pixels que têm oito pixels de largura e 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 componente de pixel dos pixels em cada bloco de pixels em matrizes separadas de valores de componente de pixel. Os valores de componente 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 componente de pixel Y, um valor de componente de pixel Cr, e um valor de componente de pixel Cb. O valor de componente de pixel Y indica a luminância do pixel, o valor de componente de pixel Cr indica a crominância vermelha do pixel, e o valor de componente de pixel Cb indica a crominância azul do pixel. Nesse exemplo, quando o módulo de codificação 8 separa os valores de componente de pixel de um bloco de pixels, o módulo de codificação 8 pode obter uma matriz de valores de componente de pixel Y, uma matriz de valores de componente de pixel Cr, e uma matriz de valores de componentes de pixel Cb.
Após separar os valores de componente de pixel em matrizes de valores de componente de pixel, o módulo de codificação 8 gera uma matriz de coeficientes transformados para cada uma das matrizes de valores de componente de pixel. 0 módulo de codificação 8 pode gerar uma matriz de coeficientes transformados para uma matriz de valores de componente de pixel primeiramente gerando uma matriz de coeficientes ajustados por deslocar a esquerda valores de componente de pixel em uma matriz de valores de componente de pixel. 0 módulo de codificação 8 utiliza então aritmética de ponto fixo para aplicar repetidamente uma transformada unidimensional à matriz de coeficientes ajustados, desse modo gerando uma matriz de coeficientes. Em algumas implementações, o módulo de codificação 8 pode então gerar a matriz de coeficientes transformadas por escalonamento da matriz de coeficientes transformados por um conjunto de fatores de escalonamento. Cada um desses fatores de escalonamento é um valor de número inteiro. Os fatores de escalonamento foram selecionados de tal modo que fatores compreendidos na transformada unidimensional podem ser aproximados utilizando números racionais simples. Em implementações que não utilizam escalonamento, a matriz de coeficientes gerada por aplicação da transformada é a matriz de coeficientes transformados. Cada coeficiente na matriz de coeficientes transformados aproxima um valor correspondente em uma matriz de valores que seria produzida por aplicação de uma transformada de co-seno discreta direta bidimensional ideal ("FDCT") à matriz de coeficientes codificados. Uma FDCT unidimensional ideal é definida por:
<formula>formula see original document page 20</formula>
onde s é a disposição de valores originais N, t é a disposição de valores transformados N, e os coeficientes c são dados por <formula>formula see original document page 20</formula> para 1 < k < N - 1.
Uma FDCT bidimensional ideal é definida pela
fórmula: <formula>formula see original document page 20</formula> onde s é a disposição de valores originais N, t é a disposição de valores transformados N, e c(i,j) é dado por c(i,j) = c(i)c(j), e com c(k) definido como no caso unidimensional.
Após derivar uma matriz de coeficientes transformados, o módulo de codificação 8 gera uma matriz de coeficientes quantizados por quantizar os coeficientes na matriz de coeficientes transformados. A quantização dos coeficientes transformados pode reduzir a quantidade de informações associada a coeficientes de alta freqüência na matriz de coeficientes transformados. Após gerar 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 transmitir as matrizes codificadas como parte de um fluxo de bits de video.
Para utilizar 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 utilizado, esses macroblocos podem ser de tamanho fixo ou variável e podem ser de sobreposição ou não sobreposição. Por exemplo, cada macrobloco pode ser um bloco de 16x16 de pixels. 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 for capaz de identificar um macrobloco de fonte em um quadro de referência, o módulo de codificação 8 registra um vetor de movimento para o macrobloco. O vetor de movimento inclui um valor χ que indica o deslocamento horizontal do macrobloco em relação ao macrobloco de fonte identificada e um valor y que indica o deslocamento vertical do macrobloco em relação ao macrobloco de fonte identificada. Se o módulo de codificação 8 for incapaz de identificar um macrobloco de fonte para o macrobloco, pode não ser exigido que o módulo de codificação 8 registra um vetor de movimento para o macrobloco. A seguir, o módulo de codificação 6 gera um quadro "reconstruído". 0 quadro reconstruído contém o quadro que resultaria do movimento dos macroblocos a partir dos quadros de referência de acordo com os vetores de movimento registrado para o quadro atual. Após gerar o quadro reconstruído, o módulo de codificação 8 subtrai os valores de componente de pixel em cada pixel do quadro reconstruído a partir dos valores de componente de pixel correspondentes em pixels correspondentes do quadro atual, resultando em um quadro "residual". 0 módulo de codificação .8 pode utilizar então um esquema de codificação de entropia para comprimir os vetores de movimento para os macroblocos do quadro atual. Além disso, o módulo de codificação 8 utiliza a técnica de codificação espacial descrita acima para comprimir o quadro residual.
0 módulo de decodificação 12 pode executar um processo similar ao do módulo de codificação 8, porém no inverso. Por exemplo, para executar um processo de decodificação espacial, 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 de vídeo codificado. O módulo de decodif icação 12 pode então dequantizar coeficientes em cada matriz de coeficientes quantizados, desse modo gerando 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 por escalonar a matriz de coeficientes quantizados. Após gerar a matriz de coeficientes escalonados, o módulo de decodif icação 12 gera uma matriz de coeficientes polarizados por adição de 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 pela aplicação da fatorização de transformada de co-seno discreta inversa a cada linha e coluna da matriz. Esses erros de arredondamento podem ser atribuíveis ao fato de que esses deslocamentos a direita são substitutos para operações de divisão mais caras computacionalmente e de que operações de deslocamento a direita em aritmética de ponto fixo nem sempre produzem os mesmos resultados como operações de divisão.
Após o módulo de decodificação 12 gerar a matriz de coeficientes polarizados, o módulo de decodificação 12 utiliza 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 por aplicar repetidamente uma transformada unidimensional à matriz de coeficientes polarizados. Por exemplo, o módulo de decodificação 12 pode gerar uma matriz de coeficientes intermediários por aplicar a transformada unidimensional a cada vetor de linha da matriz de coeficientes polarizados. Nesse exemplo, o módulo de decodificação 12 pode então gerar a matriz de coeficientes transformados por aplicação da transformada unidimensional em cada vetor de coluna na matriz de coeficientes intermediários.
O módulo de decodificação 12 pode aplicar essa transformada unidimensional utilizando uma série de "operações de estrutura de borboleta". Em geral, uma "operação de estrutura de borboleta" se refere a uma operação na qual 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 quarto valor intermediário é produzido multiplicando o segundo valor de entrada pela segunda constante, um primeiro valor de saida é produzido pela adição do primeiro valor intermediário e terceiro valor intermediário, e um segundo valor de saida é produzido por adição do 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. Operações de estrutura de borboleta de exemplo são mostradas nas transformadas ilustradas nos exemplos das figuras 10, 11 e 12.
Em sistemas que têm números limitados de bits disponíveis para representar números, pode ser impraticável executar multiplicações por constantes irracionais nas operações de estrutura de borboleta. Por esse motivo, o módulo de decodificação 12 pode aproximar multiplicações por constantes irracionais multiplicando valores por frações racionais que aproximam as constantes irracionais. Para 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 denominado da fração racional. Como mencionado acima, as operações de deslocamento a direita podem causar erros de arredondamento porque as operações de deslocamento a direita em aritmética de ponto fixo nem sempre produzem resultados que são iguais a operações de divisão correspondentes. Como explicado em detalhe abaixo, o módulo de decodificação 12 pode utilizar numeradores negativos em algumas das frações racionais para reduzir erros de arredondamento. 0 uso de numeradores negativos pode evitar a necessidade de adicionar valores de polarização de ponto médio antes dos valores de deslocamento a direita. Isso pode ser vantajoso porque a adição de valores de polarização de ponto médio pode acrescentar 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 transformadas, o módulo de decodificação 12 gera uma matriz de coeficientes ajustados por deslocar a direita cada coeficiente na matriz de coeficientes transformados por um número de posições igual ao número de bits adicionado por aplicação da transformada mais o número de bits adicionado por escalonamento dos coeficientes da matriz de coeficientes dequantizados. O módulo de decodificação 12 pode então gerar uma matriz de coeficientes cortados ao cortar os coeficientes na matriz de coeficientes ajustados. Cortar os coeficientes na matriz de coeficientes ajustado modifica os coeficientes ajustados de tal modo que estejam compreendidos na faixa permitida para um valor de componente de pixel. Conseqüentemente, a matriz de coeficientes cortados pode ser caracterizada como uma matriz de valores de componente de pixel.
Após gerar a matriz de valores de componente de pixel, o módulo de decodificação 12 pode gerar um bloco de pixels por combinar a matriz de valores de componente de pixel com matrizes que armazenam outros valores de componente de pixel para o bloco de pixels. A seguir, o módulo de decodificação 12 pode combinar blocos de pixels em um quadro de video. Para decodificar um quadro preditivo, o módulo de decodificação 12 pode utilizar a técnica de decodificação espacial 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 utilizar o esquema de decodificação de entropia para decodificar os vetores de movimento do quadro preditivo. A seguir, o módulo de decodificação 12 pode gerar um quadro reconstruído por "mover" os 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 componente de pixel em cada pixel do quadro residual decodificado a valores de componente de pixel correspondentes em pixels correspondentes do quadro reconstruído. O resultado dessa adição é o quadro preditivo reconstruído.
As técnicas descritas nessa revelação podem fornecer várias vantagens. Por exemplo, a redução de erros de arredondamento durante computação de transformadas de co-seno discretas e transformadas de co-seno discretas inversas pode reduzir os erros visíveis em dados de imagem e pode reduzir erros audíveis em dados de áudio. Além disso, como essas técnicas pode aplicar-se a cálculos de ponto fixo, essas técnicas podem ser aplicadas em dispositivos menos complexos, menores, como telefones móveis, assistentes pessoais digitais, e tocadores de mídia pessoais. Em particular, as técnicas podem ser aplicadas utilizando números de ponto fixo que têm um número muito limitado de bits em suas porções de mantissa (por exemplo, três bits) enquanto ainda se conforma a exigências de precisão especificadas pelo Institute of Electrical and Electronics Engineers (IEEE) padrão 1180, cujo teor integral é pela presente incorporado a título de referência. Além disso, essas técnicas podem ser aplicadas a formatos que incluem recomendações H.261, H.263, H.264, T.81 (JPEG) da International Telecommunications Union Standardization Sector (ITU-T) bem como formatos de mídia da International Organization for Standardization (ISO)/MEC Moving Pictures Experts Group (MPEG)-I, MPEG-2 e MPEG-4 parte 2.
A figura 2 é um diagrama de blocos que ilustra detalhes de exemplo do módulo de codificação 8. O módulo de codificação 8 pode compreender um conjunto de "módulos". Esses módulos podem compreender subconjuntos das instruções de software do módulo de codificação 8. Alternativamente, esses módulos podem compreender hardware de propósito especial. Em outra alternativa, esses módulos podem compreender instruções de software e hardware de propósito especial.
Como ilustrado no exemplo da figura 2, o módulo de codificação 8 inclui um módulo de controle de quadro 20 que contra 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 indicador de fluxo de bit associado ao 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 determinar que o indicador de fluxo de bit 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 executam imediatamente codificação espacial no quadro de video. Por outro lado, se o módulo de controle de quadro .20 determinar 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 video seja processado por um conjunto de módulos que executam codificação temporal.
0 módulo de codificação 8 inclui uma série de módulos para aplicar codificação espacial a quadros de vídeo. Esses módulos incluem 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 esquema de codificação de entropia 30. O módulo divisor de bloco 22 pode receber quadros de vídeo não codificados a partir de 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 codificado, 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 de extração de componente 24 recebe um bloco de pixels, o módulo de extração de componente 24 pode converter valores de componente de pixel de cada pixel em um formato de cor diferente. Por exemplo, o módulo de extração de componente 24 pode converter cada pixel a partir de um formato de cor Vermelho-verde-azul (RGB) no formato de cor YCrCb. Após converter os pixels no bloco em formato de cor diferente, o módulo de extração de componente 24 pode separar os valores de componente de pixel dos pixels no bloco em matrizes de valores de componente de pixel. Por exemplo, o módulo de extração de componente 24 pode extrair uma matriz de valores Y, uma matriz de valores Cr, e uma matriz de valores Cb a partir de um bloco de pixels. Os valores Y especificam o brilho de pixels, os valores Cr especificam crominância vermelha de pixels e os valores Cb especificam crominância azul de pixels. Quando o módulo de extração de componente 24 extraiu as matrizes de valores de componente 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 26 recebe uma matriz de valores de componentes de pixel, o módulo de transformada direta 26 gera uma matriz de coeficientes transformados. Cada coeficiente na matriz de coeficientes escalonados aproxima um coeficiente que seria produzido utilizando uma transformada de co-seno discreta direta ideal para transformar a matriz de valores de componente de pixel.
0 módulo de transformada direta 26 utiliza aritmética de ponto fixo para aplicar uma transformada unidimensional para as matrizes de valores de componente de pixel. A utilização de aritmética de ponto fixo pode ser vantajosa em algumas circunstâncias. Por exemplo, dispositivos menores, como telefones móveis poderiam não incluir uma unidade de ponto flutuante necessária para executar aritmética de ponto flutuante. O módulo de transformada direta 26 pode iniciar um processo de gerar a matriz de coeficientes escalonados por deslocamento para esquerda de cada um dos valores de componente de pixel. Por exemplo, o módulo de transformada direta 2 6 pode gerar uma matriz de coeficientes ajustados por deslocamento a esquerda de cada um dos valores de componente 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 utiliza ao aplicar a transformada unidimensional mais um número de bits de precisão removido por escalonamento dos coeficientes transformados que resultam da aplicação da transformada. Após deslocar a esquerda cada um dos valores de componente de pixel, o módulo de transformada direta 26 pode executar a transformada em cada um dos vetores de linha da matriz de coeficientes ajustados. A execução de 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. A seguir, o módulo de transformada direta .26 pode executar a transformada em cada um dos vetores de coluna da matriz de coeficientes intermediários. A execução da 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 diferentes posições na matriz de coeficientes transformados por diferentes fatores de escalonamento. Como descrito abaixo, o módulo de decodificação 12 pode utilizar os recíprocos desses fatores de escalonamento na aplicação de uma transformada inversa. Quando o módulo de transformada direta 26 terminou de escalonar os coeficientes transformados pelos fatores de escalonamento, o módulo de transformada direta 26 pode transmitir a matriz resultante de coeficientes escalonados para o módulo de quantização 28.
Quando o módulo de quantização 26 recebe uma matriz de coeficientes a partir do módulo de transformada direta 26, o módulo de quantização 28 pode quantizar os coeficientes escalonados. 0 módulo de quantização 28 pode quantizar os coeficientes escalonados em uma variedade de modos dependendo do padrão de codificação sendo empregado. Por exemplo, de acordo com o padrão MPEG-4 parte 2, o módulo de quantização 28 pode utilizar 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 31</column></row><table>
Além disso, nesse exemplo, o módulo de quantização 28 pode utilizar 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 31</column></row><table>
Após o módulo de quantização 28 gerar uma matriz de coeficientes quantizados, o módulo de codificação de entropia 30 pode comprimir a matriz de coeficientes quantizados utilizando um esquema de codificação de entropia. Para comprimir a matriz de coeficientes quantizados utilizando 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 zigzag dos coeficientes. Em outras palavras, o módulo de codificação de entropia 30 pode dispor todos os coeficientes quantizados na matriz bidimensional de coeficientes quantizados em um vetor unidimensional 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, como codificação Huffman ou codificação aritmética, ao vetor de coeficientes quantizados.
0 módulo de codificação 8 também inclui um ou mais módulos para executar codificação temporal de quadros de vídeo. Como ilustrado no exemplo da figura 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. 0 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 por procurar macroblocos na imagem de referência que contenham pixels similares ao macrobloco. O módulo de estimação de movimento 32 pode buscar áreas de tamanhos diferentes de acordo com padrões de codificação diferentes para identificar macrobloco de fonte para um macrobloco no quadro atual. Por exemplo, o módulo de estimação de movimento 32 pode buscar um macrobloco de fonte em 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 módulo de estimação de movimento 32 calcula um vetor de movimento para o macrobloco no quadro atual. 0 vetor de movimento para o macrobloco no quadro atual especifica um valor χ que indica a diferença em posição horizontal entre o macrobloco de fonte identificado e o macrobloco do quadro atual. Após o módulo de estimação de movimento 32 ter calculado um vetor de movimento ou ter sido incapaz de identificar um macrobloco de fonte para cada macrobloco no quadro atual, o módulo de estimação de movimento 32 pode prover os vetores de movimento calculados para o quadro atual para o módulo de geração de quadro reconstruído 34. O módulo de geração de quadro reconstruído 34 pode utilizar os vetores de movimento e os quadros de referência para gerar um quadro reconstruído. O módulo de geração de quadro reconstruído 34 pode gerar o quadro reconstruído por aplicar os vetores de movimento para cada macrobloco no quadro atual para os macroblocos de fonte nos quadros de referência. Com efeito, o módulo de geração de quadro reconstruído 34 cria um quadro no qual os macroblocos dos quadros de referência foram "movidos" para as 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 por subtrair valores de componente de pixel no quadro reconstruído a partir de valores de componente de pixel correspondente no quadro atual. Em geral, o quadro residual inclui menos informação do que o quadro reconstruído ou o quadro atual. Após o módulo de geração de quadro residual 36 gerar o quadro residual, o módulo de geração de quadro residual 36 provê o quadro residual para o módulo de divisor de bloco 22 para iniciar o processo de codificar espacialmente 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 para o módulo de codificação de entropia 30 a fim de comprimir os vetores de movimento. Após o quadro residual ser espacialmente codificado e o módulo de codificação de entropia 30 ter codificado os vetores de movimento, o módulo de saida de fluxo 38 pode formatar o quadro residual codificado espacialmente e os vetores de movimento codificado como parte de um fluxo de bits de video.
A figura 3 é um diagrama de blocos que ilustra detalhes exemplares do módulo de decodificação 12. O 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, módulo combinador de bloco 52, um módulo de controle de quadro 53, um módulo de armazenagem 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 esses módulos podem compreender subconjuntos das instruções de software do módulo de decodificação 12. Alternativamente, alguns ou todos esses módulos podem compreender hardware ou firmware de propósito especial. Em outra alternativa, esses módulos podem compreender instruções de software e hardware ou firmware de propósito especial.
Quando o módulo de decodificação 12 recebe um fluxo de bits contendo um quadro de vídeo, o módulo de decodificação de entropia 44 pode aplicar um esquema de decodificação de entropia para as matrizes de coeficientes quantizados no quadro de vídeo. O fluxo de bits pode incluir um valor que indica para o módulo de decodificação de entropia 44 qual esquema de decodificação de entropia aplicar nas matrizes de coeficientes quantizados no fluxo de bits. Além disso, o módulo de decodificação de entropia .44 pode aplicar esquema de decodificação de entropia igual ou diferente para decodificar os vetores de movimento do quadro de video.
Após o módulo de decodificação de entropia 44 aplicar o esquema de decodificação de entropia às matrizes de coeficientes quantizados no arquivo de video, um módulo de dequantização 46 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 modos. Por exemplo, de acordo com o padrão MPEG-4 parte 2, o módulo de dequantização 46 pode utilizar as duas matrizes de quantização listadas acima em dois modos diferentes. Primeiramente, o módulo de dequantização .46 pode utilizar essas matrizes de quantização para executar 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 dos valores quantizados QF[v][u] como a seguir:
<formula>formula see original document page 35</formula>
<formula>formula see original document page 35</formula>
Em segundo lugar, o módulo de dequantização 4 6 pode utilizar essas matrizes de quantização para executar dequantização estilo MPEG-1/2. Na dequantização estilo MPEG-I/2, o módulo de dequantização 46 utiliza matrizes de ponderação adicionais W[w] [v] [u] onde w indica qual matriz de ponderação está sendo utilizada: <formula>formula see original document page 36</formula>
Quando o módulo de transformação inversa 48 recebe uma matriz de coeficientes dequantizados, o módulo de transformada inversa 48 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 componente de pixel primeiramente escalonando cada coeficiente na matriz de coeficiente dequantizado, adicionando um valor de polarização ao coeficiente DC da matriz, aplicando uma série de transformadas de co-seno discreta unidimensional, deslocando a direita os valores resultantes, cortando os valores deslocados a direita, e então transmitindo os valores cortados.
Após o módulo de transformada inversa 48 transmitir uma matriz de valores de componente pixel, o módulo de reconstrução de pixel 50 pode gerar uma matriz de pixels por combinar a matriz de valores de componente de pixel com matriz de valores de componente de pixel associados a posições equivalentes em um quadro de video. Por exemplo, o módulo de reconstrução de pixel 50 pode receber uma matriz de valores de componente de pixel Y, uma matriz de valores de componente de pixel Cb, e uma matriz de valores de componente de pixel Cr a partir dos módulos de transformada inversa 48. Cada uma dessas três matrizes pode incluir componentes de pixel para um único bloco de pixels 8x8. Cada um dos pixels pode incluir um valor de componente de pixel Y, um valor de componente de pixel Cb, e um valor de componente de pixel Cr. Após gerar a matriz de pixels, o módulo de reconstrução de pixel 50 pode fornecer o bloco de pixels para o módulo combinador de bloco 52.
Quando o módulo combinador de bloco 52 recebe um bloco de pixels, o módulo combinado de bloco 52 pode armazenar o bloco de pixels até que o módulo combinador de bloco 52 receba alguns 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 transmitir o quadro de video para o buffer de quadro 51. O quadro de video pode ser armazenado no buffer de quadro 51 até ser exibido pela unidade de apresentação de midia 51. Além disso, o módulo combinador de blocos 52 pode transmitir o quadro de video para um módulo de armazenagem de quadros 54. Quadros de video no módulo de armazenagem de quadros 54 podem ser utilizados como quadros de referência para a reconstrução de quadros preditivo e bi-preditivo. Além disso, quadros de video no módulo de armazenagem de quadros 54 podem ser quadros residuais que são utilizados na reconstrução de quadros preditivo e bi-preditivo.
Para reconstruir um quadro preditivo ou bi- preditivo, o módulo de decodificação 12 inclui o módulo de geração de quadros reconstruídos 56. O módulo de geração de quadros reconstruídos 56 recebe os vetores de movimento decodificado a partir do módulo de decodificação de entropia 44. Além disso, o módulo de geração de quadros reconstruídos 56 recupera os quadros de referência do quadro atual a partir do módulo de armazenagem de quadros .54. O módulo de geração de quadros reconstruídos 56 então "move" os macroblocos a partir de suas posições nos quadros de referência para posições indicadas pelos vetores de movimento. Um quadro reconstruído resulta do movimento de macroblocos desse modo. Após o módulo de geração de quadros reconstruídos 56 gerar o quadro reconstruído, o módulo de geração de quadros reconstruídos 56 provê o quadro reconstruído para o 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 de geração de quadro preditivo 58 pode recuperar a partir do módulo de armazenagem de quadros 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 componente de cor correspondentes em cada pixel do quadro residual e quadro reconstruído. Um quadro de vídeo reconstruído resulta a partir dessa adição. A seguir, o módulo de geração de quadro preditivo 58 pode transmitir esse quadro reconstruído para o buffer de quadro 51 para eventual display na unidade de apresentação de mídia 14.
A figura 4 é um fluxograma que ilustra uma operação de exemplo do módulo de codificação 8. Embora a operação descrita na figura 4 seja descrita em modo seqüencial, deve ser observado que a operação pode ser executada em um modo canalizado.
Inicialmente, o módulo de codificação 8 recebe uma seqüência de quadros de vídeo não codificados (60) . Por exemplo, o módulo de codificação 8 pode receber uma seqüência de quadros não codificados na forma de conjuntos de pixels a partir da fonte de mídia 4. Quando o módulo de codificação 8 recebe a seqüência de quadros não codificados, 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 codificados deve ser codificado como um quadro-i ou como um quadro preditivo ou bi- preditivo (62). Se o módulo de controle de quadro 20 determinar que o quadro atual deve ser codificado como um quadro-i, o módulo divisor de blocos 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 de 2x2, 4x4 ou 8x8 de pixels.
Após dividir o quadro atual em blocos de pixels, o módulo de extração de componente 24 pode separar os valores de componente de pixel em cada um dos blocos de pixels (66). Como resultado, pode haver três blocos de valores de componente de pixel para cada bloco de pixels: um bloco de valores Y para representar o brilho de pixels, um bloco de valores Cb para representar a crominância azul de pixels, e um bloco de valores Cr para representar a crominância vermelha de pixels.
O módulo de transformada direta 26 no módulo de codificação 8 pode gerar então uma matriz de coeficientes escalonados para cada uma das matrizes de valores de componente de pixel (68). Os coeficientes nessas matrizes de coeficientes escalonados são aproximações de valores que seriam produzidas utilizando uma transformada de co-seno discreta direta bidimensional ideal nas matrizes respectivas das matrizes de valores de componente de pixel.
Após o módulo de transformada direta 26 gerar as matrizes de coeficientes escalonados para cada uma das matrizes de componentes de pixel, o 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) . Após o módulo de quantização 28 ter quantizado os coeficientes em cada matriz de coeficientes escalonados, o módulo de codificação de entropia 30 pode executar 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 para cada matriz dos coeficientes quantizados. 0 processo de codificação de entropia comprimiu adicionalmente os dados. Entretanto, os processos de codificação de entropia não resultam na perda de informações. Após executar o processo de codificação de entropia em cada matriz de coeficientes quantizados, o módulo de saida 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 video (74). Após o módulo de saida de fluxo 38 adicionar as matrizes codificadas ao fluxo de bits, o módulo de controle de quadro 20 pode determinar se o quadro atual foi o último quadro de video da seqüência de quadros (76) . Se o quadro atual for o último quadro da seqüência de quadros ("SIM" de 76), o módulo de codificação 8 concluiu a codificação da seqüência de quadros (78) . Por outro lado, se o quadro atual não for o último quadro da seqüência de quadros ("NÃO" de 7 6), o módulo de codificação 8 pode Ioop 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) . A seguir, o módulo de estimação de 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). 0 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 o qual o módulo de estimação de movimento 32 foi capaz de identificar um macrobloco de fonte (84). Após o módulo de estimação de movimento 32 calcular os vetores de movimento, o módulo de geração de quadro reconstruído 34 utiliza os vetores de movimento para gerar um quadro reconstruído por "mover" os macroblocos identificados nos quadros de referência para posições indicadas pelos vetores de movimento (86). 0 módulo de geração de quadro residual .36 pode gerar então um quadro residual para o quadro atual subtraindo os valores de componente de pixel no quadro reconstruído a partir de valores de componente de pixel correspondentes no quadro atual (88). Após o módulo de geração de quadro residual 36 gerar o quadro residual, o módulo de codificação de entropia 30 pode utilizar 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 por aplicação das etapas (66) até (74) ao quadro residual.
A figura 5 é um fluxograma que ilustra uma operação exemplar do módulo de decodificação 12. Embora a operação descrita na figura 5 seja descrita em modo seqüencial, deve ser observado que a operação pode ser executada em um modo canalizado.
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 executar um processo de decodificação de entropia nos blocos de dados no quadro codificado (102). O módulo de decodificação de entropia 44 pode executar um processo de decodificação de entropia que é equivalente ao processo de codificação de entropia utilizado para codificar o quadro. Por exemplo, se o módulo de codificação 8 utilizar codificação Huffman para codificar o quadro, o módulo de decodificação de entropia .44 utiliza decodificação Huffman para decodificar o quadro. Como resultado de aplicação do 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.
A seguir, 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 decodif icação 12 gera matrizes de valores de componente de pixel (106). Os valores de componente de pixel em uma da matriz de valores de componente de pixel são aproximações de valores correspondentes que seriam produzidos por transformar uma das matrizes de coeficientes quantizados utilizando uma transformada de co-seno discreta inversa bidimensional ideal.
Quando o módulo de transformada inversa 48 computou uma matriz de valores de componente de pixel para cada uma das matrizes de coeficientes, o módulo de reconstrução de pixel 50 no módulo de decodificação 12 pode combinar matrizes apropriadas de valores de componente de pixel para criar blocos de pixels (108). Por exemplo, o módulo de decodificação 12 pode combinar um bloco de valores Y com um bloco associado de valores Cr e um bloco associado de valores Cb para criar um bloco de pixels YCrCb. Após o módulo de reconstrução de pixel 50 ter criado os blocos de pixels, o módulo combinador de bloco 52 pode recombinar os blocos de pixels em um quadro de video (110) .
A seguir, o módulo de controle de quadro 53 no módulo de decodif icaçã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 combinador de bloco 52 pode transmitir o quadro de video para o buffer de quadro 51 (114). Por outro lado, se o quadro atual não for um quadro- i (isto é, o quadro atual for um quadro preditivo ou bi- preditivo) ("NÃO" de 114), o módulo de decodificação de entropia 44 utiliza um esquema de decodificação de entropia para decodificar os vetores de movimento do quadro atual (116) . A seguir, o módulo de geração de quadro reconstruído .56 utiliza os vetores de movimento decodificados e um ou mais quadros de referência no módulo de armazenagem de quadro 54 para gerar um quadro reconstruído (118). O módulo de geração de quadro preditivo 58 pode utilizar então o quadro reconstruído e o quadro gerado pelo módulo combinador de bloco 52 para gerar um quadro reconstruído (120) .
A figura 6 é um diagrama de blocos que ilustra detalhes exemplares de módulo de transformada inversa 48. Como ilustrado no exemplo da figura 6, o módulo de transformada inversa 48 pode compreender um módulo de entrada 140. 0 módulo de entrada 140 pode receber uma matriz de coeficientes a partir 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 do 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 por escalonar cada coeficiente na matriz de coeficientes dequantizados. O módulo de escalonamento 142 pode escalonar os coeficientes na matriz de coeficientes dequantizados por deslocamento a esquerda de cada coeficiente por um número de bits de mantissa utilizados por um módulo de transformada inversa 146 para representar representações de ponto de fixo, de números. Bits de mantissa são aqueles bits que estão no lado esquerdo do ponto base (isto é, a porção fracional do número) . Desse modo, 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 146 utilizar números de ponto fixo que incluem três bits de mantissa, o módulo de escalonamento .142 gera a matriz de coeficientes escalonados por deslocamento a esquerda de cada um dos coeficientes na matriz de coeficientes dequantizados por três posições.
Após o módulo de escalonamento 142 gerar a matriz de coeficientes escalonados, o módulo de polarização de coeficiente 144 pode gerar uma matriz de coeficientes polarizados por adição de 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. Em geral, o coeficiente DC representa um valor médio dos outros coeficientes na matriz.
O valor de polarização suplementar é um valor que 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. Por exemplo, o valor de polarização suplementar pode ser um valor de polarização adaptável a sinal que é igual a zero quando o coeficiente DC é não negativo e igual a negativo um quando o coeficiente DC é negativo. Para adicionar um valor de polarização adaptável a sinal ao coeficiente DC em um processador de 16 bits, o módulo de polarização de coeficiente 144 pode utilizar a seguinte fórmula:
DC_coefficient = DC_coefficient + (1 « {P + 2) ) + (DC_coefficient » 15) . (1)
Na fórmula (1), o termo (1 «(P+2)) é adicionado para fornecer polarização de ponto médio. P é uma constante que se refere ao número de bits de mantissa de ponto fixo (isto é, bits à direita do ponto base) utilizados na transformada executada por módulo de transformada de vetor inverso 146. O número 2 é adicionado a P porque o módulo de deslocamento a direita 148 pode deslocar a direita todos os coeficientes por (P+3), aonde o número Λ3' vem dos bits de precisão adicionados por execução da transformada de co- seno discreta inversa. Para elaborar esse ponto, se um número χ for gerado por deslocar a esquerda 1 por (P+2) e um número z for gerado por deslocar a direita χ por (P+3), então z = 1/2. (Dito de outro modo, 2P+2 / 2P+3 = 2o / 21 = H) . Desse modo, a adição (1 <<(P+2)) ao coeficiente DC é equivalente à adição de (1<<(Ρ+3))/2 ao coeficiente DC.
Na fórmula (1), o termo (DC_coefficient >>15) desloca a direita o coeficiente DC de 16 bits por 15 posições. Um bit restante indica o sinal do coeficiente DC. Por exemplo, suponha que o coeficiente DC era Obllll 1100 .0011 0101. Nesse exemplo, com extensão de sinal, o deslocamento do coeficiente DC para a direita em 15 posições resulta no valor de Obllll 1111 1111 1111 (decimal, -1) . Similarmente, o coeficiente DC era ObOlll .1111 1111 1111, deslocando o coeficiente DC para a direita em 15 posições resulta no valor de 0b0000 0000 0000 0000 (decimal, 0).
Em outro exemplo, o valor de polarização suplementar pode ser um valor de polarização de excitação. O valor de polarização de excitação é um valor que é igual a -1 ou 0. Para adicionar um valor de polarização de excitação de sinal ao coeficiente DC em um processador de .16 bits, o módulo IDCT 34 pode utilizar a seguinte fórmula: DC_coefficient = DC_coefficient + (1 « (P + 2)) + excitação(-1 | 0). (2)
Na fórmula (2), P indica o número de bits mantissa em DC_coefficient. 0 termo (1<< (P+2) adiciona polarização de ponto médio. 0 termo excitação(-1 | 0) indica que o módulo IDCT 34 seleciona -1 ou 0 em uma base pseudo-aleatória.
0 módulo de polarização de coeficiente 144 pode adicionar também 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 coeficientes na matriz diferente do coeficiente DC. A adição do valor de polarização de ponto médio e valor de polarização escalonado a cada um dos coeficientes AC pode reduzir ainda mais 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 inverso 14 6 gera uma matriz de coeficientes transformados utilizando aritmética de ponto fixo para aplicar repetidamente uma transformada unidimensional para a matriz de coeficientes polarizados. Por exemplo, o módulo de transformada de vetor inverso 14 6 pode gerar uma matriz de valores intermediários utilizando aritmética de ponto fixo para aplicar uma transformada unidimensional a cada vetor de linha de coeficientes na matriz de coeficientes polarizados. A seguir, o módulo de transformada de vetor inverso 14 6 pode computar a matriz de coeficientes transformados utilizando aritmética de ponto fixo para aplicar a transformada unidimensional a cada vetor de coluna na matriz de valores intermediários. Transformadas unidimensionais exemplares são ilustradas nas figuras 10 e 11 abaixo.
Após o módulo de transformada de vetor inverso 146 gerar a matriz de coeficientes transformados, o módulo de deslocamento a direita 148 pode gerar uma matriz de coeficientes ajustados por deslocamento a direita de cada um dos coeficientes na matriz de coeficientes transformados por um número de posições igual ao número de bits adicionados durante a aplicação da transformada e durante escalonamento. Por exemplo, se a aplicação da transformada resultar em uma quantidade adicional de três bits e o escalonamento dos coeficientes adicionar uma quantidade adicional de três bits, o módulo de deslocamento a direita 148 pode deslocar a direita cada um dos coeficientes em seis (3 + 3) posições.
0 módulo de deslocamento a direita 148 pode executar esse deslocamento a direita como um substituto para dividir cada um dos coeficientes por 2b, onde b é igual ao número de bits adicionais adicionado por módulo de transformada de vetor inverso 146 mais o número de bits adicionado à porção de mantissa de coeficientes por módulo de escalonamento 142 durante escalonamento. 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 dessas diferenças podem ocorrer devido a erros de arredondamento atribuíveis ao fato na precisão limitada de aritmética de ponto fixo, (xn · · b) não é igual a (xn /2b) para todos os valores de xn. Por exemplo, o módulo de codificação 8 pode utilizar números de ponto fixo de dezesseis bits e xn = 63 (0000 0000 0011 1111 no binário) e b = 6. Nesse exemplo, o deslocamento de 0000 0000 0011 1111 para a direita em seis posições resulta no valor binário de .0000 0000 0000 0000. Conseqüentemente, 63 » 6 = 0. Enquanto isso, 63 / 26 = 31/64 = 0, 984375. A diferença entre 0 e 0, 984 pode resultar em uma diferença visível entre a imagem de fonte e a imagem de resultado.
A adição de 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 ser igual a 2b / 2 = 2(b_1). Por exemplo, se b = 6, então c = 26 / 2 = .64/2 = 32. Nesse exemplo, se xn = 63, então 63 + 32 = 95 (0b0000 0000 0101 1111) . 95 deslocado para a direita em 6 posições = 1 (0b0000 0000 0000 0001 no binário) . O valor 1 produzido após a adição do valor de polarização de ponto médio está mais próximo ao valor correto de 0,984375 do que o valor 0 produzido sem adição do valor de polarização de ponto médio.
Além de adicionar o valor de polarização de ponto médio c, o módulo de polarização de coeficiente 144 pode adicionar também 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 a sinal d(xn) . O valor de polarização adaptável a sinal d(xn) pode resultar em valores que são melhores aproximações do que valores sem valor de polarização adaptável a sinal d(xn) . Por exemplo, sem o valor de polarização adaptável a sinal d(xn), a função (xm + 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 (xm + c) >> b = 0. Essa falta de simetria em torno de zero pode resultar em 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 xm é maior do que zero do que quando xn é menor do que zero. Isso pode produzir também erros.
0 valor de polarização adaptável a sinal d(xn) pode corrigir esses problemas. Por exemplo, suponha que xn = 32, b = 6, c= 32, então d(xn) = 0. Conseqüentemente, (xn + c + d(xn)) » b = 1. Agora, suponha que xn = -32, b = 6, c = 32, então d(xn) = -1. Conseqüentemente, (xn + c +d(xn)) >> b = -1. Esse exemplo ilustra que a função (xn + c + d (xn)) >> b é agora simétrica em torno de 0 e não produz diferenças que são maiores quando xm é maior do que zero do que quando (xm) é menor do que zero.
Em uma implementação alternativa, o módulo de polarização de coeficiente 144 pode adicionar um valor de polarização de excitação e em vez de adicionar valor de polarização adaptável a sinal d. Quando o módulo de polarização de coeficiente 144 adiciona valor de polarização de excitação e ao coeficiente DC, o módulo de polarização de coeficiente 144 pode selecionar o valor 0 ou o valor -1 para ser o valor de e em uma base pseudo- aleatória. Para selecionar o valor do valor de polarização de excitação 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 Iong iseed = OxAAAAAAAA; int ditherBit() {
se (iseed & IB18) {
iseed = ((iseed Λ MASΚ) « 1) | IBl; retorna 1; } senão {
iseed <<= 1; retorna 0;
Muitos padrões de codificação de video utilizam 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 no GOP. Por exemplo, um arquivo de midia pode incluir um quadro-i que é codificado utilizando um conjunto de matrizes de coeficientes. Para produzir uma seqüência de video, o módulo de decodificação 12 pode produzir quadros preditivos com base nesse quadro-i. Erros causados por decodificação do quadro-i são refletidos em um quadro preditivo com base no quadro-i. Além disso, erros causados por decodificação do quadro preditivo são incorporados em um quadro preditivo seguinte. Se erros causados por decodificação dos quadros não forem simétricos em torno de zero ou tenderem a ter magnitude positiva ou negativa maior, esses erros podem aumentar ou diminuir rapidamente os valores de valores de componente de pixel em sucessivos quadros preditivos. Por exemplo, se erros tendem a ter erro positivo maior, esses erros podem somar em quadros preditivos sucessivos, resultando em valores de componente de pixel sendo maiores do que os valores de componente de pixel corretos. Como resultado, pixels em quadros preditivos sucessivos em um GOP podem alterar inadequadamente a cor ou brilho. Isso é conhecido como erro de derivação. Para evitar erro de derivação que seja demasiadamente severo, somente um número limitado de quadros pode ser gerado a partir de um quadro- i. Devido ao arredondamento, erros podem ser de magnitude maior ao executar a transformada utilizando números de ponto fixo que têm números limitados de bits de mantissa (por exemplo, três bits de mantissa) do que ao executar a transformada utilizando números que têm maior precisão, conseqüentemente, o erro de derivação pode ser especialmente problemático ao executar a transformada utilizando números de ponto fixo que têm números limitados de bits de mantissa.
A seleção do valor de valor de polarização de excitação e em uma base pseudo-aleatória significa que cada quadro preditivo tem uma chance igualmente provável de ter erros que têm magnitude positiva maior de erros do que têm magnitude negativa maior. Desse modo, em um grupo de imagens, erros positivos e erros negativos tendem a ser iguais em magnitude e tendem a ser simétricos em torno de zero. Como erros positivos e erros negativos são, em média, simétricos em torno de zero e erros positivos e erros negativos são, em média, iguais em magnitude, os erros não são provavelmente propagados e exagerados em quadros previsíveis subseqüentes. Isso é porque os erros com magnitude positiva provavelmente cancelam erros com magnitude negativa em outro quadro, e vice versa. Conseqüentemente, como o valor de polarização de excitação tende a fazer erros simétricos em torno de zero e tende a fazer erros positivos e erros negativos de magnitude igual, provavelmente a menos erro de derivação por todo GOP. Por esse motivo, mais imagens podem ser incluídas em um GOP. Como mais imagens podem ser incluídas em um GOP, a seqüência de vídeo geral pode ter uma taxa de compressão melhor. De modo semelhante, a adição do valor de polarização adaptável a sinal resulta em erros em cada quadro que tendem a ser iguais em magnitude e que tendem a ser simétricos em torno de zero. Como resultado, esses erros não são propagados e exagerados em quadros preditivos subseqüentes.
Após o módulo de deslocamento a direita 148 deslocar a direita os coeficientes, um módulo de corte 150 pode "cortar" os coeficientes para restringir os coeficientes a uma faixa máxima permissivel de valores de componente de pixel. Por exemplo, em uma imagem JPEG típica um valor de componente de cor pode variar de -256 a 255. Se a matriz de coeficientes fosse para incluir um coeficiente igual a 270, o módulo de corte 150 limitaria esse coeficiente à faixa máxima permissivel por reduzir o coeficiente a 255. Após o módulo de corte 150 terminar de cortar os coeficientes, esses coeficientes podem representar valores de componente de pixel. Quando o módulo de corte 150 terminar de cortar os coeficientes na matriz, o módulo de corte 150 pode fornecer a matriz de coeficientes cortados para um módulo de saída 152.
Quando o módulo de saída 152 recebe uma matriz de coeficientes (que são agora valores de componente de pixel) , o módulo de saída 152 pode transmitir a matriz de valores de componente de pixel para o módulo de reconstrução de pixel 50.
A figura 7 é um fluxograma que ilustra uma operação exemplar de 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, desse modo gerando uma matriz de coeficientes escalonados (172). Por exemplo, o módulo de escalonamento 142 pode executar operações que multiplicam cada coeficiente na matriz de coeficientes dequantizados por valores equivalentemente posicionados em uma matriz de fatores de escalonamento.
Após o módulo de escalonamento 142 gerar a matriz de coeficientes escalonados, o módulo de polarização de coeficiente 155 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, desse modo gerando uma matriz de coeficientes polarizados (174). Após o módulo de polarização de coeficiente 144 adicionar o valor de polarização ao coeficiente DC da matriz, o módulo de transformação de vetor inverso 14 6 pode determinar se um contador de linhas é menor do que um contador de linhas máximo (176). Inicialmente, o contador de linhas pode ser definido em zero. 0 contador de linhas 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 incluir oito linhas, o contador de linhas máximo é igual a oito.
Se o contador de linhas for menor do que o contador de linhas máximo ("SIM" de 17 6), o módulo de transformada de vetor inverso 146 pode utilizar aritmética de ponto fixo para aplicar uma transformada unidimensional em um vetor de linha da matriz de coeficientes indicada pelo contador de linhas (178) . Quando o módulo de transformada de vetor inverso 14 6 aplica a transformada em um vetor de linha da matriz de coeficientes, o módulo de transformada de vetor inverso 146 pode substituir os coeficientes originais no vetor de linha de coeficientes com um vetor de coeficientes intermediários. Após o módulo de transformada de vetor inverso 146 aplicar a transformada em um vetor de linha da matriz de coeficientes, o módulo de transformação de vetor inverso 14 6 pode incrementar o contador de linha (180). O módulo de transformada de vetor inverso 14 6 pode então Ioop back e novamente determinar se o contador de linhas é menor do que o contador de linhas máximo (17 6).
Se o contador de linhas não for menor do que (isto é, for maior ou igual a) o contador de linha máximo ("NÃO" de 176), o módulo de transformada de vetor inverso 14 6 pode determinar se um contador de coluna é menor do que um contador de coluna máximo (182). Inicialmente, o contador de coluna pode ser definido em zero. 0 contador de coluna máximo 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 de coluna máximo é igual a oito.
Se o contador de coluna for menor do que o contador de coluna máximo ("SIM" de 182), o módulo de transformada de vetor inverso 146 pode aplicar a transformada unidimensional em um vetor de coluna da matriz de coeficientes intermediários indicado 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. Após o módulo de transformada de vetor inverso 146 aplicar a transformada em um vetor de coluna da matriz de coeficientes, o módulo de transformada de vetor inverso 146 pode incrementar o contador de coluna (186) . 0 módulo de transformada de vetor inverso 14 6 pode então Ioop back e novamente determinar se o contador de coluna é menor do que o contador de coluna máximo (182) .
Se o contador de coluna não for menor do que (isto é, for maior ou igual a) o contador de coluna máximo ("NÃO" de 182), o 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 para a direita por um certo número de posições. 0 resultado de deslocar a direita cada um dos segundos coeficientes intermediários na matriz é uma matriz de valores ajustados. Após o módulo de deslocamento a direita 148 ter deslocado para a direita cada um dos coeficientes transformados, o módulo de corte 150 pode cortar os coeficientes ajustados para assegurar que os coeficientes ajustados estão compreendidos em uma faixa apropriada para os valores de componentes de pixel (190). Por exemplo, o módulo de corte .150 pode cortar os coeficientes ajustados para assegurar que os coeficientes ajustados estejam compreendidos na faixa -256 a 255. Quando o módulo de corte 150 terminar de cortar os coeficientes ajustados, o módulo de saida 152 pode transmitir a matriz resultante de valores de componente de pixel (192).
A figura 8 é um diagrama de blocos que ilustra detalhes exemplares de módulo de transformada direta 26. Como ilustrado no exemplo da figura 8, o módulo de transformada direta 2 6 compreende um módulo de entrada 210 que recebe uma matriz de valores de componente de pixel a partir do módulo de extração de componente 24. Quando o módulo de entrada 210 recebe uma matriz de valores de componente de pixel, o módulo de entrada 210 pode fornecer a matriz de valores de componente de pixel a um módulo de deslocamento a esquerda 212. 0 módulo de deslocamento a esquerda 212 pode deslocar todos os valores de componente de pixel na matriz dos valores de componente de pixel para a esquerda pelo número de bits de mantissa utilizados em valores que um módulo de transformada de vetor direta 214 utiliza enquanto executa a transformada direta menos o número de bits de mantissa removido por executar a transformada direta. Por exemplo, se dez bits de mantissa forem utilizados em valores enquanto executa a transformada direta e três bits de mantissa são removidos por executar a transformada de co-seno discreta direta, o módulo de deslocamento a esquerda 212 pode deslocar os valores de componente de pixel para a esquerda em sete posições. Em outro exemplo, se três bits de mantissa forem utilizados em valores enquanto executa a transformada direta e três bits de mantissa forem removidos por executar a transformada direta, o módulo de deslocamento a esquerda 212 pode deslocar os valores de componente de pixel para a esquerda por posições zero.
Após o módulo de deslocamento a esquerda 212 deslocar os valores de componente de pixel, o módulo de transformada de vetor direto 214 pode aplicar uma transformada direta em cada vetor de coluna na matriz dos valores de componente de pixel para produzir uma matriz de valores intermediários. A seguir, o módulo de transformada de vetor direto 214 pode aplicar a transformada direta em cada vetor de linha na matriz de valores intermediários para produzir uma matriz de coeficientes transformados. Quando o módulo de transformada de vetor direto 214 aplica a transformada direta em um vetor, o módulo de transformada de vetor direto 214 pode aplicar a transformada direta descrita na figura 12, abaixo. Observe que a transformada descrita na figura 12, abaixo, é um inverso da transformada descrita na figura 11.
Após o módulo de transformada de vetor direto 214 produzir a matriz de coeficientes transformados, um módulo de escalonamento 216 pode aplicar fatores de escalonamento em cada coeficiente transformado na matriz de coeficientes transformados. 0 módulo de escalonamento 216 pode aplicar recíprocos dos fatores de escalonamento utilizados pelo módulo de escalonamento 142 no módulo de transformada inversa 48. Por exemplo, se um ou mais valores foram fatorados da transformada para aperfeiçoar a eficiência da transformada, esses valores podem se tornar a base de uma matriz de fatores de escalonamento. Os coeficientes na matriz de coeficientes transformados podem ser corrigidos por multiplicar coeficientes por esses valores.
Para diminuir erros de arredondamento, um módulo de polarização de coeficiente 218 no módulo de transformada direto 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. Δ adição de um valor de polarização adaptável a sinal ou um valor de polarização de excitação aos coeficientes na matriz de coeficientes transformados tem um efeito similar a 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 a sinal ou um valor de polarização de excitação. Isto é, a adição dos valores de polarização ao coeficiente 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. Esses erros representam diferenças entre valores que resultam de representações de coeficientes de ponto fixo com precisão limitada de deslocamento a direita, na matriz de coeficientes escalonados por uma primeira magnitude e resulta da divisão dos coeficientes na matriz de coeficientes escalonados por 2 elevada a potência da primeira magnitude, sem considerar a precisão.
Após o módulo de polarização de coeficiente 218 gerar a matriz de coeficientes polarizados, um módulo de deslocamento a direita 220 no módulo de transformada direta26 pode gerar uma matriz de coeficientes de saida por deslocar a direita coeficientes na matriz de coeficientes pola rizados. 0 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 adicionado aos coeficientes por executar a transformada.
A seguinte equação resume os efeitos de módulo de
escalonamento 216, módulo de polarização de coeficiente218, 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 a sinal:
F[v][u] = (F'[v][u] * S[v][u] + (1 « (P+Q) - ((F'[v] [u] >= 0) ? 0 : 1) ) » (P+Q) .
onde ν = 0..7, u = 0,7; onde S [v] [u] é uma entrada na matriz de fatores de escalonamento, F é a matriz de coeficientes escalonados, F' é a matriz de coeficientes transformados, P indica o número de bits de mantissa em coeficientes na matriz de coeficientes transformados, e Q indica o número de bits adicionados a coeficientes na matriz de coeficientes transformados por aplicação da transformada.
A seguinte equação resume os efeitos do módulo de escalonamento 216, módulo de polarização de coeficiente218, 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 de excitação: F[v] [u] = (F'[v][u] * S [ v] [u] + (1 « 19) - (excitação( O : .1) ) » 20
onde ν = 0..7, u = 0..7; onde S[v][u] é uma entrada na matriz de valores de escalonamento, F é a matriz de coeficientes escalonados, e F' é a matriz de coeficientes transformados.
Após o módulo de escalonamento 216 gerar a matriz de coeficientes escalonados, um módulo de saida 222 pode transmitir a matriz de coeficientes ao módulo de quantização 28.
A figura 9 é um fluxograma que ilustra uma operação exemplar de módulo de transformada direta 26. Inicialmente, o módulo de entrada 210 recebe uma matriz de valores de componente de pixel (230) . Quando o módulo de entrada 140 recebe a matriz de valores de componente de pixel, o módulo de deslocamento a esquerda 212 pode gerar uma matriz de coeficientes ajustados por deslocar a esquerda cada valor na matriz de valores de componente de pixel (232). Por exemplo, o módulo de deslocamento a esquerda 212 pode deslocar todos os coeficientes para a esquerda em dez posições. Nesse exemplo, o módulo de deslocamento para esquerda 212 pode deslocar todos os coeficientes para a direita em dez posições porque o módulo de transformada de vetor direto 214 pode utilizar aritmética de ponto fixo na qual números são codificados utilizando dez bits na porção fracional. Desse modo, por deslocar os coeficientes para a esquerda em dez posições, o módulo de deslocamento a esquerda 212 converte eficazmente os valores de componente 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 direto 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 definido em zero. 0 contador de coluna máximo 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 incluir oito colunas, o contador de coluna máximo é igual a oito.
Se o contador de coluna for menor do que o contador de coluna máxima ("SIM" de 234), o módulo de transformada de vetor direto 214 pode computar uma transformada direta unidimensional em um vetor de coluna indicado pelo contador de coluna (236). Quando o módulo de transformada de vetor direto 214 computa a transformada direta em um vetor de coluna da matriz de coeficientes ajustados, o módulo de transformada de vetor direto 214 substitui os coeficientes ajustados originais no vetor de coluna com coeficientes intermediários. Após o módulo de transformada de vetor direto 214 computar a transformada direta em um vetor de coluna da matriz de coeficientes ajustados, o módulo de transformada de vetor direto 214 pode incrementar o contador de coluna (238). O módulo de transformada de vetor direto 214 pode então Ioop back e novamente determinar se o contador de coluna é menor do que o contador de coluna máximo (234) .
Se o contador de coluna não for menor do que (isto é, for maior ou igual a) o contador de coluna máximo ("NÃO" de 234), o módulo de transformada de vetor direto .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 definido 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 de coeficientes. Por exemplo, se a matriz de coeficientes incluir oito linhas, o contador de linha máximo é igual a oito.
Se o contador de linha for menor do que o contador de linha máximo ("SIM" de 240), o módulo de transformada de vetor direto 214 pode computar uma transformada de co-seno discreta unidimensional em um vetor de linha indicado pelo contador de linha (242) . Como o módulo de transformada de vetor direto 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 direto 214 computa a transformada direta em um vetor de linha de coeficientes intermediários, o módulo de transformada de vetor direto 214 substitui os coeficientes intermediários no vetor de coluna com coeficientes transformados.
Após o módulo de transformada de vetor direto 214 computar a transformada de co-seno discreta em um vetor de linha da matriz de coeficientes, o módulo de transformada de vetor direto 214 pode incrementar o contador de linha (244). O módulo de transformada de vetor direto 214 pode então Ioop back e novamente determinar se o contador de linha é menor do que o contador de linha máximo (240).
Se o contador de linha não for menor do que (isto é, for maior 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). Após o módulo de escalonamento 216 gerar a matriz de coeficientes escalonados, o módulo de polarização de coeficiente 218 pode gerar uma matriz de coeficientes polarizados pela adição de 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 de excitação ou adaptável a sinal a cada coeficiente na matriz de coeficientes escalonados. A seguir, o módulo de deslocamento a direita 220 pode deslocar a direita cada coeficiente na matriz de coeficientes polarizados (250). O módulo de deslocamento a direita 220 pode gerar uma matriz de coeficientes ajustados por deslocar a direita cada coeficiente pelo número de bits de mantissa em cada um dos coeficientes mais o número de bits adicionados ao coeficiente por aplicar a transformada. Após o módulo de deslocamento a direita 220 ter gerado a matriz de coeficientes ajustados, o módulo de saida 222 pode transmitir a matriz resultante de coeficientes ajustados (252) .
A figura 10 é um diagrama que ilustra uma primeira transformada unidimensional exemplar 260. Como ilustrado no exemplo da figura 10, a transformada 260 pode assumir como valores de entrada X0 até X7. Os valores X0 até X7 podem representar coeficientes de uma linha ou coluna de uma matriz de coeficiente de entrada. A transformada 260 pode transmitir valores xo até X7. Quando valores Xo até X7 são valores em uma linha de coeficientes em uma matriz de coeficiente de entrada, os valores x0 até X7 podem representar uma linha de valores intermediários. Quando valores X0 até X7 são valores em uma coluna de coeficientes, os valores xo até x7 podem representar uma coluna de valores de componente de pixel deslocados. Como ilustrado no exemplo da figura 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 valores pelos quais um valor é multiplicado. Por exemplo, na linha x2 o símbolo "Al" é posicionado sobre um circulo que abrange um símbolo "X". Isso indica que o valor na linha X2 é multiplicado pelo valor Al.
A transformada 260 inclui um conjunto de "operações de estruturas de borboleta". Uma "operação de estrutura de borboleta" pode ser uma estrutura de software ou hardware na qual 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 então adicionando o primeiro valor intermediário e o segundo valor intermediário. Nessa "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 então subtraindo o terceiro valor intermediário a partir do quarto valor intermediário. As seguintes fórmulas resumem o resultado matemático de uma "operação de estrutura de borboleta": u = χ * C + y * S; v=x* S-y*C.
A operação de estrutura de borboleta 264 ilustra uma operação de estrutura de borboleta utilizada na transformada 260. As operações de estrutura de borboleta têm esse nome devido ao fato de que operações de estrutura de borboleta parecem ter duas "asas" devido ao cruzamento de valores a partir do primeiro valor de entrada com o segundo valor de entrada e a partir do segundo valor de entrada com o primeiro valor de entrada. Como utilizado na transformada 260, o primeiro fator Ceo segundo fator S podem ser números irracionais. Por exemplo, C pode ser igual a √2cos (3π/8) e S pode ser igual a √2cos(3tc/8). Como o módulo de transformada de vetor inverso 146 pode utilizar aritmética de ponto fixo em registros de 16 bits e como CeS são valores freqüentemente irracionais, pode ser computacionalmente inconveniente multiplicar valores de entrada χ e y por C e S. Por esse motivo, o módulo de transformada de vetor inverso 146 pode utilizar aproximações de número racional para C e S. Essas aproximações de número inteiro podem ter a forma (C'/2j) e (S'/2k) onde C' e S' são versões "tornadas inteiras" de CeSej ek são números inteiros. Por exemplo, deixe C = √22 cos (3π/8 ) . No exemplo, o módulo de transformada de vetor inverso 146 pode utilizar os valores de número inteiro C' = 2217 e j = 12 para aproximar .√2cos (3π/8) porque 2217/212 = 0, 541259766 e √2cos (3π/8)= .0,5411961... . Nesse exemplo, é evidente que 0.5411961 é aproximadamente igual a 0,541259766. Desse modo, cálculos da forma:
u =x* C + y * S;
v=x*S-y*C podem ser substituídos por cálculos da fórmula:
u' = χ * (C' / 2j) + y * (S' / 2k) ;
ν' =x* (S' / 2k) - y * {C / 2j) .
Para simplificar ainda mais esses cálculos, as operações de divisão por 2j e 2k podem ser substituídas por operações de deslocamento a direita no sentido de bit por posições j e k, indicadas utilizando o símbolo ">>":
u" = ( (x * Cr) » j) + ( (y * Sf) » k) ;
ν" = ( (χ * s') » k) - ( (y * C') » j) . Entretanto, como discutido acima em relação à adição de valores de polarização para o coeficiente DC, a substituição de uma operação de divisão por uma operação de deslocamento a direita no sentido de bits pode levar a diferenças entre u' eu'' e v' e v' ' . A adição de valores de polarização de ponto médio a termos nesses cálculos pode reduzir as diferenças entre u' eu'' e entre v' e v' ' . Quando valores de polarização de ponto médio são adicionados cálculos podem ter a forma: u" ' = ((x * C" + (1 « (j-1)) » j) + ( (y * Sf +
(1 « (k-1) ) » k) ;
v"' = ((x * S' + (1 « (k-1)) » k) - ((y * C' + (1 « (j-1) ) » j) ·
Embora a adição de valores de polarização de ponto médio possa 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 tornar a computação de u' ' ' e v''' impraticável ao utilizar aritmética de ponto fixo em registros de 16 bits. A adição de valores de polarização de ponto médio pode tornar a computação de u' ' ' e v' ' ' impraticável porque a adição de valores de polarização de ponto médio ocorre antes do deslocamento a direita, e conseqüentemente pode levar a excesso de registro.
A diferença média entre v=x*S-y*Cev'' = ( (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 v=x*S-y*Cev''' = ((x*S' + (1 « (k-1)) » k) - ((y * C' + (1 « (j-1)) » j) também é aproximadamente zero. Isso é porque v" e v'' ' são sempre aproximadamente iguais. V'' e v'' ' são todos aproximadamente iguais porque quando j é igual a k, o valor de polarização de ponto médio é cancelado pela subtração:
ν-'" = ( (x * C + m) » j) - {{y * S' + m) » k) * (x * Cf + m) / 2j - (y * Sf + m) /Ik =
(x * C') / 2j + (m / 2j) - (y * S') / 2* - (m / 2k) =
(x * C') / 2j - (y * S') / 2* *
v" = ((x * C') » j) - ( (y * S') » Jt) onde m representa o valor de polarização de ponto médio. Como esse exemplo ilustra, a subtração (m / 2k) a partir de (m / 2J) quando j é igual a k cancela o valor de polarização de ponto médio m. Como a diferença média entre ν e v' ' é aproximadamente zero, o módulo de transformada de vetor inverso 146 não introduz sistematicamente polarização positiva ou negativa em valores gerados por calcular v'' em vez de v''' e porque v' ' e v' ' ' são aproximadamente iguais, o módulo de transformada de vetor inverso 146 pode utilizar v'' em vez de v' ' ' .
A diferença média entre u=x*C+y*Seu''' = ((x * C' + (1 « (j-1)) » j) + ((y * S' + (1 « (k - 1)) >> k) também é aproximadamente igual a zero. Ao mesmo tempo, a diferença entre u = x*C + y*S, eu'' = (x * C') » j) + (yy *S' ) » k) não é aproximadamente igual a zero. Em vez disso, a diferença média entre u e u'' é aproximadamente -1/2. Desse modo, 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' + τη) / 2k) =
((x * C') / 2j) + (jzi / 2j) + ( (y * S') / 2k) + (m / 2k) =
((x * C') / 2j) + ( (y * Sf) / 2k) + (m / 2j) + (m / 2k) φ
u" = ( (x * C') » j) + ( (y * S') » k) . Como u' ' não é aproximadamente igual a u' ' ' , u' ' não pode ser utilizado no lugar de u' ' ' . A tentativa de utilizar u'' no lugar de u''' pode resultar em diferenças significativas a partir de u.
Para evitar as questões de complexidade e excesso associadas à adição de valor de polarização de ponto médio a cada cálculo, a seguinte fórmula pode ser utilizada no lugar de u" ' eu'':
u"" = ( (x * C') » j) - ( (y * -S') » k) . u" " é igual a u' ' exceto que em u' ' ' ' , uma versão negativa de S' é utilizada e ( (y * -S) » k) é subtraído. Como u" ' , u' " ' não adiciona valores de polarização de ponto médio. Entretanto, diferente de u''', diferenças entre u'' ' e u são centrados em torno de 0. Como as diferenças entre u' ' ' eu são centradas em torno de zero, erros de arredondamento não são aumentados através da aplicação de operações de estrutura de borboleta subseqüentes. Por esse motivo, o módulo de transformada de vetor inverso 146 pode utilizar u''' para calcular u em uma operação de estrutura de borboleta. Por esse motivo, quando j é igual a k, operações de estrutura de borboleta utilizadas por módulo de transformada de vetor inverso 146 para aplicar transformada 260 podem ter a seguinte forma:
u" " = ((x * C') » j) - ( (y * -S') » Jt);
v'" = ((x * S') » k) - ( (y * C') » j) . Portanto, diferenças entre resultados gerados por esse tipo de operação de estrutura de borboleta e resultados que seriam gerados por uma operação de estrutura de borboleta equivalente utilizando aritmética de precisão ilimitada são centradas em torno de zero e têm magnitude positiva ou negativa de 1 ou menos. Alternativamente, quando j é igual a k, o módulo de transformada de vetor inverso 146 pode utilizar operações de estrutura de borboleta nas quais deslocamentos a direita foram adiados para o final da operação de estrutura de borboleta:
Uf-X* (C' / 2k) + y * (Sf / 2k) ;
( (x * Cf) / 2k) + ( (y * S') / 2k) =
( (x * C') + (y * Sf)) / 2k *
u* = ( ( (x * C') + (y * Sf) + (1 « (Jr-I))) » k;
ν' — χ * (S' / 2k) - y * (C' / 2J') =
( (x * S') /2*) - ( (y * C') / 2*) =
( (x * S') / 2k) + ( (-1) (y * C') / 2*) =
( (x * S') / 2k) + ( (y * -C') / 2*) =
((x * S') + (y * -Cf)) / 2k *
v* = ((x * Sf) + (y * -Cf) + (1 « (A--I))) » k.
Adiar os deslocamentos a direita para o final da operação de estrutura de borboleta pode reduzir o número geral de operações de deslocamento necessárias para executar a operação de estrutura de borboleta e pode melhorar a precisão. Além disso, instruções de multiplicar- acumular de 4 sentidos, disponíveis no processador de dados múltiplos de instrução única de 16 bits mais moderno ("SIMD") e processadores de sinais digitais, podem ser utilizadas para computar u* e v* de forma eficiente.
Operações de multiplicações podem ser computacionalmente caras em relação à adição, subtração e operações de deslocamento no sentido de bit. Por esse motivo, pode ser mais simples utilizar uma série de adições, subtrações, e operações de deslocamento no sentido de bit que tenha o mesmo efeito que uma operação de multiplicação. Por exemplo, suponha que C' = 2217. Nesse <table>table see original document page 69</column></row><table> exemplo, r = χ * C' pode ser substituído pelas seguintes etapas:
x2 = {x « 3) - x;
x3 = x+ (x2 « 6) ;
x4 = x3 - x2;
r = x3 + (x4 « 2) . Nesse 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) = (χ * 2217, onde χ = 1). Nesse exemplo, 1 * 2217 = 2217 e o valor produzido por essas operações de seqüência quando χ = 1 é 2217.
A seguinte tabela resume um conjunto de exemplo de aproximações de valor inteiro que o módulo de transformada de vetor inverso 146 pode utilizar para fatores constantes Al, A2, BI, B2, Cl, C2, Dl e D2.
Tabela 1: aproximações de fator constante de exemplo utilizadas na transformada 260 <table>table see original document page 70</column></row><table>
Na Tabela 1, valores na coluna "valor inteiro" se aproximam dos valores na coluna "valor original" quando dividido por 212 = 4096. Por exemplo, 2217/4096 .0, 541259766 e V2cos(37i/8) » 0, 5411961. Similarmente .5352/4096 = 1,30664062 e V2sen(37t/8) « 1, 30656296. As fórmulas na coluna "Algoritmos para produtos de computação" resumem os métodos que o módulo de transformada de vetor inverso 146 podem utilizar no lugar de operações de multiplicação pelos valores inteiros correspondentes.
A figura 11 é um diagrama que ilustra um segundo algoritmo exemplar 270. Como na figura 10, os valores Xo, Χι, X2, X3, X4/ X5, Χβ e X7 representam coeficientes de entrada e valores x0, χι, X2, X3, X4, X5, X6 e x7 representam valores de saida. 0 valor associado a uma linha após um circulo que abrange um símbolo " + " é o resultado de somar os valores associados às setas que apontam para dentro do círculo. 0 valor associado a uma linha após um círculo que abrange um símbolo "x" é o resultado de multiplicar o coeficiente posicionado ao lado do círculo e valores associados às linhas que passam através dos círculos. O símbolo "_" ao lado de uma seta representa uma negação do valor associado à seta. Por exemplo, se o valor "10" for associado a uma seta antes de um símbolo "-", o valor "-10" é associado a seta após o símbolo Além disso, deve ser observado que as técnicas descritas acima para reduzir erro de arredondamento utilizando coeficientes negativos e subtração podem ser utilizadas no algoritmo 190.
Na transformada 270, os valores de α = -√2cos (3π/8 ) , β = √2sen (3π/8 ) , γ = -√2cos (π/16) , δ = √2 sen(π/16), ε = √2cos (3π/16) e ζ = √2sen (3π/16) podem ser aproximados utilizando frações racionais. Por exemplo, os valores de α, β, γ, δ, ε e ζ podem ser aproximados utilizando as aproximações de número inteiro listadas na
Tabela 2 abaixo.
Tabela 2: aproximações de valor de constante de exemplo utilizadas na transformada 270
<table>table see original document page 71</column></row><table>
Na Tabela 2, valores na coluna "aproximação de número inteiro" representam versão tornadas inteiras dos valores na coluna "Valor original". Por exemplo,
<formula>formula see original document page 72</formula> As equações na coluna "Algoritmo para computar produtos" da Tabela 3 representam algoritmos pelos quais o módulo de transformada de vetor inverso 146 pode utilizar no lugar de operações de multiplicação pelos valores na coluna "aproximação de número inteiro".
A figura 12 é um diagrama de fluxo que ilustra uma transformada exemplar 200 que pode ser utilizada por módulo de transformada de vetor direto 214. Na figura 12, os valores X0, Χχ, X2, X3, X4, X5, Xe e X7 representam coeficientes de saida e valores x0, Χι, κ2, X3, X4, X5, X6 e X7 representam valores de entrada. Além disso, deve ser observado que as técnicas descritas acima para reduzir erro de arredondamento utilizando coeficientes negativados e subtração podem ser utilizadas na transformada 270.
No exemplo da figura 12, os valores de α = λ/2 cos (3π/8 ) , β = λ/2 sen (3π/8 ) , γ = -Jl cos (π/16) , δ =
λ/2 sen (π/16) , ε = -Jl cos (3π/16) e ζ = -Jl sen (3π/16) podem ser aproximados utilizando frações racionais. Por exemplo, os valores de α, β, γ, δ, ε e ζ podem ser aproximados utilizando as aproximações de número inteiro listadas na Tabela 2.
As técnicas descritas aqui podem ser implementadas em hardware, software, firmware, ou qualquer combinação dos mesmos. Quaisquer características descritas como módulos ou componentes podem ser implementadas juntas em um dispositivo lógico integrado ou separadamente como dispositivos lógicos discretos porém interoperáveis. Se implementadas em software, as técnicas podem ser realizadas pelo menos em parte por um meio legível por computador compreendendo instruções que, quando executadas, desempenham um ou mais dos métodos descritos acima. 0 meio legível por computador pode fazer parte de um produto de programa de computador, que pode incluir materiais de empacotamento. 0 meio legível por computador pode compreender memória de acesso aleatório (RAM) como memória de acesso aleatório dinâmico síncrono (SDRAM), memória somente de leitura (ROM), memória de acesso aleatório não volátil (NVRAM), memória somente de leitura programável eletricamente apagável (EEPROM), memória FLASH, meio de armazenagem de dados ópticos ou magnéticos e similares. As técnicas adicional ou alternativamente podem ser realizadas pelo menos em parte por um meio de comunicação legível por computador que carrega ou comunica código na forma de instruções ou estruturas de dados e que pode ser acessado, lido e/ou executado por um computador.
0 código pode ser executado por um ou mais processadores, como um ou mais processadores de sinais digitais (DSPs), microprocessadores de propósito geral, circuitos integrados de aplicação específica (ASICs), disposições lógicas programáveis em campo (FPGAs), ou outro conjunto de circuitos lógico discreto ou integrado equivalente. Por conseguinte, o termo "processador", como utilizado aqui pode se referir a qualquer uma das estruturas acima 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 em módulos de software dedicados ou módulos de hardware configurados para codificar e decodificar, ou incorporados em um codificador-decodificador de vídeo combinado (CODEC).
Várias modalidades da invenção foram descritas. Essas e outras modalidades estão compreendidas no escopo das reivindicações que se seguem.

Claims (84)

1. Método, compreendendo: gerar uma matriz de coeficientes polarizados pela adição de um ou mais valores de polarização a um coeficiente de uma matriz de coeficientes de fonte; gerar uma matriz de coeficientes transformados utilizando aritmética de ponto fixo para aplicar repetidamente uma transformada unidimensional a coeficientes na matriz de coeficientes polarizados; gerar uma matriz de coeficientes de saida deslocando a direita coeficientes na matriz de coeficientes transformados; e em que coeficientes na matriz de coeficientes de saida são aproximações de valores que seriam produzidos transformando a matriz de coeficientes de fonte utilizando uma transformada de co-seno discreta inversa ideal; fazer uma unidade de apresentação de midia transmitir sinais audíveis ou visíveis com base na matriz de valores de saída; em que a adição dos valores de polarização ao coeficiente 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 das representações de coeficientes de ponto fixo com precisão limitada de deslocamento a direita na matriz de coeficientes transformados por uma primeira magnitude e resulta da divisão de coeficientes na matriz de coeficientes transformados por 2 elevada à potência da primeira magnitude, sem considerar a precisão.
2. Método, de acordo com a reivindicação 1, em que coeficientes na matriz de coeficientes de saída são valores de componente de pixel; e em que o método compreende ainda construir um bloco de pixels que inclui os valores de componente de pixel.
3. Método, de acordo com a reivindicação 2, em que fazer uma unidade de apresentação de midia transmitir sinais audíveis ou visíveis com base na matriz de valores de saída compreende fazer a unidade de apresentação de mídia exibir o bloco de pixels.
4. Método, de acordo com a reivindicação 2, em que o método compreende ainda: gerar um primeiro quadro de vídeo combinando o bloco de pixels com outros blocos de pixels; e utilizar decodificação temporal para gerar um ou mais quadros de vídeo subseqüentes que utilizam o primeiro quadro de vídeo como um quadro de vídeo de referência.
5. Método, de acordo com a reivindicação 1, em que o coeficiente é um coeficiente DC da matriz de coeficientes de fonte.
6. Método, de acordo com a reivindicação 1, em que o método compreende ainda adicionar um termo de polarização de ponto médio ao coeficiente; e em que o valor de polarização de ponto médio é igual a 2P_1, onde P é igual ao número de bits de mantissa em números de ponto fixo utilizados na transformada mais um número de bits que são adicionados a coeficientes na matriz de coeficientes transformados aplicando a transformada.
7. Método, de acordo com a reivindicação 1, em que a primeira magnitude é igual a 2P, onde P é igual ao número de bits de mantissa em números de ponto fixo utilizados na transformada mais um número de bits que são adicionados a coeficientes na matriz de coeficientes transformados aplicando a transformada.
8. Método, de acordo com a reivindicação 1, em que a geração da matriz de coeficientes polarizados compreende adicionar um valor de polarização suplementar ao coeficiente; e em que o valor de polarização suplementar é igual a -1 quando o coeficiente é negativo e igual a 0 quando o coeficiente é não negativo.
9. Método, de acordo com a reivindicação 1, em que o método compreende ainda selecionar em uma base pseudo-aleatória um valor que é igual a -1 ou 0; e em que a geração da matriz de coeficientes polarizados compreende adicionar o valor selecionado ao coeficiente.
10. Método, de acordo com a reivindicação 1, em que o método compreende ainda: gerar uma matriz de coeficientes dequantizados dequantizando uma matriz de coeficientes quantizados; e gerar a matriz de coeficientes de fonte deslocando a esquerda coeficientes na matriz de coeficientes dequantizados por um número de bits de mantissa de números de ponto fixo utilizados enquanto gera a matriz de coeficientes transformados.
11. Método, de acordo com a reivindicação 10, em que o número de bits de mantissa é três; e em que dada a matriz de coeficientes de fonte, a matriz de coeficientes de saida satisfaz as exigências de precisão do padrão 1180 do Institute of Electrical and Electronics Engineers (IEEE).
12. Método, de acordo com a reivindicação 1, em que a geração da matriz de coeficientes transformados compreende utilizar aritmética de ponto fixo para aplicar repetidamente a transformada em coeficientes na matriz de coeficientes polarizados sem utilizar operações de multiplicação ou divisão.
13. Método, de acordo com a reivindicação 1, em que os números de ponto fixo utilizados enquanto gera a matriz de coeficientes transformados são números de ponto fixo de 16 bits.
14. Método, de acordo com a reivindicação 1, em que a geração da matriz de coeficientes transformados compreende: gerar uma matriz de coeficientes intermediários utilizando aritmética de ponto fixo para aplicar uma série de operações de estrutura de borboleta em cada vetor de linha da matriz de coeficientes polarizados; e gerar a matriz de coeficientes transformados utilizando aritmética de ponto fixo para aplicar a série de operações de estrutura de borboleta em cada vetor de coluna da matriz de coeficientes intermediários.
15. Método, de acordo com a reivindicação 14, em que a execução de qualquer uma das operações de estrutura de borboleta compreende executar operações de estrutura de borboleta da forma: u = (((x * C") + (y * S') + (1 « (k-1))) » k; ν = ({x * S') + (y * -C') + (1 « (Jt-I))) » k, onde u, ν, χ e y são números de ponto fixo, onde χ e y são valores de entrada e u e ν são valores de saída; e onde C, S e k são números inteiros.
16. Método, de acordo com a reivindicação 14, em que as 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 utilizando aritmética de precisão ilimitada são centradas em torno de zero e têm magnitude positiva ou negativa de 1 ou menos.
17. Método, de acordo com a reivindicação 16, em que a execução de qualquer uma das operações de estrutura de borboleta compreende executar operações de estrutura de borboleta da forma: u = ( (x * C) » k) - ( (y * -S) » k) ; ν = ( (x * S) » k) - ( (y * C) » k) , onde u, ν, χ e y são números de ponto fixo, onde χ e y são valores de entrada e u e ν são valores de saída; e onde C, S e k são números inteiros.
18. Dispositivo de comunicação sem fio, compreendendo: um módulo de polarização de coeficiente que gera uma matriz de coeficientes polarizados pela adição de um ou mais valores de polarização a um coeficiente da matriz de coeficientes de fonte; um módulo de transformada inversa que gera uma matriz de coeficientes transformados utilizando aritmética de ponto fixo para aplicar repetidamente uma transformada unidimensional a coeficientes na matriz de coeficientes polarizados; um módulo de deslocamento a direita que gera uma matriz de coeficientes de saída deslocando a direita coeficientes na matriz de coeficientes transformados; e em que coeficientes na matriz de coeficientes de saída são aproximações de valores que seriam produzidos transformando a matriz de coeficientes de fonte utilizando uma transformada de co-seno discreta inversa ideal; e um acionador de apresentação que faz uma unidade de apresentação de mídia transmitir sinais audíveis ou visíveis com base na matriz de coeficientes de saída; em que a adição dos valores de polarização ao coeficiente 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 das representações de coeficientes de ponto fixo com precisão limitada de deslocamento a direita na matriz de coeficientes transformados por uma primeira magnitude e resulta da divisão de coeficientes na matriz de coeficientes transformados por 2 elevada à potência da primeira magnitude, sem considerar a precisão.
19. Dispositivo, compreendendo: um módulo de polarização de coeficiente que gera uma matriz de coeficientes polarizados pela adição de um ou mais valores de polarização a um coeficiente da matriz de coeficientes de fonte; um módulo de transformada inversa que gera uma matriz de coeficientes transformados utilizando aritmética de ponto fixo para aplicar repetidamente uma transformada unidimensional a coeficientes na matriz de coeficientes polarizados; um módulo de deslocamento a direita que gera uma matriz de coeficientes de saida deslocando a direita coeficientes na matriz de coeficientes transformados; e em que coeficientes na matriz de coeficientes de saida são aproximações de valores que seriam produzidos transformando a matriz de coeficientes de fonte utilizando uma transformada de co-seno discreta inversa ideal; e um acionador de apresentação que faz uma unidade de apresentação de mídia transmitir sinais audíveis ou visíveis com base na matriz de coeficientes de saída; em que a adição dos valores de polarização ao coeficiente 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 das representações de coeficientes de ponto fixo com precisão limitada de deslocamento a direita na matriz de coeficientes transformados por uma primeira magnitude e resulta da divisão de coeficientes na matriz de coeficientes transformados por 2 elevada à potência da primeira magnitude, sem considerar a precisão.
20. Dispositivo, de acordo com a reivindicação .19, em que coeficientes na matriz de coeficientes de saida são valores de componente de pixel; e em que o dispositivo compreende ainda um módulo de reconstrução de pixel que constrói um bloco de pixels que inclui os valores de componente de pixel.
21. Dispositivo, de acordo com a reivindicação .20, em que o acionador de apresentação faz a unidade de apresentação de midia exibir o bloco de pixels.
22. Dispositivo, de acordo com a reivindicação .20, em que o dispositivo compreende ainda: um módulo combinador de bloco que gera um primeiro quadro de video pela combinação do bloco de pixels com outros blocos de pixels; e um módulo de geração de quadro preditivo que gera um ou mais quadros de video subseqüentes que utilizam o primeiro quadro de video como um quadro de video de referência.
23. Dispositivo, de acordo com a reivindicação .19, em que o coeficiente é um coeficiente DC da matriz de coeficientes.
24. Dispositivo, de acordo com a reivindicação .19, em que o módulo de polarização de coeficiente gera a matriz de coeficientes polarizados pela adição de um valor de polarização de ponto médio ao coeficiente; e em que o valor de polarização de ponto médio é igual a 2P_1, onde P é igual ao número de bits de mantissa em números de ponto fixo utilizados na transformada mais um número de bits que são adicionados a coeficientes na matriz de coeficientes transformados aplicando a transformada.
25. Dispositivo, de acordo com a reivindicação .19, em que a primeira magnitude é igual a 2P, onde P é igual ao número de bits de mantissa em números de ponto fixo utilizados na transformada mais um número de bits que são adicionados a coeficientes na matriz de coeficientes transformados aplicando a transformada.
26. Dispositivo, de acordo com a reivindicação .19, em que o módulo de polarização de coeficiente gera a matriz de coeficientes polarizados pela adição de um valor de polarização suplementar que é igual a -1 quando o coeficiente é negativo e igual a 0 quando o coeficiente é não negativo.
27. Dispositivo, de acordo com a reivindicação .19, em que o módulo de polarização de coeficiente gera a matriz de coeficientes polarizados selecionando, em uma base pseudo-aleatória, um valor que é igual a -1 ou 0, e adicionar o valor selecionado ao coeficiente com um valor de polarização suplementar.
28. Dispositivo, de acordo com a reivindicação .19, em que o dispositivo compreende ainda: um módulo de dequantização que gera uma matriz de coeficientes dequantizados dequantizando uma matriz de coeficientes quantizados; e um módulo de escalonamento que gera a matriz de coeficientes de fonte deslocando a esquerda coeficientes na matriz de coeficientes dequantizados por um número de bits de mantissa de números de ponto fixo utilizados enquanto gera a matriz de coeficientes transformados.
29. Dispositivo, de acordo com a reivindicação .28, em que o número de bits de mantissa é três; e em que dada a matriz de coeficientes de fonte, a matriz de coeficientes de saída satisfaz as exigências de precisão do padrão 1180 do Institute of electrical and Electronics Engineers (IEEE).
30. Dispositivo, de acordo com a reivindicação .19, em que o módulo de transformada inversa utiliza números de ponto fixo de 16 bits ao utilizar aritmética de ponto fixo para aplicar repetidamente a transformada unidimensional em coeficientes na matriz de coeficientes polarizados.
31. Dispositivo, de acordo com a reivindicação .19, em que o módulo de transformada inversa utiliza aritmética de ponto fixo para aplicar uma série de operações de estrutura de borboleta em cada vetor de linha da matriz de coeficientes escalonados para produzir uma matriz de coeficientes intermediários e utiliza aritmética de ponto fixo para aplicar a série de operações de estrutura de borboleta em cada vetor de coluna da matriz de coeficientes intermediários para produzir a matriz de coeficientes transformados.
32. Dispositivo, de acordo com a reivindicação .31, em que as operações de estrutura de borboleta são da forma: u= ( ( (x * C') + {y * S') + (1 « (fc-l))) » k; V= ( (x * Sr) + (y * -Cf) + (1 « U-I))) » k, onde u, ν, χ e y são números de ponto fixo, onde χ e y são valores de entrada e u e ν são valores de saída; e onde C, S e k são números inteiros.
33. Dispositivo, de acordo com a reivindicação .31, em que as 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 utilizando aritmética de precisão ilimitada são centradas em torno de zero e têm magnitude positiva ou negativa de 1 ou menos.
34. Dispositivo, de acordo com a reivindicação .33, em que as operações de estrutura de borboleta são da forma: u = ( (x * C) » k) - ( (y * -S) » k) ; ν = ((x * S) » k) - ( (y * C) » k) , onde u, ν, χ e y são números de ponto fixo, onde χ e y são valores de entrada e u e ν são valores de saída; e onde C, S e k são números inteiros.
35. Dispositivo, compreendendo: mecanismos para gerar uma matriz de coeficientes polarizados pela adição de um ou mais valores de polarização a um coeficiente de uma matriz de coeficientes de fonte; mecanismos para gerar uma matriz de coeficientes transformados utilizando aritmética de ponto fixo para aplicar repetidamente uma transformada unidimensional a coeficientes na matriz de coeficientes polarizados; mecanismos para gerar uma matriz de coeficientes de saida deslocando a direita coeficientes na matriz de coeficientes transformados; em que coeficientes na matriz de coeficientes de saida são aproximações de valores que seriam produzidos transformando a matriz de coeficientes de fonte utilizando uma transformada de co-seno discreta inversa ideal; e mecanismos para fazer uma unidade de apresentação de midia transmitir sinais audíveis ou visíveis com base na matriz de valores de saída; em que a adição dos valores de polarização ao coeficiente 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 das representações de coeficientes de ponto fixo com precisão limitada de deslocamento a direita na matriz de coeficientes transformados por uma primeira magnitude e resulta da divisão de coeficientes na matriz de coeficientes transformados por 2 elevada à potência da primeira magnitude, sem considerar a precisão.
36. Dispositivo, de acordo com a reivindicação .35,em que em que coeficientes na matriz de coeficientes de saída são valores de componente de pixel; e em que o dispositivo compreende ainda mecanismos para construir um bloco de pixels que inclui os valores de componente de pixel.
37. Dispositivo, de acordo com a reivindicação .36, em que os mecanismos para fazer uma unidade de apresentação de mídia transmitir sinais audíveis ou visíveis com base na matriz de valores de saída compreendem mecanismos para fazer a unidade de apresentação de mídia exibir o bloco de pixels.
38. Dispositivo, de acordo com a reivindicação .36, em que o dispositivo compreende ainda: mecanismos para gerar um primeiro quadro de vídeo combinando o bloco de pixels com outros blocos de pixels; e mecanismos para utilizar decodificação temporal para gerar um ou mais quadros de vídeo subseqüentes que utilizam o primeiro quadro de vídeo como um quadro de vídeo de referência.
39. Dispositivo, de acordo com a reivindicação .35, em que o coeficiente é um coeficiente DC da matriz de coeficientes de fonte.
40. Dispositivo, de acordo com a reivindicação .35, em que os mecanismos para gerar a matriz de coeficientes polarizados compreendem mecanismos para adicionar um valor de polarização de ponto médio ao coeficiente; e em que o valor de polarização de ponto médio é igual a 2P_1, onde P é igual ao número de bits de mantissa em números de ponto fixo utilizados na transformada mais um número de bits que são adicionados a coeficientes na matriz de coeficientes transformados aplicando da transformada.
41. Dispositivo, de acordo com a reivindicação .40, em que a primeira magnitude é igual a 2P, onde P é igual ao número de bits de mantissa em números de ponto fixo utilizados na transformada mais um número de bits que são adicionados a coeficientes na matriz de coeficientes transformados aplicando a transformada.
42. Dispositivo, de acordo com a reivindicação .35, em que os mecanismos para gerar a matriz de coeficientes polarizados compreendem mecanismos para adicionar um valor de polarização suplementar ao coeficiente; em que o valor de polarização suplementar é igual a -1 quando o coeficiente é negativo e igual a 0 quando o coeficiente é não negativo.
43. Dispositivo, de acordo com a reivindicação .35, em que o dispositivo compreende ainda mecanismos para selecionar em uma base pseudo-aleatória um valor que é igual a -1 ou 0; e em que os mecanismos para gerar a matriz de coeficientes polarizados compreendem mecanismos para adicionar o valor selecionado ao coeficiente.
44. Dispositivo, de acordo com a reivindicação .35, em que o dispositivo compreende ainda: mecanismos para gerar uma matriz de coeficientes dequantizados dequantizando uma matriz de coeficientes quantizados; e mecanismos para gerar a matriz de coeficientes de fonte deslocando a esquerda coeficientes na matriz de coeficientes dequantizados por um número de bits de mantissa de números de ponto fixo utilizados enquanto gera a matriz de coeficientes transformados.
45. Dispositivo, de acordo com a reivindicação .44, em que o número de bits de mantissa é três; e em que dada a matriz de coeficientes de fonte, a matriz de coeficientes de saida satisfaz as exigências de precisão do padrão 1180 do Institute of Electrical and Electronics Engineers (IEEE).
46. Dispositivo, de acordo com a reivindicação .35, em que os mecanismos para gerar a matriz de coeficientes transformados compreendem mecanismos para utilizar aritmética de ponto fixo para aplicar repetidamente a transformada em coeficientes na matriz de coeficientes polarizados sem utilizar operações de multiplicação ou divisão.
47. Dispositivo, de acordo com a reivindicação .35, em que os mecanismos para gerar a matriz de coeficientes transformados utilizam números de ponto fixo de 16 bits ao utilizar aritmética de ponto fixo para aplicar repetidamente a transformada unidimensional a coeficientes na matriz de coeficientes polarizados.
48. Dispositivo, de acordo com a reivindicação .35, em que a geração da matriz de coeficientes transformados compreende: mecanismos para gerar uma matriz de coeficientes intermediários utilizando aritmética de ponto fixo para aplicar uma série de operações de estrutura de borboleta em cada vetor de linha da matriz de coeficientes polarizados; e mecanismos para gerar a matriz de coeficientes transformados utilizando aritmética de ponto fixo para aplicar a série de operações de estrutura de borboleta em cada vetor de coluna da matriz de coeficientes intermediários.
49. Dispositivo, de acordo com a reivindicação .48, em que os mecanismos para executar qualquer uma das operações de estrutura de borboleta compreendem mecanismos para executar operações de estrutura de borboleta da forma: u= (((x * C') + (y * S') + (1 « U-I))) » k; ν = ((χ * S') + (y * -C’) + (1 « (k--I))) » k, onde u, ν, χ e y são números de ponto fixo, onde χ e y são valores de entrada e u e ν são valores de saída; e onde C, S e k são números inteiros.
50. Dispositivo, de acordo com a reivindicação .48, em que as 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 utilizando aritmética de precisão ilimitada são centradas em torno de zero e têm magnitude positiva ou negativa de 1 ou menos.
51. Dispositivo, de acordo com a reivindicação .50, em que os mecanismos para executar qualquer uma das operações de estrutura de borboleta compreendem mecanismos para executar operações de estrutura de borboleta da forma: u= ((x * C) » k) - ( (y * -S) » k) ; ν = { (x * S) » k) - { (y * C) » k) , onde u, ν, χ e y são números de ponto fixo, onde χ e y são valores de entrada e u e ν são valores de saída; e onde C, S e k são números inteiros.
52. Meio legível por computador compreendendo instruções, quando executadas as instruções fazem um processador: gerar uma matriz de coeficientes polarizados pela adição de um ou mais valores de polarização a um coeficiente de uma matriz de coeficientes de fonte; gerar uma matriz de coeficientes transformados utilizando aritmética de ponto fixo para aplicar repetidamente uma transformada unidimensional a coeficientes na matriz de coeficientes polarizados; gerar uma matriz de coeficientes de saida deslocando a direita coeficientes na matriz de coeficientes transformados; em que coeficientes na matriz de coeficientes de saida são aproximações de valores que seriam produzidos transformando a matriz de coeficientes de fonte utilizando uma transformada de co-seno discreta inversa ideal; e fazer uma unidade de apresentação de mídia transmitir sinais audíveis ou visíveis com base na matriz de valores de saída; em que a adição dos valores de polarização ao coeficiente 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 das representações de coeficientes de ponto fixo com precisão limitada de deslocamento a direita na matriz de coeficientes transformados por uma primeira magnitude e resulta da divisão de coeficientes na matriz de coeficientes transformados por 2 elevada à potência da primeira magnitude, sem considerar a precisão.
53. Meio legível por computador, de acordo com a reivindicação 52, em que coeficientes na matriz de coeficientes de saída são valores de componente de pixel; e em que as instruções fazem ainda o processador construir um bloco de pixels que inclui os valores de componente de pixel.
54. Meio legível por computador, de acordo com a reivindicação 53, em que as instruções fazem o processador fazer a unidade de apresentação de mídia transmitir sinais audíveis ou visíveis com base na matriz de valores de saída fazendo a unidade de apresentação de mídia exibir o bloco de pixels.
55. Meio legível por computador, de acordo com a reivindicação 53, em que as instruções fazem ainda o processador: gerar um primeiro quadro de vídeo combinando o bloco de pixels com outros blocos de pixels; e utilizar decodificação temporal para gerar um ou mais quadros de vídeo subseqüentes que utilizam o primeiro quadro de vídeo como um quadro de vídeo de referência.
56. Meio legível por computador, de acordo com a reivindicação 52, em que o coeficiente é um coeficiente DC da matriz de coeficientes.
57. Meio legível por computador, de acordo com a reivindicação 52,em que as instruções fazem ainda o processador adicionar um valor de polarização de ponto médio ao coeficiente; e em que o valor de polarização de ponto médio é igual a 2P_1, onde P é igual ao número de bits de mantissa em números de ponto fixo utilizados na transformada mais um número de bits que são adicionados a coeficientes na matriz de coeficientes transformados aplicando a transformada.
58. Meio legível por computador, de acordo com a reivindicação 52, em que a primeira magnitude é igual a 2P, onde P é igual ao número de bits de mantissa em números de ponto fixo utilizados na transformada mais um número de bits que são adicionados a coeficientes na matriz de coeficientes transformados aplicando a transformada.
59. Meio legível por computador, de acordo com a reivindicação 52, em que as instruções fazem ainda o processador gerar a matriz de coeficientes polarizados fazem o processador adicionar um valor de polarização suplementar ao coeficiente; e em que o valor de polarização suplementar é igual a -1 quando o coeficiente é negativo e igual a 0 quando o coeficiente é não negativo.
60. Meio legível por computador, de acordo com a reivindicação 52, em que as instruções fazem ainda 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 gerar a matriz de coeficientes polarizados fazem o processador adicionar o valor selecionado ao coeficiente.
61. Meio legível por computador, de acordo com a reivindicação 52, em que as instruções fazem ainda o processador: gerar uma matriz de coeficientes dequantizados dequantizando uma matriz de coeficientes quantizados; e gerar a matriz de coeficientes de fonte deslocando a esquerda coeficientes na matriz de coeficientes dequantizados por um número de bits de mantissa de números de ponto fixo utilizados enquanto gera a matriz de coeficientes transformados.
62. Meio legível por computador, de acordo com a reivindicação 61, em que o número de bits de mantissa é três; e em que dada a matriz de coeficientes de fonte, a matriz de coeficientes de saída satisfaz as exigências de precisão do padrão 1180 do Institute of electrical and Electronics Engineers (IEEE).
63. Meio legível por computador, de acordo com a reivindicação 52, em que as instruções fazem o processador gerar a matriz de coeficientes transformados fazendo c o processador aplicar repetidamente a transformada em coeficientes na matriz de coeficientes polarizados sem utilizar operações de multiplicação ou divisão.
64. Meio legível por computador, de acordo com a reivindicação 52, em que as instruções fazem o processador utilizar os números de ponto fixo de 16 bits quando as instruções fazem o processador utilizar aritmética de ponto fixo para aplicar repetidamente a transformada unidimensional em coeficientes na matriz de coeficientes polarizados.
65. Meio legível por computador, de acordo com a reivindicação 52, em que as instruções fazem o processador gerar a matriz de coeficientes transformados fazendo o processador: gerar uma matriz de coeficientes intermediários utilizando aritmética de ponto fixo para aplicar uma série de operações de estrutura de borboleta em cada vetor de linha da matriz de coeficientes polarizados; e gerar a matriz de coeficientes transformados utilizando aritmética de ponto fixo para aplicar a série de operações de estrutura de borboleta em cada vetor de coluna da matriz de coeficientes intermediários.
66. Meio legível por computador, de acordo com a reivindicação 65, em que as instruções fazem o processador executar qualquer uma das operações de estrutura de borboleta fazendo o processador executar operações de estrutura de borboleta da forma: u = ( ( (x * C') + [y * S') + (1 « (Jc-I))) » k; ν = ((x * S') + (y * -C') + (1 « (Ar-I) ) ) » k, onde u, ν, χ e y são números de ponto fixo, onde χ e y são valores de entrada e u e ν são valores de salda; e onde C, S e k são números inteiros.
67. Meio legível por computador, de acordo com a reivindicação 65, em que as 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 utilizando aritmética de precisão ilimitada são centradas em torno de zero e têm magnitude positiva ou negativa de 1 ou menos.
68. Meio legível por computador, de acordo com a reivindicação 66, em que as instruções fazem o processador executar qualquer uma das operações de estrutura de borboleta fazendo o processador executar operações de estrutura de borboleta da forma: u= {{x * C) » k) - ( (y * -S) » k) ; ν = ((x * S) » k) - ( (y * C) » k) , onde u, ν, χ e y são números de ponto fixo, onde χ e y são valores de entrada e u e ν são valores de saída; e onde C, S e k são números inteiros.
69. Método, compreendendo: gerar uma matriz de coeficientes ajustados deslocando a esquerda cada coeficiente em uma matriz de coeficientes de fonte; gerar uma matriz de coeficientes transformados utilizando aritmética de ponto fixo para aplicar repetidamente uma transformada unidimensional a coeficientes na matriz de coeficientes ajustados; gerar uma matriz de coeficientes escalonados escalonando cada coeficiente na matriz de coeficientes transformados; gerar uma matriz de coeficientes polarizados pela adição de um ou mais valores de polarização a um ou mais coeficientes na matriz de coeficientes escalonados; e gerar uma matriz de coeficientes de saida deslocando a direita coeficientes na matriz de coeficientes polarizados por uma primeira magnitude; em que a matriz de coeficientes de fonte representa dados de mídia; em que os coeficientes na matriz de coeficientes de saída são aproximações de valores que seriam produzidos transformando a matriz de coeficientes de fonte utilizando uma transformada de co-seno discreta inversa ideal; em que adicionar os valores de polarização ao coeficiente 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 das representações de coeficientes de ponto fixo com precisão limitada de deslocamento a direita na matriz de coeficientes polarizados pela primeira magnitude e resulta da divisão de coeficientes na matriz de coeficientes polarizados por 2 elevada à potência da primeira magnitude, sem considerar a precisão.
70. Método, de acordo com a reivindicação 69, em que a primeira magnitude é igual a 2P, onde P é igual ao número de bits de mantissa em números de ponto fixo utilizados na transformada mais um número de bits que são adicionados a coeficientes na matriz de coeficientes transformados aplicando a transformada.
71. Método, de acordo com a reivindicação 69, em que gerar a matriz de coeficientes polarizados compreende adicionar um valor de polarização suplementar a um ou mais coeficientes na matriz de coeficientes escalonados; e em que o valor de polarização suplementar é igual a -1 quando o coeficiente é negativo e igual a O quando o coeficiente é não negativo.
72. Método, de acordo com a reivindicação 1, em que o método compreende ainda selecionar em uma base pseudo-aleatória um valor que é igual a -1 ou 0; e em que gerar a matriz de coeficientes polarizados compreende adicionar o valor selecionado ao coeficiente.
73. Dispositivo, compreendendo: um módulo de deslocamento a esquerda que gera uma matriz de coeficientes ajustados deslocando a esquerda cada coeficiente em uma matriz de coeficientes de fonte; um módulo de transformada direta que gera uma matriz de coeficientes transformados utilizando aritmética de ponto fixo para aplicar repetidamente uma transformação unidimensional em coeficientes na matriz de coeficientes aj ustados; um módulo de escalonamento que gera uma matriz de coeficientes escalonados escalonando cada coeficiente na matriz de coeficientes transformados; um módulo de polarização de coeficiente que gera uma matriz de coeficientes polarizados pela adição de um ou mais valores de polarização a um ou mais coeficientes na matriz de coeficientes escalonados; e um módulo de deslocamento a direita que gera uma matriz de coeficientes de saída deslocando a direita coeficiente na matriz de coeficientes polarizados por uma primeira magnitude; em que a matriz de coeficientes de fonte representa dados de mídia; em que coeficientes na matriz de coeficientes de saída são aproximações de valores que seriam produzidos transformando a matriz de coeficientes de fonte utilizando uma transformada de co-seno discreta direta ideal; em que a adição dos valores de polarização ao coeficiente 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 representações de coeficientes de ponto fixo com precisão limitada de deslocamento a direita na matriz de coeficientes polarizados pela primeira magnitude e resulta da divisão dos coeficientes na matriz de coeficientes polarizados por 2 elevado à potência da primeira magnitude, sem considerar a precisão.
74. Dispositivo, de acordo com a reivindicação 73, em que a primeira magnitude é igual a 2P, em que P é igual ao número de bits de mantissa em números de ponto fixo utilizados na transformada mais um número de bits que são adicionados a coeficientes na matriz de coeficientes transformados aplicando a transformada.
75. Dispositivo, de acordo com a reivindicação 73, em que o módulo de polarização de coeficiente gera a matriz de coeficientes polarizados adicionando um valor de polarização suplementar a um ou mais coeficientes na matriz de coeficientes escalonados; e em que o valor de polarização suplementar é igual a -1 quando o coeficiente é negativo e igual a 0 quando o coeficiente é não negativo.
76. Dispositivo, de acordo com a reivindicação .73, 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 adiciona o valor selecionado a um ou mais coeficientes na matriz de coeficientes escalonados.
77. Dispositivo, compreendendo: mecanismos para gerar uma matriz de coeficientes ajustados deslocando a esquerda cada coeficiente em uma matriz de coeficientes de fonte; mecanismos para gerar uma matriz de coeficientes transformados utilizando aritmética de ponto fixo para aplicar repetidamente uma transformada unidimensional a coeficientes na matriz de coeficientes ajustados; mecanismos para gerar uma matriz de coeficientes escalonados escalonando cada coeficiente na matriz de coeficientes transformados; mecanismos para gerar uma matriz de coeficientes polarizados pela adição de um ou mais valores de polarização a um ou mais coeficientes na matriz de coeficientes escalonados; e mecanismos para gerar uma matriz de coeficientes de saida deslocando a direita coeficientes na matriz de coeficientes polarizados por uma primeira magnitude; em que a matriz de coeficientes de fonte representa dados de mídia; em que os coeficientes na matriz de coeficientes de saída são aproximações de valores que seriam produzidos transformando a matriz de coeficientes de fonte utilizando uma transformada de co-seno discreta inversa ideal; em que a adição dos valores de polarização ao coeficiente 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 das representações de coeficientes de ponto fixo com precisão limitada de deslocamento a direita na matriz de coeficientes polarizados pela primeira magnitude e resulta da divisão de coeficientes na matriz de coeficientes polarizados por 2 elevada à potência da primeira magnitude, sem considerar a precisão.
78. Dispositivo, de acordo com a reivindicação .77, em que a primeira magnitude é igual a 2P, onde P é igual ao número de bits de mantissa em números de ponto fixo utilizados na transformada mais um número de bits que são adicionados a coeficientes na matriz de coeficientes transformados aplicando a transformada.
79. Dispositivo, de acordo com a reivindicação .77,em que os mecanismos para gerar a matriz de coeficientes polarizados geram a matriz de coeficientes polarizados pela adição de um valor de polarização suplementar a um ou mais coeficientes na matriz de coeficientes escalonados; e em que o valor de polarização suplementar é igual a -1 quando o coeficiente é negativo e igual a 0 quando o coeficiente é não negativo.
80. Dispositivo, de acordo com a reivindicação .77,em que os mecanismos para gerar a matriz de coeficientes polarizados selecionam, em uma base pseudo- aleatória, um valor que é igual a -1 ou 0 e adicionam o valor selecionado a um ou mais coeficientes na matriz de coeficientes escalonados.
81. Meio legível por computador compreendendo instruções, em que as instruções executadas fazem um processador programável: gerar uma matriz de coeficientes ajustados deslocando a esquerda cada coeficiente em uma matriz de coeficientes de fonte; gerar uma matriz de coeficientes transformados utilizando aritmética de ponto fixo para aplicar repetidamente uma transformada unidimensional a coeficientes na matriz de coeficientes ajustados; gerar uma matriz de coeficientes escalonados escalonando cada coeficiente na matriz de coeficientes transformados; gerar uma matriz de coeficientes polarizados adicionando um ou mais valores de polarização a um ou mais coeficientes na matriz de coeficientes escalonados; e gerar uma matriz de coeficientes de salda deslocando a direita coeficientes na matriz de coeficientes polarizados por uma primeira magnitude; em que a matriz de coeficientes de fonte representa dados de mídia; em que coeficientes na matriz de coeficientes de saída são aproximações de valores que seriam produzidos transformando a matriz de coeficientes de fonte utilizando uma transformada de co-seno discreta direta ideal; em que a adição dos valores de polarização ao coeficiente 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 das representações de coeficientes de ponto fixo com precisão limitada de deslocamento a direita na matriz de coeficientes polarizados pela primeira magnitude e resulta da divisão de coeficientes na matriz de coeficientes polarizados por 2 elevada à potência da primeira magnitude, sem considerar a precisão.
82. Meio legivel por computador, de acordo com a reivindicação 81, em que a primeira magnitude é igual a 2P, onde P é igual ao número de bits de mantissa em números de ponto fixo utilizados na transformada mais um número de bits que são adicionados a coeficientes na matriz de coeficientes transformados aplicando a transformada.
83. Meio legivel por computador, de acordo com a reivindicação 81, em que as instruções fazem o processador gerar a matriz de coeficientes polarizados fazendo o processador adicionar um valor de polarização suplementar a um ou mais coeficientes na matriz de coeficientes escalonados; e em que o valor de polarização suplementar é igual a -1 quando o coeficiente é negativo e igual a 0 quando o coeficiente é não negativo.
84. Meio legivel por computador, de acordo com a reivindicação 81, em que as instruções fazem o processador gerar a matriz de coeficientes polarizados fazendo o processador: selecionar, em uma base pseudo-aleatória, um valor que é igual a -1 ou 0; e adicionar o valor selecionado a um ou mais coeficientes na matriz de coeficientes escalonados.
BRPI0712997-1A 2006-06-26 2007-06-25 redução de erros durante computação de transformada de co-seno discreta inversa BRPI0712997A2 (pt)

Applications Claiming Priority (9)

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
PCT/US2007/072039 WO2008002881A2 (en) 2006-06-26 2007-06-25 Reduction of errors during computation of inverse discrete cosine transform

Publications (1)

Publication Number Publication Date
BRPI0712997A2 true BRPI0712997A2 (pt) 2012-10-09

Family

ID=45936455

Family Applications (2)

Application Number Title Priority Date Filing Date
BRPI0712997-1A BRPI0712997A2 (pt) 2006-06-26 2007-06-25 redução de erros durante computação de transformada de co-seno discreta inversa
BRPI0712996-3A BRPI0712996A2 (pt) 2006-06-26 2007-06-26 aproximações eficientes para ponto fixo de transformadas de co-seno discretas, diretas e inversas

Family Applications After (1)

Application Number Title Priority Date Filing Date
BRPI0712996-3A BRPI0712996A2 (pt) 2006-06-26 2007-06-26 aproximações eficientes para ponto fixo de transformadas de co-seno discretas, diretas e inversas

Country Status (1)

Country Link
BR (2) BRPI0712997A2 (pt)

Also Published As

Publication number Publication date
BRPI0712996A2 (pt) 2012-04-17

Similar Documents

Publication Publication Date Title
US8385424B2 (en) Reduction of errors during computation of inverse discrete cosine transform
US8571340B2 (en) Efficient fixed-point approximations of forward and inverse discrete cosine transforms
RU2439682C2 (ru) Уменьшение ошибок во время вычисления обратного дискретного косинусного преобразования
KR100963459B1 (ko) 순이산 및 역이산 코사인 변환의 효율적인 고정 소수점 근사
RU2417423C2 (ru) Эффективные аппроксимации с фиксированной запятой прямого и обратного дискретных косинусных преобразований
BRPI0712997A2 (pt) redução de erros durante computação de transformada de co-seno discreta inversa

Legal Events

Date Code Title Description
B08F Application dismissed because of non-payment of annual fees [chapter 8.6 patent gazette]

Free format text: REFERENTE A 8A ANUIDADE.

B15K Others concerning applications: alteration of classification

Free format text: AS CLASSIFICACOES ANTERIORES ERAM: G06F 17/14, H04N 7/30

Ipc: G06F 17/14 (2006.01), H04N 7/30 (2006.01)

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 2312 DE 28-04-2015 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.

B15K Others concerning applications: alteration of classification

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