BRPI0712996A2 - aproximações eficientes para ponto fixo de transformadas de co-seno discretas, diretas e inversas - Google Patents

aproximações eficientes para ponto fixo de transformadas de co-seno discretas, diretas e inversas Download PDF

Info

Publication number
BRPI0712996A2
BRPI0712996A2 BRPI0712996-3A BRPI0712996A BRPI0712996A2 BR PI0712996 A2 BRPI0712996 A2 BR PI0712996A2 BR PI0712996 A BRPI0712996 A BR PI0712996A BR PI0712996 A2 BRPI0712996 A2 BR PI0712996A2
Authority
BR
Brazil
Prior art keywords
value
coefficient
factor
matrix
calculate
Prior art date
Application number
BRPI0712996-3A
Other languages
English (en)
Inventor
Yuriy Reznik
Original Assignee
Qualcomm Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Qualcomm Inc filed Critical Qualcomm Inc
Priority claimed from PCT/US2007/072162 external-priority patent/WO2008002942A2/en
Publication of BRPI0712996A2 publication Critical patent/BRPI0712996A2/pt

Links

Landscapes

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

Abstract

APROXIMAçõES EFICIENTES PARA PONTO FIXO DE TRANSFORMADAS DE CO-SENO DISCRETAS, DIRETAS E INVERSAS. São descritas técnicas para aproximar computação de uma transformada de co-selo discreta inversa utilizando cálculos de ponto fixo. De acordo com essas tecnicas, matrizes de coeficientes escalonados são geradas mediante multiplicação dos coeficientes em matrizes de coeficientes codificados por fatores de escalonamento. A seguir, as matrizes de coeficientes polarizados são geradas mediante adição de um valor de polarização de ponto médio a um coeficiente DC da matriz de coeficientes escalcnados. Aritmética de ponto fixo é então usada para aplicar uma transformada às matrizes de coeficientes polarizados. Valores nas matrizes resultantes são então deslocados à direita para derivar matrizes de valores de componentes de pixel. Matrizes de valores de componentes de pixel são então combinadas para criar matrizes de pixel. As matrizes de pixel geradas por essas técnicas lembram exatamente as matrizes de pixels descompactadas utilizando a transformada de co-seno discreta inversa ideal ("IDCT")

Description

"APROXIMAÇÕES EFICIENTES PARA PONTO FIXO DE TRANSFORMADAS DE CO-SENO DISCRETAS, DIRETAS E INVERSAS"
Esse pedido reivindica o beneficio do Pedido Provisório dos Estados Unidos 60/816.697, depositado em 26 de junho de 2006, Pedido Provisório dos Estados Unidos 60/841.362, depositado em 30 de agosto de 2006, Pedido Provisório dos Estados Unidos 60/847.194, depositado em 25 de setembro de 2006, Pedido Provisório dos Estados Unidos 60/829.669, depositado em 16 de outubro de 2006, Pedido Provisório dos Estados Unidos 60/869.530, depositado em 11 de dezembro de 2006, Pedido Provisório dos Estados Unidos 60/883.932 depositado em 8 de janeiro 2007, Pedido Provisório dos Estados Unidos 60/896.778, depositado em 23 de março 2007, e Pedido Provisório dos Estados Unidos 60/909.335, depositado em 30 de março de 2007 cujos conteúdos integrais são pelo presente incorporados mediante referência.
CAMPO TÉCNICO
A revelação se refere aos gráficos de computador e multimídia, especificamente à compactação de gráficos, imagens, e informação de vídeo.
FUNDAMENTOS
Muitos padrões de codificação existentes de imagem e vídeo empregam técnicas de compactação para permitir que as imagens e vídeo de alta resolução sejam armazenados, ou transmitidos como arquivos ou fluxos contínuos de dados relativamente compactos. Tais padrões de codificação incluem Joint Photographic Experts (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 imagem ou vídeo.
De acordo com muitos desses padrões, quadros de vídeo são compactados 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, os quadros são fracionados em blocos de pixels de tamanhos iguais. Por exemplo, um quadro não-compactado pode ser fracionado em um conjunto de blocos de pixels 8x8. Para cada bloco de pixels, os componentes de pixel são separados em matrizes de valores de componentes de pixel. Por exemplo, cada bloco de pixels pode ser dividido em uma matriz de Y valores de componentes de pixel, uma matriz de U valores de componentes de pixel, e uma matriz de V valores de componentes de pixel. Nesse exemplo, Y valores de componentes de pixel indicam valores de luminância e U e V valores de componentes de pixel 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 componentes de pixel em um quadro que está sendo codificado. Um FDCT unidimensional ideal é definido por:
<formula>formula see original document page 3</formula>
onde s é o arranjo de N valores originais, t é o arranjo de N valores transformados, e os coeficientes c são dados por
<formula>formula see original document page 3</formula>
para 1 < k < N - 1.
Uma FDCT bidimensional ideal é definida pela fórmula:
<formula>formula see original document page 3</formula> onde s é o arranjo de N valores originais, t é o arranjo de N valores transformados, e c(i,j) é dado por c (i, j ) =c (i) c (j ) , e com c(k) definido como no caso unidimensional.
Uma matriz de coeficientes é produzida quando o bloco de valores de componentes de pixel é transformado utilizando a FDCT. Essa matriz de coeficientes pode ser então quantizada e codificada utilizando, por exemplo, códigos aritméticos ou de Huffman. Um fluxo de bits de video representa o resultado combinado de realizar esse processo em todos os blocos de valores de componentes de cor em uma série de quadros de video em uma série não- compactada de quadros de video.
Um quadro de video não-compactado pode ser derivado de um fluxo de bits de video mediante inversão desse processo. Especificamente, para cada matriz de coeficientes o fluxo de bits é descompactado e os valores descompactados são desquantizados para derivar matrizes de coeficientes transformados. Uma transformada de co-seno discreta inversa ("IDCT") é então aplicada a cada matriz de coeficientes transformados para derivar matrizes de valores de componentes de pixel. Uma IDCT unidimensional ideal é definida por:
onde s é o arranjo de N valores originais, t é o arranjo de N valores transformados, e os coeficientes c são fornecidos 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 5</formula>
As matrizes resultantes de valores de componentes de pixel são então remontadas em blocos de pixels e esses blocos de pixels são remontados para formar um quadro decodificado. Se o quadro decodificado é um quadro-i, o quadro é aqora completamente decodificado. Contudo, se o quadro não-compactado é um quadro preditivo ou um quadro bi-preditivo, o quadro decodificado é simplesmente um quadro residual decodificado. Um quadro concluído é gerado mediante construção de um quadro reconstruído utilizando vetores de movimento associados com o quadro decodificado e então se' adicionando o quadro reconstruído ao quadro residual decodificado.
Sob circunstâncias ideais, nenhuma informação é perdida mediante uso de uma FDCT para codificar ou uma IDCT para decodificar um bloco de valores de componentes 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. Contudo, computar uma FDCT ou uma IDCT pode ser computacionalmente difícil porque a computação das FDCTs e IDCTs envolve o uso de números reais e números significativos de operações de multiplicação. Por essa razão, números reais usados nas FDCTs e IDCTs são freqüentemente aproximados utilizando-se números de precisão limitados. Erros de arredondamento resultam do uso de números de precisão limitada para representar valores de número real. Além disso, a quantização e a desquantização podem contribuir com erros adicionais.
Erros no processo de compactação e descompactação podem resultar em diferenças significativas entre o quadro não-compactado original e o quadro não-compactado final. Por exemplo, cores no quadro não-compactado final podem diferir das cores no quadro não-compactado original. Além disso, erros causados por um desacordo entre a implementação do codificador das IDCTs e a implementação do decodificador da IDCT podem se acumular durante a codificação e a decodificação de seqüências de quadros previstos. Esses erros acumulados comumente são referidos como "variação de IDCT".
SUMÁRIO
São descritas técnicas para aproximar a computação de uma transformada de co-seno discreta inversa utilizando cálculos de ponto fixo. De acordo com essas técnicas, matrizes de coeficientes escalonados são geradas mediante multiplicação de coeficientes em matrizes de coeficientes codificados por fatores de escalonamento. A seguir, as matrizes de coeficientes polarizados são geradas mediante adição de um valor de polarização de ponto médio a um coeficiente DC da matriz de coeficientes escalonados. Aritmética de ponto fixo é então usada para aplicar uma transformada às matrizes de coeficientes polarizados. Valores nas matrizes resultantes são então deslocados à direita para derivar matrizes de valores de componentes de pixel. Matrizes de valores de componentes de pixel são então combinadas para criar matrizes de pixels. As matrizes de pixels geradas por essas técnicas lembram aproximadamente as matrizes de pixels descompactadas utilizando-se a transformada de co-seno discreta inversa ("IDCT") ideal.
Em um aspecto, um método compreende escalonar cada coeficiente em uma matriz 8x8 de coeficientes codificados por um de um fator A, um fator B, um fator C, um fator D, um fator E, um fator F, um fator G, um fator H, um fator I, ou um fator J para produzir uma matriz de coeficientes escalonados. Nesse método, A = 1024, B = 1138, C = 1730, D = 1609, E = 1264, F = 1922, G = 1788, H = 2923, I = 2718, e J = 2528. O método também compreende utilizar aplicações repetidas de uma transformada unidirecional escalonada de ponto fixo para transformar a matriz de coeficientes escalonados em uma matriz de coeficientes transformados. Além disso, o método compreende coeficientes transformados de deslocamento à direita na matriz de coeficientes transformados para produzir uma matriz de coeficientes ajustados. Cada coeficiente ajustado na matriz de coeficientes ajustados aproxima um valor correspondente em uma matriz de valores que seria produzida mediante aplicação de uma IDCT bidimensional ideal à matriz de coeficientes codificados. Além disso, o método compreende exibir um bloco 8x8 de pixels. Cada pixel no bloco 8x8 de pixels inclui um valor de componente de pixel baseado em um coeficiente ajustado na matriz de coeficientes ajustados.
Em outro aspecto, o dispositivo compreende um módulo de escalonamento que escalona cada coeficiente em uma matriz 8x8 de coeficientes codificados por um de um fator A, um fator B, um fator C, um fator D, um fator E, um fator F, um fator G, um fator H, um fator I, ou um fator J para produzir uma matriz de coeficientes escalonados, em que A = 2048, B = 1703, C = 2676, D = 2408, E = 1416, F = 2225, G = 2003, H = 3496, I = 3147, e J = 2832. O dispositivo também compreende um módulo de transformada inversa que utiliza aplicações repetidas de uma transformada unidimensional escalonada de ponto fixo para transformar a matriz de coeficientes escalonados em uma matriz de coeficientes transformados. Além disso, o dispositivo compreende um módulo de deslocamento à direita que desloca à direita os coeficientes transformados na matriz de coeficientes transformados para produzir uma matriz de coeficientes ajustados. Cada coeficiente ajustado na matriz de coeficientes ajustados aproxima um valor correspondente em uma matriz de valores que seria produzida mediante aplicação de uma IDCT bidimensional ideal à matriz de coeficientes codificados. 0 dispositivo compreende também um módulo de saída que produz um bloco 8x8 de pixels. Cada pixel no bloco de pixels inclui um valor de componente de pixel baseado em um coeficiente ajustado na matriz de coeficientes ajustados.
Em outro aspecto, um dispositivo compreende meios para escalonar coeficientes em uma matriz 8x8 de coeficientes codificados por um de um fator A, um fator B, um fator C, um fator D, um fator E, um fator F, um fator G, um fator H, um fator I, ou um fator J para produzir uma matriz de coeficientes escalonados, em que A = 2048, B = 1703, C = 2676, D = 2408, E = 1416, F = 2225, G = 2003, H = 3496, I = 3147, e J = 2832. Além disso, o dispositivo compreende meios para usar aplicações repetidas de uma transformada unidimensional escalonada de ponto fixo para transformar a matriz de coeficientes escalonados em uma matriz de coeficientes transformados. Além disso, o dispositivo compreende meios para deslocar à direita os coeficientes transformados na matriz de coeficientes transformados para produzir uma matriz de coeficientes ajustados. Cada coeficiente ajustado na matriz de coeficientes ajustados aproxima um valor correspondente em uma matriz de valores que seria produzida mediante aplicação de uma IDCT bidimensional ideal à matriz de coeficientes codificados. Além disso, o dispositivo compreende meio para produzir um bloco 8x8 de pixels. Cada pixel no bloco de pixels inclui um valor de componente de pixel com base em um coeficiente ajustado na matriz de coeficientes ajustados. Em outro aspecto, a invenção se refere a um meio legível por computador contendo instruções. As instruções fazem com que um processador programável escalone cada coeficiente em uma matriz 8x8 de coeficientes codificados por um de um fator A, um fator B, um fator C, um fator D, um fator E, um fator F, um fator G, um fator H, um fator I, ou um fator J para produzir uma matriz de coeficientes escalonados, em que Ά = 2048, B = 1703, C = 2676, D = 2408, E = 1416, F = 2225, G = 2003, H = 3496, I = 3147, e J = 2832. As instruções também fazem com que o processador programável utilize aplicações repetidas de uma transformada unidimensional escalonada de ponto fixo para transformar a matriz de coeficientes escalonados em uma matriz de coeficientes transformados. Além disso, as instruções fazem com que o processador programável desloque à direita os coeficientes transformados na matriz de coeficientes transformados para produzir uma matriz de coeficientes ajustados. Cada coeficiente ajustado na matriz de coeficientes ajustados aproxima um valor correspondente em uma matriz de valores que seria produzida mediante aplicação de uma IDCT bidimensional ideal à matriz de coeficientes codificados. As instruções também fazem com que o processador programável emita sinais que fazem com que uma unidade de exibição exiba um bloco 8x8 de pixels.
Cada pixel no bloco de pixels inclui um valor de componente de pixel com base em um coeficiente ajustado na matriz de coeficientes ajustados.
Em alguns casos, o meio legível por computador pode formar parte de um produto de programa de computador, o qual pode ser vendido aos fabricantes e/ou usado em um dispositivo de codificação de vídeo. 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 apresentados nos desenhos anexos 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.
BKEVE DESCRIÇÃO DOS DESENHOS
A Figura 1 é um diagrama de blocos ilustrando um dispositivo exemplar que codifica e decodifica arquivos de mídia.
A Figura 2 é um diagrama de blocos ilustrando detalhes exemplares de um módulo de codificação.
A Figura 3 é um diagrama de blocos ilustrando detalhes exemplares de um módulo de decodificação.
A Figura 4 é um fluxograma ilustrando uma operação exemplar do módulo de codificação.
A Figura 5 é um fluxograma ilustrando uma operação exemplar do módulo de decodificação.
A Figura 6 é um diagrama de blocos ilustrando detalhes exemplares de um módulo de transformada de co-seno discreta, inversa ("IDCT").
A Figura 7 é um fluxograma ilustrando uma operação exemplar do módulo de transformada inversa.
A Figura 8 é um diagrama de blocos ilustrando detalhes exemplares de um módulo de transformada de co-seno discreta, direta ("FDCT").
A Figura 9 é um fluxograma ilustrando uma operação exemplar do módulo de transformada direta de vetor.
A Figura IOA é um fluxograma ilustrando uma transformada unidimensional exemplar. A Figura IOB é um fluxograma ilustrando uma transformada unidimensional escalonada exemplar.
A Figura 11 é um fluxograma ilustrando uma transformada unidimensional escalonada, exemplar, usada pelo módulo de transformada inversa.
DESCRIÇÃO DETALHADA
A Figura 1 é um diagrama de blocos ilustrando um dispositivo, exemplar 2 que codifica e decodifica arquivos de midia. O dispositivo 2 compreende um computador pessoal, um radiotelefone móvel, um servidor, um dispositivo de rede, um dispositivo computador integrado em um veiculo, uma plataforma de jogos de video, um dispositivo de jogos de video portátil, uma estação de trabalho de computador, um quiosque de computador, signage digital, um computador de grande porte, um conversor de sinais de freqüência de televisão, um telefone de rede, um assistente digital pessoal, uma plataforma de jogos de video, um tocador de midia móvel, um tocador de midia residencial, projetor de video digital, tocador de midia pessoal (por exemplo, um iPod), ou outro tipo de dispositivo eletrônico.
O dispositivo 2 inclui uma fonte de midia 4 para gerar dados de midia. A fonte de midia 4 pode compreender um video digital ou câmera de foto estática para capturar dados de imagem. A fonte de midia 4 pode ser integrada no dispositivo 2 ou pode ser anexada ao dispositivo 2 como um dispositivo periférico. A fonte de midia 4 também pode compreender um microfone para gravar dados de áudio. A fonte de midia 4 pode prover dados de midia a um processador 6. O 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 midia a partir da fonte de midia 4, um módulo de codificação 8 pode codificar os dados de midia. 0 módulo de codificação 8 pode compreender software executado pelo processador 6. Alternativamente, o módulo de codificação 8 pode compreender hardware especializado dentro do processador 6 que codifica os dados de mídia. Em ainda outra alternativa, o módulo de codificação 8 pode compreender qualquer combinação de software e hardware para codificar os dados de mídia.
O módulo de codificação 8 pode armazenar os dados de mídia codificados em um repositório de mídia 10. O 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 armazenamento de dados volátil ou não-volátil.
Um módulo de decodificação 12 pode recuperar dados codificados de mídia a partir do repositório de mídia 10. O 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 dentro do processador 6 que decodifica os dados codificados de mídia. Em ainda 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.
Uma unidade de apresentação de mídia 14 no dispositivo 2 pode apresentar dados de mídia decodificados pelo módulo de decodificação 12. Por exemplo, a unidade de apresentação de mídia 14 pode compreender um monitor de computador que apresenta dados de mídia de imagem ou vídeo. 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 por intermédio de um link cabeado ou sem fio ao dispositivo 2 como um dispositivo periférico.
O dispositivo 2 também pode compreender uma interface de rede 16. Δ interface de rede 16 pode facilitar a comunicação entre o dispositivo 2 e uma rede de computador por intermédio de 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 telefonia móvel. O dispositivo 2 pode receber arquivos de midia por intermédio da interface de rede 16. Por exemplo, o dispositivo 2 pode receber fotografias, clipes de video, video de fluxo continuo (por exemplo, televisão, conferência de video, filmes), clipes de áudio (por exemplo, tons de chamada, músicas, arquivos MP3), áudio de fluxo continuo (por exemplo, estações de rádio digital, chamadas de voz, etc.) através da interface de rede 16. Quando a interface de rede 16 recebe um arquivo de midia ou um fluxo de bits de video, a interface de rede 16 pode armazenar o arquivo de midia ou o fluxo de bits de video no repositório de midia 10.
Um sinal de video pode ser descrito em termos de uma seqüência de imagens, a qual inclui quadros (uma imagem inteira), ou campos (por exemplo, uma imagem que compreende linhas impares ou pares de um quadro). Adicionalmente, cada quadro ou campo pode incluir duas ou mais partições, ou subporções do quadro ou campo. Conforme aqui usado, quer seja isoladamente ou em combinação com outras palavras, o termo "quadro" pode se referir a uma imagem, um quadro, um campo ou uma partição do mesmo.
Quando o módulo de codificação 8 codifica uma série de quadros de video, o módulo de codificação 8 pode começar mediante seleção daqueles dos quadros de video para serem "quadros-i". Por exemplo, o módulo de codificação 8 pode selecionar cada oitavo quadro como um quadro-i. Os quadros-i são quadros que não referenciam outros quadros. Após selecionar os quadros-i, o módulo de codificação 8 utiliza "codificação espacial" para codificar os quadros-i. Adicionalmente, o módulo de codificação 8 pode usar "codificação temporal" para codificar os quadros restantes.
Para usar codificação espacial para codificar um quadro, o módulo de codificação 8 pode fracionar os dados de quadro em blocos de pixels. Por exemplo, o módulo de codificação 8 pode fracionar os dados de quadro em blocos de pixel que são de 8 pixels de largura e 8 pixels de altura (isto é, cada bloco de pixels contém 64 pixels). 0 módulo de codificação 8 pode então separar valores de componentes de pixel dos pixels em cada bloco de pixel em matrizes separadas de valores de componentes de pixel. Os valores de componentes de pixel de um pixel são os valores que caracterizam o surgimento 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. 0 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 componentes de pixel de um bloco de pixels, o módulo de codificação 8 pode obter uma matriz de Y valores de componentes de pixel, uma matriz de valores de componentes de pixel Cr, e uma matriz de valores de componentes de pixel Cb.
Após separar os valores de componentes de pixel em matrizes de valores de componentes de pixel, o módulo de codificação 8 gera matrizes de coeficientes ajustados por intermédio de valores de componentes de pixel de deslocamento à esquerda nas matrizes de valores de componentes de pixel. Para cada matriz de coeficientes ajustados, o módulo de codificação 8 utiliza aritmética de ponto fixo para aplicar repetidamente uma transformada unidimensional à matriz de coeficientes ajustados, desse modo gerando matrizes de coeficientes transformados, seguir, o módulo de codificação 8 gera uma matriz de coeficientes escalonados mediante escalonamento da matriz de coeficientes transformados por intermédio de um conjunto de fatores de escalonamento. Cada um desses fatores de escalonamento é um valor inteiro. Os fatores de escalonamento foram selecionados de tal forma que fatores dentro da transformada unidimensional podem ser aproximados utilizando-se números racionais simples.
coeficientes escalonados aproxima um valor correspondente em uma matriz de valores que seria produzida mediante aplicação de uma transformada de co-seno discreta direta bidimensional ideal ("FDCT") a uma matriz correspondente de valores de componentes de cor. Uma FDCT unidimensional ideal é definida por:
Cada coeficiente escalonado na matriz de onde é o arranjo de N valores originais, t é o arranjo de N valores transformados, e os coeficientes c são dados por
<formula>formula see original document page 15</formula>
onde e o arranjo de N valores originais, t e o arranjo de N valores transformados, e os coeficientes c sao dados por
<formula>formula see original document page 15</formula>
para 1 < k < N - 1. Uma FDCT bidimensional ideal é definida pela fórmula: onde s é o arranjo de N valores originais , t é o arranjo de N valores transformados, e c(i,j) é dado por c (i ,j) =c (i) c (j) , e com c(k) definido como no caso unidimensional.
Após derivar uma matriz de coeficientes escalonados, o módulo de codificação 8 gera uma matriz de coeficientes quantizados mediante quantização dos coeficientes da matriz de coeficientes escalonados. A quantização dos coeficientes escalonados pode reduzir a quantidade de informação associada aos coeficientes de alta freqüência na matriz de coeficientes escalonados. Após gerar a matriz de coeficientes quantizados, o módulo de codificação 8 pode aplicar um esquema de codificação por entropia à matriz de coeficientes.quantizados. Por exemplo, o módulo de codificação 8 pode aplicar um esquema de codificação Huffman os coeficientes quantizados na matriz de coeficientes. Quando o módulo de codificação 8 aplica o esquema de codificação por entropia a cada uma das matrizes de coeficientes quantizados, o módulo de codificação 8 pode produzir as matrizes codificadas como uma parte de um fluxo de bits de video.
Para usar codificação temporal para codificar um quadro, um módulo de codificação 8 pode dividir o quadro em "macroblocos". Dependendo do padrão de codificação usado, esses macroblocos podem ser de tamanho fixo ou variável e podem ser sobrepostos ou não-sobrepostos. Por exemplo, cada macrobloco pode ser um bloco 16x16 de pixels. Para cada macrobloco no quadro, o módulo de codificação 8 pode tentar identificar um macrobloco de origem 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 origem em um quadro de referência, o módulo de codificação 8 grava um vetor de movimento para o macrobloco. 0 vetor de movimento inclui um valor χ que indica o deslocamento horizontal do macrobloco em relação ao macrobloco de origem identificado e um valor y que indica o deslocamento vertical do macrobloco em relação ao macrobloco de origem identificado. Se o módulo de codificação 8 é incapaz de identificar um macrobloco de origem para o macrobloco, o módulo de codificação 8 pode não ter que gravar um vetor de movimento para o macrobloco. A seguir, o módulo de codificação 8 gera um quadro "reconstruído". O 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 gravados para o quadro atual. Após gerar o quadro reconstruído, o módulo de codificação 8 subtrai os valores de componentes de pixels em cada pixel do quadro reconstruído a partir dos valores de componentes de pixel correspondentes nos pixels correspondentes do quadro atual, resultando em um quadro "residual". O módulo de codificação 8 pode então usar um esquema de codificação por entropia para compactar 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 compactar o quadro residual.
O módulo de decodificação 12 pode realizar um processo similar ao do módulo de codificação 8, mas ao inverso. Por exemplo, para realizar um processo de decodificação espacial, o módulo de decodificação 12 pode aplicar um esquema de decodificação por entropia cada matriz codificada de coeficientes quantizados em um fluxo de bits de vídeo codificado. O módulo de decodificação 12 pode então desquantizar os coeficientes em cada matriz de coeficientes quantizados, desse modo gerando uma matriz de coeficientes desquantizados para cada matriz de coeficientes quantizados. Para cada matriz de coeficientes quantizados, o módulo de decodificação 12 gera uma matriz de coeficientes escalonados mediante escalonamento da matriz de coeficientes quantizados utilizando um conjunto de fatores de escalonamento. Esses fatores de escalonamento podem ser os mesmos fatores de escalonamento usados no processo de codificação espacial discutido acima. Após gerar uma matriz de coeficientes escalonados, o módulo de decodificação 12 utiliza aritmética de ponto fixo para repetidamente aplicar uma transformada unidimensional à matriz de coeficientes quantizados, desse modo gerando uma matriz de coeficientes transformados. Por exemplo, o módulo de decodificação 12 pode gerar uma matriz de coeficientes intermediários mediante aplicação da transformação unidimensional a cada vetor de linha em uma matriz de coeficientes escalonados. Nesse exemplo, o módulo de decodificação 12 pode então gerar a matriz de coeficientes transformados mediante aplicação da transformada unidimensional a cada vetor de coluna na matriz de coeficientes intermediários. Após gerar uma matriz de coeficientes transformados, o módulo de decodificação 12 gera uma matriz de coeficientes ajustados mediante deslocamento à direita dos coeficientes transformados na matriz de coeficientes transformados.
Coeficientes ajustados na matriz de coeficientes ajustados aproximam os valores que seriam produzidos mediante aplicação de uma transformada de co-seno discreta inversa bidimensional ideal ("IDCT") à matriz de coeficientes desquantizados. A IDCT unidimensional ideal é definida pela fórmula: <formula>formula see original document page 19</formula>
onde s é o arranjo de N valores originais, t é o arranjo de N valores transformados, e os coeficientes c são dados por
<formula>formula see original document page 19</formula>
para 1 < k < N - 1. Uma IDCT bidimensional ideal é definida pela fórmula:
<formula>formula see original document page 19</formula>
Esses blocos de valores de componentes de pixel podem então ser remontados em blocos de pixels e esses blocos de pixels podem ser remontados para formar o quadro de video não-compactado.
Após gerar a matriz de coeficientes ajustados, o módulo de decodificação 12 pode então reduzir os coeficientes ajustados na matriz de coeficientes ajustados para garantir que os coeficientes ajustados estejam dentro da faixa permitida para um valor de componente de pixel. O módulo de decodificação 12 pode então remontar as matrizes de coeficientes reduzidos em blocos de pixels. Após remontar os blocos de valores de componentes de pixel em blocos de pixel, o módulo de decodif icação 12 pode gerar uma imagem mediante remontagem dos blocos de pixels.
Para decodificar um quadro preditivo, o módulo de decodificação 12 pode usar 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 usar o esquema de decodificação por 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 mediante "deslocamento" de macroblocos dos quadros de referência do quadro preditivo de acordo com os vetores de movimento. Após gerar o quadro reconstruido, o módulo de decodificação 12 adiciona valores de componentes de pixel em cada pixel do quadro residual decodificado aos valores de componentes de pixel correspondentes nos pixels correspondentes do quadro reconstruido. 0 resultado dessa adição é o quadro preditivo reconstruido.
As técnicas descritas nessa revelação podem prover várias vantagens. Por exemplo, como essas técnicas empregam aritmética de ponto fixo, essas técnicas podem ser aplicadas em dispositivos menores, menos complexos, tal como os telefones móveis, assistentes pessoais digitais, e tocadores de midia pessoais. Além disso, essas técnicas podem ser empregadas em formatos que incluem Setor de Padronização da União Internacional de Telecomunicações (ITU-T) recomendações H.261, H.263, H.264, T.81 (JPEG), assim como formatos de midia da Organização Internacional para Padronização (ISO)/Grupos de Peritos de Imagens Móveis MEC (MPEG)-I, MPEG-2, e MPEG-4 Parte 2.
A Figura 2 é um diagrama de blocos ilustrando detalhes exemplares do módulo de codificação 8. 0 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 firmware, hardware, tal como um ou mais hardware de uso especial. Em outra alternativa, esses módulos podem compreender instruções de software e hardware ou firmware de uso especial.
Conforme ilustrado no exemplo da Figura 2, o módulo de codificação 8 inclui um módulo de controle de quadro 20 que controla se o módulo de codificação 8 processa um quadro de video como um quadro-i, um quadro preditivo, ou um quadro bi-preditivo. Por exemplo, quando o módulo de codificação 8 recebe um quadro de vídeo, o módulo de controle de quadro 20 pode determinar se um indicador de fluxo de bits associado ao quadro de vídeo indica se 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 bits indica que o quadro é um quadro-i, o módulo de controle de quadro 20 pode fazer com que o quadro de vídeo seja processado por um conjunto de módulos que imediatamente realiza codificação espacial no quadro de vídeo. 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 vídeo seja processado por um conjunto de módulos que realizam a codificação temporal.
O módulo de codificação 8 inclui uma série de módulos para aplicar codificação espacial aos quadros de vídeo. Esses módulos incluem um módulo separador de blocos 22, um módulo de extração de componentes 24, um módulo de transformada direta 26, um módulo de quantização 28, e um módulo de codificação por entropia 30. 0 módulo separador de blocos 22 pode receber quadros de vídeo não-codifiçados a partir da fonte de mídia 4, interface de rede 16, ou outra fonte. Quando o módulo separador de blocos 22 recebe um quadro de vídeo não-codifiçado, o módulo separador de blocos 22 pode separar o quadro em blocos de pixels. O módulo separador de bloco 22 pode prover 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 componentes 24 pode converter os valores de componentes 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 do formato de cor Vermelho- Verde-Azul (RGB) para o formato de cor YCrCb. Após converter os pixels no bloco para o 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 componentes de pixel. Por exemplo, o módulo de extração de componentes 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 dos pixels, os valores Cr especificam a crominância vermelha dos pixels, e os valores Cb especificam a crominância azul dos pixels. Quando o módulo de extração de componentes 24 tiver extraído as matrizes de valores de componentes de pixel, o módulo de extração de componentes 24 pode prover cada uma das matrizes separadamente a um módulo de Transformada de co- seno Discreta (DCT) 26.
Quando o módulo de transformada direta 2 6 recebe uma matriz de valores de componentes de pixel, o módulo de transformada direta 26 gera uma matriz de coeficientes escalonados. Cada coeficiente nessa matriz de coeficientes escalonados aproxima um coeficiente que seria produzido mediante uso de uma transformada de co-seno discreta direta ideal para transformar a matriz de valores de componentes de pixel.
O módulo de transformada direta 26 utiliza aritmética de ponto fixo para empregar uma transformada unidimensional às matrizes de valores de componentes de pixel. Utilizar aritmética de ponto fixo pode ser vantajoso em algumas circunstâncias. Por exemplo, dispositivos menores, tal como telefones móveis poderiam não incluir uma unidade de ponto flutuante exigida para realizar aritmética de ponto flutuante. 0 módulo de transformada direta 26 pode começar um processo de gerar a matriz de coeficientes escalonados mediante deslocamento à esquerda de cada um dos valores de componentes de pixel. Por exemplo, o módulo de transformada direta 2 6 pode gerar uma matriz de coeficientes ajustados mediante deslocamento à esquerda de cada um dos valores de componentes de pixel por um número de bits de precisão (isto é, o número de bits de mantissa) de representações de ponto fixo de números que o módulo de transformada direta 26 utiliza ao aplicar a transformada unidimensional acrescida de um número de bits de precisão removidos mediante escalonamento dos coeficientes transformados que resultam da aplicação da transformada. Após deslocamento à esquerda de cada um dos valores de componentes de pixel, o módulo de transformada direta 2 6 pode realizar a transformada em cada um dos vetores de linha da matriz de coeficientes ajustados. Realizar 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 realizar a transformada em cada um dos vetores de coluna da matriz de coeficientes intermediários. Realizar a transformada em cada um dos vetores de coluna da matriz de coeficientes intermediários resulta em uma matriz de coeficientes transformados.
Após gerar a matriz de coeficientes transformados, o módulo de transformada direta 26 escalona os coeficientes transformados em diferentes posições na matriz de coeficientes transformados mediante diferentes fatores de escalonamento. Conforme descrito abaixo, o módulo de decodificação 12 pode utilizar as reciprocas desses fatores de escalonamento na aplicação de uma transformada inversa. Quando o módulo de transformada direta 26 tiver concluído o escalonamento dos coeficientes transformados pelos fatores de escalonamento, o módulo de transformada direta 26 pode produzir a matriz resultante de coeficientes escalonados para o módulo de quantização 28.
Quando o módulo de quantização 28 recebe uma matriz de coeficiente a partir do módulo de transformada direta 26, o módulo de quantização 28 pode quantizar os coeficientes escalonados. O módulo de quantização 28 pode quantizar os coeficientes escalonados de diversas formas 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 usar a seguinte matriz de quantização para quantizar os coeficientes em uma matriz de coeficientes escalonados para um quadro-i:
<table>table see original document page 24</column></row><table>
Além disso, nesse exemp usar a seguinte matriz de quantização para quantizar os coeficientes em uma matriz de coeficientes escalonados para um quadro preditivo ou bi-preditivo:
<table>table see original document page 24</column></row><table> Após o módulo de quantização 28 gerar uma matriz de coeficientes quantizados, o módulo de codificação por entropia 30 pode compactar a matriz de coeficientes quantizados utilizando um esquema de codificação por entropia. Para compactar a matriz de coeficientes quantizados utilizando um esquema de codificação por entropia. Para compactar a matriz de coeficientes quantizados utilizando um esquema de codificação por entropia, o módulo de codificação por entropia 30 pode organizar os coeficientes quantizados em um vetor mediante consideração de um padrão em ziguezague dos coeficientes. Em outras palavras, o módulo de codificação por entropia 30 pode arranjar todos os coeficientes quantizados na matriz bidimensional de coeficientes quantizados em um vetor unidimensional de coeficientes quantizados de uma forma previsível. O módulo de codificação por entropia 30 pode então aplicar um esquema de codificação por entropia, tal como codificação aritmética ou codificação de Huffman, ao vetor de coeficientes quantizados.
O módulo de codificação 8 inclui também um ou mais módulos para realizar codificação temporal de quadros de vídeo. Conforme 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. O módulo de estimação de movimento 32 tenta identificar um macrobloco de origem 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 origem para um macrobloco no quadro atual mediante busca no sentido de macroblocos na imagem de referência que contem pixels similares aos do macrobloco. O módulo de estimação de movimento 32 pode buscar áreas de tamanhos diferentes de acordo com diferentes padrões de codificação para identificar macrobloco de origem para um macrobloco no quadro atual. Por exemplo, o módulo de estimação de movimento 32 pode procurar um macrobloco de origem dentro de uma área que tem 32 pixels de largura por 32 pixels de altura, com o macrobloco atual no centro da área de busca. Quando o módulo de estimação de movimento 32 identifica um macrobloco de origem para um macrobloco no quadro atual, o módulo de estimação de movimento 32 calcula um vetor de movimento para o macrobloco no quadro atual. O vetor de movimento para o macrobloco no quadro atual especifica um valor χ que indica a diferença em posição horizontal entre o macrobloco de origem 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 origem 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 ao módulo de geração de quadro reconstruído 34.
O módulo de geração de quadro reconstruído 34 pode usar os vetores de movimento e os quadros de referência para gerar um quadro reconstruído. 0 módulo de geração de quadro reconstruído 34 pode gerar o quadro reconstruído mediante aplicação dos vetores de movimento para cada macrobloco no quadro atual aos macroblocos de origem nos quadros de referência. Na realidade, o módulo de geração de quadros reconstruídos 34 cria um quadro no qual os macroblocos dos quadros de referência foram "deslocados" para as posições indicadas pelos correspondentes vetores de movimento do quadro atual.
O módulo de geração de quadro residual 36 pode gerar o quadro residual mediante subtração de valores de componentes de pixel no quadro reconstruído a partir de valores de componentes de pixel correspondentes no quadro atual. Em geral, o quadro residual inclui menos informação quer seja do que o quadro reconstruído ou do que 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 ao módulo separador de blocos 22 para começar o processo de codificar espacialmente o quadro residual. Além disso, o módulo de estimação de movimento 32 pode prover os vetores de movimento para o quadro atual ao módulo de codificação por entropia 30 para compactar os vetores de movimento. Após o quadro residual ser codificado espacialmente e o módulo de codificação por entropia 30 ter codificado os vetores de movimento, o módulo de saída de fluxo 38 pode formatar o quadro residual espacialmente codificado e os vetores de movimento codificados como parte de um fluxo de bits de vídeo.
A Figura 3 é um diagrama de blocos ilustrando detalhes exemplares do módulo de decodificação 12. O módulo de decodificação pode compreender um módulo de decodificação por 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 armazenador de quadros 51, módulo combinador de blocos 52, um módulo de controle de quadro 53, um módulo de armazenamento de quadro de referência 54, um módulo de geração de quadro reconstruído 56, e um módulo de geração de quadro preditivo 58. Alguns ou todos 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 uso especial. Em outra alternativa, esses módulos podem compreender instruções de software e hardware ou firmware de uso geral. Quando o módulo de decodificação 12 recebe um fluxo de bits contendo um quadro de video, o módulo de decodificação por entropia 44 pode aplicar um esquema de decodificação por entropia às matrizes de coeficientes quantizados no quadro de video. O fluxo de bits pode incluir um valor que indica para o módulo de decodificação por entropia 44 qual esquema de decodificação por entropia aplicar às matrizes de coeficientes quantizados no fluxo de bits. Além disso, o módulo de decodificação por entropia 44 pode aplicar o mesmo ou um diferente esquema de decodificação por entropia para decodificar os vetores de movimento do quadro de video.
Após o módulo de decodificação por entropia 44 aplicar o esquema de decodificação por 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 de diversas maneiras. Por exemplo, de acordo com o padrão MPEG-4, parte 2, o módulo de dequantização 46 pode usar as duas matrizes de quantização relacionadas acima em duas formas diferentes. Em primeiro lugar, o módulo de dequantização 46 pode usar essas matrizes de quantização para realizar dequantização do tipo H.263. Na dequantização do tipo H.263, o módulo de dequantização 46 obtém coeficientes reconstruídos F"[v][u] a partir de valores quantizados QF[v][u] como a seguir:
<formula>formula see original document page 28</formula> que envolve apensa uma multiplicação por quantiser scale, e
Em segundo lugar, o módulo de dequantização 46 pode usar essas matrizes de quantização para realizar dequantização do tipo MPEG-1/2. Na dequantização do tipo MPEG-1/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 usada:
<formula>formula see original document page 29</formula>
onde :
intra blocos
<formula>formula see original document page 29</formula>
não - intra blocos
Conforme descrito em detalhe abaixo, o módulo de transformação inversa 48 escalona cada um dos coeficientes dequantizados por fatores de escalonamento específicos e adiciona um termo de polarização de ponto médio ao coeficiente DC da matriz resultante de coeficientes escalonados. O coeficiente DC é o coeficiente na posição (0,0) da matriz de coeficientes escalonados. A seguir, o módulo de transformada inversa 48 usa aplicações repetidas de uma transformada unidimensional de ponto fixo para transformar a matriz de coeficientes escalonados em uma matriz de coeficientes transformados. Após transformar a matriz de coeficientes escalonados na matriz de coeficientes transformados, o módulo de transformada inversa 48 desloca à direita cada coeficiente transformado na matriz de coeficientes transformados para produzir uma matriz de coeficientes ajustados. Cada coeficiente ajustado na matriz de coeficientes ajustados aproxima um valor correspondente em uma matriz de valores que seria produzida mediante aplicação de uma IDCT bidimensional ideal à matriz de coeficientes codificados. Além disso, o módulo de transformada inversa 48 pode reduzir cada um dos coeficientes ajustados na matriz de coeficientes ajustados para produzir uma matriz de coeficientes reduzidos. Os coeficientes reduzidos têm valores compreendidos dentro de faixas apropriadas para o formato de valor de componente de pixel resultante. Por exemplo, os coeficientes reduzidos podem ter valores que estão compreendidos na faixa [-256, 255] . Após o módulo de transformada inversa 48 reduzir os coeficientes ajustados, os valores reduzidos resultantes são valores de componentes de pixel.
Após o módulo de transformada inversa 48 produzir uma matriz de valores de componentes de pixel, o módulo de reconstrução de pixel 50 pode gerar uma matriz de pixels mediante combinação da matriz de valores de componentes de pixel com matrizes de valores de componentes de pixel associados a exposições equivalentes dentro de um quadro de video. Por exemplo, o módulo de reconstrução de pixel 50 pode receber uma matriz de Y valores de componentes de pixel, uma matriz de valores de componentes de pixel Cb, e uma matriz de valores de componentes de pixel Cr a partir do módulo de transformada inversa 48. Cada uma dessas três matrizes pode incluir componentes de pixel para um único bloco 8x8 de pixels. Cada um dos pixels pode incluir um valor de componente de pixel 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 prover o bloco de pixels ao módulo combinador de bloco 52.
Quando o módulo combinador de bloco 52 recebe um bloco de pixels, o módulo combinador de bloco 52 pode armazenar o bloco de pixels até que o módulo combinador de bloco 52 receba algum ou todos os blocos de pixels em um quadro de video. Após receber um ou mais dos blocos de pixels, o módulo combinador de bloco 52 pode combinar os blocos de pixels em um quadro de vídeo e pode enviar o quadro de vídeo para o armazenador de quadro 51. O quadro de vídeo pode ser armazenado no armazenador de quadro 51 até ser exibido pela unidade de apresentação de mídia 51.
Além disso, o módulo combinador de blocos 52 pode emitir o quadro de vídeo para um módulo de armazenamento de quadro 54. Os quadros de vídeo no módulo de armazenamento de quadro 54 podem ser usados como quadros de referência para a reconstrução de quadros preditivos e bi-preditivos. Além disso, os quadros de vídeo no módulo de armazenamento de quadro 54 podem ser quadros residuais que são usados na reconstrução de quadros preditivos e bi-preditivos.
Para reconstruir um quadro preditivo ou um quadro bi-preditivo, o módulo de decodificação 12 inclui o módulo de geração de quadro reconstruído 56. 0 módulo de geração de quadro reconstruído 56 recebe os vetores de movimento decodificados a partir do módulo de decodificação por entropia 44. Além disso, o módulo de geração de quadro reconstruído 56 recupera os quadros de referência do quadro atual a partir do módulo de armazenamento de quadros 54. 0 módulo de geração de quadros reconstruídos 56 então "desloca" os macroblocos a partir de suas posições nos quadros de referência para as posições indicadas pelos vetores de movimento. Um quadro reconstruído resulta a partir do deslocamento dos macroblocos dessa maneira. 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 ao módulo de geração de quadros preditivos 58.
Quando o módulo de geração de quadros preditivos 58 recebe um quadro temporário, o módulo de geração de quadro preditivo 58 pode recuperar a partir do módulo de armazenamento de quadro 54 um quadro residual para o quadro atual. Após receber o quadro residual, o módulo de geração de quadro preditivo 58 pode acrescentar valores de componentes de cor, correspondentes em cada pixel do quadro residual e do quadro reconstruído. 0 quadro de vídeo reconstruído resulta dessa adição. A seguir, o módulo de geração de quadro preditivo 58 pode emitir esse quadro reconstruído para o armazenador de quadro 51 para exibição eventual na unidade de apresentação de mídia 14.
A Figura 4 é um fluxograma ilustrando uma operação exemplar do módulo de codificação 8. Embora a operação descrita na Figura 4 seja descrita de forma seqüencial, deve ser observado que a operação pode ser realizada de uma forma encadeada.
Inicialmente, o módulo de codificação 8 recebe uma seqüência de quadros de vídeo não-codifiçados (60). Por exemplo, o módulo de codificação 8 pode receber uma seqüência de quadros não-codifiçados 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-codifiçados 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 separador de bloco 22 no módulo de codificação 8 pode separar o quadro atual em blocos de pixels (64). Por exemplo, o módulo de codificação 8 pode separar o quadro atual em blocos 2x2, 4x4, ou 8x8 de pixels.
Após separar o quadro atual em blocos de pixels, o módulo de extração de componente 24 pode separar os valores de componentes de pixel em cada um dos blocos de pixels (66). Como resultado, pode haver três blocos de valores de componentes de pixel para cada bloco de pixels: um bloco de valores Y pra representar o brilho dos pixels, um bloco de valores Cb para representar a crominância azul dos pixels, e um bloco de valores Cr para representar a crominância vermelha dos pixels.
O módulo de transformada direta 26 no módulo de codificação 8 pode então gerar uma matriz de coeficientes escalonados para cada uma das matrizes de valores de componentes de pixel (68). Os coeficientes nessas matrizes de coeficientes escalonados são aproximações de valores que seriam produzidos mediante uso de uma transformada de co- seno discreta direta bidimensional ideal em matrizes respectivas das matrizes de valores de componentes de pixel.
Após o módulo de transformada direta 26 gerar as matrizes de coeficientes escalonadas 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) . Quando o módulo de quantização 28 tiver quantizado os coeficientes em cada matriz de coeficientes escalonados, o módulo de codificação por entropia 30 pode realizar um processo de codificação por 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 de Huffman ou um esquema de codificação aritmética a cada matriz dos coeficientes quantizados. O processo de codificação por entropia adicionalmente compactou os dados. Contudo, os processos de codificação por entropia não resultam na perda de informação. Após realizar o processo de codificação por entropia em cada matriz dos 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 é o último quadro da seqüência de quadro ("SIM" de 76) , o módulo de1" codificação 8 completou a codificação da seqüência de quadros (78). Por outro lado, se o quadro atual não é o último quadro da seqüência de quadros ("NÃO" de 76) , o módulo de codificação 8 pode retornar e determinar se um novo quadro atual 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 origem em um ou mais quadros de referência para cada um dos macroblocos no quadro atual (82). O módulo de estimação de movimento 32 pode então calcular um vetor de movimento para cada um dos macroblocos no quadro atual para o qual o módulo de estimação de movimento 32 foi capaz de identificar um macrobloco de origem (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 mediante "deslocamento" dos macroblocos identificados nos quadros de referência para posições indicadas pelos vetores de movimento (86). O módulo de geração de quadro residual 36 pode então gerar um quadro residual para o quadro atual mediante subtração dos valores de componentes de pixel no quadro reconstruído a partir dos 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 por entropia 30 pode usar um esquema de codificação por 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 mediante aplicação das etapas (66) a (74) ao quadro residual.
A Figura 5 é um fluxograma ilustrando uma operação exemplar do módulo de decodificação 12. Embora a operação descrita na Figura 5 seja descrita de forma seqüencial, deve ser observado que a operação pode ser realizada de uma forma encadeada.
Inicialmente, o módulo de decodificação 12 recebe um quadro de vídeo codificado (100). Após receber o quadro de vídeo codificado, o módulo de decodificação por entropia 44 no módulo de decodificação 12 pode realizar um processo de decodificação por entropia nos blocos de dados dentro do quadro codificado (102). O módulo de decodificação por entropia 44 pode realizar um processo de decodificação por entropia que é equivalente ao processo de codificação por entropia, usado para codificar o quadro. Por exemplo, se o módulo de codificação 8 utiliza codificação de Huffman para codificar o quadro, o módulo de decodificação por entropia 44 utiliza decodificação de Huffman para decodificar o quadro. Como resultado da aplicação do processo de decodificação por entropia a cada bloco de dados no quadro, o módulo de decodificação por entropia 44 produziu um conjunto de matrizes de coeficientes quantizados.
A seguir, o módulo de dequantização 4 6 no módulo de decodificação 12 pode dequantizar os coeficientes em cada uma das matrizes de coeficientes quantizados (104). Após dequantizar cada coeficiente nas matrizes de coeficientes quantizados, o módulo de transformada inversa 48 no módulo de decodificação 12 gera matrizes de valores de componentes de pixel (106). Os valores de componentes de pixel em uma das matrizes de valores de componentes de pixel são aproximações de valores correspondentes que seriam produzidos mediante transformação de uma das matrizes de coeficientes quantizados utilizando uma transformada de co-seno discreta inversa bidimensional ideal.
Quando o módulo de transformada inversa 48 tiver computado uma matriz de valores de componentes de pixel para cada uma das matrizes de coeficientes, o módulo de reconstrução de pixels 50 no módulo de decodificação 12 pode combinar matrizes apropriadas de valores de componentes 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 pixel YCrCb. Após o módulo de reconstrução de pixel 50 ter criado os blocos de pixel, o módulo combinador de bloco 52 pode recombinar os blocos de pixel em um quadro de video (HO) .
A seguir, o módulo de controle de quadro 53 no módulo de decodificação 12 pode determinar se o quadro atual é um quadro-i (114) . Se o quadro atual é um quadro-i ("SIM" de 114), o módulo combinador de bloco 52 pode emitir o quadro de video para o armazenador de quadros 51 (114).
Por outro lado, se o quadro atual não é um quadro-i (isto é, o quadro atual é um quadro preditivo ou bi-preditivo) ("NÃO" de 114), o módulo de decodificação por entropia 44 utiliza um esquema de decodificação por 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 armazenamento de quadro 54 para gerar um quadro reconstruído (118). O módulo de geração de quadro preditivo 58 pode então usar o quadro reconstruído e o quadro gerado pelo módulo combinador de bloco 52 para gerar um quadro reconstruído (120).
A Figura 6 é um diagrama de blocos ilustrando detalhes exemplares do módulo de transformada inversa 48. Conforme ilustrado no exemplo da Figura 6, o módulo de transformada inversa 48 pode compreender um módulo de entrada 140. O módulo de entrada 140 pode receber uma matriz de coeficiente a partir do módulo de desquantização 46. Por exemplo, o módulo de entrada 140 pode receber um indicador 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 internas de dados que armazenam a matriz de coeficientes.
Quando o módulo de entrada 140 recebe uma matriz de coeficientes, o módulo de entrada 140 pode prover a matriz de coeficientes a um módulo de escalonamento 142 no módulo de transformada inversa 48. O módulo de escalonamento 142 pode realizar operações que geram valores que aproximam os coeficientes de escalonamento na matriz de coeficientes por fatores de escalonamento em posições equivalentes em uma matriz de fatores de escalonamento. Por exemplo, o módulo de escalonamento 142 pode realizar operações de multiplicação para gerar valores que aproximam os coeficientes de escalonamento na matriz de coeficientes mediante fatores de escalonamento em posições equivalentes em uma matriz de fatores de escalonamento. Em outro exemplo, o módulo de escalonamento 142 pode realizar uma ou mais operações de adição e deslocamento. Cada um desses fatores de escalonamento pode ser um valor de número inteiro de 8 bits. Quando cada um dos fatores de escalonamento é um número inteiro de 8 bits, a faixa dinâmica de valores produzidos durante a transformada é reduzida.
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 mediante adição de um valor de polarização de ponto médio ao coeficiente DC da matriz de coeficientes escalonados. Conforme 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.
Para acrescentar um valor de polarização de sinal adaptativo ao coeficiente DC em um processador de 16 bits, o módulo de polarização de coeficiente 144 pode usar a seguinte fórmula:
DC__coefficient = DC_coefficient + (1 « (P + 2))
Nessa fórmula, o termo (1«(P + 2) é adicionado para prover polarização de ponto médio. P é uma constante se referindo a um número de bits de mantissa de ponto fixo (isto é, bits para a direita da vírgula fracionária) usados em uma transformada aplicada por um módulo de transformada inversa de vetor 14 6. 0 número 2 é adicionado a P porque o módulo de deslocamento à direita 148 pode deslocar todos os coeficientes por (P + 3), onde o número "3" é proveniente dos bits de precisão adicionados mediante realização da transformada. Para elaborar esse ponto, se um número χ for gerado pelo deslocamento à esquerda 1 por (P + 2) e um número z for gerado pelo deslocamento à direita χ por (P + 3), z=H. (Dito de outra forma, 2p+2/2p+3 = 2°/21 = H) . Desse modo, adicionar (1«(P + 2)) ao coeficiente DC é equivalente a adicionar (1<<(P + 3))/2 ao coeficiente DC.
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 pode gerar uma matriz de valores intermediários mediante aplicação de uma transformada unidirecional escalonada de ponto fixo a cada vetor de linha da matriz de coeficientes polarizados. A seguir, o módulo de transformada inversa de vetor 14 6 pode computar uma matriz de coeficientes transformados mediante aplicação da transformada unidimensional escalonada de ponto fixo a cada vetor de coluna da matriz de valores intermediários. Uma operação exemplar para aplicar a transformada unidimensional de escalonamento de ponto fixo a um vetor de coeficiente escalonado é apresentada na Figura IOB abaixo.
Após o módulo de transformada inversa de vetor 146 gerar a matriz de coeficientes transformados, o módulo de deslocamento à direita 148 pode gerar uma matriz de coeficientes ajustados mediante deslocamento à 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 aplicação da transformada e durante escalonamento. Por exemplo, se aplicar os resultados de transformada em 3 bits adicionais e escalonar os coeficientes acrescenta 10 bits adicionais, o módulo de deslocamento à direita 108 pode deslocar à direita cada um dos coeficientes em treze (3 + 10) posições.
Após o módulo de deslocamento à direita 148 gerar a matriz de coeficientes ajustados, um módulo de corte 150 pode gerar uma matriz de coeficientes reduzidos mediante "corte" dos coeficientes na matriz de coeficientes ajustados para limitar os coeficientes a uma faixa máxima permissivel de valores de componentes de pixel. Por exemplo, um valor de componente de pixel tipico pode variar de -256 a 255. Se a matriz de coeficientes ajustados incluísse um coeficiente igual a 270, o módulo de corte 150 limitaria esse coeficiente à faixa máxima permissivel mediante redução do coeficiente para 255. Após o módulo de corte 150 concluir o corte dos coeficientes, esses coeficientes podem representar valores de componentes de pixel. Quando o módulo de corte 150 conclui o corte dos coeficientes na matriz, o módulo de corte 150 pode prover a matriz de coeficientes reduzidos a um módulo de saída 152.
Quando o módulo de saída 152 recebe uma matriz de coeficientes reduzidos (os quais são agora valores de componentes de pixel), o módulo de saída 152 pode emitir a matriz de valores de componentes de pixel para o módulo de reconstrução de pixel 50.
A Figura 7 é um fluxograma ilustrando uma operação exemplar do módulo de transformada inversa 34. Inicialmente, o módulo de entrada 140 recebe uma matriz de coeficientes (170). Quando o módulo de entrada 140 recebe a matriz de coeficientes, o módulo de escalonamento 142 pode escalonar cada valor na matriz de coeficientes 172. Por exemplo, o módulo de escalonamento 142 pode realizar operações que multiplicam cada coeficiente na matriz de coeficientes por valores equivalentemente posicionados em uma matriz de fatores de escalonamento.
Após escalonar cada coeficiente na matriz de coeficiente, o módulo de polarização de coeficiente 144 pode adicionar um valor de polarização de ponto médio ao coeficiente DC da matriz de coeficientes (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 transformada inversa de vetor 146 pode determinar se um contador de linhas é inferior a um contador máximo de linhas 176. Inicialmente, o contador de linhas pode ser ajustado para zero. O contador máximo de linhas pode ser um valor estático que é igual ao número de linhas na matriz de coeficientes. Por exemplo, se a matriz de coeficientes inclui oito linhas, o contador máximo de linhas é igual a oito.
Se o contador de linhas for menor do que o contador máximo de linhas ("SIM" de 17 6), o módulo de transformada inversa de vetor 146 pode computar uma transformada unidimensional escalonada de ponto fixo em um vetor de linha da matriz de coeficientes indicada pelo contador de linhas (178). Quando o módulo de transformada inversa de vetor 14 6 computa a transformada em um vetor de linhas da matriz de coeficientes, o módulo de transformada inversa de vetor 146 pode substituir os coeficientes originais no vetor de linha de coeficientes por um vetor de coeficientes intermediários. Após o módulo de transformada inversa de vetor 14 6 computar a transformada em um vetor de linha da matriz de coeficientes, o módulo de transformada inversa de vetor 14 6 pode incrementar o contador de linhas (180) . O módulo de transformada inversa de vetor 146 pode então retornar e outra vez determinar se o contador de linha é menor do que o contador máximo de linha (17 6) .
Se o contador de linha não for menor do que (isto é, for maior do que ou igual a) o contador máximo de linhas ("NÃO" de 176), o módulo de transformada inversa de vetor 14 6 pode determinar se um contador de coluna é menor do que um contador máximo de coluna (182). Inicialmente, o contador de coluna pode ser ajustado para zero. O contador máximo de coluna pode ser um valor estático que é igual ao número de colunas na matriz de coeficientes. Por exemplo, se a matriz de coeficientes inclui oito colunas, o contador máximo de colunas é igual a oito.
Se o contador de coluna for inferior ao contador máximo de coluna ("SIM" de 182), o módulo de transformada inversa de vetor 146 pode computar uma transformada unidimensional em cada vetor de coluna da matriz de coeficientes intermediários indicados pelo contador de coluna (184). Quando o módulo de transformada inversa 34 computa 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 por um vetor de coeficientes transformados.
Após o módulo de transformada inversa de vetor 146 computar a transformada em um vetor de coluna da matriz de coeficientes, o módulo de transformada inversa de vetor 146 pode incrementar o contador de coluna (186). O módulo de transformada inversa de vetor 146 pode então retornar a outra vez determinar se o contador de coluna é menor do que o contador máximo de coluna (182).
Se o contador de coluna não for menor do que (isto é, for maior do que ou igual a) o contador máximo de coluna ("NÃO" de 182), o módulo de deslocamento à direita 148 pode deslocar à direita cada um dos coeficientes transformados na matriz (188). Quando o módulo de deslocamento à direita 148 desloca à direita um coeficiente, o módulo de deslocamento à direita 148 pode deslocar o coeficiente para a direita por certo número de posições. O resultado do deslocamento à direita de cada um dos segundos coeficientes intermediários na matriz é uma matriz de valores ajustados. Após deslocar à direita o módulo 148 deslocou à direita cada um dos coeficientes transformados, o módulo de corte 150 pode reduzir os coeficientes ajustados para garantir que os coeficientes ajustados estejam dentro de uma faixa apropriada para valores de componentes de pixel (190). Por exemplo, o módulo de corte 150 pode reduzir os coeficientes ajustados para garantir que os coeficientes ajustados estejam dentro da faixa de -256 a 255. Quando o módulo de corte 150 conclui o corte dos coeficientes ajustados, o módulo de saida 152 pode emitir a matriz resultante de valores de componentes de pixel (192).
A Figura 8 é um diagrama de blocos ilustrando detalhes exemplares do módulo de transformada direta 26. Conforme ilustrado no exemplo da Figura 8, o módulo de transformada direta 26 compreende um módulo de entrada 210 que recebe uma matriz de valores de componentes de pixel a partir do módulo de extração de componentes 24. Quando o módulo de entrada 210 recebe uma matriz de valores compostos de pixel, o módulo de entrada 210 pode prover a matriz de valores de componentes de pixel a um módulo de deslocamento à esquerda 212. O módulo de deslocamento à esquerda 212 pode deslocar todos os valores de componentes de pixel na matriz de valores de componentes de pixel para a esquerda pelo número de bits de mantissa usados em valores que um módulo de transformada direta de vetor 214 utiliza enquanto realizando a transformada direta menos o número de bits de mantissa removido mediante realização da transformada direta. Por exemplo, se dez bits de mantissa forem usados em valores enquanto realizando a transformada direta e três bits de mantissa forem removidos mediante realização da transformada direta de co-seno discreto, o módulo de deslocamento à esquerda 212 pode deslocar os valores de componentes de pixel para a esquerda em sete posições. Em outra modalidade, se três bits de mantissa forem usados em valores enquanto realizando a transformada direta e três bits de mantissa forem removidos mediante realização da transformada direta, o módulo de deslocamento à esquerda 212 pode deslocar os valores de componentes de pixel para a esquerda em zero posição.
Após o módulo de deslocamento à esquerda 212 deslocar os valores de componentes de pixel, o módulo de transformada direta de vetores 214 pode aplicar uma transformada direta a cada vetor de coluna na matriz de valores de componentes de pixel para produzir uma matriz de valores intermediários. A seguir, o módulo de transformada direta de vetor 214 pode aplicar a transformada direta a cada vetor de linha na matriz de valores intermediários para produzir uma matriz de coeficientes transformados.
Quando o módulo de transformada direta de vetor 214 aplica a transformada direta a um vetor, o módulo de transformada direta de vetor 214 pode aplicar a transformada direta descrita na Figura 11, abaixo. Observar que a transformada descrita na Figura 11, abaixo, é um inverso da transformada descrita na Figura 10A.
Após o módulo de transformada direta de vetor 214 produzir a matriz de coeficientes transformados, um módulo de escalonamento 216 pode aplicar fatores de escalonamento a cada coeficiente transformado na matriz de coeficientes transformados. O módulo de escalonamento 216 pode aplicar reciprocas dos fatores de escalonamento usados pelo módulo de escalonamento 142 no módulo de transformada inversa 48. Por exemplo, se o módulo de escalonamento 142 escalona os coeficientes mediante deslocamento dos coeficientes para a esquerda em três posições, o módulo de escalonamento 216 pode escalonar os valores transformados mediante deslocamento dos valores transformados para a direita em três posições. Em outro exemplo, se o módulo de escalonamento 142 escalona os coeficientes mediante multiplicação dos coeficientes por fatores de escalonamento individuais em uma matriz de fatores de escalonamento, o módulo de escalonamento 216 pode escalonar os valores transformados mediante multiplicação dos valores transformados por fatores de escalonamento na matriz de fatores de escalonamento e então deslocando os valores resultantes para a direita em uma magnitude. Para diminuir os erros de arredondamento, o módulo de escalonamento 216 pode adicionar um valor de polarização de ponto médio a cada um dos valores transformados após multiplicação dos valores transformados pelos fatores de escalonamento. Por exemplo, o módulo de escalonamento 216 pode usar a seguinte equação para gerar uma matriz de coeficientes escalonados:
F[v][«] = (F'[v][w] * S[v][w] + (1 « 19) - ((F'[v][w] >= 0) ? 0 : 1) ) » 20 onde ν = 0..7, u = 0.. 7; onde S[v][u] é uma entrada na matriz de fatores 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 218 pode emitir a matriz de coeficientes para o módulo de quantização 28.
A Figura 9 é um fluxograma ilustrando uma operação exemplar do módulo de transformada direta 26. Inicialmente, o módulo de entrada 210 recebe uma matriz de valores de componentes de pixel (230). Quando o módulo de entrada 140 recebe a matriz de valores de componentes de pixel, o módulo de deslocamento à esquerda 212 pode gerar uma matriz de coeficientes ajustados mediante deslocamento ascendente de cada valor na matriz de valores de componentes de pixel (232) . Por exemplo, o módulo de deslocamento à esquerda 212 pode deslocar todos os coeficientes à esquerda em dez posições. Nesse exemplo, o módulo de deslocamento à esquerda 212 pode deslocar todos os coeficientes para a direita em dez posições porque o módulo de transformada direta de vetor 214 pode usar aritmética de ponto fixo na qual os números são codificados utilizando dez bits na porção fracionária. Desse modo, mediante deslocamento dos coeficientes para a esquerda em dez posições, o módulo de deslocamento à esquerda 212 converte efetivamente os valores de componentes de pixel em números de ponto fixo com dez bits de mantissa.
Após deslocar à esquerda cada valor de componente de pixel na matriz de valores ajustados, o módulo de transformada direta de vetor 214 pode determinar se um contador de coluna é inferior a um contador máximo de coluna (234) . Inicialmente, o contador de coluna pode ser ajustado para zero. 0 contador máximo de coluna pode ser um valor estático que é igual ao número de colunas na matriz de coeficientes ajustados. Por exemplo, se a matriz de coeficientes ajustados inclui oito colunas, o contador máximo de colunas é igual a oito.
Se o contador de coluna for menor do que o contador máximo de coluna ("SIM" de 234), o módulo de transformada direta de vetor 214 pode computar uma transformada direta unidimensional em um vetor de coluna indicado pelo contador de coluna 236. Quando o módulo de transformada direta de vetor 214 computa a transformada direta em um vetor de coluna da matriz de coeficientes ajustados, o módulo de transformada direta de vetor 214 substitui os coeficientes ajustados originais no vetor de coluna por coeficientes intermediários. Após o módulo de transformada direta de vetor 214 computar a transformada direta em um vetor de coluna da matriz de coeficientes ajustados, o módulo de transformada direta de vetor 214 pode incrementar o contador de coluna (238). 0 módulo de transformada direta de vetor 214 pode então retornar e outra vez determinar se o contador de coluna é menor do que o contador máximo de coluna (234).
Se o contador de coluna não for menor do que (isto é, for maior do que ou igual a) o contador máximo de coluna ("NÃO" de 234), o módulo de transformada direta de vetor 214 pode determinar se um contador de linha é menor do que um contador máximo de linha (240). Inicialmente, o contador de linha pode ser ajustado para zero. O contador máximo de linha 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 inclui oito linhas, o contador máximo de linha é igual a oito.
Se o contador de linha for menor do que o contador máximo de linha ("SIM" de 240), o módulo de transformada direta de vetor 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 direta de vetor 214 já computou a transformada direta nos vetores de linha na matriz, a matriz de coeficientes agora contém coeficientes intermediários. Quando o módulo de transformada direta de vetor 214 computa a transformada direta em um vetor de linha de coeficientes intermediários, o módulo de transformada direta de vetor 214 substitui os coeficientes intermediários no vetor de coluna por coeficientes transformados.
Após o módulo de transformada direta de vetor 214 computar a transformada de co-seno discreta em um vetor de linha da matriz de coeficientes, o módulo de transformada direta de vetor 214 pode incrementar o contador de linha 244. O módulo de transformada direta de vetor 214 pode então retornar e outra vez determinar se o contador de linha é menor do que o contador máximo de linha (240). Se o contador de linha não for menor do que (isto é, for maior do que ou igual a) o contador máximo de linha ("NÃO" de 240), o módulo de escalonamento 216 pode escalonar cada coeficiente transformado na matriz de coeficientes transformados (246). Quando o módulo de escalonamento 216 escalona um coeficiente, o módulo de escalonamento 216 pode deslocar o coeficiente para a direita em certo número de posições. Após o módulo de escalonamento 216 ter escalonado cada um dos coeficientes transformados, o módulo de saida 218 pode emitir a matriz resultante de coeficientes escalonados (248) .
A Figura IOA é um fluxograma ilustrando uma transformada unidimensional exemplar 260. Na Figura 10A, os valores X0, Χ1, X2, X3, X4, X5, X6 e X7 representam coeficientes de entrada e os valores x0, X1, x2, x3, x4, x5, x6 e X7 representam valores de saida da transformada 260. O valor associado a uma linha após um circulo que encerra um símbolo " + " é o resultado da adição dos valores associados com as setas que apontam para o círculo. O valor associado a uma linha após um círculo que abrange um símbolo "x" é o resultado da multiplicação do coeficiente posicionado próximo ao círculo e valores associados às linhas que passam através dos círculos. O símbolo "-" próximo a 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 uma seta após o símbolo "-".
A transformada 260 utiliza quatorze multiplicações por sete fatores irracionais singulares.
Para conveniência essa revelação se refere a esses fatores irracionais singulares como α, β, γ, δ, ε, ξ, e η. Na transformada 260, α = λ/2 cos(3;r/8), β = -J2sen(}n / 8), γ = cos (π/16), δ = sen(π/16), ε = οο3(3π/16), ξ = 3βη(3π/16), e η = λ/2 . Observar que α, β, γ, δ, ε, ξ, e η são todos números irracionais. Como α, β, γ, δ, ε, ξ, e η são números irracionais, de forma tolerável as representações exatas de α, β, γ, δ, ε, ξ, e η podem exigir um número relativamente grande de bits. Conseqüentemente, obediência às exigências de padrões típicos de codificação poderia não ser possível ao utilizar números de ponto fixo com números relativamente pequenos de bits de mantissa para computar a transformada 260. Adicionalmente, como α, β, γ, δ, ε, ξ, e η são números irracionais, poderia não ser possível reduzir as multiplicações por α, β, γ, δ, ε, ξ, e η para seqüências de operações de deslocamento, operações de adição, e/ou operações de subtração.
A Figura 10B é um fluxograma ilustrando uma transformada escalonada unidimensional exemplar 270. A transformada 270 é uma versão escalonada da transformada 260. Na transformada 270, o valor η foi fatorado da transformada 260, um valor (1/Ψ) foi fatorado dos valores γ, δ, ε, e ξ da transformada 260, e um valor (1/φ) foi fatorado dos valores α e β da transformada 260. Quando (1/Ψ) e (l/φ) são decompostos desses coeficientes, o vetor seguinte representa valores através dos quais X0-X7 são multiplicados antes da transformada 260:
<1, (1/ψ), (l/φ), (V2 / ψ), 1, (V2 / ψ), (l/φ), (1/ψ) >.
Os valores α, β, γ, δ, ε, ξ, e η podem mudar quando (1/Ψ) e (1/φ) são decompostos de α, β, γ, δ, ε, e ξ. Para propósitos de conveniência, os valores α, β, γ, δ, ε, e ξ após (1/Ψ) e (1/φ) são decompostos referidos como α', β', γ', δ', ε', e ξ'. Por exemplo, quando Ψ = 1,352708058 e φ = 0,959700091, α' « 133/256, β'« 321/256, γ' « 679/512, δ' « 135/512, ε' « 4605/4096, e ξ' « 1539/2048.
Valores α' , β' , γ' , δ' , ε' , e ξ' podem ser selecionados de várias formas de tal modo que eles aproximariam produtos de α' , β' , γ', δ' , ε' , e ξ' mediante fatores correspondentes Ψ e φ. Em geral, os valores dos fatores Ψ e φ e os valores α' , β' , γ' , δ' , ε' , ξ' pode ser selecionados sem mudar o modelo global da transformada 270.
Encontrar bons valores desses fatores pode representar um problema complexo de otimização que poderia produzir múltiplas soluções com diferentes equilibrios de complexidade/precisão. Por exemplo, multiplicações por alguns valores de α' , β' , γ' , δ' , ε' , e ξ' podem ser mais convenientes para calcular do que outros. Além disso, os valores de Ψ e φ podem ser importantes porque eles servem como a base para fatores de escalonamento, e alguns fatores de escalonamento podem ser mais convenientes de calcular do que outros. Por exemplo, multiplicações por um primeiro conjunto de valores para α', β', γ', δ', ε', e ξ' pode ser aproximados por uma série de operações de adição e operações de deslocamento que são mais curtas do que uma série de operações de adição e operações de deslocamento para um conjunto diferente de valores para α', β', γ', δ', ε', e ξ' . Por exemplo, quando Ψ = 1, 352708058 εφ = 0, 959700091, γ' pode ser aproximado como 679/512. Três operações de deslocamento e três operações de adição podem ser exigidas para aproximar uma multiplicação por 679/512.
Adicionalmente, quando Ψ = 1,1810842 εφ= 0,801251953, γ' pode ser aproximado como 18981/16384. Quatro operações de deslocamento e quatro operações de adição podem ser exigidas para aproximar uma multiplicação por 18981/16384. Uma matriz de fatores de escalonamento pode ser computada mediante multiplicação da transposição do vetor < 1, (1/ψ), (1/φ), (λ/2/Ψ), 1, (λ/2/Ψ), (l/cp), (l/ψ) > pelo menos vetor. Isso resulta em uma matriz 8x8 de valores:
<table>table see original document page 51</column></row><table>
Nessa matriz de fatores de escalonamento, A = 1*1, B = 1*1/ ( λ/2 /ψ) , C = 1*1/φ, D = 1*(λ/2/Ψ), E = (1/ψ)2, F = (1/ψ) * (1/φ) , G = (1/ψ) * ( α/2 /ψ) , H = (1/φ)2, I = (1/φ) * (λ/2/ψ) , e J = ( λ/2 /ψ) * ( S /ψ) .
Como os fatores de escalonamento são multiplicados com os coeficientes antes da aplicação da transformada, os valores de escalonamento A, B, C, D, E, F, G, Η, I, e J podem ser deslocados à esquerda em P posições, onde P é um constante se referindo a um número de bits de mantissa de ponto fixo (isto é, bits à direita da vírgula fracionária) usado em uma transformada. Isso efetivamente converte os coeficientes originais em números de pontos fixos que têm P bits de mantissa. Em outras palavras, cada um dos coeficientes na matriz é multiplicado por 2P. Os valores resultantes podem ser então aproximados por valores de número inteiro. Desse modo, A, B, C, D, E, F, G, Η, I, e J na matriz acima podem ser substituídos por A' « 2P, B' « ( λ/2 /ψ) *2P, C' - 1/φ*2ρ, D' - (λ/2/Ψ)*2ρ, E' * (1/ψ)2*2ρ, F'
* (1/ψ) * (1/φ) *2Ρ, G' * (1/ψ) * ( λ/2 /ψ) *2Ρ, H' * (1/φ)2*2ρ, I'
* (1/φ) * (λ/2 /ψ) *2Ρ, e J * ( 4l /ψ) * ( λ/2 /ψ) *2Ρ. Por exemplo, deixemos Ψ = 1,352708058 e φ = 0,959700091, e deixemos P = 10. Dados esses valores de Ψ, φ, e P, os fatores de escalonamento A' = 1024, B' = 757, C' = 1067, D' = 1071, E' = 560, F' = 789, G' = 792, H' = 1112, I' = 1116 e J' = 1120 podem ser selecionados. Desse modo, a matriz a seguir de fatores de escalonamento pode resultar:
<table>table see original document page 52</column></row><table>
As tabelas a seguir resumem fatores de escalonamento exemplares e valores de α', β', γ' , δ' , ε' , e ξ' que podem ser usados com a transformada 270.
Tabela 1: Aproximações para fatores constantes usadas no algoritmo A.
<table>table see original document page 52</column></row><table> <table>table see original document page 53</column></row><table>
Tabela 2: Aproximações para fatores constantes usadas no algoritmo B.
<table>table see original document page 53</column></row><table> <table>table see original document page 54</column></row><table> <table>table see original document page 55</column></row><table>
Tabela 3: Aproximações para fatores constantes usados no algoritmo C.
<table>table see original document page 55</column></row><table> <table>table see original document page 56</column></row><table>
Para ilustrar como o módulo de transformada inversa pode usar os fatores de escalonamento, valores constantes, e algoritmos providos nas tabelas acima, considere a Tabela 1 acima. Para aplicar uma transformada de co-seno discreta inversa utilizando os valores na Tabela 1, o módulo de entrada 100 no módulo de transformada inversa 48 pode receber uma matriz 8x8 de coeficiente. A seguir, o módulo de escalonamento 102 escalona um coeficiente na posição [0,0] da matriz por um fator A; escalona um coeficiente na posição [0,1] da matriz por um fator B; escalona um coeficiente na posição [0,2] da matriz por um fator C; escalona um coeficiente na posição [0,3] da matriz por um fator D; escalona um coeficiente na posição [0,4] da matriz pelo fator A; escalona um coeficiente na posição [0,5] da matriz pelo fator D; escalona um coeficiente na posição [0,6] da matriz pelo fator C; escalona um coeficiente na posição [0,7] da matriz pelo fator B; escalona um coeficiente na posição [1,0] da matriz pelo fator B; escalona um coeficiente na posição [1,1] da matriz pelo fator E; escalona um coeficiente na posição [1,2] da matriz por um fator F; escalona um coeficiente na posição [1,3] da matriz por um fator G; escalona um coeficiente na posição [1,4] da matriz pelo fator B; escalona um coeficiente na posição [1,5] da matriz pelo fator G; escalona um coeficiente na posição [1,6] da matriz pelo fator F; escalona um coeficiente na posição [1,7] da matriz pelo fator E; escalona um coeficiente na posição [2,0] da matriz pelo fator C; escalona um coeficiente na posição [2,1] da matriz pelo fator F; escalona um coeficiente na posição [2,2] da matriz por um fator H; escalona um coeficiente na posição [2,3] da matriz por um fator I; escalona um coeficiente na posição [2,4] da matriz pelo fator C; escalona um coeficiente na posição [2,5] da matriz pelo fator I; escalona um coeficiente na posição [2,6] da matriz pelo fator H; escalona um coeficiente na posição [2,7] da matriz pelo fator F; escalona um coeficiente na posição [3,0] da matriz pelo fator D; escalona um coeficiente na posição [3,1] da matriz pelo fator G; escalona um coeficiente na posição [3,2] da matriz pelo fator I; escalona um coeficiente na posição [3,3] da matriz pelo fator J; escalona um coeficiente na posição [3,4] da matriz pelo fator D; escalona um coeficiente na posição [3,5] da matriz pelo fator J; escalona um coeficiente na posição [3,6] da matriz pelo fator I; escalona um coeficiente na posição [3,7] da matriz pelo fator G; escalona um coeficiente na posição [4,0] da matriz pelo fator A; escalona um coeficiente na posição [4,1] da matriz pelo fator B; escalona um coeficiente na posição [4,2] da matriz pelo fator C; escalona um coeficiente na posição [4,3] da matriz pelo fator D; escalona um coeficiente na posição [4,4] da matriz pelo fator A; escalona um coeficiente na posição [4,5] da matriz pelo fator D; escalona um coeficiente na posição [4,6] da matriz pelo fator C; escalona um coeficiente na posição [4,7] da matriz pelo fator B; escalona um coeficiente na posição [5,0] da matriz pelo fator D; escalona um coeficiente na posição [5,1] da matriz pelo fator G; escalona um coeficiente na posição [5,2] da matriz pelo fator I; escalona um coeficiente na posição [5,3] da matriz pelo fator J; escalona um coeficiente na posição [5,4] da matriz pelo fator D; escalona um coeficiente na posição [5,5] da matriz pelo fator J; escalona um coeficiente na posição [5,6] da matriz pelo fator I; escalona um coeficiente na posição [5,7] da matriz pelo fator G; escalona um coeficiente na posição [6,0] da matriz pelo fator C; escalona um coeficiente na posição [6,1] da matriz pelo fator F; escalona um coeficiente na posição [6,2] da matriz por um fator H; escalona um coeficiente na posição [6,3] da matriz por um fator I; escalona um coeficiente na posição [6,4] da matriz pelo fator C; escalona um coeficiente na posição [6,5] da matriz pelo fator I; escalona um coeficiente na posição [6,6] da matriz pelo fator H; escalona um coeficiente na posição [6,7] da matriz pelo fator F; escalona um coeficiente na posição [7,0] da matriz pelo fator B; escalona um coeficiente na posição [7,1] da matriz por um fator E; escalona um coeficiente na posição [7,2] da matriz por um fator F; escalona um coeficiente na posição [7,3] da matriz por um fator G; escalona um coeficiente na posição [7,4] da matriz pelo fator B; escalona um coeficiente na posição [7,5] da matriz pelo fator G; escalona um coeficiente na posição [7,6] da matriz pelo fator F; e escalona um coeficiente na posição [7,7] da matriz pelo fator E. Quando o módulo de escalonamento 102 escalona esses coeficientes, o módulo de escalonamento 102 pode usar os valores A = 2048, B = 1703, C = 2676, D = 2408, E = 1416, F = 2225, G = 2003, H = 3496, I = 3147, e J = 2832, cujos produtos são computados pelos algoritmos sem multiplicador, conforme especificado na Tabela 1. Esses coeficientes escalonados constituem uma matriz de coeficientes escalonados.
Após o módulo de escalonamento 102 escalonar os coeficientes, o módulo de transformada inversa 146 pode aplicar uma transformada a cada vetor de linha da matriz de coeficientes escalonados para produzir uma matriz de coeficientes intermediários e aplicar a transformada a cada vetor de coluna da matriz de coeficientes intermediários para produzir uma matriz de coeficientes transformados. O módulo de transformada inversa 146 pode aplicar a transformada a um vetor de linha ou a um vetor de coluna por meio de: cálculo de um valor x0' mediante adição de X0 e x4; cálculo de um valor x41 mediante adição de x0 e -x4; cálculo de um valor (x2*a) mediante multiplicação de x2 por um valor a; cálculo de um valor (χ6*β) mediante multiplicação de X6 por um valor β; cálculo de um valor (χ2*β) mediante multiplicação de x2 pelo valor β; cálculo de um valor (x6*oc) mediante multiplicação de x6 por um valor a; cálculo de um valor x2' mediante adição de (x2*oc) e - (χ6*β) ; cálculo de um valor x6* mediante adição de (x6*ot) e (χ2*β) ; cálculo de um valor x0" mediante adição de x01 e X61; calculando um valor x4" mediante adição de x4' e x2' ; calculando um valor x2" mediante adição de x4' e -X21; calculando um valor x6" mediante adição de x0' e -X61; calculando um valor x7' mediante adição de Xi' e -χΊ, calculando um valor X11 mediante adição de Xi e X7; calculando um valor X31 mediante multiplicação de X3 e raiz quadrada de dois; calculando um valor x5' mediante multiplicação de X5 e raiz quadrada de dois; calculando um valor x7" mediante adição de x71 e X51 ; calculando um valor x3" mediante adição de Xi' e -x31 ; calculando um valor x5" mediante adição de x7' e -X51; calculando um valor Xi" mediante adição de x3' e Xi' calculando um valor (χ7"*ε) mediante multiplicação de x7" e um valor ε; calculando um valor (χ7"*ξ) mediante multiplicação de x7" e um valor ξ calculando um valor (χ3"*γ) mediante multiplicação de x3" e um valor γ; calculando um valor(χ3"*δ) mediante multiplicação de x3" e um valor δ; calculando um valor (χ5"*δ) mediante multiplicação de x5" e o valor δ; calculando um valor (χ5"*γ) mediante multiplicação de x5" e o valor γ; calculando um valor (χι"*ξ) mediante multiplicação de Xi" e o valor ξ calculando um valor(χι"*ε) mediante multiplicação de Xi" e o valor ε; calculando um valor X1''' mediante adição de (χ7"*ε) e -(χι"*ξ); calculando um valor X3''' mediante adição de (χ3"*γ) e - (x5"*δ) ; calculando um valor X5''' mediante adição de (χ5"*γ) e (χ3"*δ); calculando um valor X1''' mediante adição de (χι"*ε) e (χ7"*ξ) ; calculando um valor X0 mediante adição de X7''' e x0"; calculando um valor Xi mediante adição de x4" e X5' ' ' ; calculando um valor X2 mediante adição de x2" e x3' ' ' ; calculando um valor X3 mediante adição de x6" e X7'''; calculando um valor X4 mediante adição de x6" e - χ1'''; calculando um valor X5 mediante adição de x2" e -
X3'''; calculando um valor X6 mediante adição de x4" e -
X5'''; calculando um valor X7 mediante adição de x0" e -
X1''', em que x0, X1, x2, x3, X5, xe, X7 são coeficientes em um vetor de linha ou em um vetor de coluna e X0, X1, X2, X3, X4, X5, X6, e X7 são valores de saida da transformada.
Ao realizar esses cálculos, o módulo de transformada inversa 146 utiliza os valores fracionários α = 53/128, β = 1, γ = 151/128, δ = 15/32, ε = 1, εξ = 171/256, cujos produtos são computados pelos algoritmos sem multiplicador conforme especificado na Tabela 1.
0 código a seguir contém uma implementação de linguagem-C exemplar da transformada 270:
/* Definir os valores de fatores de escala */
#define A 1024
#define B 1138
#define C 1730
#define D 1609
#define E 1264
#define F 1922
#define G 1788
#define H 2923
#define I 2718
#define J 2528
/* Definir a matriz de fatores de escala */ static int scale [8 CO * = {
<table>table see original document page 61</column></row><table> void scaled_1d_idct (int *, int *);
void idct (short *P) {
int block[8*8], clock2[8*8], i; /* Escalonar cada um dos coeficientes de entrada */ for (i=0; i < 6 4; i++)
block[i] = scale[i] * P[i]; /* Adicionar polarização ao Coeficiente DC */ block[0] += 1 « 12;
/* Aplicar a transformada de co-seno discreta inversa de vetor a cada linha e coluna do bloco. */ for (i=0; i<8; i++)
scaled Id idct (block + i*8, block2 + i); for (i=0; i<8; i++)
scaled Id idct (block2 + i*8, block + i); /* Deslocar a direita cada um dos coeficientes transformados */ for (i=0; i<64; i++) P[i] = block[i] » 13;
}
#define mul_l(y,z) {
int y2, y3; y2 = (y » 3) - (y » 7) ; y3 = y2 - (y » 11); ζ = y2 + (y3 » 1) ; y = Y - y2;
} #define mul_2(y,z) {
int y2; y2 = (y » 9) - y; ζ = y » 1 ; y = (y2 » 2) - y2; <formula>formula see original document page 63</formula> x6 = in[6] r mui 3(x2, xa) ; mui 3(x6, xb) ; x2 = x2 - xb; x6 = x6 + xa ; xa = xO + x4; xb = xO - χ 4 ; xO = xa + x6; x6 = xa - x6 ; x4 = xb + x2 ; x2 = xb - x2 ; out[0*8] = xO + xl ; out[1*8] = x4 + x5 ; out [2*8] = x2 + x3 ; out [3*8] = x6 + x7 ; out[4*8] = x6 - x7; out[5*8] = x2 - x3 ; out[6*8] = x4 - x5 ; out [7*8] = xO - xl; 20}
void scaled_ld_fdct (int *, int *);
void fdct (short *P) {
int block[8*8], block2[8*8], i; 25 for (i=0; i<64; i++)
block[i] = P[i] « 7; for (i=0; i<8; i++)
scaled Id fdct (block + i, block2 + i*8); for (i=0; i<8; i++) 30 scaled Id fdct (block2 + i, block + i*8);
for (i=0; i<64; i++)
P[i] = (block[i] * scale[i] + 0x7FFFF - (block [i] »31)) » 2 0; }
void scaled_ld_fdct (int *in, int *out) {
int xO, xl, x2, x3, x4, x5, x6, xO = in[0*8] + in[7 *8] xl = in[0*8] - in[7*8] x4 = in[1*8] + in[6*8] x5 = in[1*8] - in[6*8] x2 = in[2*8] + in[5*8] x3 = in[2*8] - in[5*8] x6 in[3*8] + in [4*8] x7 in[3*8] - in [4*8] mui : (x3 , xa); mui 1 (x5 , xb) ;
xa, xb;
x3 = x3 + xb; x5 = x5 - xa; mul_2 (xl, xa) ; mul_2 (x7, xb) ; xl = xl - xb; x7 = x7 + xa; xa = xl + x3; x3 = xl - x3; xb = x7 + x5; x5 = x7 - x5; xl = xa + xb; x7 = xa - xb; xa = x0 + x6; x6 = x0 - x6; xb = x4 + x2; x2 = x4 - x2; x0 = xa + xb; x4 = xa - xb; mui 3(x2, xa); mul_3 (x6, xb);
x2 = xb + x2;
x6 = x6 - xa;
out [0] = x O;
out[1] = x1;
out [2] = x2;
out[3] = x3;
out [4] = x4;
out [5] = x5;
out[6] = x6;
out [7] = x7;
}
A Figura 10 é um fluxograma ilustrando uma transformada de co-seno discreta direta exemplar 200 que é complementar à transformada de co-seno discreta inversa 190. Na Figura 10, os valores X0, X1, X2, X3, X4, X5, X6, e X7 representam coeficientes de saida e os valores x0, X1, x2, X3, X4, X5, e X7 representam valores de entrada. O valor associado a uma linha após um circulo que abrange um símbolo "+" é o resultado da adição dos valores associados com as setas que apontam para o círculo. O valor associado com uma linha após um círculo que abrange um símbolo "x" é o resultado da multiplicação do coeficiente posicionado próximo ao círculo e valores associados com as linhas que passam através dos círculos. O símbolo próximo a uma seta representa uma negação do valor associado com a seta. Por exemplo, se o valor "10" for associado a uma seta antes de um símbolo o valor "-10" é associado à 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 negativados, e subtração, podem ser usadas no algoritmo 190. Na transformada 280, os valores de saída X0 a X7
são multiplicados pelos fatores 1, φ, φ, ψ, >/2 ψ, λ/2 ψ, e ψ, respectivamente. Observar que esses fatores são as reciprocas dos valores decompostos de α1, β', γ', δ1, ε', e ξ' na transformada 270.
As técnicas aqui descritas 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 em conjunto 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 ao menos em parte por um meio legível por computador compreendendo instruções que, quando executadas, realizam um ou mais dos métodos descritos acima. O meio legível por computador pode formar parte de um produto de programa de computador, o qual pode incluir materiais de embalagem. O meio legível por computador pode compreender memória de acesso aleatório (RAM) tal como memória de acesso aleatório, dinâmica, síncrona (SDRAM), memória de leitura (ROM), memória de acesso aleatório não- volátil (NVRAM), memória de leitura programável eletricamente apagável (EEPROM), memória flash, meios de armazenamento de dados magnéticos ou óticos, e semelhantes. As técnicas adicionalmente ou alternativamente podem ser realizadas ao menos em parte por um meio de comunicação legível por computador que transporta ou comunica código na forma de instruções ou estruturas de dados e que podem ser acessado, lido, e/ou executado por um computador.
O código pode ser executado por um ou mais processadores, tal como um ou mais processadores de sinal digital (DSPs), microprocessadores de uso geral, circuitos integrados de aplicação especifica (ASICs) , arranjos lógicos programáveis no campo (FPGAs), ou outros conjuntos de circuitos lógicos integrados ou discretos equivalentes. Conseqüentemente, o termo "processador", conforme aqui usado pode se referir a qualquer uma entre estrutura anteriormente mencionada ou qualquer outra estrutura adequada para implementação das técnicas aqui descritas. Além disso, em alguns aspectos, a funcionalidade aqui descrita pode ser provida dentro de módulos de software ou módulos de hardware dedicados configurados para codificar e decodificar, ou incorporados em um codificador- decodificador (CODEC) de video combinado.
Várias modalidades da invenção foram descritas. Essas e outras modalidades estão dentro do escopo das reivindicações a seguir.

Claims (66)

1. Método compreendendo: receber uma matriz 8x8 de coeficientes codificados; escalonar cada coeficiente em uma matriz 8x8 de coeficientes codificados por um de um fator A, um fator B, um fator C, um fator D, um fator E, um fator F, um fator G, um fator H, um fator I, ou um fator J para produzir uma matriz de coeficientes escalonados, em que A = 2048, B = 1703, C = 2676, D = 2408, E = 1416, F = 2225, G = 2003, H = 3496, I = 3147, e J = 2832; utilizar aplicações repetidas de uma transformada unidimensional escalonada de ponto fixo para transformar a matriz de coeficientes escalonados em uma matriz de coeficientes transformados; deslocar à direita os coeficientes transformados na matriz de coeficientes transformados para produzir uma matriz de coeficientes ajustados; em que cada coeficiente ajustado na matriz de coeficientes ajustados aproxima um valor correspondente em uma matriz de valores que seriam produzidos mediante aplicação de uma transformada de co-seno discreta inversa bidimensional ideal ("IDCT") à matriz de coeficientes codificados; exibir um bloco 8x8 de pixels, em que cada pixel no bloco 8x8 de pixels inclui um valor de componente de pixel baseado em um coeficiente ajustado na matriz de coeficientes ajustados.
2. Método, de acordo com a reivindicação 1, em que aplicar repetidamente a transformada unidimensional escalonada de ponto fixo compreende: aplicar a transformada unidimensional escalonada de ponto fixo a cada vetor de linha da matriz de coeficientes escalonados para produzir uma matriz de coeficientes intermediários; aplicar a transformada unidimensional escalonada de ponto fixo a cada vetor de coluna da matriz de coeficientes intermediários para produzir uma matriz de coeficientes transformados; e
3. Método, de acordo com a reivindicação 1, em que exibir o bloco 8x8 de pixels compreende exibir o bloco -8x8 de pixels como parte de um quadro de video em uma seqüência de video.
4. Método, de acordo com a reivindicação 1, em que exibir o bloco 8x8 de pixels compreende exibir o bloco -8x8 de pixels como parte de uma imagem estática.
5. Método, de acordo com a reivindicação 1, em que escalonar os coeficientes na matriz de coeficientes compreende: escalonar um coeficiente na posição [0,0] da matriz de coeficientes codificados pelo fator A; escalonar um coeficiente na posição [0,1] da matriz de coeficientes codificados pelo fator B; escalonar um coeficiente na posição [0,2] da matriz de coeficientes codificados pelo fator C; escalonar um coeficiente na posição [0,3] da matriz de coeficientes codificados pelo fator D; escalonar um coeficiente na posição [0,4] da matriz de coeficientes codificados pelo fator A; escalonar um coeficiente na posição [0,5] da matriz de coeficientes codificados pelo fator D; escalonar um coeficiente na posição [0,6] da matriz de coeficientes codificados pelo fator C; escalonar um coeficiente na posição [0,7] da matriz de coeficientes codificados pelo fator B; escalonar um coeficiente na posição [1,0] matrix de coeficientes codificados pelo fator B; escalonar um coeficiente na posição [1,2] matrix de coeficientes codificados pelo fator E; escalonar um coeficiente na posição [1,3] matrix de coeficientes codificados pelo fator F; escalonar um coeficiente na posição [1,4] matrix de coeficientes codificados pelo fator G; escalonar um coeficiente na posição [1,5] matrix de coeficientes codificados pelo fator Ex- escalonar um coeficiente na posição [1,6] matrix de coeficientes codificados pelo fator G; escalonar um coeficiente na posição [1,7] matrix de coeficientes codificados pelo fator F; escalonar um coeficiente na posição [2,0] matrix de coeficientes codificados pelo fator E; escalonar um coeficiente na posição [2,1] matrix de coeficientes codificados pelo fator ex- escalonar um coeficiente na posição [2,2] matrix de coeficientes codificados pelo fator F; escalonar um coeficiente na posição [2,3] matrix de coeficientes codificados pelo fator H; escalonar um coeficiente na posição [2,4] matrix de coeficientes codificados pelo fator I; escalonar um coeficiente na posição [2,5] matrix de coeficientes codificados pelo fator ex- escalonar um coeficiente na posição [2,6] matrix de coeficientes codificados pelo fator I; escalonar um coeficiente na posição [2,7] matrix de coeficientes codificados pelo fator H; escalonar um coeficiente na posição [2,0] matrix de coeficientes codificados pelo fator F; escalonar um coeficiente na posição [3,0] da matriz de coeficientes codificados pelo fator D; escalonar um coeficiente na posição [3,1 matriz de coeficientes codificados pelo fator G; escalonar um coeficiente na posição [3,2 matriz de coeficientes codificados pelo fator I; escalonar um coeficiente na posição [3,3 matriz de coeficientes codificados pelo fator J; escalonar um coeficiente na posição [3,4 matriz de coeficientes codificados pelo fator D; escalonar um coeficiente na posição [3,5 matriz de coeficientes codificados pelo fator J; escalonar um coeficiente na posição [3,6 matriz de coeficientes codificados pelo fator I; escalonar um coeficiente na posição [3,7 matriz de coeficientes codificados pelo fator G; escalonar um coeficiente na posição [4,0 matriz de coeficientes codificados pelo fator A; escalonar um coeficiente na posição [4,1 matriz de coeficientes codificados pelo fator B; escalonar um coeficiente na posição [4,2 matriz de coeficientes codificados pelo fator C; escalonar um coeficiente na posição [4,3 matriz de coeficientes codificados pelo fator D; escalonar um coeficiente na posição [4,4 matriz de coeficientes codificados pelo fator A; escalonar um coeficiente na posição [4,5 matriz de coeficientes codificados pelo fator D; escalonar um coeficiente na posição [4,6 matriz de coeficientes codificados pelo fator C; escalonar um coeficiente na posição [4,7] da matriz de coeficientes codificados pelo fator B; escalonar um coeficiente na posição [5,0] da matriz de coeficientes codificados pelo fator D; escalonar um coeficiente na posição 5,1; matriz de coeficientes codificados pelo fator G; escalonar um coeficiente na posição 5,2 matriz de coeficientes codificados pelo fator I; escalonar um coeficiente na posição 41,032 matriz de coeficientes codificados pelo fator J; escalonar um coeficiente na posição 5.4 matriz de coeficientes codificados pelo fator D; escalonar um coeficiente na posição 5.5 matriz de coeficientes codificados pelo fator J; escalonar um coeficiente na posição 5,6 matriz de coeficientes codificados pelo fator I; escalonar um coeficiente na posição 5,7 matriz de coeficientes codificados pelo fator G; escalonar um coeficiente na posição 6,0 matriz de coeficientes codificados pelo fator ex- escalonar um coeficiente na posição 6,1 matriz de coeficientes codificados pelo fator F; escalonar um coeficiente na posição 6,2 matriz de coeficientes codificados pelo fator H; escalonar um coeficiente na posição 41,063 matriz de coeficientes codificados pelo fator I; escalonar um coeficiente na posição 6,4 matriz de coeficientes codificados pelo fator C; escalonar um coeficiente na posição 41,065 matriz de coeficientes codificados pelo fator I; escalonar um coeficiente na posição 6,6; matriz de coeficientes codificados pelo fator H; escalonar um coeficiente na posição 6,7] da matriz de coeficientes codificados pelo fator F; escalonar um coeficiente na posição [7, 0] da matriz de coeficientes codificados pelo fator B; escalonar um coeficiente na posição [7, 1] da matriz de coeficientes codificados pelo fator E; escalonar um coeficiente na posição [7, 2] da matriz de coeficientes codificados pelo fator F; escalonar um coeficiente na posição [7, 3] da matriz de coeficientes codificados pelo fator G; escalonar um coeficiente na posição [7, 4] da matriz de coeficientes codificados pelo fator B; escalonar um coeficiente na posição [7, 5] da matriz de coeficientes codificados pelo fator G; escalonar um coeficiente na posição [7, 6] da matriz de coeficientes codificados pelo fator F; escalonar um coeficiente na posição [7, 7] da matriz de coeficientes codificados pelo fator E.
6. Método, de acordo com a reivindicação 5, em que aplicar a transformada quer seja a um vetor de linha ou a um vetor de coluna compreende: calcular um valor de x0' mediante adição de X0 e x4; calcular um valor de X41 mediante adição de x0 e -x4; calcular um valor de (X2*a) mediante multiplicação de X2 por um valor a; calcular um valor de (χ6*β) mediante multiplicação de x6 por um valor β; calcular um valor de (χ2*β) mediante multiplicação de X2 pelo valor β; calcular um valor de (x6*a) mediante multiplicação de x6 por um valor a; calcular um valor de X21 mediante adição de (x2*a) e -(χ6*β); calcular um valor de X6' mediante adição de (x6*a) e (X2 * β); calcular um valor de x0" mediante adição de x0' e X6', calcular um valor de x4" mediante adição de x4' X2'; calcular um valor de x2" mediante adição de x4' e -X2'; calcular um valor de x6" mediante adição de x0' e -χε' ; calcular um valor de x7' mediante adição de X1 e -X7; calcular um valor de X1' mediante adição de X1 e X7; calcular um valor de X3' mediante multiplicação de X3 e raiz quadrada de dois; calcular um valor de X51 mediante multiplicação de X5 e raiz quadrada de dois; calcular um valor de X7" mediante adição de x7' e X5' ; calcular um valor de x3" mediante adição de X1' e -X3' ; calcular um valor de x5" mediante adição de X7' e -X5' ; calcular um valor de X1" mediante adição de x3' e Xi' ; calcular um valor de (χ7"*ε) mediante multiplicação de X7" e um valor ε; calcular um valor de (χ7"*ξ) mediante multiplicação de x7'1 e um valor ξ; calcular um valor de (χ3"*γ) mediante multiplicação de x3" e um valor γ; calcular um valor de (χ3"*δ)mediante multiplicação de x31' e um valor δ; calcular um valor de (x5" *δ) mediante multiplicação de X51 ' e o valor δ; calcular um valor de (χ5Μ*γ) mediante multiplicação de x5" e o valor γ; calcular um valor de (X1" *ξ) mediante multiplicação de xl'1 e o valor ξ; calcular um valor de (χ1"*ε) mediante multiplicação de χχ" e o valor ε; calcular um valor de X7''' mediante adição de (X7' ' *ε) e - (X1" *ξ) ; calcular um valor de x3' ' ' mediante adição de (χ3"*γ) e -(χ5"*δ); calcular um valor de x5' ' ' mediante adição de (χ5"*γ) e (χ3"*δ); calcular um valor de X1''' mediante adição de (χχ"*ε) e (χ7"*ξ); calcular um valor de X0 mediante adição de x7' ' ' e X0'' ; calcular-um valor de X1 mediante adição de X4'' e X5''' ; calcular um valor de X2 mediante adição de x2' 1 e x3''' ; calcular um valor de X3 mediante adição de x6' ' e x7'' ' ; calcular um valor de X4 mediante adição de X6' 1 e -x1"'; calcular um valor de X5 mediante adição de X2' ' e -X3''' ; calcular um valor de X6 mediante adição de x4' ' e -X5'''; e calcular um valor de X7 mediante adição de X0' ' e -χ1''' ; em que X1, x2, x3, x4, X5, Xe, e X7 são coeficientes em um vetor de linhas ou em um vetor de colunas, em que X1, X2, X3, X4, X5, Xe, e X7 são valores de saida da transformada; e em que α = 53/128, β = 1, γ = 151/128, δ = 15/32, ε = 1, e ξ = 171/256.
7. Método, de acordo com a reivindicação 6, em que usar aplicações repetidas da transformada compreende aplicar a transformada aos coeficientes em um dos vetores de linha ou em um dos vetores de coluna sem usar operações de multiplicação ou divisão.
8. Método, de acordo com a reivindicação 7, em que calcular o valor (χ1*ξ) por Xi e o valor ξ compreende realizar a seguinte seqüência de operações aritméticas: calcular um valor yi, em que yi = (x1>>3)-xi; calcular um valor y2, em que y2 = X1 + (yi>>3); e calcular o valor (χχ*ξ) mediante subtração de (y2>>2); a partir de y2; e em que calcular o valor (χ7*ξ) por X7 e o valor ξ compreende realizar a seguinte seqüência de operações aritméticas: calcular um valor y1', em que yx' = (x7>>3)- X7; calcular um valor y2' , em que y2' = X7 + (y1'»3); e calcular o valor (χ7*ξ) mediante subtração de (y2'»2); a partir de y2'; e em que calcular o valor (χ1*ξ) por X1' ' e o valor ξ compreende realizar a seguinte seqüência de operações aritméticas: calcular um valor γλ", em que y1" = (xi>>3)- x1 ; calcular um valor y2", em que y2" = X1" + (y1"»3); e calcular o valor (χχ*ξ) mediante subtração de (y2"»2); a partir de y2"; e em que calcular o valor (χ7*ξ) por X7'' e o valor ξ compreende realizar a seguinte seqüência de operações aritméticas: calcular um valor yx' ' ' , em que yx' ' ' (x7"»3) -x7"; calcular um valor y2' ' ' , em que y2' ' ' = x7" + (y1"'»3); e • calcular o valor (χ7*ξ) mediante subtração de (y2'"»2); a partir de y2'" .
9. Método, de acordo com a reivindicação 7, em que calcular um valor (Χ3*γ) mediante multiplicação de X3 e um valor γ e em que calcular o valor (χ3*δ) mediante multiplicação de X3 e um valor δ compreende realizar a seguinte seqüência de operações: calcular um valor ylr em que yi=x3-(x3»4) ; calcular um valor y2, em que y2=yi+ (x3>>7) ; calcular o valor (χ3*δ) mediante deslocamento à direita de y2 por 2; e calcular o valor (χ3*γ) mediante adição de y e y2; e em que calcular um valor (χ5*δ) mediante multiplicação de X5 e o valor δ e em que calcular um valor (χ5*γ) mediante multiplicação de x5 e o valor γ compreende realizar a seguinte seqüência de operações: calcular um valor γλ' , em que y1'=X5-(x5»4 ) ; calcular um valor y2' , em que y2'=Y1' + (x5>>7 ) ; calcular o valor (χ3*δ) mediante deslocamento à direita de y2 por 2; e calcular o valor (χ3*γ) mediante adição de y1' e γ2 ; e em que calcular um valor (x3' ' *γ) mediante multiplicação de X3'' e o valor γ e em que calcular um valor (x3' ' *δ) mediante multiplicação de X3'' e o valor δ compreende realizar a seguinte seqüência de operações: calcular um valor Y1", em que y1"=x3"- (x3"»4) ; calcular um valor y2", em que y2"=y1"+(x3"»7) ; calcular o valor (χ3*δ) mediante deslocamento à direita de y2" por 2; e calcular o valor (χ3"*γ) mediante adição de γχ" e γ2"; e em que calcular um valor (χ5''*δ) mediante multiplicação de X5'' e o valor δ e em que calcular um valor (X5' ' *y) mediante multiplicação de X5'' e o valor γ compreende realizar a seguinte seqüência de operações: calcular um valor Y1''', em que y1'''=x5"- (x5"»4) ; calcular um valor y2' ' ' , em que Y2' "=Yl' ' ' + (x5">>7 ) ; calcular o valor (χ5"*δ) mediante deslocamento à direita de y2''' por 2; e calcular o valor (χ5"*γ) mediante adição de Y1" ' e Y2'" .
10. Método, de acordo com a reivindicação 7, em que calcular um valor (x2*a) mediante multiplicação de x2 por um valor α e em que calcular um valor (χ2*β) mediante multiplicação de x2 por um valor β compreende realizar a seguinte seqüência de operações: calcular o valor (χ2*β) mediante determinação de (χ2*β) igual a x2; calcular um valor yx, em que y1=x2>>2; calcular um valor y2, em que y2=x2+y1; calcular um valor y3, em que y3=y1-x2; e calcular o valor (x2*a) mediante subtração de (y3»l) a partir de (y2»5) ; e em que calcular um valor (Χ6*α) mediante multiplicação de x6 por um valor α e em que calcular um valor (χ6*β) mediante multiplicação de x6 por um valor β compreende realizar a seguinte seqüência de operações: calcular o valor (χ6*β) mediante determinação de (χ6*β) igual a x6; calcular um valor yi', em que yi'=x6>>2; calcular um valor y2', em que y2'=X6+yi'; calcular um valor y3' , em que y3'=yi'-x6; e calcular o valor (x6*a) mediante subtração de (y3'>>l) a partir de (y2'»5); e em que calcular um valor (x2"*a) mediante multiplicação de x2" por um valor α e em que calcular um valor (χ2"*β) mediante multiplicação de x2" por um valor β compreende realizar a seguinte seqüência de operações: calcular o valor (χ2"*β) mediante determinação de (χ2"*β) igual a x2"; calcular um valor y1", em que y1"=x2">>2; calcular um valor y2", em que y2"=x2"+y1"; calcular um valor y3", em que y3"=y1"-x2"; e calcular o valor (x2"*a) mediante subtração de (y3"»1) a partir de (y2"»5) ; e em que calcular um valor (x6"*α) mediante multiplicação de x6" por um valor α e em que calcular um valor (χ6"*β) mediante multiplicação de x6" por um valor β compreende realizar a seguinte seqüência de operações: calcular o valor (χ6"*β) mediante determinação de (χ5"*β) igual a x6"; calcular um valor Y1''', em que yx' ' ' =x6">>2; calcular um valor y2' ' ' , em que <formula>formula see original document page 81</formula> calcular um valor y3' ' ' , em que y3'"=y1'"-x6"; e calcular o valor (x6"*a) mediante subtração de (y3'"»1) a partir de (y2"'»5).
11. Método, de acordo com a reivindicação 6, em que os valores x0, χ1, x2, x3, x4, x5, x6, x7, χ0', X1', χ2' , x3', X4', X5', Xe', X7', x0" , X1'', X2'', X3'' , X4'' , X5'', x6", x7", x1"', X3'", X5'", X7'", (χ2*α), (χ6*β), (x2*P), (x6*a), (x7" *ε), (x7" *ξ) , (x3' ' *γ) , (x3" *δ), (X5" (X5" *γ), (Χ1"*ξ), e (Χ1"*ε) são representados utilizando números de ponto fixo que incluem P bits nas porções de mantissa dos números de ponto fixo.
12. Método, de acordo com a reivindicação 11, em que P é igual a 11.
13. Método, de acordo com a reivindicação 1, em que o método compreende ainda receber um fluxo de bits que inclui a matriz de coeficiente.
14. 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 a um coeficiente DC da matriz, em que o termo de valor de polarização de ponto médio é igual a 2 ou à potência de 13.
15. Método, de acordo com a reivindicação 1, em que o método compreende ainda: deslocar à direita cada coeficiente na matriz de coeficientes transformados em treze posições para gerar uma matriz de valores de componentes de pixel; e construir o bloco de pixels mediante incorporação de valores de componentes de pixel na matriz de valores de componentes de pixel em pixels no bloco de pixels.
16. Método, de acordo com a reivindicação 1, em que escalonar os coeficientes na matriz de coeficientes compreende escalonar os coeficientes na matriz de coeficientes sem utilizar operações de multiplicação ou divisão.
17. Dispositivo compreendendo: um módulo de entrada que recebe uma matriz 8x8 de coeficientes codificados; um módulo de escalonamento que escalona cada coeficiente na matriz 8x8 de coeficientes codificados por um de um fator A, um fator B, um fator C, um fator D, um fator E, um fator F, um fator G, um fator H, um fator I, ou um fator J para produzir uma matriz de coeficientes escalonados; em que A = 2048, B = 1703, C = 2676, D = 2408, E = 1416, F = 2225, G = 2003, H = 3496, I = 3147, e J = 2832; em que os coeficientes escalonados constituem uma matriz de coeficientes escalonados; um módulo de transformada inversa que utiliza apli cações repetidas de uma transformada unidimensional escalonada de ponto fixo para transformar a matriz de coeficientes escalonados em uma matriz de coeficientes transformados; um módulo de deslocamento à direita que desloca à direita os coeficientes transformados na matriz de coeficientes transformados para produzir uma matriz de coeficientes ajustados; e em que cada coeficiente ajustado na matriz de coeficientes ajustados aproxima um valor correspondente em uma matriz de valores que seria produzida mediante aplicação de uma transformada de co-seno discreta inversa bidimensional ideal ("IDCT") à matriz de coeficientes codificados; um módulo de saida que produz um bloco 8x8 de pixels, em que cada pixel no bloco de pixels inclui um valor de componente de pixel baseado em um coeficiente ajustado na matriz de coeficientes ajustados.
18. Dispositivo, de acordo com a reivindicação -17, em que o módulo de transformada inversa aplica a transformada unidimensional escalonada de ponto fixo a cada vetor de linha da matriz de coeficientes escalonados para produzir uma matriz de coeficientes intermediários e aplica a transformada unidimensional escalonada de ponto fixo a cada vetor de coluna da matriz de coeficientes intermediários para produzir uma matriz de coeficientes transformados.
19. Dispositivo, de acordo com a reivindicação -17, em que o módulo de saida exibe o bloco 8x8 de pixels como parte de um quadro de video em uma seqüência de video.
20. Dispositivo, de acordo com a reivindicação -19, em que o módulo de saida exibe o bloco 8x8 de pixels como parte de uma imagem estática.
21. Dispositivo, de acordo com a reivindicação -17, em que o módulo de escalonamento: escalona um coeficiente na posição [0,0] da matriz de coeficientes codificados pelo fator A; escalona um coeficiente na posição [0,1] da matriz de coeficientes codificados pelo fator B; escalona um coeficiente na posição [0,2] da matriz de coeficientes codificados pelo fator C; escalona um coeficiente na posição [0,3] da matriz de coeficientes codificados pelo fator D; escalona um coeficiente na posição [0,4] da matriz de coeficientes codificados pelo fator A; escalona um coeficiente na posição [0,5] da matriz de coeficientes codificados pelo fator D; escalona um coeficiente na posição [0,6] da matriz de coeficientes codificados pelo fator C; escalona um coeficiente na posição [0,7] da matriz de coeficientes codificados pelo fator B; escalona um coeficiente na posição [1,0] da matriz de coeficientes codificados pelo fator B; escalona um coeficiente na posição [1,1] da matriz de coeficientes codificados pelo fator E; escalona um coeficiente na posição [1,2] da matriz de coeficientes codificados pelo fator F; escalona um coeficiente na posição [1,3] da matriz de coeficientes codificados pelo fator G; escalona um coeficiente na posição [1,4] da matriz de coeficientes codificados pelo fator B; escalona um coeficiente na posição [1,5] da matriz de coeficientes codificados pelo fator G; escalona um coeficiente na posição [1,6] da matriz de coeficientes codificados pelo fator F; escalona um coeficiente na posição [1,7] da matriz de coeficientes codificados pelo fator E; escalona um coeficiente na posição [2,0] da matriz de coeficientes codificados pelo fator C; escalona um coeficiente na posição [2,1] da matriz de coeficientes codificados pelo fator F; escalona um coeficiente na posição [2,2] da matriz de coeficientes codificados pelo fator H; escalona um coeficiente na posição [2,3] da matriz de coeficientes codificados pelo fator I; escalona um coeficiente na posição [2,4] da matriz de coeficientes codificados pelo fator C; escalona um coeficiente na posição [2,5] da matriz de coeficientes codificados pelo fator I; escalona um coeficiente na posição [2,6] da matriz de coeficientes codificados pelo fator H; escalona um coeficiente na posição [2,7] da matriz de coeficientes codificados pelo fator F; escalona um coeficiente na posição [3,0] da matriz de coeficientes codificados pelo fator D; escalona um coeficiente na posição [3,1] da matriz de coeficientes codificados pelo fator G; escalona um coeficiente na posição [3,2] da matriz de coeficientes codificados pelo fator I; escalona um coeficiente na posição [3,3] da matriz de coeficientes codificados pelo fator J; escalona um coeficiente na posição [3,4] da matriz de coeficientes codificados pelo fator D; escalona um coeficiente na posição [3,5] da matriz de coeficientes codificados pelo fator J; escalona um coeficiente na posição [3,6] da matriz de coeficientes codificados pelo fator I; escalona um coeficiente na posição [3,7] da matriz de coeficientes codificados pelo fator G; escalona um coeficiente na posição [4,0] da matriz de coeficientes codificados pelo fator A; escalona um coeficiente na posição [4,1] da matriz de coeficientes codificados pelo fator B; escalona um coeficiente na posição [4,2] da matriz de coeficientes codificados pelo fator C; escalona um coeficiente na posição [4,3] da matriz de coeficientes codificados pelo fator D; escalona um coeficiente na posição [4,4] da matriz de coeficientes codificados pelo fator A; escalona um coeficiente na posição [4,5] da matriz de coeficientes codificados pelo fator D; escalona um coeficiente na posição [4,6] da matriz de coeficientes codificados pelo fator C; escalona um coeficiente na posição [4,7] da matriz de coeficientes codificados pelo fator B; escalona um coeficiente na posição [5,0] da matriz de coeficientes codificados pelo fator D; escalona um coeficiente na posição [5,1] da matriz de coeficientes codificados pelo fator G; escalona um coeficiente na posição [5,2] da matriz de coeficientes codificados pelo fator I; escalona um coeficiente na posição [5,3] da matriz de coeficientes codificados pelo fator J; escalona um coeficiente na posicao [5,4] da matriz de coeficientes pelo fator D; escalona um coeficiente na posicao [5,5] da matriz de coeficientes pelo fator j; escalona um coeficiente na posicao [5,6] da matriz de coeficientes pelo fator I; escalona um coeficiente na posicao [5,7] da matriz de coeficientes pelo fator G; escalona um coeficiente na posicao [6,0] da matriz de coeficientes pelo fator C; escalona um coeficiente na posicao [6,1] da matriz de coeficientes pelo fator F; escalona um coeficiente na posicao [6,2] da matriz de coeficientes pelo fator H; escalona um coeficiente na posicao [6,3] da matriz de coeficientes pelo fator I; escalona um coeficiente na posicao [6,4] da matriz de coeficientes pelo fator C; escalona um coeficiente na posicao [6,5] da matriz de coeficientes pelo fator I; escalona um coeficiente na posicao [6,6] da matriz de coeficientes pelo fator H; escalona um coeficiente na posicao [6,7] da matriz de coeficientes pelo fator F; escalona um coeficiente na posicao [7,0] da matriz de coeficientes pelo fator B; escalona um coeficiente na posicao [7,1] da matriz de coeficientes pelo fator E; escalona um coeficiente na posicao [7,2] da matriz de coeficientes pelo fator F; escalona um coeficiente na posicao [7,3] da matriz de coeficientes pelo fator G; escalona um matriz de coeficientes escalona um matriz de coeficientes escalona um matriz de coeficientes escalona um matriz de coeficientes escalona um matriz de coeficientes escalona um matriz de coeficientes escalona um matriz de coeficientes escalona um matriz de coeficientes escalona um matriz de coeficientes escalona um matriz de coeficientes escalona um matriz de coeficientes escalona um matriz de coeficientes escalona um matriz de coeficientes escalona um matriz de coeficientes escalona um matriz de coeficientes coeficiente na codificados pelo coeficiente na codificados pelo coeficiente na codificados pelo coeficiente na codificados pelo coeficiente na codificados pelo coeficiente na codificados pelo coeficiente na codificados pelo coeficiente na codificados pelo coeficiente na codificados pelo coeficiente na codificados pelo coeficiente na codificados pelo coeficiente na codificados pelo coeficiente na codificados pelo coeficiente na codificados pelo coeficiente na codificados pelo fator D; posição fator J; posição fator I; posição fator G; posição fator ex- posição fator F; posição fator H; posição fator I; posição fator ex- posição fator I; posição fator H; posição fator F; posição fator B; posição fator E; posição fator F; posição fator G; [5,4 [5,5 [5,6 [5,7 [6,0 [6,1 [6,2 [6,3 [6,4 [6,5 [6,6 [6,7 [7,0 [7,1 [7,2 [7,3: da da escalona um coeficiente na posição [7,4] da matriz de coeficientes codificados pelo fator B; escalona um coeficiente na posição [7,5] da matriz de coeficientes codificados pelo fator G; escalona um coeficiente na posição [7,6] da matriz de coeficientes codificados pelo fator F; escalona um coeficiente na posição [7,7] da matriz de coeficientes codificados pelo fator E.
22. Dispositivo, de acordo com a reivindicação 17, em que o módulo de transformada inversa aplica a transformada a um vetor de linha ou a um vetor de coluna mediante: cálculo de um valor de x0' mediante adição de x0 e x4; cálculo de um valor de x4' mediante adição de X0 e -x4; cálculo de um valor de (X2*a) mediante multiplicação de X2 por um valor a; cálculo de um valor de (χε*β) mediante multiplicação de x6 por um valor β; cálculo de um valor de (Χ2*β) mediante multiplicação de X2 pelo valor β; cálculo de um valor de (x6*oc) mediante multiplicação de X6 por um valor a; cálculo de um valor de X2' mediante adição de (x2*a) e -(χ6*β); cálculo de um valor de X61 mediante adição de (χ6*α) e (χ2*β); cálculo de um valor de x0" mediante adição de x0' e x6' , cálculo de um valor de x4" mediante adição de X4' e X2' ; cálculo de um valor de x2" mediante adição de x4' e -X2' ; cálculo de um valor de x6" mediante adição de x0' e -X6' ; cálculo de um valor de X7' mediante adição de X1 e -x7; cálculo de um valor de X1' mediante adição de X1 e X7 ; cálculo de um valor de x3' mediante multiplicação de x3 e raiz quadrada de dois; cálculo de um valor de X5' mediante multiplicação de X5 e raiz quadrada de dois; cálculo de um valor de X7" mediante adição de x7' e X5' ; cálculo de um valor de x3" mediante adição de X1' e -x3 1 ; cálculo de um valor de x5" mediante adição de X1' e -X5' ; cálculo de um valor de Xi" mediante adição de X3' e X1' ; cálculo de um valor de (χ7"*ε) mediante multiplicação de X7" e um valor ε; cálculo de um valor de (χ7"*ε) mediante multiplicação de X7" e um valor ξ; cálculo de um valor de (χ3"*γ) mediante multiplicação de x3" e um valor γ; cálculo de um valor de (χ3"*δ) mediante multiplicação de x3" e um valor δ; cálculo de um valor de (x5" *δ) mediante multiplicação de x51 1 e o valor δ; cálculo de um valor de (χ5"*γ) mediante multiplicação de x5" e o valor γ; cálculo de um valor de (Xi" *ξ) mediante multiplicação de xl" e o valor ξ; cálculo de um valor de (χι"*ε) mediante multiplicação de xi" e o valor ε; cálculo de um valor de x7' ' ' mediante adição de (x7' ' *ε) e - (χι" *ξ) ; cálculo de um valor de X3' ' ' mediante adição de (χ3"*γ) e -(χ5"*δ); cálculo de um valor de X5' ' ' mediante adição de (χ5"*γ) e (χ3"*δ); cálculo de um valor de Xi''' mediante adição de (χΓ*ε) e (χ7"*ξ) ; cálculo de um valor de X0 mediante adição de X7'" e X0''; cálculo de um valor de Xi mediante adição de X4' ' e X5'" ; cálculo de um valor de X2 mediante adição de X211 e X3'"; cálculo de um valor de X3 mediante adição de x6' ' e x7" ' ; cálculo de um valor de X4 mediante adição de X6'' e -xl'''; cálculo de um valor de X5 mediante adição de x2' ' e -x3' ' ' ; cálculo de um valor de X6 mediante adição de x4' ' e -X5' " ; e cálculo de um valor de X7 mediante adição de x0' ' e -xi' ' ' ; em que X1, x2, X3, x4, x5, x6, e X7 são coeficientes em um vetor de linhas ou em um vetor de colunas, em que X1, X2, X3, X4, X5, X6, e X1 são valores de saída da transformada; e em que α = 53/128, β = 1, γ = 151/128, δ = 15/32, ε=1, εξ= 171/256.
23. Dispositivo, de acordo com a reivindicação -22, em que o módulo de transformada inversa aplica a transformada à matriz de coeficientes sem usar operações de multiplicação ou divisão.
24. Dispositivo, de acordo com a reivindicação -23, em que o módulo de transformada inversa calcula o valor (χι*ξ) por Xi e o valor ξ compreende realizar a seguinte seqüência de operações aritméticas: calcular um valor ylr em que y1 = (χχ»3)-χχ; calcul ar um valor y2, em que y2 = χ χ + (y1»3); e calcular o valor (χχ*ξ) mediante subtração de (y2»2); a partir de y2; e em que o módulo de transformada inversa calcula o valor (Χ7*ξ) por x7 e o valor ξ compreende realizar a seguinte seqüência de operações aritméticas: calcular um valor yx', em que yx' = (x7»3)- X7; calcular um valor y2' , em que y2' = x7 + (yi'»3); e calcular o valor (χ7*ξ) mediante subtração de (y2'>>2); a partir de y2'; e em que o módulo de transformada inversa calcula o valor (χχ"*ε) mediante multiplicação de X1'' e o valor ε e calcula o valor (χχ"*ξ) por x" e o valor ξ mediante realização da seguinte seqüência de operações aritméticas: calcular um valor γ1", em que y1" = (x1">>3)- x1"; calcular um valor y2", em que y2" = X1" + (y1">>3); e calcular o valor (χ1"*ξ) mediante subtração de (y2">>2); a partir de y2"; e em que o módulo de transformada inversa calcula o valor (χ7"*ε) mediante multiplicação por x7' ' e o valor ε e calcula o valor (χ7"*ξ) por x7" e o valor ξ mediante realização da seguinte seqüência de operações aritméticas: calcular um valor y1''', em que y1''' = (x7">>3) -x7"; calcular um valor y2''', em que y2'''= x7" + (y1'''>>3) ; e calcular o valor (χ7"*ξ) mediante subtração de (y2'''>>2); a partir de y2''' .
25. Dispositivo, de acordo com a reivindicação 23, em que o módulo de transformada inversa calcula o valor (χ3*γ) mediante multiplicação de x3 e um valor γ e em que calcular um valor (χ3*δ) mediante multiplicação de x3 e um valor δ compreende realizar a seguinte seqüência de operações: calcular um valor y1, em que y1=X3-(x3>>4); calcular um valor y2, em que y2=y1+(x3>>7); calcular o valor (Χ3*δ) mediante deslocamento à direita de y2 por 2; e calcular o valor (χ3*γ) mediante adição de y1 e y2; e em que o módulo de transformada inversa calcula um valor (χ5*δ) mediante multiplicação de X5 e o valor δ e em que calcular um valor (χ5*γ) mediante multiplicação de X5 e o valor γ compreende realizar a seguinte seqüência de operações: calcular um valor y1', em que y1'=X5-(x5>>4 ) ; calcular um valor y2' , em que y2'=y1' + (x5»7) ; calcular o valor (χ5*δ) mediante deslocamento à direita de y2' por 2; e calcular o valor (χ5*γ) mediante adição de Y1' e y2' ; e em que o módulo de transformada inversa calcula um valor (x3' ' *γ) mediante multiplicação de X3'' e o valor γ e em que calcular um valor (χ3''*δ) mediante multiplicação de X3'' e o valor δ compreende realizar a seguinte seqüência de operações: calcular um valor yi", em que yi"=x3"- (x3"»4) ; calcular um valor y2", em que y2"=Y1"+(x3"»7) ; calcular o valor (Χ3*δ) mediante deslocamento à direita de y2" por 2; e calcular o valor (χ3"*γ) mediante adição de y1" e y2"; e em que o módulo de transformada inversa calcula um valor (x5''*δ) mediante multiplicação de X5'' e o valor δ e calcula o valor (x5'' *γ) mediante multiplicação de X5'' e o valor γ compreende realizar a seguinte seqüência de operações: calcular um valor Y1''', em que y1'''=x5"- (X5"»4) ; calcular um valor y2' ' ' , em que y2' "=Yl' ' ' + (X5">>7 ) ; calcular o valor (χ5"*δ) mediante deslocamento à direita de y2' ' ' por 2; e calcular o valor (χ5"*γ) mediante adição de Y1'" e y2'" .
26. Dispositivo, de acordo com a reivindicação -23, em que o módulo de transformada inversa calcula o valor (x2*a) mediante multiplicação de x2 por um valor α e calcula o valor (χ2*β) mediante multiplicação de x2 por um valor β mediante realização da seguinte seqüência de operações: calcular o valor (Χ2*β) mediante determinação de (χ2*β) igual a x2; calcular um valor yi, em que yi=x2>>2; calcular um valor y2, em que y2=X2+yi; calcular um valor y3, em que y3=yi~x2; e calcular o valor (x2*a) mediante subtração de (y3>>l) a partir de (y2>>5); e em que o módulo de transformada inversa calcula o valor (Χ6*α) mediante multiplicação de x6 por um valor α e calcula o valor (Χ6*β) mediante multiplicação de X6 por um valor β mediante realização da seguinte seqüência de operações: calcular o valor (χ6*β) mediante determinação de (χ6*β) igual a x6; calcular um valor yx' , em que y1'=x6>>2; calcular um valor y2', em que y2,=X6+yi'; calcular um valor y3', em que y3,=yx'-X6; e calcular o valor (x6*oc) mediante subtração de (y3'>>l) a partir de (y2'>>5); e em que o módulo de transformada inversa calcula o valor (x2"*oc) mediante multiplicação de x2" por um valor α e em que calcular um valor (χ2"*β) mediante multiplicação de x2" por um valor β compreende realizar a seguinte seqüência de operações: calcular o valor (χ2"*β) mediante determinação de (χ2"*β) igual a x2"; calcular um valor γι", em que y1"=x2">>2; calcular um valor y2", em que y2"=x2"+y1"; calcular um valor y3", em que y3"=y1"-x2"; e calcular o valor (x2"*a) mediante subtração de (y3"»1) a partir de (y2"»5); e em que o módulo de transformada inversa calcula um valor (x6"*a) mediante multiplicação de x6" por um valor α e em que calcular um valor (χ6"*β) mediante multiplicação de x6" por um valor β compreende realizar a seguinte seqüência de operações: calcular o valor (χ6"*β) mediante determinação de (χ6"*β) igual a χβ"; calcular um valor Yi''', em que y1'' ' =x6">>2; calcular um valor y2' ' ' , em que y2' "=x6"+y1' " ; calcular um valor y3' ' ' , em que y3'''=y1'''- X6"; e calcular o valor (χ6"*α) mediante subtração de (y3''' >>1) a partir de (y2'''»5).
27. Dispositivo, de acordo com a reivindicação -22, em que os valores xq, χχ, x2, x3, x^, x5, x7, xq' , X1', X2', X3'r X4', X5', X6', X7', x0", X1'', X2'', X3" , x4", x5", x6", x7", X1'", X3'", X5'", X7'", (χ2*α) , (χ6*β), (χ2*β), (χ6*α), (x7" *ε), (χ7"*ξ), (χ3" *γ), (χ3"*δ), (χ5"*δ), (χ5' ' *γ) , (X1" *ξ), e (X1" *ε) são representados utilizando números de ponto fixo que incluem P bits nas porções de mantissa dos números de ponto fixo.
28. Dispositivo, de acordo com a reivindicação 27, em que P é igual a 11.
29. Dispositivo, de acordo com a reivindicação 17, em que o dispositivo compreende uma interface de rede que recebe os dados a partir dos quis a matriz dos coeficientes codificados é derivada.
30. Dispositivo, de acordo com a reivindicação 17, em que o dispositivo compreende um módulo de polarização de coeficiente que adiciona um termo de polarização de ponto médio a um coeficiente DC, em que o termo de polarização de ponto médio é igual a 2 para a potência de 13.
31. Dispositivo, de acordo com a reivindicação 30, em que o dispositivo compreende ainda: um módulo de deslocamento à direita que desloca à direita cada coeficiente na matriz de coeficientes transformados em treze posições para gerar uma matriz de valores de componentes de pixel; e um módulo de reconstrução de pixel que constrói o bloco de pixels mediante incorporação dos valores de componentes de pixel na matriz de valores de componentes de pixel em pixels no bloco de pixels.
32. Dispositivo, de acordo com a reivindicação 17, em que o dispositivo compreende ainda uma unidade de apresentação de midia para exibir o bloco de pixels.
33. Dispositivo, de acordo com a reivindicação -17, em que o módulo de escalonamento escalona os coeficientes codificados sem usar operações de multiplicação ou divisão.
34. Dispositivo compreendendo: mecanismos para receber uma matriz 8x8 de coeficientes codificados; mecanismos para escalonar coeficientes em uma matriz 8x8 de coeficientes codificados mediante um de um fator A, um fator B, um fator C, um fator D, um fator E, um fator F, um fator G, um fator H, um fator I, ou um fator J para produzir uma matriz de coeficientes escalonados, em que A = 2048, B = 1703, C = 2676, D = 2408, E = 1416, F = 2225, G = 2003, H = 3496, I = 3147, e J = 2832; em que os coeficientes escalonados constituem uma matriz de coeficientes escalonados, mecanismos para usar aplicações repetidas de uma transformada unidimensional escalonada de ponto fixo para transformar a matriz de coeficientes escalonados em uma matriz de coeficientes transformados; mecanismos para deslocar à direita os coeficientes transformados na matriz de coeficientes transformados para produzir uma matriz de coeficientes ajustados; e em que cada coeficiente ajustado na matriz de coeficientes ajustados aproxima um valor correspondente em uma matriz de valores que seria produzida mediante aplicação de uma transformada de co-seno discreta inversa bidimensional ideal ("IDCT") à matriz de coeficientes codificados; e mecanismos para produzir um bloco 8x8 de pixels, em que cada pixel no bloco de pixels inclui um valor de componentes de pixel com base em um coeficiente ajustado na matriz de coeficientes ajustados.
35. Dispositivo, de acordo com a reivindicação -34, em que os mecanismos para aplicar repetidamente a transformada unidimensional escalonada de ponto fixo compreendem: mecanismos para aplicar a transformada unidimensional escalonada de ponto fixo a cada vetor de linha da matriz de coeficientes escalonados para produzir uma matriz de coeficientes intermediários; e mecanismos para aplicar a transformada unidimensional escalonada de ponto fixo a cada vetor de coluna da matriz de coeficientes intermediários para produzir uma matriz de coeficientes transformados.
36. Dispositivo, de acordo com a reivindicação 34, em que os mecanismos para produzir o bloco 8x8 de pixels exibem bloco 8x8 de pixels como parte de um quadro de video em uma seqüência de video.
37. Dispositivo, de acordo com a reivindicação -34, em que os mecanismos para produzir o bloco 8x8 de pixels exibem bloco 8x8 de pixels como parte de uma imagem estacionária.
38. Dispositivo, de acordo com a reivindicação -34, em que os mecanismos para escalonar coeficientes compreendem: mecanismos para escalonar um coeficiente na posição [0,0] da matriz de coeficientes codificados pelo fator A; mecanismos para escalonar um coeficiente na posição [0,1] da matriz de coeficientes codificados pelo fator B; mecanismos para escalonar um coeficiente na posição [0,2] da matriz de coeficientes codificados pelo fator C; mecanismos para escalonar um coeficiente na posição [0,3] da matriz de coeficientes codificados pelo fator D; mecanismos para escalonar um coeficiente na posição [0,4] da matriz de coeficientes codificados pelo fator A; mecanismos para escalonar um coeficiente na posição [0,5] da matriz de coeficientes codificados pelo fator D; mecanismos para escalonar um coeficiente na posição [0,6] da matriz de coeficientes codificados pelo fator C; mecanismos para escalonar um coeficiente na posição [0,7] da matriz de coeficientes codificados pelo fator B; mecanismos para escalonar um coeficiente na posição [1,0] da matriz de coeficientes codificados pelo fator B; mecanismos para escalonar um coeficiente na posição [1,1] da matriz de coeficientes codificados pelo fator E; mecanismos para escalonar um coeficiente na posição [1,2] da matriz de coeficientes codificados pelo fator F; mecanismos para escalonar um coeficiente na posição [1,3] da matriz de coeficientes codificados pelo fator G; mecanismos para escalonar um coeficiente na posição [1,4] da matriz de coeficientes codificados pelo fator B; mecanismos para escalonar um coeficiente na posição [1,5] da matriz de coeficientes codificados pelo fator G; mecanismos para escalonar um coeficiente na posição [1,6] da matriz de coeficientes codificados pelo fator F; mecanismos para escalonar um coeficiente na posição [1,7] da matriz de coeficientes codificados pelo fator E; mecanismos para escalonar um coeficiente na posição [2,0] da matriz de coeficientes codificados pelo fator C; mecanismos para escalonar um coeficiente na posição [2,1] da matriz de coeficientes codificados pelo fator F; mecanismos para escalonar um coeficiente na posição [2,2] da matriz de coeficientes codificados pelo fator H; mecanismos para escalonar um coeficiente na posição [2,3] da matriz de coeficientes codificados pelo fator I; mecanismos para escalonar um coeficiente na posição [2,4] da matriz de coeficientes codificados pelo fator C; mecanismos para escalonar um coeficiente na posição [2,5] da matriz de coeficientes codificados pelo fator I; mecanismos para escalonar um coeficiente na posição [2,6] da matriz de coeficientes codificados pelo fator H; mecanismos para escalonar um coeficiente na posição [2,7] da matriz de coeficientes codificados pelo fator F; coeficientes codificados pelo mecanismos para escalonar um coeficiente na posição [3,0] da matriz de coeficientes codificados pelo fator D; mecanismos para escalonar um coeficiente na posição [3,1] da matriz de coeficientes codificados pelo fator G; mecanismos para escalonar um coeficiente na posição [3,2] da matriz de coeficientes codificados pelo fator I; mecanismos para escalonar um coeficiente na posição [3,3] da matriz de coeficientes codificados pelo fator J; mecanismos para escalonar um coeficiente na posição [3,4] da matriz de coeficientes codificados pelo fator D; mecanismos para escalonar um coeficiente na posição [3,5] da matriz de coeficientes codificados pelo fator J; mecanismos para escalonar um coeficiente na posição [3,6] da matriz de coeficientes codificados pelo fator I; mecanismos para escalonar um coeficiente na posição [3,7] da matriz de coeficientes codificados pelo fator G; mecanismos para escalonar um coeficiente na posição [4,0] da matriz de coeficientes codificados pelo fator A; mecanismos para escalonar um coeficiente na posição [4,1] da matriz de coeficientes codificados pelo fator B; mecanismos para escalonar um coeficiente na posição [4,2] da matriz de coeficientes codificados pelo fator C; mecanismos para escalonar um coeficiente na posição [4,3] da matriz de coeficientes codificados pelo fator D; mecanismos para escalonar um coeficiente na posição [4,4] da matriz de coeficientes codificados pelo fator A; mecanismos para escalonar um coeficiente na posição [4,5] da matriz de coeficientes codificados pelo fator D; mecanismos para escalonar um coeficiente na posição [4,6] da matriz de coeficientes codificados pelo fator C; mecanismos para escalonar um coeficiente na posição [4,7] da matriz de coeficientes codificados pelo fator B; mecanismos para escalonar um coeficiente na posição [5,0] da matriz de coeficientes codificados pelo fator D; mecanismos para escalonar um coeficiente na posição [5,1] da matriz de coeficientes codificados pelo fator G; mecanismos para escalonar um coeficiente na posição [5,2] da matriz de coeficientes codificados pelo fator I; mecanismos para escalonar um coeficiente na posição [5,3] da matriz de coeficientes codificados pelo fator J; mecanismos para escalonar um coeficiente na posição [5,4] da matriz de coeficientes codificados pelo fator D; mecanismos para escalonar um coeficiente na posição [5,5] da matriz de coeficientes codificados pelo fator J; mecanismos para escalonar um coeficiente na posição [5,6] da matriz de coeficientes codificados pelo fator I; mecanismos para escalonar um coeficiente na posição [5,7] da matriz de coeficientes codificados pelo fator G; mecanismos para escalonar um coeficiente na posição [6,0] da matriz de coeficientes codificados pelo fator C; mecanismos para escalonar um coeficiente na posição [6,1] da matriz de coeficientes codificados pelo fator F; mecanismos para escalonar um coeficiente na posição [6,2] da matriz de coeficientes codificados pelo fator H; mecanismos para escalonar um coeficiente na posição [6,3] da matriz de coeficientes codificados pelo fator I; mecanismos para escalonar um coeficiente na posição [6,4] da matriz de coeficientes codificados pelo fator C; mecanismos para escalonar um coeficiente na posição [6,5] da matriz de coeficientes codificados pelo fator I; mecanismos para escalonar um coeficiente na posição [6,6] da matriz de coeficientes codificados pelo fator H; mecanismos para escalonar um coeficiente na posição [6,7] da matriz de coeficientes codificados pelo fator F; mecanismos para escalonar um coeficiente na posição [7,0] da matriz de coeficientes codificados pelo fator B; mecanismos para escalonar um coeficiente na posição [7,1] da matriz de coeficientes codificados pelo fator E; mecanismos para escalonar um coeficiente na posição [7,2] da matriz de coeficientes codificados pelo fator F; mecanismos para escalonar um coeficiente na posição [7,3] da matriz de coeficientes codificados pelo fator G; mecanismos para escalonar um coeficiente na posição [7,4] da matriz de coeficientes codificados pelo fator B; mecanismos para escalonar um coeficiente na posição [7,5] da matriz de coeficientes codificados pelo fator G; mecanismos para escalonar um coeficiente na posição [7,6] da matriz de coeficientes codificados pelo fator F; mecanismos para escalonar um coeficiente na posição [7,7] da matriz de coeficientes codificados pelo fator E.
39. Dispositivo, de acordo com a reivindicação -38, em que os mecanismos para aplicar a transformada compreendem: mecanismos para calcular um valor de x0' mediante adição de Xo e x4; mecanismos para calcular um valor de X4' mediante adição de x0 e -x4; mecanismos para calcular um valor de (x2*α) mediante multiplicação de x2 por um valor a; mecanismos para calcular um valor de (x6*β) mediante multiplicação de x6 por um valor β; mecanismos para calcular um valor de (χ2*β) mediante multiplicação de x2 pelo valor β; mecanismos para calcular um valor de (x6*a) mediante multiplicação de X6 por um valor a; mecanismos para calcular um valor de x2' mediante adição de (x2*a) e -(χ6*β) ; mecanismos para calcular um valor de x6' mediante adição de (x6*α) e (χ2*β) ; mecanismos para calcular um valor de x0" mediante adição de X0' e X6', mecanismos para calcular um valor de x4" mediante adição de X4 ' e x2' ; mecanismos para calcular um valor de x2" mediante adição de X4' e -x2' ; mecanismos para calcular um valor de x6" mediante adição de X0' e -χε' ; mecanismos para calcular um valor de X7' mediante adição de X1 e -χη; mecanismos para calcular um valor de Xi' mediante adição de X1 e x7; mecanismos para calcular um valor de x3' mediante multiplicação de x3 e raiz quadrada de dois; mecanismos para calcular um valor de x5' mediante multiplicação de x5 e raiz quadrada de dois; mecanismos para calcular um valor de X7" mediante adição de x7' e X5' ; mecanismos para calcular um valor de x3" mediante adição de X1' e -X3'; mecanismos para calcular um valor de x5" mediante adição de X7' e -X5' ; mecanismos para calcular um valor de X1" mediante adição de x3' e X1'; mecanismos para calcular um valor de (χ7"*ε) mediante multiplicação de X7" e um valor ε; mecanismos para calcular um valor de (χ7"*ξ) mediante multiplicação de X7'' e um valor ξ; mecanismos para calcular um valor de (x3"*y) mediante multiplicação de x3" e um valor γ; mecanismos para calcular um valor de (x3"*δ) mediante multiplicação de X3'' e um valor δ; mecanismos para calcular um valor de (x5" *δ) mediante multiplicação de X51' e o valor δ; mecanismos para calcular um valor de (x5"*γ) mediante multiplicação de X5" e o valor γ; mecanismos para calcular um valor de (x1" *ξ) mediante multiplicação de xl'' e o valor ξ; mecanismos para calcular um valor de (x1"*ε) mediante multiplicação de X1'' e o valor ε; mecanismos para calcular um valor de x7' ' ' mediante adição de (x7''*ε) e -(x1" *ξ) ; mecanismos para calcular um valor de X3' ' ' mediante adição de (x3"*γ) e ~(x5"*δ); mecanismos para calcular um valor de x5' mediante adição de (x5"*y) e (x3"*δ) ; mecanismos para calcular um valor de Xi' mediante adição de (x1"*ε) e (x7"*ξ) ; mecanismos para calcular um valor de X0 mediante adição de x7''' e x0''; mecanismos para calcular um valor de X1 mediante adição de X4'' e x5'''; mecanismos para calcular um valor de X2 mediante adição de x2'' e X3'''; mecanismos para calcular um valor de X3 mediante adição de x6'' e x7''' ; mecanismos para calcular um valor de X4 mediante adição de Χ6'' e -x1'''; mecanismos para calcular um valor de X5 mediante adição de X2'' e -X3' ' ' ; mecanismos para calcular um valor de X6 mediante adição de X4'' e -X5'''; e mecanismos para calcular um valor de X7 mediante adição de X0'' e -X1''' ; em que χ1, x2, Χ3, X5, e X7 são coeficientes em um vetor de linhas ou em um vetor de colunas, em que X1, X2, X3, X4, X5, Xe, e X7 são valores de saida da transformada; e em que α = 53/128, β = 1, γ = 151/128, δ = 15/32, ε = 1, e ξ = 171/256.
40. Dispositivo, de acordo com a reivindicação 39, em que os mecanismos para aplicar uma transformada aplicam a transformada à matriz de coeficientes sem usar operações de multiplicação ou divisão.
41. Dispositivo, de acordo com a reivindicação 40, em que os mecanismos para calcular o valor (χ1*ξ) por X1 e o valor ξ compreendem realizar a seguinte seqüência de operações aritméticas: mecanismos para calcular um valor y1, em que y1 = (x1»3) -x1; mecanismos para calcular um valor y2, em que y2 = x1 + (y1»3); e mecanismos para calcular o valor (χ1*ξ) mediante subtração de (y2>>2); a partir de y2; e em que calcular o valor (χ7*ξ) por x7 e o valor ξ compreende realizar a seguinte seqüência de operações aritméticas: mecanismos para calcular um valor y1' , em que y1' = (X7>>3)-X7; mecanismos para calcular um valor y2' , em que y2' = X7 + (y1'>>3) ; e mecanismos para calcular o valor (χ7*ξ) mediante subtração de (y2'>>2); a partir de y2' ; e em que os mecanismos para calcular o valor (χ1"*ε) mediante multiplicação de X1" e o valor - e em que os mecanismos para calcular o valor (Χ1"*ξ) por X1" e o valor ξ compreendem: mecanismos para calcular um valor yi", em que γχ" = (x1>>3)-x1; mecanismos para calcular um valor y2", em que y2" = x1" + (y1'''>>3); e mecanismos para calcular o valor (χ7*ξ) mediante subtração de (y2">>2); a partir de y2"; e e em que os mecanismos para calcular o valor (χ7"*ε) mediante multiplicação de x7" e o valor - e em que os mecanismos para calcular o valor (χ7"*ξ) por X1" e o valor ξ compreendem: mecanismos para calcular um valor yx' ' ' , em que Y1'" = (x7">>3) -x7"; mecanismos para calcular um valor y2' ' ' , em que Y2'" = x7" + (Y1"'>>3); e mecanismos para calcular o valor (χ7*ξ) mediante subtração de (γ2" '>>2) ; a partir de y2'' ' .
42. Dispositivo, de acordo com a reivindicação 40, em que os mecanismos para calcular um valor (χ3*γ) mediante multiplicação de X3 e um valor γ e em que os mecanismos para calcular um valor (Χ3*δ) mediante multiplicação de X3 e um valor δ compreende: mecanismos para calcular um valor ylf em que Yi=X3- (X>>4 ) ; mecanismos para calcular um valor y2, em que y2=y1+ (x3»7) ; mecanismos para calcular o valor (χ3*δ) mediante deslocamento à direita de y2 por 2; e mecanismos para calcular o valor (χ3*γ) mediante adição de y1 e y2; e em que os mecanismos para calcular um valor (χ5*δ) mediante multiplicação de X5 e um valor δ e em que os mecanismos para calcular um valor (xs*y) mediante multiplicação de X5 e um valor γ compreendem: mecanismos para calcular um valor yx' , em que y1'=x5- (x5»4) ; mecanismos para calcular um valor y2' , em que y2'=y1' + (x5»V) ; mecanismos para calcular o valor (χ5*δ) mediante deslocamento à direita de y2 por 2; e mecanismos para calcular o valor (x5*γ) mediante adição de y1' e y2' ; e em que os mecanismos para calcular um valor (χ3"*γ) mediante multiplicação de x3" e um valor γ e em que os mecanismos para calcular o valor (χ3"*δ) mediante multiplicação de x3" e um valor δ compreende: mecanismos para calcular um valor y1 ' , em que y1"=x3'' - (x3" »4) ; mecanismos para calcular um valor y2'', em que y2"=y1" + (x3"»7) ; mecanismos para calcular o valor (x3''*δ) mediante deslocamento à direita de y2 por 2; e mecanismos para calcular o valor (x3' ' *γ) mediante adição de γι e y2; e em que os mecanismos para calcular um valor (χ5"*δ) mediante multiplicação de x5" e um valor δ e em que os mecanismos para calcular o valor (Χ5"*γ) mediante multiplicação de x5" e um valor γ compreendem: mecanismos para calcular um valor y1''' , em que y1' "=X5"- (x5"»4) ; mecanismos para calcular um valor y2' ' ' , em que y2' ' ' =y1' " + (x5"»7) ; mecanismos para calcular o valor (χ5"*δ) mediante deslocamento à direita de Yz''' por 2; e mecanismos para calcular o valor (χ5"*γ) mediante adição de yi' ' ' e y2' ' ' .
43. Dispositivo, de acordo com a reivindicação -40, em que os mecanismos para calcular o valor (x2*a) mediante multiplicação de x2 por um valor α e em que os mecanismos para calcular o valor (χ2*β) mediante multiplicação de x2 pelo valor β compreendem: mecanismos para calcular o valor (χ2*β) mediante determinação de (χ2*β) igual a x2; mecanismos para calcular um valor ylf em que y1=x2>>2 ; mecanismos para calcular um valor y2, em que y2=x2+y1; mecanismos para calcular um valor y3, em que Y3=y1-X2; e mecanismos para calcular o valor (x2*a) mediante subtração de (y3>>l) a partir de (y2>>5); e em que os mecanismos para calcular o valor (x6*a) mediante multiplicação de x6 por um valor α e em que os mecanismos para calcular o valor (Χ6*β) mediante multiplicação de X6 pelo valor β compreende: mecanismos para calcular o valor (χε*β) mediante determinação de (χ6*β) igual a X6; mecanismos para calcular um valor yx' , em que yx' =x6>>2 ; mecanismos para calcular um valor y2' , em que y2' =x6+Y1' ; mecanismos para calcular um valor y3' , em que Y3'=y1'-X6; e mecanismos para calcular o valor (x6*a) mediante subtração de (y3'»l) a partir de (y2'>>5); e em que os mecanismos para calcular o valor (x2"*a) mediante multiplicação de x2" por um valor α e em que os mecanismos para calcular um valor (χ2"*β) mediante multiplicação de x2" pelo valor β compreendem: mecanismos para calcular o valor (χ2"*β) mediante determinação de (χ2"*β) igual a x2"; mecanismos para calcular um valor yx", em que yx=x2">>2; mecanismos para calcular um valor y2", em que y2"=x2"+y1"; mecanismos para calcular um valor y3", em que y3"=y1"-x2"; e mecanismos para calcular o valor (x2"*a) mediante subtração de (y3"»1) a partir de (y2">>5) ; e em que os mecanismos para calcular o valor (x6"*a) mediante multiplicação de x6" por um valor α e em que os mecanismos para calcular um valor (χ6"*β) mediante multiplicação de x6" pelo valor β compreendem realizar a seguinte seqüência de operações: mecanismos para calcular o valor (χ6"*β) mediante determinação de (χ6"*β) igual a x6"; mecanismos para calcular um valor y1' " , em que y1' "=x6"»2; mecanismos para calcular um valor y2' " , em que <formula>formula see original document page 112</formula> mecanismos para calcular um valor y3'" , em que y3"'=y1"'-X6"; e mecanismos para calcular o valor (x6"*a) mediante subtração de (y3'">>l) a partir de (y2'''»5).
44. Dispositivo, de acordo com a reivindicação 39, em que os valores x0, Χι, X2, X3, x4, x5, x6, X7, X0' r x1', x2', x3', x4', X5', X6', X7', X0'', X1'' , X2' ' , X3' ' , x4", x5", x6", X7", X1'", X3'", X5'", X7'", (x2*a), (χ6*β), (χ2*β), (χ6*α) , (X7'' *ε) , (X7" *ξ), (χ3"*γ), (χ3" *δ), (χ5" *δ), (χ5" *γ), (χι"*ξ), e (x1" *ε) são representados utilizando números de ponto fixo que incluem P bits nas porções de mantissa dos números de ponto fixo.
45. Dispositivo, de acordo com a reivindicação 44, em que P é igual a 11.
46. Dispositivo, de acordo com a reivindicação 34, em que o dispositivo compreende mecanismos para receber um arquivo de mídia que inclui os dados a partir dos quais a matriz dos coeficientes codificados é derivada.
47. Dispositivo, de acordo com a reivindicação -34, em que o dispositivo compreende mecanismos para adicionar um termo de polarização de ponto médio a um coeficiente DC, em que o termo de polarização de ponto médio é igual a 2 para a potência de 13.
48. Dispositivo, de acordo com a reivindicação -34, em que o dispositivo compreende ainda: mecanismos para deslocar à direita cada coeficiente na matriz de coeficientes transformados em treze posições para gerar uma matriz de valores de componentes de pixel; e mecanismos para construir o bloco de pixels mediante incorporação de valores de componentes de pixel na matriz de valores de componentes de pixel em pixels no bloco de pixels.
49. Dispositivo, de acordo com a reivindicação -34, em que o dispositivo compreende ainda mecanismos para exibir o bloco de pixels.
50. Dispositivo, de acordo com a reivindicação -34, em que os mecanismos para escalonar os coeficientes codificados escalonam os coeficientes codificados sem usar operações de multiplicação ou divisão.
51. Meio legível por computador compreendendo instruções, as instruções quando executadas fazem com que um processador programável: receba uma matriz 8x8 de coeficientes codificados; escalone cada coeficiente em uma matriz 8x8 de coeficientes codificados mediante um de um fator A, um fator B, um fator C, um fator D, um fator E, um fator F, um fator G, um fator H, um fator I, ou um fator J para produzir uma matriz de coeficientes escalonados, em que A = 2048, B = 1703, C = 2676, D = 2408, E = 1416, F = 2225, G = 2003, H = 3496, I = 3147, e J = 2832; use aplicações repetidas de uma transformada unidimensional escalonada de ponto fixo para transformar a matriz de coeficientes escalonados em uma matriz de coeficientes transformados, desloque à direita coeficientes transformados de na matriz de coeficientes transformados para produzir uma matriz de coeficientes ajustados; em que cada coeficiente ajustado na matriz de coeficientes ajustados aproxima um valor correspondente em uma matriz de valores que seria produzida mediante aplicação de uma transformada de co-seno discreta inversa bidimensional ideal ("IDCT") à matriz de coeficientes codificados; e produza sinais que fazem com que uma unidade de apresentação apresente um bloco 8x8 de pixels, em que cada pixel no bloco de pixels inclui um valor de componente de pixel com base em um coeficiente ajustado na matriz de coeficientes ajustados.
52. Meio legível por computador, de acordo com a reivindicação 51, em que as instruções que fazem com que o processador programável use aplicações repetidas da transformada unidimensional escalonada de ponto fixo fazem com que o processador programável: aplique a transformada a cada vetor de linha da matriz de coeficientes escalonados para produzir uma matriz de coeficientes intermediários; aplique a transformada a cada vetor de coluna da matriz de coeficientes intermediários para produzir uma matriz de coeficientes transformados.
53. Meio legível por computador, de acordo com a reivindicação 51, em que as instruções que fazem com que o processador programável produza sinais que fazem com que a unidade de apresentação apresente o bloco 8x8 de pixels faz com que o processador programável produza sinais que fazem com que a unidade de apresentação apresente o bloco 8x8 de pixels como parte de um quadro de video em uma seqüência de video.
54. Meio legível por computador, de acordo com a reivindicação 51, em que as instruções que fazem com que o processador programável produza sinais que fazem com que a unidade de apresentação apresente o bloco 8x8 de pixels faz com que o processador programável produza sinais que fazem com que a unidade de apresentação apresente o bloco 8x8 de pixels como parte de uma imagem estática.
55. Meio legível por computador, de acordo com a reivindicação 51, em que as instruções que fazem com que o processador escalone os coeficientes na matriz de coeficientes fazem com que o processador: escalone um coeficiente na posição [0,0] da matriz de coeficientes codificados pelo fator A; escalone um coeficiente na posição [0,1] da matriz de coeficientes codificados pelo fator B; escalone um coeficiente na posição [0,2] da matriz de coeficientes codificados pelo fator C; escalone um coeficiente na posição [0,3] da matriz de coeficientes codificados pelo fator D; escalone um coeficiente na posição [0,4] da matriz de coeficientes codificados pelo fator A; escalone um coeficiente na posição [0,5] da matriz de coeficientes codificados pelo fator D; escalone um coeficiente na posição [0,6] da matriz de coeficientes codificados pelo fator C; escalone um coeficiente na posição [0,7] da matriz de coeficientes codificados pelo fator B; escalone um coeficiente na posição [1,0] da matriz de coeficientes codificados pelo fator B; escalone um coeficiente na posição [1,1] da matriz de coeficientes codificados pelo fator E; escalone um coeficiente na posição [1,2] da matriz de coeficientes codificados pelo fator F; escalone um coeficiente na posição [1,3] da matriz de coeficientes codificados pelo fator G; escalone um coeficiente na posição [1,4] da matriz de coeficientes codificados pelo fator B; escalone um coeficiente na posição [1,5] da matriz de coeficientes codificados pelo fator G; escalone um coeficiente na posição [1,6] da matriz de coeficientes codificados pelo fator F; escalone um coeficiente na posição [1,7] da matriz de coeficientes codificados pelo fator E; escalone um coeficiente na posição [2,0] da matriz de coeficientes codificados pelo fator C; escalone um coeficiente na posição [2,1] da matriz de coeficientes codificados pelo fator F; escalone um coeficiente na posição [2,2] da matriz de coeficientes codificados pelo fator H; escalone um coeficiente na posição [2,3] da matriz de coeficientes codificados pelo fator I; escalone um coeficiente na posição [2,4] da matriz de coeficientes codificados pelo fator C; escalone um coeficiente na posição [2,5] da matriz de coeficientes codificados pelo fator I; escalone um coeficiente na posição [2,6] da matriz de coeficientes codificados pelo fator H; escalone um coeficiente na posição [2,7] da matriz de coeficientes codificados pelo fator F; escalone um coeficiente na posição [3,0] da matriz de coeficientes codificados pelo fator D; escalone um coeficiente na posição [3,1] da matriz de coeficientes codificados pelo fator G; escalone um coeficiente na posição [3,2] da matriz de coeficientes codificados pelo fator I; escalone um coeficiente na posição [3,3] da matriz de coeficientes codificados pelo fator J; escalone um coeficiente na posição [3,4] da matriz de coeficientes codificados pelo fator D; escalone um coeficiente na posição [3,5] da matriz de coeficientes codificados pelo fator J; escalone um coeficiente na posição [3,6] da matriz de coeficientes codificados pelo fator I; escalone um coeficiente na posição [3,7] da matriz de coeficientes codificados pelo fator G; escalone um coeficiente na posição [4,0] da matriz de coeficientes codificados pelo fator A; escalone um coeficiente na posição [4,1] da matriz de coeficientes codificados pelo fator B; escalone um coeficiente na posição [4,2] da matriz de coeficientes codificados pelo fator C; escalone um coeficiente na posição [4,3] da matriz de coeficientes codificados pelo fator D; escalone um coeficiente na posição [4,4] da matriz de coeficientes codificados pelo fator A; escalone um coeficiente na posição [4,5] da matriz de coeficientes codificados pelo fator D; escalone um coeficiente na posição [4,6] da matriz de coeficientes codificados pelo fator C; escalone um coeficiente na posição [4,7] da matriz de coeficientes codificados pelo fator B; escalone um coeficiente na posição [5,0] da matriz de coeficientes codificados pelo fator D; escalone um coeficiente na posição [5,1] da matriz de coeficientes codificados pelo fator G; escalone um coeficiente na posição [5,2] da matriz de coeficientes codificados pelo fator I; escalone um coeficiente na posição [5,3] da matriz de coeficientes codificados pelo fator J; escalone um coeficiente na posição [5,4] da matriz de coeficientes codificados pelo fator D; escalone um coeficiente na posição [5,5] da matriz de coeficientes codificados pelo fator J; escalone um coeficiente na posição [5,6] da matriz de coeficientes codificados pelo fator I; escalone um coeficiente na posição [5,7] da matriz de coeficientes codificados pelo fator G; escalone um coeficiente na posição [6,0] da matriz de coeficientes codificados pelo fator C; escalone um coeficiente na posição [6,1] da matriz de coeficientes codificados pelo fator F; escalone um coeficiente na posição [6,2] da matriz de coeficientes codificados pelo fator H; escalone um coeficiente na posição [6,3] da matriz de coeficientes codificados pelo fator I; escalone um coeficiente na posição [6,4] da matriz de coeficientes codificados pelo fator C; escalone um coeficiente na posição [6,5] da matriz de coeficientes codificados pelo fator I; escalone um coeficiente na posição [6,6] da matriz de coeficientes codificados pelo fator H; escalone um coeficiente na posição [6,7] da matriz de coeficientes codificados pelo fator F; escalone um coeficiente na posição [7, 0] da matriz de coeficientes codificados pelo fator B; escalone um coeficiente na posição [7, 1] da matriz de coeficientes codificados pelo fator E; escalone um coeficiente na posição [7, 2] da matriz de coeficientes codificados pelo fator F; escalone um coeficiente na posição [7, 3] da matriz de coeficientes codificados pelo fator G; escalone um coeficiente na posição [7, 4] da matriz de coeficientes codificados pelo fator B; escalone um coeficiente na posição [7, 5] da matriz de coeficientes codificados pelo fator G; escalone um coeficiente na posição [7, 6] da matriz de coeficientes codificados pelo fator F; escalone um coeficiente na posição [7, 7] da matriz de coeficientes codificados pelo fator E.
56. Meio legível por computador, de acordo com a reivindicação 55, em que as instruções que fazem com que o processador aplique a transformada, seja a um vetor de linha ou a um vetor de coluna, fazem com que o processador: calcule um valor de X01 mediante adição de x0' e X4; calcule um valor de X4' mediante adição de X0 e - X4; calcule um valor de (x2*a) mediante multiplicação de X2 por um valor a; calcule um valor de (χ6*β) mediante multiplicação de X6 por um valor β; calcule um valor de (χ2*β) mediante multiplicação de X2 pelo valor β; calcule um valor de (x6*a) mediante multiplicação de X6 por um valor a; calcule um valor de x2' mediante adição de (x2*a) e -(x6*P); calcule um valor de X6' mediante adição de {xe*a) e (χ2*β) ; calcule um valor de x0" mediante adição de x01 e Xe', calcule um valor de x4" mediante adição de x4' e X2'; calcule um valor de x2" mediante adição de x41 e -x2'; calcule um valor de x6" mediante adição de x0' e -xe'; calcule um valor de x7' mediante adição de Xi e - X7; calcule um valor de Xi' mediante adição de Xi e X7; calcule um valor de x31 mediante multiplicação de X3 e raiz quadrada de dois; calcule um valor de X51 mediante multiplicação de X5 e raiz quadrada de dois; calcule um valor de X7" mediante adição de X7' e X5'; calcule um valor de x3" mediante adição de Xi' e -X3*; calcule um valor de x5" mediante adição de x7' e -X5' ; calcule um valor de Χι" mediante adição de x31 e X1' ; calcule um valor de (χ7"*ε) mediante multiplicação de X7" e um valor ε; calcule um valor de (χ7"*ξ) mediante multiplicação de X7' 1 e um valor ξ; calcule um valor de (Χ3π*γ) mediante multiplicação de X3" e um valor γ; calcule um valor de (χ3"*δ)mediante multiplicação de X31 1 e um valor δ; calcule um valor de (x5" *δ) mediante multiplicação de x51' e o valor δ; calcule um valor de (xs"*y) mediante multiplicação de X5" e o valor γ; calcule um valor de (χι" *ξ) mediante multiplicação de xl'1 e o valor ξ; calcule um valor de (χι"*ε) mediante multiplicação de xi" e o valor ε; calcule um valor de X7' ' ' mediante adição de (X7'' *ε) e - (X1" *ξ); calcule um valor de x3' ' ' mediante adição de (χ3"*γ) e -(χ5"*δ); calcule um valor de x5''' mediante adição de (χ5"*γ) e (χ3"*δ); calcule um valor de X1''' mediante adição de (χ1"*ε) e (χ7"*ξ); calcule um valor de X0 mediante adição de X7''' e xo''; calcule um valor de X1 mediante adição de X4'' e X5'''; calcule um valor de X2 mediante adição de X21 1 e X3'''; calcule um valor de X3 mediante adição de X6' ' e X7''' ; calcule um valor de X4 mediante adição de X61' e -xl'''; calcule um valor de X5 mediante adição de x2' ' e -X3''' ; calcule um valor de X6 mediante adição de x4' ' e -X5' " ; e calcule um valor de X7 mediante adição de X0' ' e -χ1''' ; em que X1, x2, X3, X4, X5, Χδ, e x7 são coeficientes em um vetor de linhas ou em um vetor de colunas, em que X1, X2, X3, X4, X5, X6, e X7 são valores de saida da transformada; e em que α = 53/128, β = 1, γ = 151/128, δ = 15/32, ε = 1, e ξ = 171/256.
57. Meio legível por computador, de acordo com a reivindicação 56, em que as instruções fazem com que o processador use aplicações repetidas de transformada fazem com que o processador aplique a transformada aos coeficientes em um dos vetores de linha ou um dos vetores de coluna sem usar operações de multiplicação ou divisão.
58. Meio legível por computador, de acordo com a reivindicação 57, em que as instruções fazem com que o processador programável calcule o valor (χι*ξ) por X1 e o valor ξ mediante ação de fazer com que o processador programável: calcule um valor ylr em que yi = (x1»3)-x1; calcule um valor y2, em que Y2 = Xi+ (yi»3) ; e calcule o valor (χι*ξ) mediante subtração de (y2»2); a partir de y2; e em que as instruções fazem com que o processador programável calcule o valor (χ7*ξ) por X7 e o valor ξ mediante ação de fazer com que o processador programável: calcule um valor γχ ' , em que γ χ' = (x7>>3)-x7; calcule um valor y2' , em que y2' =X7+ (y1'»3); e calcule o valor (χ7*ξ) mediante subtração de (y2'»2); a partir de y2' ; e em que as instruções fazem com que o processador programável calcule um valor (χ1"*ε) mediante multiplicação de X1" e o valor ε e em que as instruções fazem com que o processador programável calcule o valor (χι"*ξ) por Xi" e o valor ξ mediante ação de fazer com que o processador programável: calcule um valor yi ", em que yi" = (xi"»3)-Xi"; calcule um valor y2", em que y2" = Xi" + (yi">>3) ; e calcule o valor (χι"*ξ) mediante subtração de (Y2"»2) ; a partir de y2"; e em que as instruções fazem com que o processador programável calcule um valor (χ7"*ε) mediante multiplicação de x7" e o valor ε e em que as instruções fazem com que o processador programável calcule o valor (χ7"*ξ) por x7" e o valor ξ mediante ação de fazer com que o processador programável: calcule um valor yx ' ' ' , em que Y1''' = (x7"»3)- x7"; calcule um valor y2' ' ' , em que y2' ' ' = x7" + (y1' ' ' »3) ; e calcule o valor (χ7"*ξ) mediante subtração de (y2"'»2); a partir de y2" ' .
59. Meio legível por computador, de acordo com a reivindicação 58, em que as instruções fazem com que o processador programável calcule um valor (x3*γ) mediante multiplicação de X3 e um valor γ e em que as instruções fazem com que o processador programável calcule um valor (χ3*δ) mediante multiplicação de X3 e um valor δ mediante ação de fazer com que o processador programável: calcule um valor y1, em que y1=x3- (x3»4) ; calcule um valor y2, em que y2=yi+ (x3»7) ; calcule o valor (χ3*δ) mediante deslocamento à direita de y2 por 2; e calcule o valor (χ3*γ) mediante adição de yi e y2; e em que as instruções fazem com que o processador programável calcule um valor (χ5*δ) mediante multiplicação de X5 e um valor δ e em que as instruções fazem com que o processador programável calcule um valor (χ5*γ) mediante multiplicação de x5 e um valor γ mediante ação de fazer com que o processador programável: calcule um valor y1', em que y1' =X5- (x5>>4) ; calcule um valor y2', em que y2' =yi' + (x5>>7) ; calcule o valor (χ5*δ) mediante deslocamento à direita de y2' por 2; e calcule o valor (χ5*γ) mediante adição de y1' e Y2' ; e em que as instruções fazem com que o processador programável calcule um valor (χ3"*γ) mediante multiplicação de x3" e um valor γ e em que as instruções fazem com que o processador programável calcule um valor (χ3"*δ) mediante multiplicação de x3" e um valor δ mediante ação de fazer com que o processador programável: calcule um valor γ1", em que y1"=x3"- (x3"»4) ; calcule um valor y2", em que y2"=y1"+(x3"»7) ; calcule o valor (χ3*δ) mediante deslocamento à direita de y2 por 2; e calcule o valor (x3"*y) mediante adição de γλ e Y2' e em que as instruções fazem com que o processador programável calcule um valor (χ5"*δ) mediante multiplicação de x5" e um valor δ e em que as instruções fazem com que o processador programável calcule um valor (χ5"*γ) mediante multiplicação de x5" e um valor γ mediante ação de fazer com que o processador programável: calcule um valor Y1''' , em que yi' ' ' =X5"- (x5">>4) ; calcule um valor y2' ' ' , em que y2' "=y1' " + (X5"»7) ; calcule o valor (χ5"*δ) mediante deslocamento à direita de y2' ' ' por 2; e calcule o valor (χ5"*γ) mediante adição de yi' ' ' e ,,III Y2
60. Meio legível por computador, de acordo com a reivindicação 58, em que as instruções fazem com que o processador programável calcule um valor (x2*a) mediante multiplicação de X2 por um valor α e em que as instruções fazem com que o processador programável calcule um valor (χ2*β) mediante multiplicação de x2 por um valor β mediante ação de fazer com que o processador programável: calcule o valor (χ2*β) mediante determinação de (χ2*β) igual a x6; calcule um valor yx, em que yi=x2»2; calcule um valor y2, em que y2=x2+y1; calcule um valor y3, em que y3=y1-x2; e calcule o valor (x2*a) mediante subtração de (y3>>1) a partir de (y2>>5); e em que as instruções fazem com que o processador programável calcule um valor (x6*a) mediante multiplicação de X6 por um valor α e em que as instruções fazem com que o processador programável calcule um valor (χε*β) mediante multiplicação de x6 pelo valor β mediante ação de fazer com que o processador programável: calcule o valor (χ6*β) mediante determinação de (Χ6*β) igual a X6; calcule um valor y1', em que y1'=x6>>2; calcule um valor y2', em que y2'=X6+y1'; calcule um valor y3', em que y3'=y1'-X6; e calcule o valor (X6*a) mediante subtração de (y3'»1) a partir de (y2'»5); e em que as instruções fazem com que o processador programável calcule um valor (x2"*a) mediante multiplicação de x2" por um valor α e em que as instruções fazem com que o processador programável calcule um valor (χ2"*β) mediante multiplicação de x2" por um valor β mediante ação de fazer com que o processador programável: calcule o valor (χ2"*β) mediante determinação de (χ2"*β) igual a x2"; calcule um valor yi", em que yi"=x2">>2; calcule um valor y2", em que y2"=x2"+y1"; calcule um valor y3", em que y3"=yi"-x2"; e calcule o valor (x2"*a) mediante subtração de (y3"»1) a partir de (y2">>5); e em que as instruções fazem com que o processador programável calcule um valor (x6"*a) mediante multiplicação de x6" por um valor α e em que as instruções fazem com que o processador programável calcule um valor (χ6"*β) mediante multiplicação de x6" por um valor β mediante ação de fazer com que o processador programável: calcule o valor (χ6"*β) mediante determinação de (χ6"*β) igual a x6"; calcule um. valor yi'" , em que y1'"=x6"»2; calcule um valor y2' ' ' , em que y2' ' ' =x6"+y1' ; calcule um valor y3"', em que y3' ' ' =Y1' ' ' -x6"; e calcule o valor (x6"*a) mediante subtração de (y3'"»l) a partir de (y2'"»5).
61. Meio legível por computador, de acordo com a reivindicação 56, em que os valores x0, x1, x2, x3, x4, x5, x6, x7, X0', X1', X2' , X3', X4', X5', X6', χ7', x0", x1", x2", x3", x4", x5", x6", X7", X1'", X3'", X5'", x7"', (χ2*α) , (χ6*β), (χ2*β), (χ6*α) , (χ7"*ε), (χ7"*ξ), (χ3" *γ) , (χ3"*δ), (χ5' ' *δ) , (χ5" *γ), (X1" *ξ) , e (χι" *ε) são representados utilizando números de ponto fixo que incluem P bits nas porções de mantissa dos números de ponto fixo.
62. Meio legível por computador, de acordo com a reivindicação 61, em que P é igual a 11.
63. Meio legível por computador, de acordo com a reivindicação 51, em que as instruções adicionalmente fazem com que o processador receba um fluxo de bits que inclui a matriz dos coeficientes codificados.
64. Meio legível por computador, de acordo com a reivindicação 51, em que as instruções adicionalmente fazem com que o processador adicione um termo de polarização de ponto médio a um coeficiente DC da matriz, em que o termo de polarização de ponto médio é igual a 2 para a potência de 13.
65. Meio legível por computador, de acordo com a reivindicação 51, em que as instruções adicionalmente fazem com que o processador: desloque à direita cada coeficiente na matriz de coeficientes transformados em treze posições para gerar uma matriz de valores de componentes de pixel; e construa o bloco de pixels mediante incorporação de valores de componentes de pixel na matriz de valores de componentes de pixel em pixels no bloco de pixels.
66. Meio legível por computador, de acordo com a reivindicação 51, em que as instruções que fazem com que o processador escalone os coeficientes codificados mediante a ação de fazer com que o processador escalone os coeficientes na matriz de coeficientes codificados sem usar operações de multiplicação ou divisão.
BRPI0712996-3A 2006-06-26 2007-06-26 aproximações eficientes para ponto fixo de transformadas de co-seno discretas, diretas e inversas BRPI0712996A2 (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/072162 WO2008002942A2 (en) 2006-06-26 2007-06-26 Efficient fixed-point approximations of forward and inverse discrete cosine transforms

Publications (1)

Publication Number Publication Date
BRPI0712996A2 true BRPI0712996A2 (pt) 2012-04-17

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 Before (1)

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

Country Status (1)

Country Link
BR (2) BRPI0712997A2 (pt)

Also Published As

Publication number Publication date
BRPI0712997A2 (pt) 2012-10-09

Similar Documents

Publication Publication Date Title
US8571340B2 (en) Efficient fixed-point approximations of forward and inverse discrete cosine transforms
US8606023B2 (en) Reduction of errors during computation of inverse discrete cosine transform
RU2419855C2 (ru) Снижение ошибок в ходе вычисления обратного дискретного косинусного преобразования
CA2654116C (en) Efficient fixed-point approximations of forward and inverse discrete cosine transforms
RU2417423C2 (ru) Эффективные аппроксимации с фиксированной запятой прямого и обратного дискретных косинусных преобразований
BRPI0712996A2 (pt) aproximações eficientes para ponto fixo de transformadas de co-seno discretas, diretas e inversas

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 5A ANUIDADE.

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

Free format text: NAO APRESENTADA A GUIA DE CUMPRIMENTO DE EXIGENCIA. REFERENTE A 5A 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 19/625 (2014.01)