| Formato de ponto flutuante |
|---|
| IEEE 754 |
|
| Outros formatos |
| Alternativas |
| Ponto flutuante afunilado |
O G.711 é um codec de áudio de banda estreita originalmente projetado para uso em telefonia que fornece áudio com qualidade de linha telefônica convencional a 64 kbit/s. É um padrão (Recomendação) da ITU-T para codificação de áudio, intitulado Modulação por impulsos codificados (PCM) de frequências de voz, lançado para uso em 1972.
O G.711 transmite sinais de áudio na faixa de frequência de 300–3400 Hz e realiza a amostragem a uma taxa de 8000 Hz, com uma tolerância nessa taxa de 50 partes por milhão (ppm).
Ele utiliza um de dois algoritmos logarítmicos de compansão: a Lei μ (μ-law), utilizada principalmente na América do Norte e no Japão, e a Lei A (A-law), utilizada na maioria dos outros países fora da América do Norte. Cada amostra compandida é quantizada em 8 bits, resultando em uma taxa de bits de 64 kbit/s.
O G.711 é um padrão obrigatório em muitas tecnologias, como nos padrões H.320 e H.323. Ele também pode ser usado para comunicação de fax sobre redes IP (conforme definido na especificação T.38).
Duas melhorias para o G.711 foram publicadas: o G.711.0 utiliza compressão de dados sem perdas para reduzir o uso de largura de banda e o G.711.1 aumenta a qualidade do áudio expandindo a largura de banda.
O G.711 define dois algoritmos principais de compansão: o algoritmo da Lei μ e o algoritmo da Lei A. Ambos são logarítmicos, mas a Lei A foi projetada especificamente para ser mais simples de ser processada por um computador. O padrão também define uma sequência de valores de código repetitivos que estabelece o nível de potência de 0 dB.
Os algoritmos da Lei μ e da Lei A codificam amostras PCM lineares com sinal de 14 bits e 13 bits (respectivamente) em amostras logarítmicas de 8 bits. Dessa forma, o codificador G.711 criará um fluxo de dados de 64 kbit/s para um sinal amostrado a 8 kHz.
O G.711 Lei μ tende a dar mais resolução para sinais de faixas mais altas, enquanto o G.711 Lei A fornece mais níveis de quantização para níveis de sinal mais baixos.
Os termos PCMU, G711u e G711MU também são usados para o G.711 Lei μ, e PCMA e G711A para o G.711 Lei A.
A codificação da Lei A recebe uma amostra de áudio linear com sinal de 13 bits como entrada e a converte em um valor de 8 bits da seguinte forma:
| Código de entrada linear | Código comprimido
XOR 01010101 |
Código de saída linear |
|---|---|---|
s0000000abcdx |
s000abcd |
s0000000abcd1 |
s0000001abcdx |
s001abcd |
s0000001abcd10 |
s000001abcdxx |
s010abcd |
s000001abcd100 |
s00001abcdxxx |
s011abcd |
s00001abcd1000 |
s0001abcdxxxx |
s100abcd holiday |
s0001abcd10000 |
s001abcdxxxxx |
s101abcd |
s001abcd100000 |
s01abcdxxxxxx |
s110abcd |
s01abcd1000000 |
s1abcdxxxxxxx |
s111abcd |
s1abcd10000000 |
Onde s é o bit de sinal, s é o seu inverso (ou seja, valores positivos são codificados com o bit mais significativo igual a 1), e os bits marcados com x são descartados. Note que a primeira coluna da tabela utiliza uma representação de valores negativos diferente da terceira coluna. Por exemplo, o valor decimal de entrada −21 é representado em binário após a inversão de bits como 1000000010100, o que mapeia para 00001010 (de acordo com a primeira linha da tabela). Ao decodificar, isso mapeia de volta para 1000000010101, que é interpretado como o valor de saída −21 em decimal. O valor de entrada +52 (0000000110100 em binário) mapeia para 10011010 (de acordo com a segunda linha), que mapeia de volta para 0000000110101 (+53 em decimal).
Isso pode ser visto como um número em ponto flutuante com 4 bits de mantissa m (equivalente a uma precisão de 5 bits), 3 bits de expoente e e 1 bit de sinal s, formatado como seeemmmm, com o valor linear decodificado y dado pela fórmula:
que resulta em um inteiro com sinal de 13 bits no intervalo de ±1 a . Note que nenhum código comprimido decodes para zero devido à adição de 0,5 (metade de um passo de quantização).
Além disso, o padrão especifica que todos os bits pares resultantes (o bit menos significativo é considerado par) são invertidos antes que o octeto seja transmitido. Isso serve para fornecer uma quantidade abundante de transições 0/1 para facilitar o processo de recuperação de relógio nos receptores PCM. Sendo assim, um canal PCM silencioso codificado em Lei A tem as suas amostras de 8 bits codificadas como 0xD5 em vez de 0x80 nos octetos.
Quando os dados são enviados sobre conexões E0 (G.703), o bit mais significativo (sinal) é enviado primeiro e o bit menos significativo é enviado por último.
A biblioteca de ferramentas de software da ITU-T (STL) define o algoritmo para decodificação da seguinte forma (ele posiciona os valores decodificados nos 13 bits mais significativos do tipo de dado de saída de 16 bits):
void alaw_expand(lseg, logbuf, linbuf)
long lseg;
short *linbuf;
short *logbuf;
{
short ix, mant, iexp;
long n;
for (n = 0; n < lseg; n++)
{
ix = logbuf[n] ^ (0x0055); /* reinverte os bits invertidos */
ix &= (0x007F); /* remove o bit de sinal */
iexp = ix >> 4; /* extrai o expoente */
mant = ix & (0x000F); /* obtém a mantissa */
if (iexp > 0)
mant = mant + 16; /* adiciona o '1' condutor se o expoente > 0 */
mant = (mant << 4) + (0x0008); /* mantissa justificada à esquerda e */
/* 1/2 passo de quantização adicionado */
if (iexp > 1) /* desloca para a esquerda conforme o expoente */
mant = mant << (iexp - 1);
linbuf[n] = logbuf[n] > 127 /* inverte se for uma amostra negativa */
? mant
: -mant;
}
}
A codificação da Lei μ (às vezes referida como ulaw, G.711Mu ou G.711μ) recebe como entrada uma amostra de áudio linear com sinal de 14 bits na representação em Complemento para dois, inverte todos os bits após o bit de sinal se o valor for negativo, adiciona 33 (100001 em binário) e a converte em um valor de 8 bits da seguinte forma:
| Valor de entrada linear | Código comprimido
XOR 11111111 |
Valor de saída linear |
|---|---|---|
s00000001abcdx |
s000abcd |
s00000001abcd1 |
s0000001abcdxx |
s001abcd |
s0000001abcd10 |
s000001abcdxxx |
s010abcd |
s000001abcd100 |
s00001abcdxxxx |
s011abcd |
s00001abcd1000 |
s0001abcdxxxxx |
s100abcd |
s0001abcd10000 |
s001abcdxxxxxx |
s101abcd |
s001abcd100000 |
s01abcdxxxxxxx |
s110abcd |
s01abcd1000000 |
s1abcdxxxxxxxx |
s111abcd |
s1abcd10000000 |
Onde s é o bit de sinal, e os bits marcados com x são descartados.
Além disso, o padrão especifica que os bits codificados são invertidos antes de o octeto ser transmitido. Sendo assim, um canal PCM silencioso codificado em Lei μ transmite amostras de 8 bits como 0xFF em vez de 0x00 nos octetos.
A adição do valor 33 é necessária para que todos os valores caiam dentro de um grupo de compressão, sendo ele subtraído de volta no momento da decodificação.
Dividindo o valor codificado formatado como seeemmmm em 4 bits de mantissa m, 3 bits de expoente e e 1 bit de sinal s, o valor linear decodificado y é dado pela fórmula:
que resulta em um inteiro com sinal de 14 bits no intervalo de ±0 a ±8031.
Note que o 0 é transmitido como 0xFF e o −1 é transmitido como 0x7F, mas quando recebidos o resultado decodificado é 0 em ambos os casos.
O G.711.0, também conhecido como G.711 LLC, utiliza compressão de dados sem perdas para reduzir o uso da largura de banda em até 50%. O padrão de *Compressão sem perdas de modulação por impulsos codificados G.711* foi aprovado pela ITU-T em setembro de 2009.
O G.711.1 *“Extensão embutida de banda larga para modulação por impulsos codificados G.711”* é uma extensão de maior fidelidade para o G.711, ratificada em 2008 e expandida em 2012.
O G.711.1 permite uma série de camadas de aprimoramento sobre o fluxo principal bruto do G.711 (Camada 0): a Camada 1 codifica áudio de 16 bits na mesma banda estreita de 4 kHz, e a Camada 2 permite banda larga de 8 kHz usando MDCT; cada uma utiliza uma taxa fixa de 16 kbps adicionais aos 64 kbps da camada principal. Elas podem ser usadas juntas ou individualmente, e cada uma codifica as diferenças em relação à camada anterior. Ratificada em 2012, a Camada 3 estende a Camada 2 para uma banda superlarga de 16 kHz, adicionando outros 16 kbps para as frequências mais altas, mantendo a independência das camadas. A taxa de bits máxima passa a ser de 96 kbps no G.711.1 original, ou 112 kbps com a banda superlarga. Não há um método interno definido para identificar ou separar as camadas, deixando a cargo da implementação a tarefa de empacotá-las ou sinalizá-las.
Um decodificador que não compreenda o conjunto de camadas de fidelidade pode ignorar ou descartar os pacotes que não pertencem à camada principal sem afetar o funcionamento do áudio base, permitindo uma degradação suave em qualquer sistema de telefonia G.711 tradicional sem modificações.
Também em 2012 foi ratificado o suporte sem perdas do G.711.0 estendido às novas camadas de fidelidade. Assim como no G.711.0, a compatibilidade total reversa com o G.711 básico é sacrificada em prol da eficiência, embora um nó compatível com o G.711.0 ainda possa ignorar os pacotes de camadas que não compreenda.
As patentes para o G.711, lançado em 1972, já expiraram, portanto o padrão pode ser utilizado livremente sem a necessidade de uma licença.
alaw_expand no arquivo Software/stl2009/g711/g711.c.