ADPCM (Adaptive Differential Pulse Code Modulation)

Introdução

A técnica e compressão utilizada é a ADPCM (Adaptive Differential Pulse Code Modulation), uma técnica de codificação preditiva, muito utilizada para a compressão de voz.

A técnica ADPCM emprega uma predição linear com perdas que em vez de se codificar as amostras de áudio independentemente tal como o PCM, usa a amostra anterior (ou várias amostras anteriores) para prever a amostra corrente, depois calcula a diferença entre a amostra corrrente e a amostra predita e quantifica a diferença, procede-se à codificação  das diferenças Pulse Code Modulation e os seus valores preditos. Para cada entrada de uma amostra X[n], a saída do quantificador, os níveis de quantificação C[n] (códigos ADPCM correspondentes às amostras de áudio PCM) representam o nível de quantificação  para obter a amostra de aúdio reconstruída, multiplicando o número de níveis de quantificação pelo step size utilizado pelo quantificador. Este método é eficiente porque o step size (∆) é constantemente atualizado, tanto pelo quantificador como pelo desquantificador em resposta à variação da magnitude das amostras de entrada.

Esta técnica é muito mais eficaz quando utilizada para compressão de voz, pois esta técnica de compressão é uma técnica com perdas, no entanto essas perdas na compressão de voz não são significativas. Na compressão de áudio de alta fidelidade existem técnicas mais eficientes.

Áreas de Aplicação

Este codec é utilizado na compressão de áudio. Vários softwares existentes no mercado usam este tipo de algoritmos para a compressão e descompressão de áudio. Várias empresas usam versões semelhantes destes métodos seus codecs de ADPCM, em baixo fica o detalhe de algumas delas:

MS-ADPCM – uma concretização da Microsoft para o Adaptative Differencial Pulse Code Modulation (ADPCM) um formato de áudio digital comum para armazenar áudio em qualidade CD.

Microsoft IMA ADPCM – Uma concretização do ADPCM, útil para áudio em multimédia em ambiente de plataformas múltiplas, desenvolvido pela Interactive Multimedia Association (IMA).

IMA 4:1 – útil para áudio multimédia em ambientes multi-plataforma. Foi desenvolvido pelo IMA usando o ADPCM.

Algoritmo IMA para codificação ADPCM

Um dos algoritmos utilizados para a codificação ADPCM é o algoritmo IMA (Interactive Multimedia Association) comprime amostras PCM lineares em níveis de quantificação com 4 bits. Cada nível de 4 bits ADPCM, representa uma amostra PCM. Sendo que o rácio é calculado da seguinte forma:

racioCompressãoIMA

Utilizando este algoritmo o áudio passa a ocupar 1/4 do espaço de PCM. O débito binário é significativamente reduzido e é calculado da seguinte forma:

DebitoBinarioIMA

O codificador quantifica cada amostra de áudio de 16 bits em 4 bits, sendo assim o factor de compressão é sempre 1/4 em relação à amostra original.

O algoritmo IMA é bastante simples pois também o bloco de predição é bastante simples.  O valor predito de cada amostra X[n-1] é o valor descodificado da amostra de áudio imediatamente anterior (amostra predita) Xp[n-1].

Método de Compressão

O codec Adaptative Differencial Pulse Code Modulation combina ambas características do APCM e do DPCM. No codificador adaptativo APCM, o passo de codificação varia com o tempo, de modo a acompanhar as variações de amplitude do sinal. Essa adaptação é baseada nas amostras passadas do sinal. O objectivo das técnicas adaptativas é a redução na faixa dinâmica do sinal para obter uma redução na taxa final de transmissão.

O sinal de voz apresenta correlação significativa entre as amostras sucessivas, visto que a amplitude do sinal não varia muito de uma amostra para outra. Isto implica em uma redundância do sinal de voz. Isso é obtido analisando a diferença de amplitude entre amostras adjacentes. Ou seja, o modelo ADPCM analisa as diferenças (DPCM): se a diferença entre sinais é pequena o ADPCM aumenta o tamanho dos níveis de quantificação e se a diferença é grande o ADPCM diminui os níveis de quantificação.

 

Codificação

Vamos começar então a nossa abordagem relativamente ao modo de funcionamento da parte de codificação codec ADPCM.

Como já foi referido no tópico Método de Compressão, o sistema de quantificação ADPCM é composto por um quantificador adaptativo e outro preditor. O quantificador adaptativo mede a taxa dos diferentes sinais mais conhecidos como controlos de velocidade. Este permite também um factor de escala que pode ser adaptado nos quais cabe a diferença dos níveis de codificação e actualização dos coeficientes do preditor que são udados pelo algoritmo.

Portanto o ADPCM adapta os níveis de codificação para o tamanho de diferença dos sinais. Isto gera uma relação sinal-ruído que é uniforme para todas as amplitudes do sinal. O ADPCM diminui a taxa de bits da voz para 32kbps, metade de modulação PCM.

 

DiagramaBlocosCodificadorADPCM

A figura em cima mostra a forma como se comporta o algoritmo de compressão ADPCM. Uma amostra de 8 bits wav file dá entrada (input) no codificador a qual é comparada há amostra anterior X(n-1). A diferença entre estas duas amostras d(n) mais o cálculo do step size ss(n) é “introduzido” para o codificador. Este produz uma amostra de saída de 4 bits L(n), a qual depois é usada para o cálculo do próximo bloco do step size.

Após a análise deste diagrama de blocos do codificador apresentamos em baixo,  o fluxograma representativo do algoritmo IMA ADPCM.

 

 

FluxoGramaADPCM

Este diagrama mostra a forma como se obtêm os 4 bits (bits 0 a 3) que constituem cada nível de quantificação. O 4º bit de cada nível (bit 3 no diagrama) é sempre o bit de sinal. Analisando o fluxograma da Fig.2 é possível observar que o terceiro bit (bit 2) é colocado a 1 se a diferença entre X[n] e Xp[n-1] (designada por sample) for maior ou igual ao step size (intervalo de quantificação). Vamos apresentar uma explicação do cálculo do step size e respectivas tabelas no final deste tópico para que se possa perceber como funciona este processo.

A lógica de codificação pode ser descrita pelo algoritmo elaborado em baixo que representa a aplicação do fluxograma ilustrado em cima:

L(n) = L3L2L1L0, where L3 = L2 = L1 = L0 = 0

if (d(n) < 0)

then L3 = 1

d(n) = ABS(d(n))

if (d(n) >= ss(n))

then L2 = 1 and d(n) = d(n) – ss(n)

if (d(n) >= ss(n) / 2)

then L1 = 1 and d(n) = d(n) – ss(n) / 2

if (d(n) >= ss(n) / 4)

then L0 = 1

L(n) = (10002 * L3) + (1002 * L2) + (102 * L1) + L0

Antes de passarmos ao próximo tópico, detalhamos de seguida como se efectua o cálculo do step size que se usa tanto no processo de codificação como descodificação, sendo algo essencial para a elaboração e compreendimento dos algoritmos.

Note-se que tanto no processo de quantificação e desquantificação o cálculo do step size é o mesmo. Em baixo vamos mostrar 2 tabelas, a tabela 1 e tabela 2 que ilustram os valores usados para o cálculo do step size. Para cada valor L(n) existe um valor correspondente M(L(n)). Este valor é usado para calcular o próximo índex do step-size como descreve a seguinte equação:

Eindex(n+1) = Eindex(n) + M(L(n))

O índex do step-size é calculado pela formula Eindex(n+1) para o próximo valor do step-size.

L(n)  Value

M(L(n))

1111 or 0111

+8

1110  0110

+6

1101  0101

+4

1100  0100

+2

1011  0011

-1

1010  0010

-1

1001  0001

-1

1000  0000

-1

          Tabela 1 – Correspondência para cada index o seu respectivo step size

 

IndiceStep SizeIndiceStep SizeIndiceStep SizeIndiceStep Size

072260444946640261823664554467442829247346598684871310258047658695358411268848724705894512279749796716484613281075087672713271429118519637378458163013052106074863091731143531166759493101932157541282761044211213317355141177114871223341905615527812635132535209571707791389914283623058187880152891531372535920668116818163438279602272821850017373930761249983203501841403376227498422358194541371633024852462320504240864332786270862155434496536608729794      8832767

Tabela 2 – Cálculo do Step Size

Para a primeira amostra de saída, o step size mínimo é de 16. Através da Tabela 1, pode ser observado que apenas o valor absoluto de L(n) é considerado. Valores que são iguais ou maiores a quatro vão aumentar o step size, enquanto valores menores que quatro vão diminuir o step size.

Note que existem apenas quarenta e nove step sizes. Se os indexes calculados for menor que um ou maior que quarenta e nove, o índex do step size fica predefinido como sendo o mínimo um e o máximo quarenta e nove, respectivamente.

Descodificação

Em seguida como mostra o diagrama seguinte, o bloco de desquantificação reconstrói o valor original da amostra quantificada multiplicando o número de níveis de quantificação pelo passo de quantificação (step size) utilizado pelo quantificador.diagramaBlocosDescodificador

O diagrama exibido pela figura anterior, mostra como se processa a descodificação. A lógica do sistema de descodificação é a inversa do processo de codificação. Temos há entrada uma amostra de 4bits L(n), após a amostra dar entrada no descodificador é calculado(ajustado) o step-size ss(n). Em seguida o bloco de desquantificação calcula a diferença do valor d(n), cujo é adicionado ao anterior estimado pelo output da amostra X(n-1). A soma destes dois valores é o valor estimado que sai (output) X(n). Em baixo segue-se parte do algoritmo de descodificação:

 

d(n) = (ss(n)*L2)+(ss(n)/2*L1)+(ss(n)/4*LO)+(ss(n)/8)

if (L3 = 1)

then d(n) = d(n) * (-1)

X(n) = X(n-1) + d(n)

 

Comparação com outros métodos semelhantes

Existem outras técnicas e normas para a compressão de voz como a compressão de silêncios que se baseia na deteção e eliminação de silêncios. A técnica µ-law e A-law consistem em abordagens logarítmicas mas com um rácio de compressão bastante inferior ao ADPCM.

 

Existem também as técnicas LPC (Linear Predictive Coding) que é uma técnica de compressão de voz geralmente utilizado para a análise de expressão e de resíntese. É utilizada como uma forma de compressão de voz por companhias telefónicas, por exemplo, na norma GSM. É também usado para redes sem fios seguras, onde a voz deve ser digitalizada, codificada e enviada através de um canal de voz estreita. A síntese de LPC pode ser utilizada ​​para construir instrumentos musicais, algo um pouco popular na música eletrónica. Produz um débito binário da ordem dos 2.4Kbit/s. Existe também a técnica CELP (Code-excited linear prediction) que é um algoritmo de codificação de voz proposto originalmente por MR Schroeder e BS Atai, em 1985. Na altura conseguia fornecer uma muito melhor qualidade do que os algoritmos de baixa taxa de bits, tal como a RELP (Residual-Excited Linear Prediction), um algoritmo de compressão de voz obsoleto. É também utilizado em compressão MPEG-4. CELP é vulgarmente usado como um termo genérico para uma classe de algoritmos e não para um codec particular. A técnica CELP executa o algoritemo LPC, mas transmite igualmente um termo de erro, porporcionando qualidade de audio conferencia a um debito binario de 4.8Kbit/s.

 

Conclusão

Podemos analisar o funcionamento das técnicas PCM, DPCM e ADPCM. Vimos que o algoritmo desta técnica é muito fácil de ser implementada e por isto ela é amplamente utilizada e difundida nas mais diversas tecnologias.

Apesar de estar bem definida, muitos estudos têm sido feitos para aprimorar algoritmos de criação de codificadores e descodificadores PCM. Existem muitos trabalhos sendo feitos e muitos a serem a serem realizados com o PCM.

A tecnologia ADPCM foi uma aprimorou muito a tecnologia PCM. Sua baixa taxa de transmissão, em torno de 32kbps é metade da tecnologia PCM ainda mantendo a mesma qualidade de voz (inteligibilidade).

O PCM e suas variantes são utilizados em aplicações de mídia digital: CDs e DVDs, aplicações em telefonia e aplicações em áudio digita e Internet.

Na realização deste artigo as maiores dificuldades foram relacionadas com a implementação do codec ADPCM. Em relação ao seu funcionamento, tanto na codificação como descodificação não houve muita dificuldade após reunir toda a informação acerca do codec. Para demostrar um exemplo de codec em funcionamento não foi possível usar a implementação criada para o efeito uma vez que não ficou terminado. Usou-se então um software já criado para o efeito para comprar os diferentes rácios de compressão entre o codec ADPCM e outros.

 

Bibliografia

– Ribeiro, N., “Multimedia II – Capitulo03, 2005

– Morgan, K., “Khalid Sayood Introduction to Data Compression, 2006

– Murtaza, A., “Speech Compression – ADPCM Compression”, 1996

– Website – http://www.tritonus.org/

– Website – http://wiki.multimedia.cx/

– Gomes, A., Pinto, A “Trabalho Multimédia 2012/2013

– Pereira, C. “Trabalho Multimedia 2009

 

 

Trabalho desenvolvido no âmbito da disciplina de Multimédia II da Licenciatura em Engenharia Informática, lecionada pelo Prof. Doutor Nuno Magalhães Ribeiro da Faculdade de Ciência e Tecnologia da UFP.

Texto da autoria de Carlos Pereira e revisto por Nuno Magalhães Ribeiro.

 

 

Site planeado, desenhado, desenvolvido e programado por Daniel Dias Lima Mendes, Diogo Emanuel Lamas e Silva, Nelson José Santos Almeida no âmbito do Projeto de final de Licenciatura realizado na Unidade Curricular de Laboratório de Projeto Integrado sob a orientação técnica do Prof. Doutor Nuno Magalhães Ribeiro.