segunda-feira, 20 de fevereiro de 2012

Informação e Ruído Parte 1: A compressão

A forma de se ouvir música mudou muito, com a introdução da gravação digital (primeiramente ainda prensada em vinil), seguida da reprodução digital em discos ópticos, e mais recentemente da distribuição sem mídia, muitas vezes executada em dispositivos portáteis, e geralmente codificada em arquivos de áudio com algum tipo de compressão.

Toda esta mudança é consequência de avanços e de decisões técnicas que afetam o resultado geral. O quanto este resultado é bom ou ruim, como em tudo que envolve apreciação, está aberto a um debate eterno. Mas, se o debate não pode e não deve ser terminado, podemos pelo menos discutir argumentos compatíveis com os conceitos técnicos envolvidos, e tentar separar o que é uma opção pessoal do que é a  verdade necessária. 

O assunto é complexo, e deve ser atacado pelas beiradas. Uma das beiradas mais interessantes tem a ver com a compressão de dados, que torna os arquivos digitais menores. Mesmo entre os  que não têm problema com a digitalização do áudio, a compressão em formatos como o MP3 é alvo de criticas. Existem argumentos corretos que suportam estas criticas, mas eu gostaria de discutir primeiramente um argumento frequente, e errado, mais ou menos nesta linha: "Um arquivo MP3 é 10 vezes menor do que o arquivo WAV (formato do CD). Não é matematicamente óbvio que, para chegar a esta taxa de compressão, alguma informação foi perdida?" A resposta é: não, isto não é óbvio. Na verdade, este é um bom exemplo de como nem toda frase que contém números ancora-se em uma certeza matemática.

A princípio, não é possível dizer, apenas pela taxa de compressão, o que foi perdido entre o arquivo original e o resultante. Curiosamente, esta perda pode ter sido até zero --- rigorosamente zero. Não é o caso do MP3 e de outros formatos de áudio comprimido, que de fato introduzem perdas. Mas a compressão sem perdas é interessante o bastante para fazermos um desvio.

Pode-se então manipular um arquivo, reduzir significativamente seu tamanho, e preservar rigorosamente toda a informação contida? Na verdade, isto é bastante comum, e todos os que já compactaram algum dado em seu computador, gerando arquivos com extensão ZIP ou ARJ, por exemplo conhecem exemplos.

Eu acabo de realizar a compressão de um arquivo de texto, originalmente de 25 kBytes, e obtive um novo arquivo, de aproximadamente 8 kBytes. Pelo argumento acima, parte do meu texto "obviamente" foi para o espaço. Se foi, os leitores devem pensar duas vezes antes de compactar a próxima apresentação no seu trabalho.

Isto não ocorre, é claro. Estes compressores utilizam algoritmos de compressão sem perdas. Isto quer dizer que, quando o arquivo for descomprimido, a informação estará preservada de maneira idêntica.

Mesmo sem incursões detalhadas pelas áreas de Teoria da Informação e Computação, podemos nos convencer de que isto não é um milagre. Primeiro vamos imaginar a codificação de texto de uma  maneira, digamos, óbvia, e depois vamos pensar em como comprimi-lo.

O byte que usei como unidade para descrever o tamanho do arquivo acima é composto por 8 bits, cada um desses podendo valer 0 ou 1. Assim, existem 256 valores diferentes que podem ser armazenados em um byte (o bit tem dois valores possíveis, um conjunto de 2 bits teria 4 valores possíveis, e raciocinando assim se chega a 256 valores para 8 bits).

Um texto é composto por menos do que 256 símbolos. Há, no caso do alfabeto latino, 26 letras, mais as letras acentuadas, há símbolos de pontuação, mas não se chega a 256 símbolos. Vamos então assumir que, no meu texto, a cada letra ou símbolo (contam-se também espaços em branco e sinais para indicar mudança de linha ou tabulação), corresponde um byte.

Esta é, como chamei, a forma "óbvia" de codificação. Podemos economizar algum espaço, ou alguns bits. Vejamos uma das formas de se fazer isso, acompanhando um argumento desenvolvido pelo americano David Huffmann (1925-1999) nos anos 50. A ideia central é que estes símbolos não são usados com a mesma frequência.  Vejamos esta frase:

ESTA É UMA FRASE A SER CODIFICADA.

É só fazer as contas. O 'A' e o espaço em branco são usados 6 vezes. O 'S', 3 vezes. O 'O' e o ponto final apenas uma vez. Ora, se usarmos poucos bits para representar o 'A' e mais bits para representar o ponto final, há economia de bits.

Há detalhes importantes a observar, mas nenhuma grande dificuldade. Aplicando-se  a ideia de Huffman, se eu não errei alguma conta, teríamos 3 bits para o 'A' e 5 bits para o 'O" e outros símbolos menos usados. O texto de 33 letras (ou 33 bytes), seria reduzido a 15 bytes. Na verdade, o resultado é um pouco pior, porque não estou contando com o armazenamento da própria tabela que descreve a codificação usada. Mas, quanto maior o arquivo, menos importante é este detalhe no resultado geral. Aí está, portanto, uma diminuição de 40% no tamanho do arquivo com perda zero de informação. 

Eu disse que este argumento não se aplica ao MP3, AAC, WMA e outros formatos de compressão de áudio. E o problema não é, como alguém possa imaginar, o fato de que sons são sinais contínuos no tempo enquanto o texto é feito de um conjunto discreto de símbolos. A representação de um fluxo contínuo de valores em amostras discretas é uma questão que, ao menos em seus aspectos teóricos, foi superada nos anos 30. É na verdade a parte menos discutível a respeito da qualidade do áudio digital. 

O problema é que a ideia acima (aproveitar a desigualdade na frequência dos símbolos para uma codificação mais eficiente) tem um resultado muito pior na compressão de arquivos de áudio. De fato, a compressão de um arquivo contendo as amostras do sinal digital de áudio, pelo método acima, nos daria pouca vantagem. Os métodos de compressão de áudio são diferentes, e de fato não permitem a reconstrução do sinal de maneira idêntica. 

Ora, no fim das contas, então, o argumento dos críticos estava certo, e a compressão dos arquivos de áudio leva necessariamente à perda de qualidade? Bom, falta só um enorme detalhe: provar que perda de informação (ou seja, a impossibilidade de reconstruir o original de maneira idêntica) é o mesmo que perda de qualidade. Isto está muito longe de ser óbvio, e é assunto para outra postagem.