Es un códec de voz de banda estrecha (narrow band), ya que la frecuencia de muestreo es de 8 Khz. Fue adoptado en 1995 para la codificación de voz (e incluso de cualquier señal de audio) de los estándares H.324 de videoconferencia. Para este códec tenemos 2 posibles tasas binarias, en cada una de las cuales se utiliza un algoritmo de codificación distinto. Con la mayor tasa binaria (6.3 Kbps) tenemos una mayor calidad. Con la menor tasa binaria (5.3 Kbps) tenemos una calidad inferior, pero aún muy aceptable. Es posible conmutar entre ambas tasas binarias entre 2 tramas consecutivas, que son de 30 ms cada una.
El códec se optimizó de forma que represente la voz con gran calidad a las velocidades mencionadas y con una complejidad restringida. La música y otras señales audio no se representan con la misma fidelidad que la voz, pero con este códec se pueden comprimir y descomprimir.
Este códec codifica la voz u otras señales audio en tramas de 30 ms. Además, tiene un preanálisis de 7,5 ms, lo que resulta en un retardo algorítmico total de 37,5 ms. Todos los demás retardos en la implementación y el funcionamiento de este códec se deben a:
Diagrama de bloques del codificador en G.723.1. Fuente: [10]
Este códec está diseñado para el funcionamiento con una señal digital obtenida filtrando primero la entrada analógica con la anchura de banda de telefonía, muestreándola luego a 8000 Hz y convirtiéndola a señal PCM lineal de 16 bit para su entrada en el codificador. Habrá que convertir la salida del decodificador a señal analógica mediante medios similares.
El códec se basa en los principios de la codificación de predicción lineal análisis por síntesis, y trata de hacer mínima una señal de error ponderada perceptualmente. El codificador funciona con bloques (tramas) de 240 muestras cada uno. Ello equivale a 30 ms a una v elocidad de muestreo de 8 kHz. Cada bloque se pasa primero por un filtro paso alto para suprimir la componente continua, y luego se divide en cuatro subtramas de 60 muestras cada una. Para cada subtrama, se calcula un filtro de códec de predicción lineal (LPC, linear prediction coder) de décimo orden utilizando la señal de entrada no procesada. El filtro LPC para la última subtrama se cuantifica con un cuantificador vectorial de división predictiva (PSVQ, predictive split vector quantizer). Los coeficientes LPC no cuantificados se utilizan para construir el filtro de ponderación perceptual de corto plazo, que se utiliza para filtrar toda la trama y obtener la señal de voz ponderada perceptualmente.
Para cada dos subtramas (120 muestras), se calcula el periodo de tono en bucle abierto, LOL, mediante la señal vocal ponderada. Esta estimación del tono se realiza con bloques de 120 muestras. El periodo de tono se busca en la gama de 18 a 142 muestras.
A partir de ese punto, la voz se procesa a 60 muestras por subtramas.
Utilizando el periodo de tono estimado calculado anteriormente, se construye un filtro de conformación de ruido armónico. La combinación del filtro de síntesis LPC, el filtro de ponderación perceptual formante y el filtro de conformación del ruido armónico se utiliza para crear una respuesta de impulso. La respuesta del impulso se utiliza para los cálculos posteriores.
Con la estimación del periodo de tono, LOL, y la respuesta de impulso, se calcula un predictor de tono en bucle cerrado. Se utiliza un predictor de tono de quinto orden. El periodo de tono se calcula como un valor diferencial pequeño respecto de la estimación de tono en bucle abierto. La contribución del predictor de tono se resta del vector objetivo inicial. Tanto el periodo de tono como el valor diferencial se transmiten al decodificador.
Por último, se aproxima la componente no periódica de la excitación. Para la velocidad alta, se utiliza la excitación del tipo cuantificación multiimpulso de máxima verosimilitud (MP-MLQ, multipulse maximum likelihood quantization), y para la velocidad baja, una predicción lineal con excitación por tabla de códigos algebraicos (ACELP, algebraic code excited linear prediction).
Ahora se explica brevemente el funcionamiento del decodificador
Diagrama de bloques del decodificador en G.723.1. Fuente: [10]
La operación del decodificador también se ejecuta trama por trama. Primero, se decodifican los índices LPC cuantificados, después el decodificador construye el filtro de síntesis LPC. Para cada subtrama, se decodifican la excitación de tabla de códigos adaptativos y la excitación de tabla de códigos fijos y se entran en el filtro de síntesis. El posfiltro adaptativo consiste en un posfiltro de tono formante y un posfiltro de tono hacia adelante y atrás. La señal de excitación se inyecta en el posfiltro de tono que, a su vez, ataca al filtro de síntesis, cuya salida es la entrada al posfiltro formante. Una unidad de escalamiento de la ganancia mantiene la energía en el nivel de entrada del posfiltro formante.
En este códec existe una opción en la cual se pueden detectar los instantes sin voz de la señal y entonces no trasnmitir la señal en tal caso, sino transmitir una señal de ruido de confort (para que se note continuidad en la conversación), que hace que se disminuya la tasa binaria. Los silencios en la conversación se detectan con el algoritmo VAD (Voice Active Detection) y el ruido de confort se genera con un CNG (Confort Noise Generator).
G.723.1 Es uno de los más usados para VoIP en la actualidad aunque su calidad, siendo aceptable, es superada por la de otros códecs como G.729 con tasas binarias muy parecidas, pero su uso está muy extendido por formar parte del estándar H.324 para videoconferencia. Esta cubierto por una serie de patentes, por lo que para su uso comercial se ha de pagar.
En el siguiente enlace se puede encontrar una demostración interactiva de G.723.1, en la que podemos seguir el proceso de codificación con G.723.1 y transmisión de un segmento de voz, en condiciones de pérdida y retardo de paquetes, y posteriormente escuchar la señal decodificada en el receptor