Estudio y simulación de un codificador de voz basado en la

Anuncio
Estudio y simulación de un codificador de voz
basado en la recomendación G.729 de la ITU-T
Proyecto Fin de Carrera
Ingeniería de Telecomunicaciones
Escuela Superior de Ingenieros
Universidad de Sevilla
Alberto Alonso Hernández
Tutor: Sergio Cruces Álvarez
01 de Diciembre de 2005
Resumen
En el presente documento se estudia e implementa en Matlab un codificador de
voz basado en el de la recomendación G.729 de la ITU-T, “Codificación de la voz a 8
kbit/s mediante predicción lineal con excitación por código algebraico de estructura
conjugada”, conocido como codificador CS-CELP.
El codificador implementado está diseñado para trabajar con señales digitales y
se basa en el modelo de codificación mediante predicción lineal con excitación por
código (CELP). Opera con tramas vocales de 10 ms correspondientes a 80 muestras a
una velocidad de muestreo de 8000 muestras por segundo. En cada trama de 10 ms se
analiza la señal vocal para extraer los parámetros del modelo CELP (coeficientes del
filtro de predicción lineal, ganancias e índices de las tablas de códigos adaptativos y
fijos). Estos parámetros se codifican y se transmiten. En el decodificador, se usan los
datos recibidos para recuperar los parámetros de excitación y del filtro de síntesis.
Se realiza una introducción a las señales y los codificadores de voz, analizando
sus características más importantes y una revisión de los conceptos teóricos en los que
se basará el codificador. Se analiza el codificador propuesto en la recomendación y, por
último, se detalla la estructura del codificador a implementar.
Una vez implementado el codificador, se introducen diferentes señales de voz,
masculinas y femeninas, analizando los resultados obtenidos. Como prueba final, se
estudia su comportamiento ante una señal de audio.
Estudio y simulación de un codificador de voz basado en la recomendación G.729 de la ITU-T
Índice
Página
1
INTRODUCCIÓN................................................................................ 1
1.1
1.1.1
1.2
LA VOZ .............................................................................................................. 1
Propiedades de las señales de voz........................................................................... 3
LOS CODIFICADORES DE VOZ ............................................................................. 6
1.2.1 Propiedades de los codificadores de voz................................................................. 8
1.2.1.1
Tasa de bit....................................................................................................... 8
1.2.1.2
Retraso ............................................................................................................ 9
1.2.1.3
Complejidad.................................................................................................. 10
1.2.1.4
Calidad.......................................................................................................... 11
1.2.2 Tipos de algoritmos de codificación de voz........................................................... 12
1.2.2.1
Codificadores de forma de onda ................................................................... 13
1.2.2.2
Vocoders ....................................................................................................... 14
1.2.2.3
Codificadores híbridos.................................................................................. 15
1.2.2.4
Otros codificadores ....................................................................................... 16
1.2.2.5
Sistemas de codificación usados en la práctica............................................. 16
1.2.2.5.1 Red GSM.................................................................................................. 17
1.2.2.5.2 Red UMTS ............................................................................................... 17
1.2.2.5.3 Red telefónica fija .................................................................................... 17
1.2.2.5.4 Internet (voz sobre IP, VoIP).................................................................... 17
2
REVISIÓN TEÓRICA ...................................................................... 19
2.1
2.1.1
2.1.2
2.2
2.2.1
2.2.2
2.3
2.3.1
2.3.2
2.3.3
2.3.4
2.3.5
2.4
2.4.1
2.4.2
2.4.3
3
CODIFICACIÓN DE VOZ MEDIANTE PREDICCIÓN LINEAL ................................... 19
Introducción .......................................................................................................... 19
Desarrollo matemático.......................................................................................... 22
COEFICIENTES LSF.......................................................................................... 27
Definición y características................................................................................... 27
Conversión LP -> LSF .......................................................................................... 30
CODIFICACIÓN PREDICTIVA MEDIANTE ANÁLISIS POR SÍNTESIS ....................... 33
Introducción .......................................................................................................... 33
Codificación AbS genérica .................................................................................... 33
Predictor de corto plazo........................................................................................ 35
Predictor de largo plazo........................................................................................ 36
Filtro de ponderación de error.............................................................................. 44
CELP .............................................................................................................. 46
Introducción .......................................................................................................... 46
Principio del CELP ............................................................................................... 46
Tabla de códigos algebraicos................................................................................ 51
RECOMENDACIÓN G.729: CS-CELP .......................................... 53
3.1
3.2
3.2.1
3.2.2
3.2.3
3.2.4
3.2.5
3.2.6
LA ITU-T........................................................................................................ 53
DESCRIPCIÓN DE LA RECOMENDACIÓN ............................................................ 54
Introducción .......................................................................................................... 54
Historia.................................................................................................................. 55
Objetivos y requerimientos de la recomendación G.729....................................... 56
Características del codificador ............................................................................. 58
Aplicaciones .......................................................................................................... 60
Anexos ................................................................................................................... 61
I
Estudio y simulación de un codificador de voz basado en la recomendación G.729 de la ITU-T
4
IMPLEMENTACIÓN DEL CODIFICADOR DE VOZ................ 63
4.1
4.1.1
4.1.2
4.1.3
4.2
INTRODUCCIÓN ................................................................................................ 63
Definición del sistema a implementar ................................................................... 63
Codificador............................................................................................................ 64
Decodificador........................................................................................................ 66
DESCRIPCIÓN DE LAS FUNCIONES DEL CODIFICADOR ....................................... 67
4.2.1 Preprocesamiento.................................................................................................. 69
4.2.2 Análisis y cuantización de la predicción lineal ..................................................... 70
4.2.2.1
Ventanización y cálculo de la autocorrelación ............................................. 70
4.2.2.2
Algoritmo de Levinson-Durbin .................................................................... 74
4.2.2.3
Conversión LP -> LSP.................................................................................. 75
4.2.2.4
Cuantización de los coeficientes LSP........................................................... 75
4.2.2.5
Interpolación de los coeficientes LSP........................................................... 75
4.2.2.6
Conversión de LSP a LP............................................................................... 75
4.2.3 Ponderación perceptual ........................................................................................ 76
4.2.4 Análisis de tono en bucle abierto .......................................................................... 80
4.2.5 Cálculo de la respuesta impulsiva......................................................................... 81
4.2.6 Cálculo de la señal objetivo .................................................................................. 82
4.2.7 Búsqueda de la tabla de códigos adaptativos ....................................................... 83
4.2.7.1
Generación del vector de tabla de códigos adaptativos ................................ 85
4.2.7.2
Cálculo de la palabra de código para retardos de tabla de códigos adaptativos
86
4.2.7.3
Cálculo de la ganancia de tabla de códigos adaptativos ............................... 86
4.2.8 Tabla de códigos fijos: estructura y búsqueda...................................................... 87
4.2.8.1
Procedimiento de búsqueda de la tabla de códigos fijos............................... 89
4.2.8.2
Cálculo de palabra de código de la tabla de códigos fijos ............................ 91
4.2.8.3
Cálculo de la ganancia de la tabla de códigos fijos ...................................... 91
4.2.9 Actualización de la memoria ................................................................................. 92
4.3
DESCRIPCIÓN DE LAS FUNCIONES DEL DECODIFICADOR ................................... 93
4.3.1 Procedimiento de decodificación de los parámetros ............................................ 93
4.3.1.1
Decodificación del vector de tabla de códigos adaptativos .......................... 94
4.3.1.2
Decodificación del vector de tabla de códigos fijos ..................................... 95
4.3.1.3
Decodificación de las ganancias ................................................................... 96
4.3.1.4
Cálculo de la señal de voz reconstruida........................................................ 96
4.3.1.5
Postprocesamiento ........................................................................................ 97
4.3.1.5.1 Postfiltro de largo plazo............................................................................ 98
4.3.1.5.2 Postfiltro de corto plazo............................................................................ 99
4.3.1.5.3 Compensación de la pendiente ............................................................... 100
4.3.1.5.4 Control de ganancia adaptativo .............................................................. 101
4.3.1.5.5 Filtrado de paso alto y escalamiento ascendente .................................... 102
5
SIMULACIONES............................................................................. 107
6
CONCLUSIONES............................................................................ 119
7
LÍNEAS FUTURAS DE INVESTIGACIÓN ................................ 123
BIBLIOGRAFÍA……………………………………………………….127
II
Estudio y simulación de un codificador de voz basado en la recomendación G.729 de la ITU-T
Abreviaturas
-
ACELP.- CELP Algebraico
-
ADPCM.- Modulación por Código Pulsado Diferencial Adaptativa
-
CELP.- Codificación por predicción lineal con excitación
-
CS-CELP.- CELP con estructura conjugada
-
DSP.- Procesador Digital de Señal
-
GSM.- Sistema Global de Comunicaciones Móviles
-
IP.- Protocolo de Internet
-
ITU.- Unión Internacional de Telecomunicaciones
-
LAR.- Relaciones de Área Logarítmicas
-
LP.- Predicción Lineal
-
LPC.- Codificación por Predicción Lineal
-
LSP.- Pares del Espectro Lineal
-
LSF.- Frecuencias Espectrales de Línea
-
LTP.- Predictor de largo plazo ó de pitch
-
MIC.- Modulación por Impulsos Codificados
-
MIPS.- Millones de Instrucciones Por Segundo
-
MOS.- Mean Opinion Store
-
MSE.- Error Cuadrático Medio
-
PCM.- Modulación por Código Pulsado
-
RAM.- Memoria de Acceso Aleatorio
-
ROM.- Memoria de Solo Lectura
-
STP.- Predictor de corto plazo ó de predicción lineal
-
ToR.- Términos de Referencia
-
UMTS.- Sistema Universal de Telecomunicaciones Móviles
-
VAD.- Detector de actividad vocal
-
VoIP.- Voz sobre Protocolo de Internet
-
VQ.- Cuantización Vectorial
III
Estudio y simulación de un codificador de voz basado en la recomendación G.729 de la ITU-T
Glosario de las señales más importantes
c(n )
palabra código de excitación ó vector de la tabla de códigos fijos
d (n )
Señal de correlación entre señal objetivo y respuesta impulsiva del filtro de síntesis
ponderado
e(n )
señal de error (diferencia entre la señal original y la sintetizada)
ew (n )
señal de error ponderada
h(n )
respuesta impulsiva del filtro de síntesis ponderado
r (n )
señal residuo de predicción de largo plazo
R(n )
autocorrelación de corto plazo de la señal de voz
s (n )
señal de voz de entrada
sˆ0 (n )
respuesta a entrada cero del filtro de síntesis ponderado
s ′(n )
señal de voz de entrada ventanizada
ŝ (n )
señal de voz sintetizada
~
s (n )
señal de voz predicha en el predictor de corto plazo
sˆw (n )
señal de voz sintetizada ponderada
sw(n )
Señal de voz ponderada
u (n )
señal de excitación
v(n )
Vector de tabla de códigos adaptativos
wlp (n)
ventana de análisis LP
x(n )
Señal objetivo para la búsqueda de la tabla de códigos adaptativos
x ′(n )
Señal objetivo actualizada
y (n )
palabra de código filtrada
yα (n )
convolución entre la señal de excitación y la respuesta impulsiva del filtro de
síntesis ponderado
φ n (n )
correlación de la señal de voz
IV
Estudio y simulación de un codificador de voz basado en la recomendación G.729 de la ITU-T
Glosario de símbolos más importantes
A( z )
filtro inverso de predicción lineal ó filtro blanqueador
Â( z )
filtro inverso de predicción lineal cuantizado ó filtro blanqueador cuantizado
F (z )
filtro de reacción
H (z )
filtro de predicción lineal ó de corto plazo
H f (z )
Postfiltro de largo plazo
H h1 ( z )
filtro de preprocesado
H h 2 (z )
Filtro de postprocesado
H p (z )
Postfiltro de corto plazo
H t (z )
Filtro de compensación de pendiente
Pl (z )
predictor de largo plazo ó de pitch
Pδ ( z )
predictor de corto plazo
1 P( z )
W (z )
filtro de correlación de largo plazo ó filtro de síntesis de pitch
filtro de ponderación perceptual
V
Estudio y simulación de un codificador de voz basado en la recomendación G.729 de la ITU-T
Glosario de constantes más importantes
ak
parámetros LP ó coeficientes del predictor lineal de corto plazo
â k
parámetros LP ó coeficientes del predictor lineal de corto plazo cuantizados
aj
estimación de los parámetros LP ó coeficientes del predictor lineal de corto plazo
C
Palabra de código de la tabla de códigos fijos
ck
palabra código k
E
residuo de predicción de largo plazo
Ew
error cuadrático medio ponderado
fs
frac
frecuencia de muestreo
Parte fraccionaria de los retardos de tono
G
ganancia de tono de largo plazo
gc
Ganancia de la tabla de códigos fijos
gp
Ganancia de la tabla de códigos adaptativos
H
matriz triangular inferior de la respuesta impulsiva h(n )
ii
Amplitud del impulso de la palabra de la tabla de códigos fijos
ki
Coeficientes de reflexión
L
tamaño de la trama
mi
Posición del impulso de la palabra de la tabla de códigos fijos
oi
Coeficientes LAR de la trama actual
P1 , P2
Palabra código para la tabla de códigos adaptativos de las subtramas 1 y 2
qi
Coeficientes LSP interpolados
q̂ i
Coeficientes LSP interpolados cuantizados
r (k )
coeficientes de correlación de la señal enventanada
r ′(k )
coeficientes de correlación modificados de la señal enventanada
R(k )
Correlación de la señal de voz enventanada para el retardo k
S
Palabra de código de signo
VI
Estudio y simulación de un codificador de voz basado en la recomendación G.729 de la ITU-T
si
T1 , T2
Top
wlag (k )
Signo del impulso de la palabra de la tabla de códigos fijos
Retardos de tono (pitch) de las subtramas 1 y 2
Retraso de bucle abierto
factores de expansión del ancho de banda
α
retraso del predictor de largo plazo
β
factor de escala
δ
factor de ponderación
γ
Factor de ponderación del filtro de síntesis
γ 1, γ 2
Factores del filtro de ponderación perceptual
ε
energía del denominador de E
εk
energía de la palabra código k
Φ
matriz simétrica que contiene las correlaciones de la respuesta impulsiva h(n )
ω
aumento del ancho de banda
VII
Introducción
1
Introducción
1.1 La voz
El lenguaje hablado o la voz es la forma más común y natural de comunicación
del ser humano y, su procesamiento, ha representado una de los campos más
interesantes en el análisis de señales. La investigación acerca del procesamiento de voz
ha llevado a la creación de importantes aportaciones técnicas a la sociedad.
El soporte fundamental de la voz es el sonido. El sonido se caracteriza por
fluctuaciones de presión en un medio compresible. Dos cosas deben existir a fin de que
se produzca una onda sonora: una fuente mecánica de vibración y un medio elástico a
través del cual pueda propagar la perturbación.
La voz se produce por la vibración de las cuerdas vocales. El aire exhalado de
los pulmones es modulado y dado forma por la vibración en las cuerdas vocales y el
tracto vocal. Ese sonido producido por la vibración de las cuerdas vocales es llevado al
exterior por el propio aire espirado que causó la vibración.
En la figura 1 se muestra el camino que debe seguir el aire exhalado desde los
pulmones hasta el exterior a través de los diferentes conductos [Miraya,2002].
1
Introducción
Figura 1.- Aparato fonatorio humano
Las señales de voz, que no son más que una secuencia de símbolos acústicos
elementales (conocidos como fonemas), además de servir para la comunicación de la
información lingüística, llevan consigo multitud de información de otros tipos. La voz
no es igual para todas las personas. Es una de las expresiones humanas en donde más se
pone de manifiesto las características del individuo, englobándose en ella tanto las
constitucionales, anatómicas como anímicas. Algunas de estas características son: edad,
acento, intensidad, emoción, humor, el estado de salud de la persona que habla…
Las investigaciones que han existido en este campo estudian temas relacionados con
el análisis y síntesis de voz, la creación de códigos de voz, el reconocimiento de voz, el
realce de voz ó la comunicación multimodal.
Los estudios sobre el procesamiento de voz y las comunicaciones fueron motivados
en gran parte por el deseo de muchas personas de construir modelos mecánicos que
pudieran imitar la comunicación verbal de los humanos. En 1791 se creó el primer
invento de este tipo que fue una imitación mecánica del aparato vocal humano
[Lemmetty, 1999]. Con el paso de los años otros científicos sintetizaron sonidos vocales
por medio de la superposición de senoides armónicamente relacionadas y un ajuste
adecuado de sus amplitudes. Estos han sido los dos principios dominantes en el
procesamiento de las señales de voz: uno motivado por la física para el modelado de la
fuente del tracto vocal y el otro por las matemáticas en el modelado con senoides.
Diversos sistemas basados en bancos de filtros han sido la base para demostrar que
una señal de voz se puede representar en términos de un paquete de parámetros. Estos
parámetros pueden utilizarse posteriormente no sólo para resintetizar la señal de voz,
sino para reconocer la identidad de la persona que está hablando. Además abre la
posibilidad de comprimir el ancho de banda de una señal de voz, principio que
actualmente se utiliza en la telefonía digital moderna.
2
Introducción
Por otro lado, muchos sintetizadores de voz usan controles paramétricos, como por
ejemplo, controles de articulación, frecuencias formantes y parámetros de predicción
lineal. Los diferentes conjuntos de parámetros de control implican distintas estructuras
para sintetizar la señal de voz.
1.1.1 Propiedades de las señales de voz
Las señales de voz se caracterizan por ser no estacionarias y con variaciones
lentas en el dominio del tiempo y se procesan normalmente en segmentos de tiempo
cortos, entre 5 y 30 ms. En estos segmentos la señal puede aproximarse a una señal
cuasiperiódica. Cada segmento o trama puede ser clasificado como sonoro, no sonoro o
silencio:
-
Los sonidos sonoros tienen una naturaleza cuasiperiódica en el dominio del
tiempo y una estructura armónica fina en el dominio de la frecuencia, provocada
por la vibración de las cuerdas vocales. Además, su espectro decae hacia altas
frecuencias. Su energía es alta debido a que el aire encuentra poca obstrucción al
pasar por el tracto vocal. Estas características pueden observarse en la figura 2.
Figura 2. - Tramo de señal de voz sonoro en el tiempo y en la frecuencia
Estos sonidos consisten en una frecuencia fundamental (frecuencia de pitch) y
una serie de componentes armónicos de la misma, producidos por las cuerdas
vocales. El tracto vocal modifica la señal de excitación provocando frecuencias
formantes (ceros). Los formantes son las frecuencias de resonancia del espectro,
es decir, los picos de la envolvente del espectro de la señal de voz que
representan las frecuencias de resonancia del tracto vocal. Cada formante tiene
una amplitud y un ancho de banda. La frecuencia fundamental y las frecuencias
de los formantes son probablemente los conceptos más importantes para la
síntesis y procesamiento de la voz.
3
Introducción
Figura 3.- Envolvente de una señal de voz con sus 3 primeros formantes
Las frecuencias a las que se producen los primeros formantes son muy
importantes para reconocer o sintetizar la voz. En la figura 3 pueden verse
representados los 3 primeros formantes de una señal de voz.
-
Los sonidos no sonoros tienen una estructura típica aleatoria, sin periodicidades
marcadas en el dominio del tiempo y un espectro mucho más compensado en
frecuencia (tiene un espectro de banda ancha). Su energía es mucho menor
debido a la presencia de obstrucciones en el tracto vocal.
Figura 4.- Tramo de señal de voz no sonoro en el tiempo y en la frecuencia
-
Un segmento que no es consecuencia de la actividad vocal se denomina como
silencio. En telefonía, aproximadamente el 50 % del tiempo de conversación es
silencio. Este hecho se utiliza en algunos sistemas celulares sin cables para
4
Introducción
aumentar la eficiencia del ancho de banda del canal usando detectores de
actividad vocal.
De una forma sencilla, un sistema de producción de voz se puede modelar con
un modelo de sistema-fuente, que es un sistema lineal alimentado por una fuente de
excitación. En una aproximación de segundo orden, la excitación es un tren de pulsos
para los segmentos sonoros y ruido blanco para los no sonoros.
Periodo de pitch
Generador
de tren de
impulsos
Interruptor
Sonoro/no
Sonoro
Señal de
Salida
Filtro
Generador
de ruido
aleatorio
Ganancia
Figura 5.- Diagrama de bloques simplificado del modelo de producción de voz
El periodo de cuasiperiodicidad de los segmentos sonoros se caracteriza por un
periodo de pitch en el dominio del tiempo ó pitch ó frecuencia fundamental en el
dominio de la frecuencia. Este pitch es un parámetro importante para algunos
algoritmos de codificación de voz. Se puede identificar como la periodicidad de los
picos de la amplitud en la forma de onda y la estructura fina del espectro. Las
frecuencias de pitch de hombres y mujeres normalmente se encuentran en el rango 50250 Hz (4-20 ms) y 120-500 Hz (2-8,3 ms), respectivamente [Nadeu, 2004].
El ancho de banda de la señal de voz rara vez excede de los 8 kHz. En
codificación de voz para banda ancha, el ancho de banda está limitado a 7 kHz., y la voz
es muestreada a 16 kHz. En telefonía, el ancho de banda está limitado a 4 kHz (0.2-3.4
kHz, normalmente) y la voz es muestreada, generalmente, a 8 kHz. Como ejemplo, si se
observan las figuras 2 (en el dominio de la frecuencia) y 3, puede verse cómo los 3
primeros formantes están dentro del ancho del canal telefónico. A menos que la
frecuencia fundamental quede fuera del canal telefónico el sistema de audición humano
es capaz de reconstruirlo a partir de sus componentes armónicos.
La calidad de la señal de voz codificada puede clasificarse, a grandes rasgos, en
4 categorías: BROADCAST calidad para comunicaciones en banda ancha, calidad
TOLL o de red para señales analógicas (telefonía), de comunicación (señales
degradadas pero naturales e inteligibles) y calidad sintética (señales poco naturales pero
inteligibles, representadas por los codificadores lineales predictivos (LPC) o vocoders).
5
Introducción
1.2 Los codificadores de voz
La compresión de la voz hace referencia a la representación compacta de las
señales de voz. La codificación de la voz se refiere a la representación digital de las
señales. Como el principal objetivo de la codificación de la voz es la compresión de la
señal, es decir, reducir el número de bits necesarios para su representación, los dos
términos, compresión y codificación de la voz, se pueden usar indistintamente.
La codificación de las señales de voz se ha convertido en una de las áreas más
importantes de la comunicación digital moderna durante las dos últimas décadas,
sentando las bases para una nueva generación de servicios. Aplicaciones típicas de la
codificación de la voz son la red convencional de telefonía, sistemas de comunicación
personal sin cables y comunicaciones de seguridad militar. Sirva como ejemplo de esta
importancia el papel que tiene en la vida de millones de personas la telefonía móvil. La
transmisión y almacenamiento de señales de voz y audio ha tenido un enorme
crecimiento debido a Internet y a las aplicaciones multimedia, como las
videoconferencias, en las cuales tienen una importancia determinante. El desarrollo de
microprocesadores y nuevos hardware para el procesamiento de señales impulsan
nuevas ideas para las mejoras en el procesado de la voz. Por todas estas razones, la
demanda de sistemas más rápidos, eficientes, fiables y de mejor calidad crece
continuamente.
Existe una gran variedad de técnicas de codificación de voz, muchas de ellas no
normalizadas, que se emplean en muy diversos ámbitos.
En la codificación de señales de voz el principal objetivo es lograr una alta
calidad de percepción en la señal de voz reconstruida a un bajo coste. Estos costes están
compuestos por varios elementos, como por ejemplo, la tasa de bit, la complejidad y la
robustez frente a errores de transmisión. El peso sobre el coste final de cada uno de
estos elementos depende la aplicación, aunque la tasa de bit y la tasa de compresión
tienen una importancia fundamental, especialmente en la comunicación móvil.
Los códecs de voz se diferencian de los de audio en que están optimizados para
señales de voz. La voz humana es más sencilla de modelar que el audio genérico. Esto
significa que la voz de alta calidad se puede codificar con métodos específicos mejor
que el audio genérico. Por otro lado, los humanos son muy buenos detectando
problemas en las señales voz de otros. Esto quiere decir que códecs de audio de calidad
aceptablemente buena obtienen resultados bastante pobres con señales de voz, incluso
con tasas de bit bastante elevadas.
La señal de voz codificada se transmitirá o almacenará para una aplicación
específica. A medida que el número de bits usados para la representación de la señal se
reduce, el ancho de banda efectivo del canal de transmisión aumentará y el espacio de
memoria se reducirá. Los diferentes algoritmos de codificación difieren en cómo
seleccionar la señal y los parámetros para representar la voz eficientemente. Esas
señales y/o parámetros elegidos son cuantizados y transmitidos al receptor para su
decodificación.
Dado el gran numero de aplicaciones que existen hoy en día, puede resultar
complicado elegir el codificador de voz que mejor se adapte a cada una de ellas.
6
Introducción
Aunque la mejor solución sería tener un codificador que se pudiera utilizar para
cualquier tipo de aplicación, por lo general resulta más económico adaptar el
codificador a la aplicación.
En las comunicaciones digitales de las señales de voz, éstas están generalmente
limitadas en banda por debajo de 4 kHz y muestreadas a 8 kHz. Lo más normal es que
las muestras de voz se codifiquen en amplitud con un número de bits entre 8 y 16. La
cuantización puede ser uniforme o no uniforme. La cuantización no uniforme puede
usarse para tasas de bit bajas ya que la sensibilidad del oído humano es logarítmica.
Ejemplos típicos de cuantización no uniforme son la ley A (A-law) usada en los
sistemas de telecomunicaciones europeos y la ley µ (µ-law), usada en los sistemas de
telecomunicaciones americano y japonés.
La técnica de codificación más simple es la modulación por código pulsado
(PCM). En base a ella se constituyó la primera recomendación en este campo de la ITUT, la G.711, que especifica cuáles son las claves de 8 bits que se obtienen de la
codificación logarítmica (siguiendo las leyes A y µ) de canales telefónicos digitalizados,
con una frecuencia de muestreo de 8 kHz y una resolución de 8 bits por muestra. Da
lugar a una tasa binaria de datos de 64 kbit/s. El codificador consiste simplemente en un
cuantizador de las amplitudes de las muestras. Esta técnica se introdujo en los años 70
en la red de telefonía de larga distancia [IEEE, Nov 1996]. Una señal de voz codificada
a 64 kbit/s usando la técnica PCM logarítmica se considera que no está comprimida y a
menudo se usa como referencia para comparaciones. Una técnica convencional de
codificación es la ADPCM (Adaptive Differencial Pulse Code Modulation) trabajando a
32 kbit/s. La calidad percibida en estos esquemas de codificación es denomina a
menudo calidad ‘toll’ ó calidad telefónica.
Sofisticados métodos de codificación de voz que reducen la redundancia y
eliminan información irrelevante de la señal han logrado alcanzar altas calidades con
unas tasas de bit bajas. A tasas de bit entre 16 kbit/s y 32 kbit/s la codificación por
predicción lineal (LPC) es la más usada para modelar la señal de voz. La codificación
por predicción lineal basada en el análisis por síntesis puede usarse para aumentar la
eficiencia en la cuantización de la señal de voz para tasas de codificación entre 4 kbit/s
y 16 kbit/s. Un esquema de cuantización muy popular en la actualidad es el conocido
como CELP (Code Excited Linear Prediction), basado en la codificación mediante
análisis por síntesis y que fue introducido en 1985. Los codificadores CELP usan tablas
de códigos vectoriales para codificar la señal excitación. (El funcionamiento más
detallado de este tipo de codificadores se estudiará más adelante).
Uno de los factores clave de este progreso es el rápido desarrollo de las técnicas
de compresión de señales. Estas técnicas pueden ser con pérdidas o sin pérdidas. En
codificaciones sin pérdidas, la señal puede reconstruirse perfectamente. Sin embargo, la
tasa de compresión alcanzada en este tipo de compresión es pequeña para la demanda
actual. Por tanto, son las técnicas de compresión con pérdidas las que más se usan. El
objetivo es minimizar la distorsión ó error entre la señal original y la señal reconstruida.
La cuantificación vectorial (VQ) es uno de los métodos de codificación con
pérdidas más potentes. Una de las aplicaciones más frecuentes de la cuantificación
vectorial es la cuantificación del espectro de la señal. El problema ha sido muy
estudiado y desarrollado durante las últimas décadas. La cuantificación vectorial se ha
7
Introducción
demostrado como eficiente para la codificación de los parámetros LPC y, por ello, es
ampliamente usada en los codificadores de voz modernos. A pesar de los progresos, la
transmisión de los parámetros del espectro requiere entre 1 y 2 kbit/s, que es una
importante parte del total de la tasa de bit para codificadores con baja tasa de bit.
A pesar de que los precios de procesadores, memoria, etc. han disminuido en los
últimos años y la velocidad de procesado ha aumentado, la importancia de la
codificación y compresión de la voz no ha disminuido debido a la continua demanda del
mercado de un uso más eficiente de los recursos hardware. Por ejemplo, las señales
multimedia están formadas por un conjunto de diferentes señales que pueden
presentarse secuencial o simultáneamente. Por tanto, la transmisión de señales de voz
codificadas para aplicaciones multimedia implica que se debe compartir el canal con
otras señales, de ahí el interés por perfeccionar los métodos de codificación.
1.2.1 Propiedades de los codificadores de voz
La calidad de la voz generada a partir de un codificador está en función de la
tasa de bit, la complejidad, el retraso y el ancho de banda del mismo; factores que habrá
que tener muy presentes a la hora de confeccionar cualquier codificador de voz. Es
importante darse cuenta de la fuerte interrelación que existe entre estos factores, siendo
necesario, en muchas ocasiones, aceptar la degradación de uno o varios de ellos para
conseguir la mejora de otro. Por ejemplo, los codificadores con una tasa de bit baja
suelen tener un mayor retraso que los codificadores con una tasa de bit más alta.
Además también suelen requerir una mayor complejidad y normalmente tienen peor
calidad. Otros factores que influyen en la elección de un codificador son la
disponibilidad del mismo y las condiciones de la licencia, o la manera en que está
definido el estándar, ya que algunos sólo se describen como un algoritmo, mientras que
otros tienen un código completo para su utilización.
A continuación se verán cada uno de los factores de interés para los
codificadores por separado [Cox y Kroon, 1996]:
1.2.1.1 Tasa de bit
Desde el momento en que los codificadores de voz comenzaron a compartir el
canal con otro tipo de información, se hizo necesaria la utilización de la menor tasa de
bit posible para no usar una parte excesiva del canal. Muchos codificadores trabajan a
una tasa de bit fija, independientemente de las características de la señal de entrada,
pero a la hora de compartir el canal con otro tipo de información es mejor hacer
codificadores de tasa variable. Para aplicaciones que usan simultáneamente voz y datos
se puede optar por usar un esquema de compresión de silencios como parte del estándar
del código. Una solución bastante común es usar una tasa de bit fija cuando hay
actividad vocal y una tasa baja para el ruido de fondo.
La compresión de silencios consiste en dos algoritmos. Por una lado un detector
de actividad vocal (VAD; Voice Activity Detector), que determina si la señal de entrada
8
Introducción
es realmente voz o ruido de fondo. Si el detector determina que la señal es vocal, se
codifica a la tasa de bit fija. Por el contrario, si determina que es ruido lo codifica con
una tasa de bit baja. Incluso hay veces en que no se transmite ningún bit. El segundo
algoritmo es un generador de ruido (CNG; Comfort Noise Generation), que se usa en el
receptor para reconstruir las principales características del ruido de fondo. Se usa esta
señal de ruido, denominado comfort noise debido a que los oyentes prefieren un nivel
bajo de ruido que el silencio. Obviamente la actuación del detector de voz es crítica para
la calidad de la transmisión.
1.2.1.2 Retraso
Uno de los aspectos de diseño más importantes a la hora de implementar la voz
es minimizar el retraso de extremo a extremo. El retraso es inherente a las redes de voz
y es causado por el número de factores diferentes que intervienen en ellas. El retraso en
un sistema de codificación de voz normalmente está formado por tres retrasos:
-
Retraso algorítmico.- Muchos de los codificadores de voz con una tasa de bit
baja procesan las tramas una a una. Los parámetros de la señal son actualizados
y transmitidos para cada trama. Además, para analizar la información
correctamente, a veces es necesario analizarla más allá de los límites de la trama.
Este proceso se califica como procesado hacia delante. Esto significa que antes
de analizar la señal de voz, es necesario almacenar una serie de información. El
retraso que se tiene como consecuencia de esto recibe el nombre de retraso
algorítmico. Este retraso es la única componente del retraso total que no se
puede reducir cambiando la implementación. Los demás retrasos sí dependen de
la implementación. Como este retraso algorítmico es inevitable para sistemas
prácticos, debe ser tenido muy en cuenta al analizar los objetivos de retraso.
-
Retraso debido al procesamiento.- Tiempo que emplea el codificador en analizar
la señal de voz y el decodificador en reconstruirla. Depende de la velocidad del
hardware con el que se implemente el codificador.
-
Retraso de la comunicación.- Tiempo que necesita una trama de información
para transmitirse desde el codificador al decodificador.
La suma de estos tres retrasos se denomina retraso del sistema en un sentido
(one-way system delay). También se le conoce como latencia del códec. Valores
máximos de hasta 400 ms pueden ser admisibles si no hay ecos, aunque es preferible
que este retraso esté por debajo de los 200 ms. Si hay ecos, el máximo tolerable baja
hasta los 25 ms. De ahí el frecuente uso de canceladores de eco. Una latencia de 500 ms
para el recorrido completo es virtualmente inutilizable para una conversación de voz
[Spanias, 1994].
9
Introducción
Si se calculan las latencias para tres códecs diferentes se obtiene lo
siguiente:
Figura 6.- Comparación de la latencia para tres códec diferentes
Se observa cómo el retraso en el códec es el que marca la diferencia entre los
tres. Los códecs con tasas de bit más bajas tienden a tener latencias mayores al ser sus
algoritmos más complejos. De ahí que el que menor latencia tenga (81 ms) sea el de la
recomendación G.711, que emplea la modulación PCM, teniendo una tasa de bit de 64
kbit/s. A continuación está el de la recomendación G.729, con una tasa de bit de 8
kbit/s, con una latencia de 90 ms y, por último, el de la recomendación G.723, con una
tasa de bit de 5,3 kbit/s y una latencia de 110 ms [Lew, 2005].
Esta comparación se ha realizado tomando como referencia una red IP, de ahí la
inclusión de los retraso de cola, tiempo desde que llega la trama o paquete hasta que se
procesa y el jitter, que representa el grado de variabilidad que hay en la transmisión
(tráfico de la red, número de fuentes…).
En muchas aplicaciones, como por ejemplo las teleconferencias, donde cada
persona puede escuchar a todas las demás, es necesario decodificar cada una de las
cadenas de bit, sumar las señales decodificadas y volver a codificar la señal suma. Esto
hace que los retrasos se sumen, reduciendo, además, la calidad de la señal, debido a las
múltiples codificaciones. En sistemas en cascada el máximo retraso tolerable para cada
sistema individual es menor, ya que al unirlos, los retrasos se suman.
1.2.1.3 Complejidad
Los codificadores de voz se implementan normalmente sobre un hardware con
un propósito específico, como los chips de procesamiento digital de señales (DSP;
10
Introducción
Digital Signal Processor). Sus características se pueden medir en función de la
velocidad computacional, medida en millones de instrucciones por segundo (MIPS), la
memoria RAM (Random Access Memory) y la memoria ROM (Read Only Memory). A
la hora de hacer un codificador de voz para cualquier aplicación, el diseñador debe
decidir qué cantidad de estos recursos consume. Los codificadores que requieren menos
de 15 MIPS se consideran de baja complejidad, mientras que si requieren 30 MIPS o
más se consideran de complejidad alta. El requerir más o menos memoria RAM ó ROM
conlleva que el chip resulte más o menos caro.
Desde el punto de vista del diseñador una mayor complejidad conlleva un mayor
coste y una mayor necesidad de consumo de potencia. Para aplicaciones portátiles, un
mayor consumo de potencia implica la reducción del tiempo entre recargas, o el uso de
baterías más grandes, lo que significaría mayor coste y peso. De aquí la importancia de
la complejidad del codificador.
1.2.1.4 Calidad
Una de las cosas más importantes es ver cómo de bien se escucha la señal
codificada en presencia de condiciones ideales (señal de voz limpia, sin errores de
transmisión y una única codificación). En la figura 7 se representa la relación entre la
tasa de bit y la calidad de una señal de voz codificada una vez y sin ruido de fondo para
los tres tipos de codificadores de voz más extendidos.
Figura 7.- Relación tasa de bit-calidad para los diferentes tipos de codificador
En la figura puede observarse cómo a medida que se disminuye la tasa de bit del
codificador, disminuye la calidad de la señal de voz, aunque en la actualidad se puede
disponer de codificadores con una tasa de bit bastante baja y una calidad casi
equiparable a la de otros codificadores con tasas superiores [Janssen y Slump, 2001].
11
Introducción
Cada códec proporciona una cierta calidad de voz. La calidad de la voz
transmitida es una respuesta subjetiva del oyente. Una medida común de referencia
usada para determinar la calidad del sonido producido por códecs específicos es la
Mean Opinión Store (MOS). En este test, un amplio grupo de oyentes juzgan la calidad
de la muestra de voz, es decir, los oyentes califican de 1 (malo) a 5 (excelente) una frase
codificada mediante un códec determinado. Los resultados son promediados para dar el
valor MOS para la muestra. Un valor de 4 o superior se considera calidad perfecta o
calidad “toll”, que viene a decir que la señal de voz reconstruida no se puede
prácticamente distinguir de la señal de voz original.
MOS
Calidad
1
Mala
2
Pobre
3
Media
4
Buena
5
Excelente
Clasificación de la voz
Voz artificial
Comunicaciones
Red digital mejorada
Transparente
Tabla 1.- Medida subjetiva de la calidad de la voz
A la hora de elegir codificador es fundamental adaptarlo a la finalidad para la
que se va a emplear. Uno de los principales inconvenientes es la distorsión de la señal
debido a las múltiples codificaciones (llamadas codificaciones tándem). Por ejemplo,
cuando una señal de voz G.729 es codificada tándem 3 veces, el valor MOS baja de
3,92 (buena) a 2,68 (inaceptable para la comunicación).
1.2.2 Tipos de algoritmos de codificación de voz
Los distintos algoritmos de codificación tratan de eliminar la redundancia de la
señal y así poder reducir al mínimo el número de bits usados para codificar cada
muestra. Un método de codificación se evalúa con las siguientes características:
-
Velocidad de transmisión (“bit rate”)
Calidad de la voz reconstruida.
Complejidad de la implementación
Retardo introducido
Robustez ante la aparición de errores en el canal o interferencias acústicas.
Los codificadores de voz se pueden encuadrar dentro de tres grandes categorías:
codificadores de forma de onda, vocoders y codificadores híbridos. Los codificadores
de forma de onda intentan aproximar directamente la forma de onda de la señal original.
La señal reconstruida puede o no parecerse a la señal original. Los vocoders, por su
parte, intentan aproximar el sonido, por lo que la forma de onda de la señal reconstruida
12
Introducción
puede o no parecerse a la original. A los codificadores que emplean propiedades de los
codificadores de forma de onda y vocoders se les llama codificadores híbridos. A
continuación se muestra una clasificación de los codificadores [Koo, 2002].
Tipo
Algoritmo de codificación
Codificadores de forma de PCM (Pulse-Code Modulation), APCM (Adaptive
onda
PCM)
DPCM (Differential PCM), ADPCM (Adaptive
DPCM)
DM (Delta Modulation), ADM (Adaptive DM)
CVSD (Continuously Variable-Slope DM)
APC (Adaptive Predictive Coding)
SBC (Subband Coding)
ATC (Adaptive Transform Coding)
Codificadores híbridos
MPLP (Multipulse-Excited Linear Prediction)
RPE (Regular Pulse-Excited linear prediction)
RELP (Residual-Excited Linear Prediction)
VSELP (Vector-Sum Excited Linear Prediction)
CELP (Code-Excited Linear Prediction)
ACELP (Algebraic CELP)
CS-ACELP (Conjugated Structure ACELP)
Vocoders
Canal, Formante, Fase, Cepstral o Homomórfico
LPC (Linear Predictive Coding)
MELP (Mixed-Excitation Linear Prediction)
STC (Sinusoidal Transform Coding)
MBE (Multiband Excitation), MBE mejorada
Tabla 2.- Clasificación de los codificadores más importantes
1.2.2.1 Codificadores de forma de onda
La base de los codificadores de forma de onda es que la envolvente de la señal
reconstruida se parezca lo máximo posible a la de la señal original, sin ningún tipo de
información sobre cómo se generó la señal a codificar. Por lo tanto, en teoría, este tipo
de decodificadores deberían ser independientes de la señal de entrada y trabajar para
todo tipo de señales, tanto vocales como no vocales. Los codificadores de forma de
onda producen una buena calidad de la señal de voz con tasas de bit alrededor de 16
kbit/s, presentando una degradación aceptable en presencia de ruido y errores de
transmisión. Sin embargo, al disminuir la tasa de bit por debajo de 16 kbit/s, la calidad
de la señal se deteriora rápidamente. Para obtener la misma calidad que los vocoder
necesitan trabajar con tasas de bit superiores a éstos. Hay dos tipos de codificadores de
forma de onda, que son:
-
Codificadores en el dominio del tiempo. Existen distintas técnicas de
codificación según la forma de transmisión de la información de la señal digital.
Se puede transmitir en la amplitud de los pulsos (PAM, Pulse Amplitude
Modulation), en la posición (PPM, Pulse Position Modulation), en la anchura
(PWM, Pulse Width Modulation), etc. La técnica más ampliamente utilizada es
la conocida como modulación por código pulsado, PCM (Pulse Code
13
Introducción
Modulation), en la que se realiza un muestreo y cuantización de la señal de
entrada, es decir de la señal de voz original. Otras técnicas muy usadas se basan
en que existe una considerable correlación entre muestras adyacentes y lo que se
transmite es la diferencia respecto a la muestra anterior. Se predice la siguiente
muestra a partir de la anterior. Pueden ser DPCM (Differential Pulse Code
Modulation) y ADPCM (Adaptative Differential Pulse Code Modulation). A
este tipo de codificadores que emplean predictores se les denomina
codificadores predictivos.
-
Codificación en el dominio de la frecuencia. Puede ser a su vez por sub-banda y
por transformada. Para el caso de sub-banda se divide la señal en un número de
componentes en frecuencias separadas y se codifican independientemente. El
número de bits asignados a cada banda depende de su importancia espectral.
Generalmente en el caso de la voz, se usan más bits para las frecuencias bajas
con el fin de preservar el pitch y la información de los formantes.
Por otra parte, la codificación de la forma de onda en el dominio de la frecuencia
por transformada consiste en una transformación por bloques, de forma que se
realiza una transformación a un dominio diferente y se codifican los coeficientes
de la transformación. Esta forma de codificación es muy compleja, y como
ejemplos se tienen las técnicas DCT (Discrete Cosine Transform) y DFT
(Discrete Fourier Transform).
1.2.2.2 Vocoders
Los vocoders (Voice Coders) intentan generar una señal de voz que suene igual
que la original, independientemente de si la forma de onda se parece o no. En el emisor
se analizan la señal de voz y se extraen los parámetros del modelo y la excitación. Estos
parámetros son cuantizados y transmitidos al receptor, donde la señal de voz se
reconstruye en base a ellos. Por esta razón, a los vocoders también se les llama
codificadores paramétricos. Los vocoders pueden, por norma general, conseguir una
mayor compresión de la voz que los codificadores de forma de onda, sin embargo, se les
reconoce por la calidad artificial o innatural de la voz que generan, excepto por las
recientes mejoras efectuadas en algunos, como por ejemplo el MELP.
El vocoder más utilizado es el de predicción lineal LPC (Linear Predictive
Code), que supone que cada muestra puede obtenerse a partir de una combinación lineal
de las anteriores, aceptándose un filtro todo polo para modelar el tracto vocal. La
expresión para realizar la decodificación sería la siguiente:
p
s n = ∑ a k s n−k
(1.1)
k =1
donde sn es la muestra actual, sn-k son las muestras precedentes, ak son los coeficientes
del filtro, que se calculan para minimizar el error de la muestra actual y su predicción, y
p es el orden del filtro.
14
Introducción
El método LPC ha sido empleado desde hace mucho tiempo. La compañía Texas
Instruments desarrolló un circuito integrado PMOS monolítico con un sintetizador de
voz allá por el año 1978 [Ozun et al., 2002]. Este hecho constituyó la primera vez que el
tracto vocal humano era duplicado electrónicamente en un solo chip de silicona. Este
primer sintetizador de voz se basó en el análisis LPC para realizar la síntesis con éxito.
Permite codificar la voz con tasas de bits bajas. Para un LPC de orden 10 la tasa de bit
ronda los 2,4 kbit/s. Aunque el método da como resultado una señal de voz que suena
artificial, es inteligible. Este método tiene extensos usos en aplicaciones militares,
donde una calidad alta de la voz no es tan importante como una tasa baja de bit para
permitir una fuerte encriptación de la información. Sin embargo, el mercado comercial
requiere una alta calidad de la señal de voz y se han buscado otras técnicas para
mejorarla, que normalmente incluyen un aumento de la tasa de bit.
1.2.2.3 Codificadores híbridos
Los codificadores híbridos son una mezcla de los dos tipos anteriores,
mezclando la alta capacidad de compresión de los vocoders con la gran calidad de
reproducción de los codificadores de forma de onda. Producen una señal de buena
calidad con tasas de bit medias o bajas. Utilizan un modelo paramétrico de producción
de voz y tratan de preservar las partes más importantes, perceptualmente hablando, de la
forma de onda de la señal de entrada. Existen varios tipos:
-
RELP (Residual Excited Linear Prediction). Cuando la señal de voz se pasa a
través de un predictor lineal se elimina la correlación entre tramas. Si la
predicción es bastante buena, la salida del predictor será aproximadamente ruido
blanco, espectralmente plano. El residuo contiene toda la información de
excitación y cualquier información que el filtro LPC no considera (fase,
información de pitch, nasalidad, etc.). La idea del RELP es que una pequeña
parte del residuo se transmite y a partir de él se reconstruye el residuo completo
en el receptor.
Aunque el concepto de codificación residual se usa también en ADPCM, RELP
es diferente en el hecho de que la codificación del residuo se basa en el espectro
en lugar de en la forma de onda. RELP opera en el rango de 6 a 9,6 kbit/s.
-
MPLP (Multi_Pulse Linear Prediction). Los vocoders clasifican los sonidos en
sonoros y no sonoros, pero no consideran una mezcla de ambos, por lo que su
calidad es baja. Para solucionar este problema se utiliza el codificador
multipulso.
El período de pitch produce una correlación de retardo largo que no se elimina
con el filtro LPC. Esta correlación puede hacerse desaparecer usando un
segundo predictor lineal, llamado predictor de pitch o filtro de pitch, cuya
expresión es la siguiente:
P ( z ) = 1 − ∑ β i z − M −i
i
15
(1.2)
Introducción
donde βi son los coeficientes del filtro, M es el factor que tiene en cuenta el
retardo de término largo e i varía entre uno y el orden del filtro. La salida de este
predictor es aproximadamente ruido gaussiano.
En este codificador se pasa a los dos filtros una serie de impulsos (entre cuatro y
seis) como excitación. Las posiciones y amplitudes se determinan usando un
procedimiento de análisis por síntesis, consistente en elegir el conjunto de
impulsos que produce el menor error entre la señal original y la reconstruida a
partir de ellos. La calidad de los codificadores MPLP es muy buena a partir de
tasas de bit de 9,6 kbit/s.
Una variación del codificador MPLP consiste en elegir como secuencia de
excitación patrones de pulsos regularmente espaciados. Es el codificador
llamado RPE (Regular Pulse Excitation), que es usado en GSM. Un factor típico
de espaciado de los pulsos es 3-4, siendo actualizada la posición del primer
pulso cada 5 ms. El número de pulsos existentes cada 5 ms es del orden de 1013, obteniéndose sus amplitudes mediante la resolución de un conjunto de
ecuaciones lineales.
-
CELP (Code Excited Linear Prediction). En este codificador la secuencia de
excitación del filtro de pitch se elige de lo que se conoce como “diccionario”. El
diccionario está formado por un conjunto de secuencias de ruido blanco
gaussiano, cada una identificada por un índice dentro del mismo. Se realiza un
proceso de análisis por síntesis para determinar la secuencia de ruido y las
ganancias óptimas. Al receptor, por tanto, sólo se le envía el índice del
diccionario y la ganancia. Este tipo de codificadores consigue buena calidad de
voz a 4,8 kbit/s, aunque presenta el inconveniente de que la búsqueda en el
diccionario requiere mucha carga computacional.
1.2.2.4 Otros codificadores
Existen otros tipos de codificadores con diferentes métodos de codificación,
como por ejemplo, los codificadores de subbanda, donde la señal de entrada se filtra a
través de un banco de filtros sintonizados a diferente frecuencia. Este tipo de
codificadores no son muy usados para codificar voz, ya que es muy difícil obtener una
buena calidad de la voz con una tasa de bits relativamente baja. De ahí que sólo se
emplee para aplicaciones de codificación de voz con tasas de bits medias o altas.
1.2.2.5 Sistemas de codificación usados en la práctica
Los sistemas de codificación más utilizados en la práctica para las diferentes
redes existentes son [Gómez et al., 2001]:
16
Introducción
1.2.2.5.1 Red GSM
-
Codificación Half Rate (5,6 kbit/s).
Codificación Enhace Full Rate (12,2 kbit/s).
Codificación Full Rate (13 kbit/s).
1.2.2.5.2 Red UMTS
Se utiliza la codificación Adaptative Multi Rate (AMR) (variable de 12,2 kbit/s a
4,75 kbit/s). Este codificador se va a usar en los servicios móviles de tercera generación
denominados IMT-2000 (en telecomunicaciones móviles internacionales).
Dentro de este sistema se encuentra el estándar europeo denominado UMTS
(Sistema Universal de Telecomunicaciones Móviles) que utiliza este codificador.
1.2.2.5.3 Red telefónica fija
Codificación Ley-A para telefonía fija, norma G.711 (64 kbit/s).
1.2.2.5.4 Internet (voz sobre IP, VoIP)
-
Codificación G.711 (64 kbit/s)
Codificación G.722 (ADPCM, 64 kbit/s)
Codificación G.728 (16 kbit/s)
Codificación G.729 (8 kbit/s)
Codificación G.723.1 (5,3 kbit/s y 6,3 kbit/s)
Por último, se presenta una tabla comparativa de los estándares y codificaciones
más utilizados, comparando las características más importantes de cada uno de ellos
[Wong et al., 1996]:
17
Introducción
Standard
Año
Tipo de código
Tasa de bit
(kbit/s)
MOS
Retraso alg.
(ms)
ITU-G.711
1972
PCM
64
4..3
0.125
ITU-G.721
1984
ADPCM
32
4.0
0.125
ITU-G.726
1991
VBR-ADPCM
16, 24, 32 y 40
2.0, 3.2, 4.0 y 4.2
0.125
ITU-G.727
1991
Embedded-ADPCM
16, 24, 32 y 40
—
0.125
ITU-G.728
1992
LD-CELP
16
4.0
0.625
APC
9.6/16
Comunicación
20
Inmarsat-B
GSM Full-rate
1989
LTP-RPE
13
3.7
20
GSM-EFR
1995
ACELP
13
4.0
20
Skyphone
1989
BT-MPLPC
8.9
3.5
28
DAMPS Full-rate IS54
1991
VSELP
7.95
3.6
20
ITU-G.729
1995
CS-ACELP
8
4.0
15
IS-96
1991
Qualcomm CELP
1, 2, 4 y 8
3.5
—
Full-rate VSELP
6.7
Comunicación
20
JDC Japanese
GSM Half-rate
1994
VSELP
5.6
3.5
24.375
ITU-G.723
1995
A/MP-MLQ CELP
5.27/6.3
Comunicación
37.5
American DOD FS1016
1990
CELP
4.8
3.0
45
TETRA
1994
ACELP
4.56
Comunicación
35
Inmarsat-M
1990
IMBE
4.15
3.4
78.75
JDC Japanese Half-rate
1993
PSI-CELP
3.45
Comunicación
40
American DOD FS1015
1984
LPC-10
2.4
sintética
22.5 (mínimo)
Tabla 3.- Comparación de estándares más usados
18
Revisión teórica
2
Revisión teórica
2.1 Codificación de voz mediante predicción lineal
2.1.1 Introducción
Muchos de los modernos codificadores de señales de voz (entre ellos el
codificador objeto de este estudio) están basados en un modelo de filtro fuente de
producción de voz en los seres humanos. En dichos códigos un filtro de síntesis, que
modela a grandes rasgos el tracto vocal humano, es atravesado por una señal de
excitación, que esencialmente modela el flujo de aire a través de las cuerdas vocales. El
filtro de síntesis se puede modelar usando predicción lineal. La tasa a la que la forma
del tracto vocal cambia está limitada, y normalmente una actualización cada 50 Hz es
suficiente para que el modelo dé resultados aceptables. Por ello, el análisis LP se realiza
generalmente una vez cada trama de 20 ms, es decir, si se trabaja con una frecuencia de
muestreo de 8000 Hz, las ventanas serían de 160 muestras.
Este enventanado, necesario para el cálculo por bloques ó tramas de los
parámetros LP, es el responsable del retardo que introducen estos esquemas de
codificación en la transmisión de la señal de voz. Por ello, casi todos los esquemas de
codificación mediante predicción lineal utilizan ventanas asimétricas que evitan el
aumento de ese retardo.
19
Revisión teórica
Figura 8.- División de una señal vocal en tramas
Antes de poder extraer los parámetros de una señal de voz, es necesario tener un
modelo teórico del análisis a realizar. En el procesado de voz se usa un modelo de filtro
fuente de producción de voz. Un diagrama de bloques simplificado se muestra en la
figura 9. En este modelo, la señal de excitación se modela, bien como un tren de pulsos,
para señales sonoras, bien como ruido aleatorio, para señales no sonoras. Las
contribuciones espectrales combinadas de la glotis, el tracto vocal y de la posición de
los labios se representa mediante un filtro digital variante en el tiempo.
Periodo de pitch
Coeficientes LPC
Generador
de tren de
impulsos
Interruptor
Sonoro/no
Sonoro
Filtro
variante en
el tiempo
Generador
de ruido
aleatorio
Señal de
Salida
Ganancia
Figura 9.- Diagrama de bloques del modelo simplificado de producción de voz
A continuación puede verse cómo sería todo el proceso gráficamente, tanto para
una señal sonora, a partir de un tren de pulsos, (figura 10) como para una señal no
sonora, a partir de una señal aleatoria (figura 11):
20
Revisión teórica
Figura 10.- Representación gráfica de una señal sonora al atravesar el diagrama de producción
de voz en el espacio del tiempo y la frecuencia. En primer lugar, el tren de pulsos, después el
filtro LP (variante en el tiempo) y por último el resultado de pasar el tren de pulsos por el filtro,
que sería la señal de voz
Figura 11.- Representación gráfica de una señal no sonora al atravesar el diagrama de
producción de voz en el espacio del tiempo y la frecuencia. En primer lugar, una señal aleatoria,
después el filtro LP (variante en el tiempo) y por último el resultado de pasar la señal aleatorias
por el filtro, que sería la señal de voz
21
Revisión teórica
2.1.2 Desarrollo matemático
La idea básica del análisis mediante predicción lineal es que la muestra de voz
actual se puede aproximar por una combinación lineal de las p muestras anteriores, esto
es [Kondoz, 1994]:
p
~
s (n ) = ∑ a k s (n − k )
(2.1)
k =1
donde s(n) y ~
s (n ) son la muestra de voz original y la muestra de voz predicha en el
instante de tiempo discreto n, p es el orden del análisis y a1,…, ap son los coeficientes
de predicción lineal ó coeficientes LPC. El orden p del sistema se elige de forma que la
estimación de la envolvente del espectro sea adecuada. Una regla común es permitir un
par de polos para cada formante del espectro. Para una señal muestreada a 8 kHz, el
valor de p suele ser 10.
La función de transferencia H(z) del modelo de predicción lineal de la señal de
voz se conoce como filtro de predicción lineal ó filtro todo polo de la señal, y es
H (z ) =
G
A( z )
(2.2)
donde G es la ganancia y el filtro A(z) se conoce como el filtro inverso ó blanqueador de
H(z), definido como
p
A( z ) = 1 − ∑ a k z − k
(2.3)
k =1
Los coeficientes LPC se pueden resolver usando, por ejemplo, el método de
autocorrelación. Este método da lugar a una matriz de autocorrelación que tiene una
estructura de Toeplitz y, de esta forma, los coeficientes LPC se pueden resolver a través
de algoritmos computacionalmente rápidos como el de Levinson-Durbin. Se resolvería
como sigue:
Si se pasa la ecuación (2.3) al dominio del tiempo (muestral), se obtiene una
ecuación conocida como ecuación LPC diferencial:
~
p
S (z )
H (z ) =
←
→ ~
s (n ) = s (n ) + ∑ a k ~
s (n − k )
S (z )
k =1
(2.4)
Si se considera una estimación de los parámetros ak, el error ó residuo del
sistema viene dado por:
p
e(n ) = s (n ) − ~
s (n ) = s (n ) − ∑ a j s (n − j )
j =1
donde los parámetros aj son las estimaciones de los coeficientes del filtro LPC, ak.
22
(2.5)
Revisión teórica
Es posible determinar esas estimaciones de los coeficientes del filtro,
minimizando el error cuadrático medio, que se obtiene a partir del error dado en la
ecuación (2.5).
2
2
p
p

 


E = Ε e (n ) = Ε s (n ) − ∑ a j s (n − j )  = ∑  s (n ) − ∑ a j s (n − j )
j =1
j =1

  n 

{
2
}
(2.6)
Para minimizar este error cuadrático medio se calcula la derivada parcial de E
respecto a ai y se iguala a cero para valores de i desde i = 1,…., p.
p


∂E

= Ε  s (n ) − ∑ a j s(n − j ) ⋅ s (n − i ) = 0
∂a i


j =1

para i = 1,..., p
(2.7)
Las representaciones de la señal de voz original y del error de predicción lineal
pueden verse en las figuras 12 y 13. Se puede apreciar cómo se ha eliminado gran parte
de la redundancia de la señal, si bien todavía se aprecia una cierta periodicidad. En el
dominio de la frecuencia puede verse que el espectro es más plano que el original.
Figura 12.- Señal de voz original y error de predicción lineal en el tiempo
Figura 13. Señal de voz original y error de predicción lineal en la frecuencia
23
Revisión teórica
Esta igualdad implica que la señal error, e(n), y la señal de salida, s (n ) , son
ortogonales para i = 1,…, p. Se puede rescribir la ecuación, introduciendo la
correlación,
φ n (i,0) = Ε[s (n )s (n − i )] = s (n ) ⋅ s (n − i ) y
φ n (i, j ) = Ε[s (n − j )s(n − i )] = s (n − j ) ⋅ s (n − i )
(2.8)
y, sustituyendo en la ecuación (2.7)
p
∑ a φ (i, j ) = φ (i,0)
j =1
j
n
n
para i = 1,..., p
(2.9)
Si se asume que la señal del modelo es estacionaria, lo cual viene a ser una
aproximación realista para segmentos de voz pequeños, se pueden acotar los sumatorios
al calcular la correlación.
φ n (i, j ) = E{s (n − i )s (n − j )} = ∑ s n (m − i )s n (m − j ), para i = 1,..., p, j = 0,..., p
(2.10)
m
Para resolverlo se usará la aproximación del método de autocorrelación,
anteriormente comentada, ya que es el más empleado y el que se usará a la hora de
implementar el codificador.
Si se toma un segmento de la señal, fuera del intervalo comprendido por el
segmento que se está analizando, 0 ≤ m ≤ L-1, los valores serán 0. (L es el tamaño de la
trama del análisis LPC). Como se intenta predecir los valores de las muestras L ≤ m ≤
L+p, que son cero para el segmento actual, el error de predicción no será cero para esas
muestras. Igualmente, el principio de la trama actual puede verse afectado, por la misma
razón, por los errores en la trama anterior. Si tenemos en cuenta que lo que se quiere es
predecir las tramas futuras, los límites de la ecuación (2.10) pueden ponerse de la
siguiente manera:
φ (i, j ) =
L + p −1
∑ s(n − i )s(n − j ),
1 ≤ i ≤ p, 0 ≤ j ≤ p
(2.11)
n=0
Tomando m = n − i , la ecuación se puede expresar como
φ (i, j ) =
L −1− ( i − k )
∑ s(m)s(m + i − j )
(2.12)
m =0
Por lo tanto, φ (i, j ) es la autocorrelación de corto plazo de s (m ) evaluada para
(i − j ) . Esto es:
φ (i, j ) = R(i − j )
donde
24
(2.13)
Revisión teórica
R( j ) =
L −1− j
∑
n=0
L −1
s (n )s (n + j ) = ∑ s(n )s(n − j )
(2.14)
n= j
Por lo tanto, el conjunto de p ecuaciones de (2.9) se puede expresar como
∑ a R( i − j ) = R(i ),
p
j =1
i = 1, ..., p
j
(2.15)
La ecuación de arriba se expresa en forma matricial
R(1)
R(2 ) L R( p − 1)  a1   R(1) 
 R(0 )


  
R(2 )
R(3) L R( p − 2 )  a 2   R(2) 
 R(1)
 
 R(2 )
R(3)
R(4 ) L R( p − 3) a 3  =  R(3) 




M
M
M
O
M

 M   M 
 
 R( p − 1) R( p − 2 ) R( p − 3) L
R(0 )  a p   R( p ) 

(2.16)
La matriz pxp de los valores de la autocorrelación es una matriz simétrica de
Toepliz, es decir, todos los elementos de cada una de las diagonales son iguales. Esta
propiedad especial puede ayudarnos a obtener un algoritmo eficiente para solucionar la
ecuación (2.16). La solución más eficiente es un método recursivo conocido como
algoritmo de Levinson-Durbin, que es el siguiente:
E (0 ) = R(0 )
Desde i = 1 hasta p
i −1


(
)
R
i
a (ji −1) R(i − j )

∑
j =1

ki = 
E (i − 1)
a i(i ) = k i
(2.17)
Desde j = 1 hasta i − 1
a (ji ) = a (ji −1) − k i a i(−i −j1)
(
)
E (i ) = 1 − k i2 E (i − 1)
La solución final viene dada como:
a j = a (j p )
j = 1, ... , p
(2.18)
La cantidad E (i ) del algoritmo es el error de predicción de un predictor de orden
i. Las cantidades intermedias ki se conocen como coeficientes de reflexión. Los valores
de los coeficientes de reflexión están en el rango:
− 1 ≤ ki ≤ 1
(2.19)
25
Revisión teórica
Esta condición impuesta a los coeficientes de reflexión es suficiente para que
todas las raíces del polinomio A( z ) estén dentro del círculo unidad, garantizando de
esta manera la estabilidad del sistema H ( z ) .
Existen otros métodos para la resolución de la ecuación (2.4) como son: el
método de la covarianza, donde se minimiza el error E de la ecuación (2.6) sobre un
intervalo finito; el método lattice de covarianza, que calcula los coeficientes de
reflexión directamente de las muestras de la señal.
La cuantificación y transmisión de los parámetros LP debe hacerse asegurando
tanto la estabilidad del filtro de síntesis (para evitar generar ruidos de alta intensidad en
el receptor), como la facilidad en la interpolación entre parámetros de tramas
consecutivas (que permite aumentar la naturalidad de la voz decodificada). Ambas
condiciones se obtienen recurriendo al uso de parámetros LP equivalentes, como son los
Logaritmos de las Relaciones de Área (LAR) ó los Pares de Línea Espectrales (LineSpectrum Frecuencias, LSF). Son estos últimos, los coeficientes LSF, los que se utilizan
en todos los estándares posteriores al GSM 6.10 (Full Rate, FR), ya que aportan
ventajas algorítmicas claras para ser cuantizados vectorialmente y, de esta forma,
permiten reducir la tasa binaria necesaria para su transmisión, sin introducir
degradaciones perceptibles en la voz decodificada.
Casi todos los estándares de codificación de voz que se han aprobado en los
últimos años se basan en la codificación mediante la predicción lineal, basada en el
análisis por síntesis. Dentro de este tipo de codificadores podemos incluir a los de las
recomendaciones de la ITU G.729 (que se ampliará más adelante), G.728 y G.723.1; y
todos los estándares que se emplean actualmente en la tecnología digital celular, tanto
en Europa (GSM full-rate, half-rate y enhanced full-rate), Norteamérica (full-rate y
enhanced full-rate para sistemas por división en el tiempo (TDMA), o por división en
células (CDMA)) y Japón (full-rate y half-rate) [Gutiérrez et al.,2001].
26
Revisión teórica
2.2 Coeficientes LSF
2.2.1 Definición y características
El principal objetivo del proceso de cuantización de los coeficientes LPC es su
codificación con el menor número de bits posibles sin introducir distorsión adicional en
su espectro.
Desde los inicios de la codificación de las señales de voz se han empleado varios
métodos de cuantización para los coeficientes LP. Se han establecido una serie de
características que debe cumplir una representación ideal. En primer lugar, es necesario
que el filtro de predicción lineal permanezca estable después de la cuantización.
Segundo, la representación debe ser reversible de forma que el filtro original se pueda
recuperar de la transformación. Tercero, un pequeño error en los parámetros se debe
corresponder con una pequeña desviación del espectro de potencia LP, es decir, los
parámetros deben tener sensibilidad espectral propia.
A lo largo de los años se han propuesto diversas representaciones desde los
primeros estudios sobre representaciones alternativas para los coeficientes de predicción
lineal allá por finales de los setenta. Uno de los primeros estudios, realizado por Gray et
al. en 1977 comparaba los coeficientes de reflexión, los coeficientes LAR (Logarithmic
Area Ratio) y el arcocoseno de los coeficientes de reflexión, y demostraba que los dos
últimos eran igualmente buenos para la cuantización, mientras que los coeficientes de
reflexión daban resultados ligeramente más pobres.
A partir de los años 80 el método de parametrización más empleado para la
cuantización de los parámetros del filtro LP es la representación mediante coeficientes
de pares del espectro en frecuencia (LSF) que, debido a sus propiedades, ofrece más
ventajas que las representaciones anteriormente comentadas, tanto para la cuantización
escalar como para la vectorial. Según diversos estudios puede llegar a reducir la tasa de
bit entre un 25 y un 30 % con respecto a las demás [Zheng et al., 1999].
La representación mediante pares del espectro de frecuencia (LSF), también
conocida como representación mediante pares del espectro lineal (LSP), dependiendo
del dominio en el que se trabaje, fue propuesta por Itakura [Itakura, 1975] como una
representación paramétrica alternativa de los coeficientes de predicción lineal. La
representación LSF, tiene numerosas cualidades, entre las que destacan un rango
limitado, un orden secuencial de los parámetros y una simple revisión de la estabilidad
del filtro, lo que la hace interesante para la cuantización. Además, la representación LSF
es una representación en el dominio de la frecuencia y, por lo tanto, puede usarse para
explotar propiedades de los sistemas de percepción humana.
Puede comprobarse que de dos a tres parámetros LSF caracterizan la frecuencia
de un formante y que el ancho de banda de éste depende de la cercanía de los
correspondientes parámetros LSF. Por otro lado, los parámetros LSF aislados afectan a
la caída ó inclinación del espectro. Este comportamiento puede verse en la figura 14.
27
Revisión teórica
Figura 14.- Espectro de frecuencia de un tramo de voz con la posición de los coeficientes LSF
Los coeficientes LSF son 417, 735, 881, 1198, 1343, 1720, 2402, 2654, 3047 y 3409 Hz
Otro detalle a destacar es que durante los fonemas sonoros los parámetros LSF
varían solo ligeramente, sin embargo, durante los fonemas sordos pueden variar
rápidamente. Es más, durante los cambios de fonemas sordos a sonoros ó de sonoros a
sordos puede haber cambios considerables en el espectro. Incluso durante los silencios
entre fonemas los parámetros LSF varían considerablemente. Resumiendo, tanto el
espectro de la señal de voz como los parámetros LSF tienen partes redundantes, junto
con partes impredecibles y que cambian rápidamente. Este fenómeno se observa
principalmente en los parámetros LSF más bajos, que se mantienen más o menos en el
mismo estado durante cientos de milisegundos y de repente cambian a otros. Sin
embargo, hay que tener en cuenta que estos fenómenos son claramente observables en
ambientes carentes de ruido, en ambientes ruidosos no son siempre tan evidentes.
Otra de las características importantes de los parámetros LSF es su sensibilidad
espectral localizada, de la cual carecen otras representaciones como la representación
mediante coeficientes de reflexión ó mediante logarithmic area ratios (LAR). Puede
demostrarse que modificando ligeramente uno de los parámetros LSF se produce un
cambio en la respuesta en magnitud solo en las frecuencias cercanas a la frecuencia del
parámetro modificado. En este punto, hay que tener en cuenta que si la modificación
introducida en el parámetro LSF es del orden de la distancia que lo separa de los
parámetros más cercanos al mismo, toda la respuesta en magnitud sufre variaciones.
28
Revisión teórica
Figura 15.- Efecto de la variación de los coeficientes LSF en el espectro de la señal
Se ha marcado en azul la posición original de cada uno de los dos coeficientes modificados
y en color verde y rojo donde quedarían esos coeficientes tras la modificación
Esta propiedad de los parámetros LSF tiene diversas ventajas:
-
En primer lugar, la representación mediante parámetros LSF tolera pequeños
errores en los mismos, es decir, pequeños errores tienen una repercusión
pequeña en la respuesta en magnitud del correspondiente filtro LP.
-
Cada uno de los parámetros de un vector LSF puede ser cuantizado
independientemente sin filtraciones de distorsión en la cuantización de una
región espectral a otra.
-
Se pueden dar pesos diferentes a cada uno de los parámetros LSF en función de
la importancia en el espectro de la señal de voz. Generalmente las áreas de los
formantes, los picos, son más importante que los valles del espectro y, por ello,
se le puede dar mayor peso a las frecuencias espectrales cercanas a los
formantes.
El oído humano no es capaz de distinguir diferencias a altas frecuencias
con tanta precisión como a bajas frecuencias, lo que nos permite cuantizar los
parámetros LSF en frecuencias más altas con menos precisión que los que tienen
frecuencias menores.
29
Revisión teórica
2.2.2 Conversión LP -> LSF
Los coeficientes de filtro de predicción lineal (LP), ai, i = 1,…, 11, se convierten
para los efectos de cuantificación e interpolación en coeficientes de pares del espectro
lineal (LSP). El filtro inverso A( z ) asociado con el análisis LPC de orden p satisface la
siguiente relación recursiva.
An ( z ) = An −1 ( z ) − k n z n An −1 (z −1 ),
n = 1, ..., p
(2.20)
con A0 ( z ) = 1 y k n siendo el coeficiente de reflexión de orden n. Si extendemos el orden
del filtro a p + 1 la ecuación queda
( )
A p +1 ( z ) = A p ( z ) − k p +1 z − ( p +1) A p z −1
(2.21)
Si se toman en consideración las dos condiciones límite k p +1 = 1 y k p +1 = −1 ,
que corresponden, respectivamente, a un completo cierre y a una completa apertura de
la glotis, teniendo en cuenta el modelo acústico de la voz, se obtienen los polinomios:
( )
(2.22)
( )
(2.23)
P( z ) = A( z ) + z −( p +1) A z −1 = 1 + p1 z −1 + p 2 z −2 + K + p 2 z −( p −1) + p1 z − p + z − ( p +1)
para k p +1 = −1 , y
Q( z ) = A( z ) − z − ( p +1) A z −1 = 1 + q1 z −1 + q 2 z −2 + K − q 2 z −( p −1) − q1 z − p − z − ( p +1)
para k p +1 = 1 .
El polinomio P( z ) es simétrico y el polinomio Q(z ) es antisimétrico. Puede
demostrarse que A( z ) es de fase mínima (lo cual implica la estabilidad de H ( z ) ) y que
todas las raíces de estos polinomios se encuentran dentro del círculo unidad y se
alternan entre sí. P( z ) tiene una raíz z = −1 (ω = π ) , mientras que Q(z ) tiene una raíz
z = 1 (ω = 0) . Esto puede apreciarse en la figura 16.
(
P( z ) = 1 + z −1
(
Q( z ) = 1 − z −1
) ∏ (1 − 2 p z
) ∏ (1 − 2q z
−1
i
+ z −2
i =1, 3,..., p −1
−1
i = 2 , 4 ,..., p
i
+ z −2
)
)
(2.24)
Ambas raíces se eliminan al definirse dos nuevos polinomios a partir de los dos
anteriores.
(
)
F ( z ) = Q( z ) (1 − z )
F1 ( z ) = P( z ) 1 + z −1
(2.25)
−1
2
30
Revisión teórica
Figura 16.- Diagrama polo-cero de los vectores P(z) y Q(z)
Cada uno de estos polinomios tiene todas sus raíces (conjugadas) en el círculo
unidad ( e ± jω i ), que pueden expresarse como:
F1 ( z ) =
F2 ( z ) =
∏ (1 − 2 p z
−1
i
+ z −2
i =1, 3,..., p −1
∏ (1 − 2q z
i = 2 , 4 ,..., p
i
−1
+ z −2
)
)
(2.26)
donde pi = q i = cos(ω i ) = cos(2πf i ) . Los coeficientes ω i ( f i ) son las frecuencias
espectrales de línea ó pares espectrales de línea (parámetros LSF) y satisfacen la
propiedad de ordenación 0 < ω1 < ω 2 < K < ω p < π . Los coeficientes pi = qi se
definen como coeficientes LSP en el dominio coseno.
Puesto que los polinomios F1(z) y F2(z) son simétricos, sólo es necesario calcular
los primeros p/2 coeficientes de cada uno. Los coeficientes de éstos polinomios se
obtienen mediante las relaciones recursivas:
f 1 (i + 1) = ai +1 + a p −i − f 1 (i )
f 2 (i + 1) = ai +1 − a p −i + f 2 (i )
i = 0,..., p 2 − 1
i = 0,..., p 2 − 1
(2.27)
donde f1(0) = f2(0) = 1,0. Los coeficientes LSP se obtienen evaluando los
polinomios F1(z) y F2(z) en 60 puntos igualmente espaciados entre 0 y π y controlando
los cambios de signo. Todo cambio de signo implica la existencia de una raíz y el
intervalo de cambio de signo se divide entonces cuatro veces, para permitir un mejor
seguimiento de la raíz. Se utilizan los polinomios de Chebyshev para evaluar F1(z) y
31
Revisión teórica
F2(z). Por este método, las raíces se obtienen directamente en el dominio coseno. Los
polinomios F1(z) y F2(z), evaluados en z = e ± jω , pueden expresarse como:
F (ω ) = 2e − j 5ω C ( x )
(2.28)
siendo
C ( x ) = T5 ( x ) + f (1)T4 ( x ) + f (2 )T3 ( x ) + f (3)T2 ( x ) + f (4 )T1 (x ) + f (5) 2
(2.29)
donde Tm(x) = cos(mω) es el polinomio de Chebyshev de m-ésimo orden y f(i) ,i = 1,…,
5, representa los coeficientes de F1(z) o F2(z), calculados mediante la ecuación (2.28).
El polinomio C(x) se evalúa para un determinado valor de x = cos(ω) mediante la
ecuación recursiva:
para k = de 4 a 1
bk = 2 xbk +1 − bk + 2 + f (5 − k )
fin
C ( x ) = xb1 − b2 − f (5) 2
siendo los valores iniciales b5 = 1 y b6 = 0.
32
(2.30)
Revisión teórica
2.3 Codificación predictiva mediante análisis por síntesis
2.3.1 Introducción
Los codificadores de forma de onda proporcionan gran calidad de la señal de
voz, pero solo trabajando con tasas de bit por encima de los 16 kbit/s. Los vocoders
LPC, en cambio, operan a tasas de bit muy bajas, hasta 2 kbit/s, pero la calidad de la
señal de voz sintetizada es bastante pobre.
La principal limitación de los codificadores LPC es la consideración de que las
señales de voz o son sonoras o son no sonoras, de ahí que la fuente de excitación de la
señal de voz del filtro de síntesis de predicción lineal sea o un tren de pulsos (para
señales sonoras) o un ruido aleatorio (para señales no sonoras). Esta consideración es
una simplificación demasiado grande para conseguir una buena calidad de señal de voz.
En 1982, Atal propuso un nuevo modelo de excitación conocido como excitación por
multi-pulso (MPLPC), que usa un modelo parecido al de los codificadores de forma de
onda y no requiere ningún conocimiento a priori sobre si la señal de voz es sonora o no
sonora. La excitación se modela por un número de pulsos (normalmente 4 ó 5) cuyas a
amplitudes y posiciones son determinadas mediante un proceso de optimización en
bucle cerrado (minimizando el error porcentual ponderado entre la señal original y la
sintetizada), y no usando el error entre el residuo y su versión cuantizada, como se hace
en los codificadores que usan bucle abierto.
La irrupción de ese modelo dio paso a una nueva generación de codificadores de
voz por análisis mediante síntesis capaces de producir alta calidad de señal de voz a
tasas de bit sobre 10 kbit/s, llegando incluso a los 4,8 kbit/s. Esta nueva generación de
codificadores usa el mismo filtro de síntesis todo polo (fuente del modelo de producción
de voz) que usaban los vocoders LPC. Sin embargo, la señal de excitación es
cuidadosamente optimizada y eficientemente codificada usando técnicas de codificación
de forma de onda.
Todos los codificadores que utilizan análisis mediante síntesis comparten la
misma estructura básica en la cual la excitación es calculada minimizando el error
porcentual ponderado entre la señal de voz original y la señal sintetizada. La diferencia
estriba en la forma de modelar la excitación. El modelo tiene una serie de parámetros
que se pueden variar produciendo diferentes rangos en la señal de voz sintetizada.
Variando los parámetros del modelo de una forma sistemática se puede obtener un
juego de los mismos que produzca una señal sintetizada que coincida con la señal
original salvo un mínimo error. La complejidad de estos codificadores aumenta a
medida que disminuye la tasa de bit.
2.3.2 Codificación AbS genérica
La estructura básica de un sistema de codificación LPC con análisis mediante
síntesis se muestra en la figura 17:
33
Revisión teórica
Señal de
entrada
s(n)
u(n)
Generación
de excitación
Filtro(s) de
síntesis
ew(n)
Minimización
de error
Ponderación
de error
e(n)
(a) codificador
Generación
de excitación
u(n)
Filtro(s) de
síntesis
Señal de
salida
(b) decodificador
Figura 17.- Estructura de un sistema de codificación LPC con análisis mediante síntesis
Como el modelo requiere una frecuente actualización de los parámetros para
conseguir la mayor coincidencia posible con la señal original, el análisis se lleva a cabo
en bloques, es decir, la señal de voz de entrada se divide en bloques de muestras o
tramas del tamaño apropiado. La longitud y actualización de los bloques de análisis ó
tramas determina la tasa de bit del esquema de codificación.
El modelo consta de 3 partes:
-
Generador de excitación.- Produce la secuencia de excitación que se pasará por
el filtro de síntesis para producir la señal reconstruida en el receptor. Como
puede apreciarse en la figura 17 existe un decodificador incluido dentro del
codificador. Para optimizar la excitación, el método de análisis usa la diferencia
entre la señal de voz original y la sintetizada como un criterio de error, y elige la
secuencia de excitación que minimiza ese error ponderado.
-
Filtro(s) de síntesis. Pueden ser uno ó dos, dependiendo del codificador que se
trate. Son filtros de síntesis lineales variantes en el tiempo, ya que sus
coeficientes se van cambiando en cada iteración del bucle. Por un lado, podemos
tener, un predictor de síntesis de corto plazo (STP, Short Term Predictor),
también llamado filtro de correlación de corto plazo, que modela la envolvente
espectral de corto plazo de la forma de onda de la señal de voz. Por otro lado,
está el predictor de largo plazo (LTP, Long term Predictor) para modelar la
estructura fina del espectro de la señal de voz.
34
Revisión teórica
-
Minimizador de error.- Se minimiza la diferencia entre la señal original y la
señal sintetizada. El criterio de minimización más usado es el error cuadrático
medio (MSE). Generalmente se pasa el error por un filtro de ponderación
perceptual que da forma al espectro del ruido haciendo que su poder se
concentre en las frecuencias de los formantes del espectro de la señal de voz, por
lo que el ruido queda enmascarado por la señal de voz.
El procedimiento de codificación incluiría los siguientes pasos:
(1) Se calculan los parámetros del predictor lineal de corto plazo (LPC) de una
trama. (Se suelen tomar tramas de entre 10 y 30 ms).
(2) Se determina la secuencia de excitación óptima para este filtro minimizando el
error ponderado.
(3) Se divide la trama en subtramas (al ser, normalmente, demasiado grandes para
un análisis eficiente de la excitación) y se calcula la excitación
independientemente para cada una de ellas.
(4) Se extraen los parámetros de la señal de excitación (generalmente ganancia y
retraso)
(5) Se envían los parámetros del filtro de síntesis y la excitación cuantizados al
receptor.
El procedimiento de decodificación se realiza pasando la señal de excitación
decodificada a través del filtro de síntesis, proceso que da como resultado la señal de
voz reconstruida.
Cabe destacar cómo, tanto en el codificador como en el decodificador, se genera
la señal de voz sintetizada. Esto es necesario para actualizar los contenidos de memoria
de los filtros de síntesis. De no ser así, habría que transmitir esos contenidos de
memoria al decodificador para que todo estuviera sincronizado.
A continuación se verá con un poco más de detalle cada uno de los bloques que
componen este método de análisis.
2.3.3 Predictor de corto plazo
El predictor de corto plazo modela la envolvente espectral de corto plazo de la
voz. La envolvente espectral de un segmento de voz de longitud L muestras se puede
aproximar mediante una función de transmisión de un filtro digital todo-polo de la
forma:
H (z ) =
G
G
=
=
A( z ) 1 − Pδ ( z )
G
p
1 − ∑ ak z
k =1
35
(2.31)
−k
Revisión teórica
donde
p
Pδ ( z ) = ∑ a k z − k
(2.32)
k =1
es el predictor de corto plazo. Los coeficientes ak son los coeficientes del predictor o los
parámetros LPC. El número de coeficientes p es el orden del predictor. Este filtro de
análisis LP ya se estudió en el punto 2.1.
2.3.4 Predictor de largo plazo
Mientras que el predictor de corto plazo modela la envolvente espectral del
segmento de voz que está siendo analizado, el predictor de largo plazo, o predictor de
pitch, se usa para modelar la estructura fina de esa envolvente.
El filtrado inverso de la señal de voz de entrada elimina la envolvente del
espectro de la señal, es decir, elimina algo de la redundancia de la voz tomando de la
muestra de voz su valor predicho usando las p muestras anteriores. A esto se le
denomina predicción de corto plazo si sólo las p muestras anteriores son usadas para
predecir la muestra actual. Sin embargo, el residuo de esa predicción todavía muestra
considerables variaciones en su espectro, es decir, está lejos de ser blanco. Viendo el
residuo de la señal en la figura 18 está claro que todavía existen correlaciones de largo
plazo entre muestras de la señal, especialmente en las regiones sonoras. Por tanto, aún
existe alguna periodicidad (redundancia), relacionada con el periodo de pitch de la señal
de voz original, que el análisis LP no puede eliminar. De ahí la necesidad de incluir una
segunda etapa de predicción.
Figura 18. Error ó residuo del análisis de predicción
Añadiendo un predictor de pitch al filtro inverso se elimina esa redundancia en
el residuo de la señal y éste se convierte en ruido. Se le llama predictor de pitch, ya que
elimina la periodicidad de la señal, ó predictor de largo plazo, ya que su retraso está
comprendido entre 20 y 160 muestras. Este predictor de largo plazo es básico en los
36
Revisión teórica
codificadores de voz con tasas de bit baja, como el CELP, donde la señal de excitación
se modela con un proceso de producción Gaussiano y, por tanto, el predictor es
necesario para asegurar que el residuo de la predicción sea lo más cercano posible a
ruido aleatorio Gaussiano.
Es importante darse cuenta de que la ganancia combinada de los dos sistemas de
predicción será siempre menor que la suma de sus ganancias empleándolos por
separado. Esto se debe a que en realidad el tracto vocal y la excitación están
interrelacionados, no siendo completamente separables como se asume en este modelo.
La forma general del filtro de correlación de largo plazo es
1
1
=
=
P( z ) 1 − Pl ( z )
1
1−
(2.33)
m2
∑G
k = m1
k
z
− (α + k )
donde
Pl (z ) =
m2
∑G
k = m1
k
z −(α + k )
(2.34)
es el predictor de largo plazo. Para m1=m2=0 se tiene un predictor de un tono, y para
m1=m2=1 se tiene un predictor de 3 tonos. El retraso α normalmente representa el
periodo de pitch.
Los parámetros α y Gm se determinan minimizando el error residual cuadrático
medio después de realizar las predicciones de corto y largo plazo sobre un periodo de N
muestras. Para un predictor de un tono el residuo de predicción de largo plazo E viene
dado por:
e(n ) = r (n ) − Gr (n − α )
(2.35)
donde r (n ) es la señal residuo después de la predicción de corto plazo. El residuo
cuadrático medio E está dado por:
N −1
N −1
n=0
n =0
E = ∑ e 2 (n ) =∑ [r (n ) − Gr (n − α )]
2
(2.36)
Igualando la derivada de E respecto a G a cero y despejando su valor,
N −1
G=
∑ r (n )r (n − α )
n =0
N −1
(2.37)
∑ [r (n − α )]
2
n =0
y sustituyendo G en la ecuación (2.36) se obtiene
37
Revisión teórica
 N −1

∑ r (n )r (n − α )
N −1

E = ∑ r 2 (n ) −  n =N0 −1
n=0
∑ [r (n − α )]2
2
(2.38)
n =0
Minimizar E equivale a maximizar el segundo sumando de la ecuación, que
representa la correlación normalizada entre el residuo r (n ) y su versión normalizada.
Este término se calcula para todos los posibles valores de α dentro de un rango
específico, y se toma el valor de α que lo maximiza. La energía ε en el denominador
puede ser fácilmente actualizada desde el retraso (α − 1) a α en vez de calcularlo de
nuevo mediante la ecuación (2.39), que requeriría mayor carga computacional.
ε a = ε a −1 + r 2 (− α ) − r 2 (− α + N )
(2.39)
La estabilidad del filtro de síntesis de pitch 1 P( z ) no siempre está garantizada.
Para un predictor de un tono, la condición de estabilidad es G ≤ 1 . Por tanto, la
estabilidad del filtro se puede conseguir fácilmente fijando G = 1 cuando G > 1 . Sin
embargo, la inestabilidad de este filtro no es tan perjudicial para la calidad de la señal
reconstruida. El filtro inestable permanece durante unas tramas (aumentando la energía),
pero al final, se encuentran periodos con el filtro estable, por lo que la salida no
continua aumentando con el tiempo.
En el siguiente grupo de gráficas (figura 19), puede apreciarse como se va
eliminando la parte redundante a la señal de voz original al paso por cada uno de los
filtros ó predictores. Primero se representa la señal de voz original de un tramo sonoro.
A continuación, el residuo LP, obtenido al pasar la señal de voz original a través del
filtro de predicción lineal ó predictor de corto plazo. En él se elimina gran parte de la
periodicidad (redundancia) de la señal, pero todavía puede apreciarse una cierta
periodicidad. Y, por último el residuo LTP ó residuo de pitch, obtenido al pasar la señal
de salida del predictor de corto plazo por el predictor de largo plazo ó predictor de pitch,
que elimina casi por completo la redundancia de la señal original, quedando,
prácticamente una señal de ruido aleatorio.
38
Revisión teórica
Figura 19.- Señal de voz original, residuo LP y residuo LTP
39
Revisión teórica
Cuando se usa el predictor de largo plazo, el esquema general del codificador
queda de la siguiente manera:
s(n)
Generación
de excitación
u(n)
v(n)
Síntesis de pitch
Minimización
de error
ew(n)
Síntesis LPC
Ponderación
de error
e(n)
(a) Codificador
Generación
de excitación
v(n)
u(n)
(b) Decodificador
Figura 20.- Estructura de bloques de codificador y decodificador usando filtro LPC y filtro de
síntesis de pitch, mediante análisis por síntesis
Una mejora significativa se consigue cuando los parámetros LTP se optimizan
dentro del bucle de análisis mediante síntesis; es la aproximación por códigos
adaptativos. En el bloque de la figura 20, los parámetros LTP se podían calcular fuera
del bucle de minimización del error (directamente de la señal residuo LPC). Con la
aproximación por códigos adaptativos, el cálculo de los parámetros contribuye
directamente al proceso de minimización del error ponderado. Tomando un predictor de
largo plazo de un tono, la salida del filtro de síntesis de pitch viene dada por:
u (n ) = v(n ) + Gu (n − α )
(2.40)
En la primera iteración, se asume que no hay ninguna excitación, partimos de
condiciones iniciales cero, por lo que la ecuación se reduce a
u (n ) = Gu (n − α )
(2.41)
La señal de voz sintetizada ponderada será
n
sˆw (n ) = ∑ u (i )h(n − i ) + sˆ0 (n )
i =0
40
(2.42)
Revisión teórica
donde h(n ) es la respuesta impulsiva del filtro de síntesis ponderado 1 A( z γ ) y sˆ0 (n )
es la respuesta a entrada cero del filtro de síntesis ponderado, es decir, la salida del filtro
debido a las condiciones iniciales. El error ponderado entre la señal original y la
sintetizada está dado por
n
ew (n ) = x ′(n ) − ∑ u (i )h(n − i )
(2.43)
x ′(n ) = s w (n ) − sˆ0 (n )
(2.44)
i =0
donde
y s w (n ) es la señal de entrada ponderada. Sustituyendo la ecuación (2.3.4.9) en la
(2.42):
ew (n ) = x ′(n ) − Gyα (n )
(2.45)
donde
n
y j (n ) = u (n − j ) ∗ h(n ) = ∑ u (i − j )h(n − i )
(2.46)
i =1
El error cuadrático medio ponderado será
N −1
2
E w = ∑ [x ′(n ) − Gyα (n )]
(2.47)
n =0
Haciendo la derivada de ese error con respecto a la ganancia G y despejando esa
ganancia:
N −1
G=
∑ x′(n)yα (n )
n =0
N −1
(2.48)
∑ [yα (n )]
2
n =0
Substituyendo la ecuación (2.47) en la (2.48)
N −1
2
E w = ∑ [x ′(n )]
n =0
 N −1

∑ x ′(n ) yα (n )

−  n =0N −1
∑ [yα (n )]2
2
(2.49)
n=0
El retraso de pitch se selecciona tomando el retraso que maximiza el segundo
sumando de la ecuación (2.49), y G se calcula mediante la ecuación (2.48). La
desventaja de la solución en bucle cerrado es la carga computacional extra necesaria
para calcular la convolución de la ecuación (2.45) dentro del rango de retraso α. Un
procedimiento rápido para calcular esta convolución yα (n ) para todos los posibles
retrasos es calcularlo para el primer valor en el rango y después actualizarlo como sigue
41
Revisión teórica
y j (0) = u (− j )h(0)
y j (n ) = u (− j )h(n ) + y j −1 (n − 1)
n = 1, ..., N − 1
(2.50)
Esta ecuación requiere N operaciones para determinar la convolución yα (n ) ,
mientras que se necesitaban N(N+1)/2 operaciones para ello usando la ecuación (2.45).
El término a maximizar requiere 3N+2 operaciones para cada retraso. Otra
aproximación (la aproximación de la autocorrelación) se puede usar para actualizar la
energía en el denominador de la ecuación (2.49) con menor número de instrucciones
que para el caso de la aproximación mediante convolución. Esta aproximación se verá
con más detenimiento cuando se estudie el CELP.
La excitación sintetizada pasada u (n ) se almacena en un registro de
almacenamiento adaptativo desde -Lp a -1, donde Lp es el registro ó longitud del buffer
(normalmente 147). El contenido de este buffer se actualiza cada subtrama,
introduciendo N nuevas muestras y retirando las N pasadas, esto es
u (n ) ← u (n + N )
n = − L p , ..., − 1
(2.51)
El registro de almacenamiento se puede representar mediante una tabla de
códigos adaptativa, donde cada palabra se obtiene moviendo la palabra anterior a la
izquierda una muestra. Las palabras código se obtienen
c j (n ) = u (− j + n )
n = 0, ..., N − 1
j = N , ..., L p
(2.52)
Para retraso de pitch inferiores a la longitud de la trama de excitación N, solo los
j primeros valores de la palabra código c j (n ) están disponibles. En la voz natural el
retraso de pitch varía entre 20 y 160 muestras. Para estos retrasos menores que la
longitud de la trama la palabra código se construye repitiendo los valores disponibles
hasta que la palabra código está completa. Esto es, para j<N
u (− j + n )
c j (n ) = 
u (− 2 j + n )
n = 0, ..., j − 1
n = j , ..., 2 j − 1
(2.53)
y así hasta que se completa la palabra código. El rango del retraso que normalmente se
usa está entre 20 y 147 (7 bits). Para retrasos entre 0 y N-1 la relación de la ecuación
(2.50) tiene que ser modificada para esos retrasos. Para j<N la palabra código c j (n ) se
puede expresar (considerando j ≥ N 2 )
c j (n ) = c (j1) (n ) + c (j2 ) (n )
(2.54)
donde
u (− j + n )
c (j1) (n ) = 
0
n = 0, ..., j − 1
n = j , ..., N
y
42
(2.55)
Revisión teórica
n = 0, ..., j − 1
0
c (j2 ) (n ) = 
u (− 2 j + n )
n = j , ..., N
(2.56)
Teniendo en cuenta esto, la palabra de código filtrada será
(
)
y j (n ) = c (j1) (n ) + c (j2 ) (n ) ∗ h(n ) = y (j1) (n ) + y (j1) (n )
(2.57)
De la ecuaciones anteriores
c (j2 ) (n ) = c (j1) (n − j )
n = j , ..., N − 1
(2.58)
n = j , ..., N − 1
(2.59)
con lo cual tenemos que
y (j2 ) (n ) = y (j1) (n − j )
y (j1) (n ) se puede actualizar usando la relación (2.50) desde j=21 a 147. Para retrasos con
j<N y j (n ) se calcula a partir de y (j1) (n )
 y (j1) (n ),
para n = 0, ..., j − 1
 (1)
y j (n ) =  y j (n ) + y (j1) (n − j ),
para n = j , ..., 2 j − 1
 (1)
(1)
(1)
para n = 2 j , ..., N − 1
 y j (n ) + y j (n − j ) + y j (n − 2 j ),
(2.60)
La ecuación (2.59) solo se aplica cuando j<N/2. Una aproximación más simple
para trabajar con los retrasos menores que la longitud de la trama es extender el buffer
de excitación del residuo de la predicción de corto plazo, es decir,
u (n ) = r (n )
n = 0, ..., N − α min − 1
(2.61)
donde α min es el mínimo valor en el rango de retrasos de pitch. En este caso, los retrasos
menores que la longitud de trama no se tratan de forma diferente.
La realización de la predicción de pitch se puede mejorar usando retrasos de
pitch no enteros. A menudo ocurre que el pitch no coincide exactamente con el instante
de la muestra. En este caso, el retraso entero más cercano al retraso de pitch real, o un
múltiplo de él, sería elegido. Para encontrar un retraso más cercano al real es necesario
una resolución mayor.
43
Revisión teórica
2.3.5 Filtro de ponderación de error
En este punto tratamos de elegir un criterio de error adecuado para el modelo
general de codificación de voz (figura 17). Tradicionalmente los algoritmos de
codificación de voz han intentado minimizar la diferencia rms entre las envolventes de
las señales de voz original y codificada. Sin embargo, hoy en día se sabe que la
percepción subjetiva de la distorsión de la señal no sólo se basa en el error rms. La
teoría del enmascaramiento auditivo sugiere que el ruido en las regiones de los
formantes puede enmascararse total o parcialmente por la señal de voz. Por eso, una
parte importante del ruido percibido en el codificador proviene de las regiones de
frecuencia donde el nivel de la señal es bajo. Así, para reducir el ruido percibido, su
espectro ancho se modela de forma que las componentes de frecuencia de ruido
alrededor de las regiones de los formantes puedan tener mayor energía que las
componentes en las regiones entre formantes. El ruido de cuantización que aparece en la
señal de voz reconstruida es
2
2
2 1− F( f )
N ( f ) = Sˆ ( f ) − S ( f ) = ∆( f )
1 − Pδ ( f )
(2.62)
donde ∆( f ) es la potencia espectral del ruido a la salida del cuantizador, Pδ ( z ) es el
2
predictor de corto plazo y F ( z ) es un filtro de reacción. Atal y Schroeder describieron
un método eficiente para determinar el filtro de ponderación minimizando la altura del
ruido de cuantización. En el modelo general de codificador, el filtro de ponderación
puede expresarse como:
W ′( z ) =
1 − Pδ ( z ) A( z )
=
1 − F (z ) B(z )
(2.63)
Esta ecuación se deriva de la anterior donde
1 − Pδ ( f )
∆( f ) = Sˆ ( f ) − S ( f )
= N ( f )W ( f )
1− F( f )
(2.64)
Una elección apropiada para B( z ) fue tomar B( z ) = A( z γ ) , lo cual da como resultado
p
W ′( z ) =
A( z )
=
A( z γ )
1 − ∑ a k z −k
k =1
p
(2.65)
1 − ∑ ak γ z
k
−k
k =1
donde γ es un valor entre 0 y 1. El valor de γ se determina por el grado que uno desea
desenfatizar las regiones de los formantes en el espectro del error. Disminuir el valor de
γ aumenta el ancho de banda de los polos de W ′( z ) . El aumento en el ancho de banda ω
es:
44
Revisión teórica
ω=−
fs
π
ln (γ )
(2.66)
donde fs es la frecuencia de muestreo. La elección de γ = 0 da W ′( z ) = A( z ) . En este
caso, el ruido a la salida del codificador tiene la misma envolvente que la señal original.
Por otro lado, tomando γ = 1 tenemos W ′( z ) = 1 lo cual equivale a no hacer ponderación
alguna. Una buena elección es tomar un valor entre 0.8 y 0,9, que corresponde a un
incremento en el ancho de banda de los polos de W ′( z ) entre 270 y 570 Hz,
aproximadamente.
Usando el filtro de error ponderado dado en la ecuación (de W’), y ponderando
la señal de voz original y la sintetizada separadamente antes de compararlas, se puede
combinar el filtro de síntesis con el filtro de error ponderado, produciendo el filtro:
W (z ) =
1
=
A( z γ )
1
(2.67)
p
1 − ∑ ak γ z
k
−k
k =1
Nos referiremos a este filtro como filtro de síntesis ponderado. La estructura
básica para un codificador predictivo que use análisis mediante síntesis será:
Señal de
entrada
s(n)
Filtro inverso
A(z)
r(n)
W (z ) =
1
A( z γ )
sw(n)
Generación
de excitación
u(n)
v(n)
Filtro de síntesis
de pitch
W (z ) =
1
A( z γ )
Filtro de síntesis
ponderado
ew(n)
Minimización
de error
Figura 21.- Diagrama de bloques de la estructura básica de un codificador predictivo que use
análisis mediante síntesis
45
Revisión teórica
2.4 CELP
2.4.1 Introducción
La implementación de un predictor de largo plazo en el bucle del análisis
mediante síntesis se debe a la importancia que tiene eliminar la redundancia de la señal
lo máximo posible. La señal residuo después de los predictores de corto y largo plazo se
convierte en una señal parecida a ruido y puede ser modelada por un proceso Gaussiano
de media cero con un espectro de potencia que varía lentamente. Esto es lo que permite
la implementación de codificadores estocásticos, donde la trama de excitación se
cuantiza vectorialmente usando una tabla de códigos estocásticos amplia.
La codificación estocástica o codificación CELP (Code-Excited Linear
Prediction) fue propuesta por Atal y Schroeder en 1984 [Kumar y Sundaresan, 2000].
En esta codificación las tramas de la señal excitación se modelan por un vector
gaussiano elegido de una tabla de códigos gaussianos minimizando el error ponderado
perceptual entre la señal de voz original y la sintetizada. Sin embargo, hasta entrados los
90, el gran impedimento para la expansión de los algoritmos CELP era la gran
complejidad que suponía su implementación en tiempo real, que proviene de la
búsqueda en la tabla de códigos, ya que se calcula y compara con todas las posibles
entradas de la tabla.
En los últimos años, la investigación se ha basado en reducir la complejidad del
codificador CELP y lograr su implementación en tiempo real usando la tecnología
CELP actual. Se ha logrado una significativa reducción usando diferentes tabla de
códigos con menos entradas o con muchas de ellas a cero. El uso de tablas de códigos
algebraicos también reduce la complejidad del algoritmo. En ellos, la tabla de códigos
se genera usando un código binario especial con corrección de errores.
2.4.2 Principio del CELP
Después de realizar la predicción de corto y largo plazo, las redundancias de la
señal de voz se han eliminado casi completamente y la señal residuo tiene muy poca
correlación. Un proceso Gaussiano con un espectro de potencia que varíe lentamente en
el tiempo se puede usar para representar esa señal residuo, y la forma de onda de la
señal de voz se genera filtrando secuencias de innovación blancas y gaussianas a través
de los filtros de síntesis de corto y largo plazo. La secuencia de innovación óptima se
selecciona de una tabla de códigos que contiene secuencias de gaussianas blancas
aleatorias minimizando el error ponderado subjetivo entre la señal original y la
sintetizada. El diagrama por bloques del modelo de síntesis del CELP quedaría:
46
Revisión teórica
Tabla de códigos
adaptativos
Filtro de
síntesis
G1
Señal de voz
sintetizada
Retraso
subtrama
G2
Tabla de códigos
fijos
Figura 20.- Diagrama de bloques del modelo de síntesis del CELP
El filtro de correlación de pitch del esquema general se sustituye por una tabla
de códigos adaptativo de solape. La posición de la tabla de códigos seleccionada y su
correspondiente ganancia (retraso de pitch y ganancia) junto con la posición
seleccionada de la tabla de códigos estocásticos y su correspondiente ganancia de escala
son enviadas al decodificador, que utiliza las mismas tablas de códigos (en ausencia de
errores de canal) para determinar la señal de excitación a la entrada del filtro de síntesis
LPC para producir la señal sintetizada.
La tablado de códigos de excitación contiene L palabras de código (vectores
estocásticos) de longitud N muestras (generalmente L = 1024 y N = 40, que corresponde
a una trama de 5 ms). La señal de excitación de una trama de voz de longitud N se elige
mediante una búsqueda exhaustiva de la tabla de códigos después de escalar los
vectores gaussianos por un factor de ganancia β.
El filtro W ( z ) es el filtro de síntesis ponderado dado por:
W (z ) =
1
=
A( z γ )
1
(2.68)
p
1 − ∑ ak γ z
k
−k
k =1
Una vez se han determinado los parámetros de la tabla de códigos adaptativos
(retraso de pitch y ganancia) la señal de voz sintetizada ponderada es
)
s w (n ) = β c k (n ) ∗ h(n ) + Gyα (n ) + sˆ0 (n )
(2.69)
donde la convolución carece de memoria, c k (n ) es la palabra código de excitación para
el índice k, β es el factor de escala, h(n ) es la respuesta al impulso del filtro de síntesis
47
Revisión teórica
ponderado W ( z ) , sˆ0 (n ) es la respuesta a entrada cero del filtro de síntesis ponderado, G
es la ganancia de la tabla de códigos adaptativa y yα (n ) = cα′ (n ) ∗ h(n ) es la respuesta a
estado cero del filtro de síntesis ponderado a la palabra código cα′ (n ) seleccionada de la
tabla de códigos adaptativa.
El error ponderado entre la señal original y la sintetizada es:
donde
ew (n ) = s w (n ) − sˆw (n ) = x(n ) − β c k (n ) ∗ h(n )
(2.70)
x(n ) = s w (n ) − Gyα (n ) − sˆ0 (n )
(2.71)
La señal x(n ) se calcula actualizando x ′(n )
x(n ) = x ′(n ) − Gyα (n )
(2.72)
como x′(n ) ha sido ya determinada en la búsqueda de la tabla de códigos adaptativos.
El error cuadrático medio ponderado está dado por
N −1
2
N −1
E = ∑ [e w (n )] = ∑ [x(n ) − β c k (n ) ∗ h(n )]
2
n=0
(2.73)
n=0
Calculando la derivada de ese error respecto al factor de escala β e igualando a
cero, obtenemos la expresión para β.
N −1
β=
∑ x(n )[c (n ) ∗ h(n )]
k
n =0
N −1
(2.74)
∑ [c (n ) ∗ h(n )]
n =0
2
k
y sustituyendo β en la ecuación (2.73)
 N −1

∑ x(n )[c k (n ) ∗ h(n )]
N −1

E = ∑ x 2 (n ) −  n=0N −1
n =0
∑ [ck (n ) ∗ h(n )]2
2
(2.75)
n =0
Estas dos últimas ecuaciones se pueden escribir en forma matricial como
β=
xH T c
k
T
T
c H c
k
k
(2.76)
y
48
Revisión teórica
2
 x T Hc 
2
k
E = x − βHc
= xTx − 
k
c T H T Hc
k
k
(2.77)
donde x y ck son vectores de dimensión N dados por
x T = (x0
x1 K x N −1 )
c = (c0
(2.78)
c1 K c N −1 )
T
y H es una matriz de convolución triangular inferior de la respuesta impulsiva h(n )
 h0

 h1
H =  h2

 M

 h N −1
0
0
h0
0
h1
h0
M
M
hN −2
h N −3
L 0

L 0
L 0

O M 

L h0 
(2.79)
Definimos la matriz Φ como Φ = H T H . Por tanto, Φ es una matriz simétrica
que contiene las correlaciones de la respuesta impulsiva h(n )
φ (i, j ) =
N −1
∑ h(n − i )h(n − j ),
i, j = 0, ..., N − 1
n = max (i , j )
(2.80)
Se define un vector Ψ tal que Ψ= x T H , cuyos elementos son
N −1
ψ (i ) = x(i ) ∗ h(− i ) = ∑ x(n )h(n − i )
i = 0, ..., N − 1
(2.81)
n =i
El error cuadrático medio ponderado se puede minimizar maximizando el
segundo término de la ecuación (2.77), que está dado por
2
τk =
(C k )
εk
2
(
)
2
 xH T c 
Ψ Tc
k

k
=
=
c T H Tc
c T Φc
k
k
k k
donde Ck es la correlación cruzada entre x y la palabra código filtrada Hc
(2.82)
k
y está dada
por
N −1
N −1
n =0
n =0
C k = ∑ x(n )[c k (n ) ∗ h(n )] = ∑ψ (n )c k (n )
49
(2.83)
Revisión teórica
y ε k es la energía de la palabra código ck
N −1
N −1
N − 2 N −1
n =0
n=0
i = 0 j =i +1
ε k = ∑ [c k (n ) ∗ h(n )]2 = ∑ c k2 (n )φ (i, j ) + 2 ∑ ∑ c k (i )c k ( j )φ (i, j )
(2.84)
ψ (i ) y φ (i, j ) son calculadas fuera del bucle de optimización, y el término τ k de la
ecuación (2.82) se evalúa desde k = 0 a L-1, donde L es el tamaño de la tabla de
códigos. Se elige la palabra código con índice k que maximiza ese término y la ganancia
escalar β se calcula a partir de la ecuación (2.77). En esta aproximación, la palabra
código ck y la ganancia β no se optimizan conjuntamente, ya que la ganancia tiene que
ser cuantizada y el término de la ecuación (2.82) se deriva usando en valor de la
ganancia sin cuantizar. La ganancia y el vector de excitación pueden ser optimizados
como sigue: para la palabra código con índice k la correlación cruzada Ck y la energía
ε k se determinan a partir de las ecuaciones (2.84). La ganancia se calcula con la
ecuación:
βk =
Ck
(2.85)
εk
La ganancia se cuantiza para obtener el valor β̂ k y este valor cuantizado se
sustituye en la ecuación 2.73 para obtener el mínimo error
N −1
2
E = ∑ [x(n ) − βc k (n ) ∗ h(n )] = x T x − 2 βˆ k x T Hc k + βˆ k2 c kT H T Hc k = x T x − 2 βˆ k C k + βˆ k2 ε k
n=0
(2.86)
El término a maximizar viene ahora dado por
(
τ k = βˆ k 2C k − βˆ k ε k
)
(2.87)
Este término se calcula para cada palabra código y se toma el que maximiza el
término con la ganancia cuantizada. Esta aproximación por unión no introduce ninguna
complejidad a tener en cuenta, ya que la correlación C y la energía ε se calculan una vez
por palabra código igual que cuando se calculaba la ecuación de (2.77). La carga
computacional extra es que la ganancia tiene que ser cuantizada para cada palabra
código.
El número de operaciones necesarias para evaluar la expresión en la ecuación
(2.87) es aproximadamente N2 (usando las ecuaciones (2.83) y (2.84)). En cambio,
cuando la convolución se calcula usando filtrado recursivo, las palabras código ck (n ) se
filtran a través de un filtro con estado cero, donde la convolución necesita Np
instrucciones, el cálculo de la energía ε requiere N y la evaluación de la correlación
cruzada Ck otras N instrucciones, dando un total de N(p+2) operaciones. Esto, para un
predictor de orden 10 supone una importante reducción en el número de operaciones.
50
Revisión teórica
2.4.3 Tabla de códigos algebraicos
Los códigos algebraicos se pueden usar para poblar las tablas de códigos de
excitación. Algoritmos de búsqueda eficientes en la tabla de códigos se pueden obtener
códigos algebraicos altamente estructurados. Inicialmente, las tablas de códigos
algebraicos se obtenían usando códigos binarios de corrección de errores. A
continuación veremos un código algebraico donde los vectores de excitación se derivan
usando códigos de permutación interrelacionados (IPC) [Adoul et al. 1994].
En los códigos de permutación interrelacionados, un vector de excitación que
contiene un pequeño número de pulsos distintos de cero con un conjunto de posiciones
con interrelaciones predefinidas. Los pulsos tienen sus amplitudes fijadas a 1 ó -1, y
cada pulso tiene un conjunto de posiciones distintas a las de otros pulsos. Los conjuntos
de posiciones están interrelacionados. El código de excitación se identifica por las
posiciones de sus pulsos distintos de cero. Esto es, la búsqueda en la tabla de códigos es
básicamente una búsqueda de las posiciones óptimas de los pulsos distintos de cero.
51
Revisión teórica
52
Recomendación G.729:CS-CELP
3
Recomendación G.729: CS-CELP
3.1 LA ITU-T
La Unión Internacional de Telecomunicaciones, conocida como ITU
(Internacional Telecommunications Union), es un organismo dentro de la UNESCO
(United Nations Economic, Scientific and Cultural Organization). Está dividido en dos
cuerpos: por un lado el Sector de estandarización de las Telecomunicaciones o ITU-T y,
por otro, el sector de estandarización para la Radio o ITU-R. A pesar de llevar la palabra
estándar en su nomenclatura, estas dos entidades no crean estándares, sino que generan
una serie de documentos conocidos formalmente como recomendaciones. Estas
recomendaciones representan un acuerdo entre un segmento de la industria de las
telecomunicaciones sobre un tema determinado, pero no hay ningún tipo de ley que
fuerce a su cumplimiento. De ahí el término de recomendaciones.
La ITU-T se divide a su vez en secciones más pequeñas denominadas grupos de
estudio. El grupo de estudio que se encarga de las recomendaciones relacionadas con el
procesamiento de la voz y el video, como la codificación de voz o la telefonía por video
es el 15 (SG15). Otros grupos relacionados con aspectos de la codificación de voz son
el SG12, que se encarga de los problemas en la red, que influyen en la calidad de la
señal de voz; o el grupo de expertos para la calidad de la señal de voz (SQEG) que se
encarga de realizar los experimentos y pruebas subjetivas usadas para determinar cómo
de bien funciona una determinada recomendación de codificación de voz propuesta por
la ITU.
Las recomendaciones de la ITU están a menudo registradas como patentes. Las
empresas dueñas de esas patentes se comprometen a cobrar unas tasas razonables a las
demás empresas por su uso. Incluso a veces se ha llegado a un acuerdo para pagar esas
tasas entre todas las empresas usuarias. Por tanto, la ITU, como entidad, no administra
los derechos de la propiedad intelectual.
53
Recomendación G.729: CS-CELP
Para establecer una recomendación lo primero es especificar una serie de
requerimientos a cumplir por la misma, llamados términos de referencia (ToR; Terms of
Reference). En este documento se refleja, junto con un calendario con las estimaciones
de tiempo para su ejecución, los objetivos y características que debe cumplir. Además
de la calidad, también especifica las demás propiedades del codificador, como son la
tasa de bit, el retraso y la complejidad.
Uno de los puntos destacados es la elaboración del calendario, que depende
principalmente de la urgencia de la necesidad de implantar la nueva recomendación.
Generalmente, se puede dividir en tres partes principales: por un lado, el tiempo
empleado en determinar todos los requerimientos y objetivos que debe cumplir la
recomendación (que se concluye una vez definidos los términos de referencia); por otro,
el tiempo empleado para pruebas, ensayos y tests (que se culmina con la elección del
codificador) y, por último, el tiempo que conlleva el diseño final de la recomendación y
el seguimiento de los diferentes pasos que se requieren hasta la ratificación de la misma.
El candidato inicial rara vez suele cumplir con los requerimientos fijados en los
términos de referencia, por los que se debe crear un codificador optimizado y volver a
realizarle todas las pruebas, con lo que esta parte del proceso es la más puede alargar el
calendario.
Bajo condiciones ideales, el proceso completo de pruebas y tests, entre la
definición de los términos de referencia y la selección del codificador candidato, se
podría completar en unos 24 meses; si bien reduciendo el número pruebas se puede
realizar en menos tiempo. Ello depende de la importancia de la recomendación a
realizar. Además, el uso de software para los tests ha reducido el tiempo empleado en
ellos, al no tener que montar los equipos en el laboratorio para las diferentes pruebas.
3.2 Descripción de la recomendación
3.2.1 Introducción
La recomendación ITU-T G.729 define un algoritmo para la codificación de
señales de voz a 8 kbit/s, usando un CS-CELP. En este sistema, una señal de voz
analógica se pasa a través de un filtro paso de banda entre 300 Hz y 3400 Hz y la señal
de voz resultante es muestreada a 8000 muestras por segundo. Así se obtiene la
información digital de la misma, que se convierte a una señal PCM lineal. Las muestras
son cuantizadas usando una resolución de 16 bits. La tasa de bit de entrada es, por tanto,
128 kbit/s. El vocoder G.729 trabaja con tramas de 10 milisegundos, con un retraso de 5
ms para el análisis de predicción lineal. El codificador toma 80 muestras de la señal de
voz por trama y da como salida 80 bits de información comprimida. El decodificador
toma esos 80 bits por trama y los transforma en 80 muestras de voz sintetizada
descomprimida [IEEE, Marzo 1998].
La comunidad científica consideró que el estándar G.729 representaba un avance
significativo en el campo de la compresión digital de audio para la transmisión y
almacenamiento de señales de voz y generaría productos innovadores y servicios
disponibles para el público. Los beneficios de una calidad de voz buena (toll) a 8 kbit/s,
con un retraso y unos requerimientos de procesado moderados, hace del estándar G.729
54
Recomendación G.729:CS-CELP
una opción muy popular para muchas aplicaciones, como la tele/videoconferencia,
telefonía visual, sistemas de satélite digital, voz sobre protocolos IP, PSTN, ISDN,
teléfonos móviles y otro tipo de aplicaciones inalámbricas, donde la calidad, retraso y
ancho de banda son importantes.
3.2.2 Historia
El codificador CS-CELP surgió de la búsqueda de un codificador que, con una
tasa de bits de 8 kbit/s, consiguiera una calidad de voz equivalente a la que se obtiene
con un codificador ADPCM, operando a 32 kbit/s, para la mayor parte de la condiciones
de trabajo. Entre estas condiciones cabe citar señales de voz, tanto limpias como
ruidosas, variaciones de nivel o señales carentes de voz.
Para la recomendación de la ITU G.729, uno de los términos de referencia que
se fijaron fue que el codificador de voz trabajara a 8 kbit/s. Esta tasa se eligió en parte
porque se adecua al rango de trabajo de la primera generación de estándares digitales
celulares, que va desde los 6,7 kbit/s en Japón hasta los 13 kbit/s en Europa, pasando
por los 7,95 kbit/s en Estados Unidos. Además era lo más natural dividir por dos la tasa
de bit de codificadores de voz ya existentes y estandarizados (64, 32 y 16).
Se propusieron dos algoritmos para la obtención de este codificador: uno desde
la NTT (Nippon Telegragh and Telephone Corporation) y otro desde France Telecom
CNET/Universidad de Sherbrooke. Sin embargo, a pesar que ambos eran prácticamente
equivalentes al codificador ADPM a 32 kbit/s en la mayor parte de las pruebas, ninguno
se equiparaba a él en todas. En ese punto, los dos candidatos decidieron unirse y crear
un nuevo codificador con las mejores características de los dos códigos y continuar sus
investigaciones para alcanzar el objetivo común. Así, se probó una versión del
codificador resultante en Enero de 1995 y un mes después fue aprobada en la reunión
de la ITU-T. La recomendación final fue finalmente ratificada en Noviembre de 1995.
El 12 de Marzo de 1998 France Telecom, Nippon Telegraph and Telephone
Corporation y la Universidad de Sherbrooke (Québec, Canadá) establecieron el
consorcio G.729 para simplificar el proceso de licitación para el estándar internacional
de codificación y decodificación digital de audio ITU G.729 y para promover la
expansión y adopción tanto del estándar G.729, como del G.729 Anexo A. El consorcio
también acordó tener un único agente, Spiro LabTelecom (compañía canadiense
representante comercial del Laboratorio de compresión de voz de la universidad de
Sherbrooke y de su famosa tecnología ACELP desde 1993).
En la tabla 4 se muestra el calendario que se siguió para la consecución de la
recomendación [Cox y Kroon, 1996]:
55
Recomendación G.729: CS-CELP
Actividad
Discusión inicial de los ToR
Finalización de los ToR
Total meses
Reunión de codificadores candidatos
Realización de pruebas y ensayos
Selección del candidato
Total meses
Reunión para la determinación
Primer boceto de la recomendación
Se somete a decisión
Total meses
Total meses para el proceso completo
7/90
11/91
16
9/92
2/93
2/95
39
2/95
6/95
11/95
9
64
Tabla 4.- Calendario seguido para la aprobación de la recomendación G.729
El término de referencia para el retraso del codificador fue uno de los asuntos
que más tiempo llevó concretar, alargándose la discusión más de un año. Inicialmente se
propuso un retraso del codificador en un sentido máximo de 10 ms. Más tarde, se pensó
fijar el tamaño de la trama en 16 ms. Finalmente el tamaño de la trama se fijó en 10 ms.
Con este tamaño se obtiene un retraso hacia delante de 5 ms, un retraso de
procesamiento de 10 ms y un retraso en la transmisión de otros 10 ms, con lo que el
retraso total del sistema en un sentido es de 35 ms.
3.2.3 Objetivos y requerimientos de la recomendación G.729
Los objetivos más discutidos a la hora de realizar la recomendación fueron el
retraso y la complejidad del codificador [3]. Se optó por aceptar un retraso que
permitiera una reducción significativa de la complejidad con respecto a codificadores de
otras recomendaciones existentes, como la G.728. El número de millones de
instrucciones por segundo se redujo hasta 17 MIPS. Sin embargo la cantidad de
memoria RAM necesaria es de 3 kwords, un 50 % más que en la recomendación G.728.
Gran parte de este uso extra de memoria se debe a la utilización de tramas más largas.
En las dos tablas presentadas a continuación se resumen los requerimientos y
objetivos (términos de referencia) que se definieron a la hora de implementar el
codificador para la recomendación. En la primera de ellas (tabla 5) se definen los
objetivos relacionados con la tasa de bit, el retraso y la complejidad del codificador.
Parámetro
Tasa de bit (kb/s)
Tamaño de la trama (ms)
Tamaño de la subtrama (ms)
Retraso algorítmico (ms)
MIPS (punto fijo DSP)
RAM (palabras de 16 bits)
8
10
5
15
20
2.7 k
Tabla 5.- Valores de los parámetros más importantes para la recomendación G.729
56
Recomendación G.729:CS-CELP
En la segunda (tabla 6) se definen todos los requerimientos y objetivos
relacionados con la calidad de la señal de voz.
La parte más difícil fue medir su comportamiento para las diferentes condiciones
de ruido ambiente. Los primeros codificadores propuestos fallaron para algunas o
incluso para todas estas condiciones porque el ruido codificado no sonaba igual que el
original.
En los tests de promediado de degradación de categoría (DRC), los sujetos
apreciaban una diferencia a peor. Como consecuencia, la G.729 obtenía peores
resultados que la G.726 en este test. Sin embargo, al realizar los tests de promediado de
categoría absoluta (ACR), los resultados en la escala MOS de la G.729 no eran
significativamente peores que los de la G.726, siendo incluso, a veces, mejores.
Parámetro
Calidad (sin errores de bit)
Requerimientos
No peor que la G.726 a 32
kbit/s
Calidad (con errores de bit)
Errores
de
bit
aleatorios No peor que la G.726
No más de 0,5 MOS de
BER<10-3
Pérdidas de trama detectadas
degradación con respecto al
ADPCM a 32 kbit/s sin
errores
Errores no detectados
Dependencia del nivel
No peor que la G.726 a 32
kbit/s
Dependencia del hablante
No peor que la G.726 a 32
kbit/s
Capacidad de transmitir música
Capacidad de tandeming para la 2 códigos asíncronos con una
señal de voz
distorsión
total
<
4
asíncronos G.726 a 32 kbit/s
Tandeming con otros estándares < 4 asíncronos G.726 a 32
de ITU
kbit/s
Tandeming
con
estándares
regionales DMR
Para estudios posteriores
Ruido de canal
- ponderado
Para estudios posteriores
- frecuencia simple
No peor que la G.726 a 32
kb/s
Capacidad de transmitir tonos de DTMF, CCITT Nos. 5,6 y 7,
señal/información
CCITT R2, Q.35, Q.23, V.25
Objetivos
Equivalente a la G.726 32
kbit/s
Tan pequeño como sea
posible
Para estudios posteriores
Tan pequeño como sea
posible
No generar efectos molestos
3 códigos asíncronos con una
distorsión
total
<
4
asíncronos G.726 a 32 kbit/s
Propiedad de tandeming
síncrona
No peor que la G.726 a 32
kb/s
Distorsión lo más pequeña
posible
Tabla 6.- Requerimientos y objetivos para la recomendación G.729
El segundo requerimiento es el referente a la calidad de la señal de voz
relacionado con canales ruidosos. Para una tasa de error de bit de 10-3, la calidad de la
señal de voz no debía ser peor que la de la G.726 bajo las mismas condiciones. Los
requerimientos para borrado de tramas fueron más complicados de determinar.
57
Recomendación G.729: CS-CELP
Finalmente el código se probó con 1, 3 y 5 % de tramas borradas aleatoria o
secuencialmente. El requerimiento fue que para el caso del 3 %, para ambas situaciones,
no debía ser peor que el resultado obtenido en la escala MOS por el codificador de la
recomendación G.726 menos 0,5 puntos.
El tercero de los requerimientos relacionados con la señal de voz es que la
entrada esté como mucho 10 dB por encima o por debajo del nivel nominal de entrada.
Para realizar las pruebas del cuarto requerimiento se necesitó un gran número de
hablantes, tanto niños como adultos. La recomendación se probó en cuatro idiomas
diferentes con al menos 8 hablantes por idioma.
El codificador admite señales musicales, si bien la calidad que se obtiene es
bastante pobre. El principal motivo de este resultado es que los codificadores basados
en la predicción lineal con análisis por síntesis se basan en la predicción del pitch para
lograr una codificación eficiente. La mayoría de las señales de audio carecen de una
estructura con pitch y toda la carga de la codificación recae en la excitación y el
predictor lineal de bajo orden.
El siguiente requerimiento hace referencia a la conexión del codificador con
otros codificadores, ya sea otro de sus mismas características o de otras diferentes. Para
ambos casos, la unión de los dos no debe producir una distorsión mayor que la de 4
codificadores de la recomendación G.726 a 32 kb/s. No se propuso ningún tipo de
requerimiento para su interconexión con estándares regionales con tecnología digital
celular.
3.2.4 Características del codificador
El codificador CS-CELP se basa en el modelo de codificación conocido como
CELP (code-excited linear prediction). En este modelo, la señal codificada se compara
con la señal original y los parámetros del codificador se eligen de forma que se
minimice el error cuadrático medio ponderado entre la señal original y la señal
reconstruida.
Como ya se ha dicho, el codificador CS-CELP está diseñado con una señal,
apropiadamente limitada en banda, muestreada a 8.000 Hz. Las muestras de entrada y
salida se representan usando una cuantización lineal PCM de 16 bits. El codificador
opera con tramas de 10 ms, usando subtramas de 5 ms para el análisis de predicción
lineal (LP). El uso de subtramas permite una mejor determinación de los parámetros de
pitch y ganancia y, además, reduce la complejidad de las búsquedas en la tabla de
palabras código.
Lo que más destaca del decodificador y lo que mayor potencial le otorga para
aplicaciones sin cables es lo robusto que es frente a errores en el canal y la capacidad de
detectar y recomponer tramas perdidas.
Muchos codificadores usan la codificación lineal predictiva (LPC) adaptativa
hacia atrás, realizando el análisis LPC sobre la señal de voz previamente cuantizada.
58
Recomendación G.729:CS-CELP
Como la señal reconstruida está disponible tanto en el codificador como en el
decodificador, no es necesario enviar al decodificador los coeficientes LPC. Sin
embargo, aunque esta técnica funciona para algoritmos operando a 16 kbit/s, no se
consigue una calidad suficiente en algoritmos a 8 kbit/s sin realizar una predicción del
pitch. Los codificadores que usan el modelo de codificación CELP usan normalmente
un predictor de pitch adaptativo hacia delante, para explotar una de las características
más importantes de las señales de voz, su redundancia.
Para conseguir esas propiedades que hacen que este decodificador sea muy
bueno para diferentes aplicaciones se han usado tres nuevos esquemas en el algoritmo:
-
-
Cuantización vectorial multistage VQ de los coeficientes LSP con predicción
MA entre tramas, ya que el cuantizador debe operar con señales de voz con
respuesta en frecuencia diferentes.
Preselección en la búsqueda en la tabla de códigos, para reducir su complejidad.
Ganancia VQ con predicción hacia atrás para hacerlo más robusto frente a
errores en el canal.
La principal diferencia entre el codificador CS-CELP y otros codificadores
basados en el modelo CELP es el uso de una estructura de tabla de códigos conjugada,
tanto para la tabla de códigos fijos como para la de códigos adaptativos. Cuatro son las
ventajas más interesantes que se desprenden del uso de esta estructura conjugada
[Kataota, 2001]:
-
Mejora la robustez del sistema
Reduce la memoria necesaria para operar
Junto con la preselección, reduce la complejidad de las búsquedas en la tabla de
códigos aleatorios o adaptativos.
Permite generar una tabla de códigos aleatorios entrenada
Vamos a ver un poco más en profundidad algunas de ellas por separado.
Con un simple ejemplo se demostrará la efectividad de esta estructura conjugada
frente a errores en el canal, comparada con la de un codificador que no la usa. Para este
segundo codificador (con un solo vector) un error en el canal puede producir un vector
totalmente diferente al esperado:
Vector de salida
Vector error
error
Figura 22.- Posible error en el canal usando una tabla de códigos única
Sin embargo, para un codificador con estructura conjugada el vector de salida se
genera sumando dos vectores (subvectores 1 y 2). Si uno de los dos sufre un error en el
canal entonces, aunque el subvector de salida generado a partir de él pueda ser bastante
59
Recomendación G.729: CS-CELP
diferente del esperado, el vector de salida, que no es sino la suma de los dos subvectores
de salida, no será tan diferente del esperado.
Vector de salida
Vector error
Sub-vector 1
Sub-vector 1
error
Sub-vector 2
Figura 23.- Posible error en el canal usando una tabla de códigos con estructura
conjugada
La cantidad de memoria necesaria para almacenar una tabla de códigos
aleatorios depende del número de bits. La estructura conjugada usa dos subtablas. Como
cada una de las subtablas es menor que la tabla de códigos, se necesita menos memoria.
Si la necesidad de usar una memoria reducida no es primordial, es posible hacer
tablas de códigos aleatorios entrenadas.
Para mejorar la robustez del sistema se reduce el número de bits sensible a
posibles errores en el canal del codificador. En la codificación convencional usando el
modelo CELP, la potencia de la señal de voz de entrada para cada trama es cuantizada
en primer lugar, y después el residuo de la potencia se cuantiza usando la tabla de
códigos de ganancia. El índice de la información de potencia es especialmente sensible
a los errores en el canal y un error en él puede provocar una distorsión de importancia
(clicks) en la señal de voz reconstruida. En el codificador CS-CELP la ganancia VQ con
predicción hacia atrás elimina la necesidad de transmitir explícitamente la información
de potencia. Por supuesto, si el índice de la tabla de códigos de ganancia sufre algún
error debido al canal, la calidad de la señal de voz en el decodificador se degrada. Sin
embargo, para este esquema, se producen un número pequeño de distorsiones en la
amplitud para unas pocas tramas, lo cual es preferible al caso anterior.
3.2.5 Aplicaciones
Muchas aplicaciones, como por ejemplo los sistemas de radio digitales celulares,
requieren un algoritmo de codificación de voz que aúne una calidad elevada y robustez
frente a errores por debajo de los 8 kbit/s. Otras aplicaciones de estos algoritmos de
codificación de voz a 8 kbit/s son:
-
Sistemas de comunicación personal (SCP)
Sistemas digitales por satélite
VoIP (Voz sobre IP)
60
Recomendación G.729:CS-CELP
-
Otras aplicaciones como voz empaquetada
multiplexadores
y equipos con circuitos
Las aplicaciones de comunicación sin cables requieren que el codificador sea
robusto frente a los errores en el canal. Estos errores pueden ser aleatorios o
secuenciales y el codificador debe de ser capaz de asimilarlos sin introducir efectos
extraños en la señal. El decodificador debe recomponer tramas perdidas de la señal con
una mínima pérdida en la calidad de la señal de voz.
3.2.6 Anexos
El Anexo A del estándar G.729 es un modelo simplificado del G.729, que tiene
una total interoperativibilidad con éste.
Los codificadores G.729 y G.729A proporcionan la misma calidad de voz
operando normalmente, la tasa de datos y el tamaño de las tramas es el mismo, y son
totalmente interoperativos. Esto lleva a veces a confusión entre ambos porque son
idénticos, a excepción de por su complejidad.
El anexo B del estándar describe un detector de actividad vocal (VAD), que
puede usar tanto el estándar G.729 como el G.729 A. El VAD permite la supresión de
silencios (también llamadas discontinuidades en la transmisión) y generan ruido de
confort. La supresión de silencios implica la detección de las partes de la señal donde no
hay voz y hace discontinua la salida del codificador. El ruido confort se simula
mediante ruido de fondo que suena durante la supresión de silencios para confirmar al
oyente que la comunicación sigue activa. En una conversación normal la supresión de
silencios reduce la cantidad de información enviada entre un 40 y un 60 %, reduciendo
la tasa media de bit hasta en 4 kbit/s. Por tanto, la utilización del estándar G.729 con su
Anexo B reduce la demanda de ancho de banda no transmitiendo los silencios.
61
Recomendación G.729: CS-CELP
62
Implementación del codificador de voz
4
Implementación del codificador de voz
4.1 Introducción
4.1.1 Definición del sistema a implementar
El codificador que se va a implementar se basa en el definido en la
recomendación G.729 de la ITU-T (“Codificación de la voz a 8 kbit/s mediante
predicción lineal con excitación por código algebraico de estructura conjugada”), con
alguna pequeña modificación. Este tipo de predicción lineal se conoce genéricamente
como CS-ACELP y a partir de ahora nos referiremos a ella de esta manera.
El códec definido en la recomendación está diseñado para trabajar con una señal
digital para efectuar primero un filtrado con la anchura de la banda telefónica de la
señal analógica de entrada, seguido de un muestreo a 8000 Hz y su conversión a una
modulación por impulsos codificados (MIC) lineal de 16 bits, para entrar en el
codificador. La salida del decodificador se reconvierte a una señal analógica siguiendo
un método similar. Este estudio se centrará exclusivamente al estudio de codificador y
decodificador, dejando lo demás (paso de señales de analógico a digital y viceversa
antes y después del sistema en función de la red en que trabaje, cuantización y envío de
parámetros…) para próximos estudios sobre el tema.
El códec CS-CELP se basa en el modelo de codificación mediante predicción
lineal con excitación por código (CELP). Opera con tramas vocales de 10 ms
correspondientes a 80 muestras a una velocidad de muestreo de 8000 muestras por
segundo. En cada trama de 10 ms se analiza la señal vocal para extraer los parámetros
del modelo CELP (coeficientes de filtro de predicción lineal, ganancias e índices de las
tablas de códigos adaptativos y fijos). Los parámetros en cuestión se codifican y se
transmiten. En el decodificador, dichos parámetros se usan para recuperar los
parámetros de excitación y del filtro de síntesis. La voz se reconstruye filtrando la
63
Implementación del codificador de voz
excitación a través del filtro de síntesis de corto plazo como se ve en la figura 24. El
filtro de síntesis de corto plazo se basa en un filtro de predicción lineal de décimo orden.
El filtro de síntesis de largo plazo o de pitch se aplica mediante el método de la llamada
tabla de códigos adaptativos. Tras calcular la señal vocal reconstruida, ésta se mejora
con un postfiltrado.
Además, para la correcta implementación del código en Matlab se añadirán
ceros al inicio de ciertas señales (para el tratamiento de las primeras tramas), evitando
de esta forma la posibilidad de tener índices con valores cero o negativos, no permitidos
por esta aplicación.
Para ir viendo la evolución de la señal en los diferentes puntos de codificador y
decodificador, se empleará una ventana de 240 muestras de la vocal “a” de la palabra
“campo”.
Fig. 24.- Diagrama funcional del modelo conceptual de síntesis (CELP)
4.1.2 Codificador
El principio de codificación puede observarse en la figura 25. La señal de
entrada se pasa por un filtro de paso de alta y se pone a escala en el bloque de
preprocesamiento. La señal preprocesada actúa como señal de entrada para todo el
análisis posterior. Se efectúa un análisis de predicción lineal para cada trama de 10 ms
con el fin de calcular los coeficientes del filtro LP. Éstos se convierten en pares del
espectro lineal (LSP, line spectrum pair). La cuantización de estos parámetros que se ha
realizado es una cuantización lineal (La cuantización de estos parámetros, al igual que la
de otros que veremos más adelante, de una forma más eficiente se deja propuesta para
posteriores estudios). La señal de excitación se selecciona utilizando un procedimiento
de búsqueda basado en el análisis por síntesis, según el cual la diferencia entre la señal
original y la reconstruida se reduce al mínimo de acuerdo con una medida de la
distorsión ponderada perceptualmente. Esto se logra pasando la señal de error por un
filtro de ponderación perceptual, cuyos coeficientes se derivan del filtro LP sin
cuantificar. El valor de la ponderación perceptual se hace adaptativo, con el fin de
mejorar la calidad para señales de entrada con una respuesta de frecuencia plana.
El primer paso del proceso es analizar el retraso de pitch. Esto se hace
analizando la autocorrelación de la señal de voz (ponderada para enfatizar diversas
características en frecuencia), y encontrando el máximo con la menor posición, de
64
Implementación del codificador de voz
forma que no se tomen múltiplos del retraso de pitch. A esto se le denomina análisis de
pitch en bucle abierto. Se hace una búsqueda en la región alrededor del retraso de pitch
en bucle abierto para encontrar el mejor retraso de pitch. El mejor retraso se define
filtrando la excitación previa (retrasada la cantidad apropiada) a través del filtro de
síntesis LP. El resultado es correlacionado con la señal de voz actual y dividido por la
magnitud de la salida del filtro de síntesis, con lo cual se elimina la ganancia del
proceso de búsqueda. Se toma el retraso que maximiza esta cantidad. La ganancia se
obtiene directamente a partir de la excitación óptima. Se extrae de la señal de voz
original la salida del filtro de síntesis usando el retraso óptimo y la excitación
amplificada, y la diferencia, llamada señal objetivo, se usa para encontrar la segunda
parte de la excitación.
La excitación consiste en cuatro impulsos. Cada impulso tiene una amplitud
positiva o negativa, y puede encontrarse dentro de un conjunto fijo de posiciones, que es
diferente para cada impulso. Estos pulsos se filtran mediante un filtro armónico simple.
La búsqueda se realiza, primero identificando las amplitudes ideales (positivas o
negativas), y después las posiciones. Como antes, la búsqueda se realiza filtrando la
señal de excitación a través del filtro de síntesis, y comparando el resultado con la señal
objetivo. Después es dividida por la energía de la señal de salida del filtro de síntesis
(eliminando de nuevo la ganancia del proceso de búsqueda). Se selecciona el conjunto
de amplitudes y posiciones que maximizan esta métrica. Finalmente la ganancia se
calcula directamente.
Los parámetros de excitación (parámetros de tabla de códigos fijos y
adaptativos) se determinan para cada subtrama de 5 ms (40 muestras). Los coeficientes
cuantificados y no cuantificados del filtro LP se aplican a la segunda subtrama, mientras
que para la primera subtrama se utilizan coeficientes del filtro LP interpolados
(cuantificados o no). Se estima un retardo de tono ó pitch en bucle abierto por cada
trama de 10 ms en base a la señal vocal ponderada perceptualmente. Luego se efectúan,
para cada subtrama por separado, las siguientes operaciones:
•
Se calcula la señal objetivo x(n) pasando el LP residual por el filtro de síntesis
ponderado W ( z ) Aˆ ( z ) . Los estados iniciales de estos filtros se actualizan
filtrando la diferencia que se produce entre el residuo LP y la excitación. Ello
equivale al método corriente de sustraer de la señal vocal ponderada la respuesta
de entrada cero del filtro de síntesis ponderado.
•
Se calcula la respuesta de impulso h(n) del filtro de síntesis ponderado.
•
Se analiza el tono en bucle cerrado (para determinar el retardo y la ganancia de
la tabla de códigos adaptativos) mediante la respuesta objetivo x(n) y la
respuesta a los impulsos h(n), indagando en torno al valor del retardo en bucle
abierto. Se utiliza un retardo fraccionario de 1/3 de definición. La señal objetivo
x(n) se actualiza sustrayendo la contribución (filtrada) de la tabla de códigos
adaptativos y se aplica este nuevo objetivo, x’(n), para la búsqueda de de la tabla
de códigos fijos, con el fin de obtener la excitación óptima.
•
Se construye la tabla de códigos fijos, y
65
Implementación del codificador de voz
•
Finalmente se actualizan las memorias de los filtros mediante la señal de
excitación así determinada.
Figura 25.- Principio de codificación del codificador
4.1.3 Decodificador
El principio del decodificador aparece en la figura 26. Primero se extraen los
índices de los parámetros a partir del tren de bits recibidos. Los índices se decodifican
para obtener los parámetros del códec correspondientes a una trama de voz de 10 ms.
Estos parámetros son los coeficientes LSP, los dos retardos de tono fraccionarios, los
dos vectores de de la tabla de códigos fijos y las ganancias de las tablas de códigos
adaptativos y fijos. Los coeficientes LSP se interpolan y se convierten en coeficientes
del filtro LP de cada subtrama. A continuación, para cada subtrama de 5 ms se aplican
los siguientes pasos:
66
Implementación del codificador de voz
•
Se construye la excitación sumando los vectores de las tablas de los códigos
adaptativos y fijos, puestos a escala por sus respectivas ganancias.
•
Se reconstruye la señal vocal filtrando la excitación por el filtro de síntesis LP.
•
Se hace pasar la señal vocal reconstruida a través de una fase de
postprocesamiento, que incluye un postfiltro adaptativo basado en filtros de
síntesis de largo y corto alcance, seguido de un filtro paso de alta y un
escalamiento.
Figura 26.- Principio del decodificador
4.2 Descripción de las funciones del codificador
En este apartado se describen las diferentes funciones del codificador
representadas por los bloques de la Figura 25. Se presente un flujo más detallado de las
señales en la Figura 27.
67
Implementación del codificador de voz
Figura 27.- Flujo de señales en el codificador
68
Implementación del codificador de voz
4.2.1 Preprocesamiento
Como ya se ha indicado anteriormente la entrada al codificador debe ser una
señal MIC (modulación por impulsos codificados) de 16 bits. Antes de iniciarse la
codificación se efectúan dos funciones de preprocesamiento:
1. escalamiento de las señales
2. filtrado paso de alta
Para poner la señal en escala se divide la entrada por 2, con la finalidad de
reducir los desbordamientos. El filtro paso alto es una precaución para evitar
componentes indeseables de baja frecuencia. Se utiliza un filtro de polos y ceros de
segundo orden con una frecuencia de corte de 140 Hz. Ambas funciones, el
escalamiento y el filtrado paso alto, se combinan dividiendo los coeficientes del
numerador de este filtro por 2. El filtro resultante está dado por la expresión:
H h1 ( z ) =
0,46363718 − 0,92724705 z −1 + 0,46363718 z −2
1 − 1,9059465 z −1 + 0,9114024 z −2
(4.1)
Figura 28.- Filtro de preprocesado
La señal de entrada filtrada mediante H h1 ( z ) se define como s(n), símbolo que
se utilizará de ahora en adelante en todas las demás aplicaciones del códec.
69
Implementación del codificador de voz
4.2.2 Análisis y cuantización de la predicción lineal
Los filtros de análisis y síntesis de predicción de corto plazo se basan en filtros
de predicción lineal (LP), ya vistos con anterioridad. Para nuestro codificador
emplearemos un filtro de orden 10. El filtro de síntesis LP se define por:
H (z ) =
1
=
Â( z)
1
10
1 + ∑ âk z
(4.2)
−k
k =1
donde âk , k =1,2,…,10, representa los coeficientes (cuantificados) de predicción lineal
(LP). La predicción a corto plazo o predicción lineal se lleva a cabo para cada trama
mediante el método de autocorrelación, con una ventana asimétrica de 30 ms. Cada 80
muestras (10 ms), se calculan los coeficientes de autocorrelación de las señales vocales
ventanizadas y se convierten en coeficientes LP por medio del algoritmo de Levinson.
Luego los coeficientes LP se transforman al dominio LSP, para permitir la
cuantificación e interpolación. Los filtros interpolados, cuantificados o no, se
reconvierten en coeficientes LP (a fin de construir los filtros de síntesis y ponderación
para cada subtrama).
4.2.2.1 Ventanización y cálculo de la autocorrelación
La ventana de análisis LP consta de dos partes: la primera es media ventana de
Hamming y la segunda un cuarto del ciclo de la función coseno. La ventana está dada
por la ecuación:

2πn
)
n = 1,...,200
0,54 − 0,46 cos(
399
(4.3)
wlp (n) = 
cos( 2π (n − 201) )
n = 201,...,240

159
70
Implementación del codificador de voz
Figura 29.- Ventana para el análisis LP
Como en el análisis de predicción lineal hay un preanálisis de 5 ms, lo cual
requiere 40 muestras de la trama vocal futura. La ventana del análisis LP se aplica a 120
muestras de las tramas vocales precedentes, 80 muestras de la trama vocal presente y 40
muestras de la trama futura. La ventana puede verse gráficamente en la figura 29. En
ella puede verse cómo la parte que más peso va a tener es la comprendida entre el inicio
de la trama actual y la mitad de la subtrama siguiente.
En el siguiente diagrama (figura 30) puede verse cómo quedarían las ventanas y
a qué muestras afectaría cada una si se tomara la señal vocal, dividida en tramas de 80
muestras, y se superpusiesen las ventanas. El diferente sombreado identifica las
correspondientes excitación (señal vocal) y ventanas de análisis LP.
Figura 30.- Procedimiento de ventanización en el análisis LP
La señal vocal ventanizada se obtiene pasando la señal vocal a través de la
ventana:
s ' (n) = wlp (n) s (n)
n = 1,...,40
(4.4)
Si se toma un trozo de la señal de voz y la enventanamos usando la ventana
definida, se obtiene lo siguiente:
Figura 31.- Tramo de señal de voz original y enventanada en el espacio muestral y en frecuencia
71
Implementación del codificador de voz
Como puede apreciarse, en las gráficas de la figura 31, las muestras que más
valor tendrán en el posterior procesamiento van a ser las de la trama actual. Si se
superponen las dos señales, figura 32, se puede apreciar mejor. Al usar una ventana tan
grande, abarca tres tramas de la señal vocal, se busca una mayor resolución en la
frecuencia.
Figura 32.- Tramo de señal de voz original y enventanada superpuestos en el espacio muestral
Figura 33.- Espectros de un tramo de señal de voz original y enventanada superpuestos
72
Implementación del codificador de voz
Esta señal ventanizada es la que se utiliza para calcular los coeficientes de
autocorrelación:
240
r (i ) = ∑ s '(n) s ' (n − i )
i = 1,...,11
(4.5)
n =i
Con el fin de eludir problemas aritméticos para las señales de entrada de bajo
nivel, se pone un límite inferior al primer coeficiente de la autocorrelación de r(1)=1,0.
Como el análisis LP puede generar filtros de síntesis con picos espectrales
afilados, se expande el ancho de banda para evitar problemas. La expansión afecta
especialmente a los picos de los formantes principales de la respuesta en magnitud del
filtro. Normalmente esta expansión del ancho de banda se emplea para evitar sonidos
sintetizados no naturales en señales de voz con un pitch elevado, cuando el análisis LP
tiene problemas a la hora de estimar la envolvente del espectro. Además, la expansión
aumenta la robustez del filtro frente a errores de cuantización.
Una expansión del ancho de banda de 60 Hz se hace multiplicando los
coeficientes de autocorrelación por los factores:
 1  2πf i  2 
0
 
wlag (i ) = exp − 
2
f

 s  
i = 2,...,11
(4.6)
donde f0=60 Hz es la expansión de la anchura de banda y fs=8000 Hz es la frecuencia de
muestreo.
Se hace, además, una corrección por ruido blanco para reducir posibles
problemas numéricos en el análisis LP. La voz tiene un espectro con un fuerte filtrado
en baja frecuencia (-6 dB/octava), por lo que presenta un rango dinámico elevado. A
pesar de que la expansión del ancho de banda minimiza el rango dinámico al reducir sus
picos, las componentes de alta frecuencia en el espectro de la señal de voz tienen una
amplitud muy pequeña. La corrección se usa dado que el análisis LP requiere una alta
precisión computacional para capturar la descripción de los elementos en el extremo
final del espectro de la señal de voz. Cuando estos elementos son muy pequeños, la
matriz de autocorrelación se vuelve singular, generando problemas computacionales.
Añadiendo a la señal un ruido de bajo nivel, se reduce el rango dinámico del espectro y
se evitan los problemas numéricos. Para introducir esta corrección se multiplica r(1) por
un factor de corrección por ruido blanco 1,0001, lo que equivale a añadir un umbral de
ruido de -40 dB a la señal. Los coeficientes de autocorrelación modificados están
definidos por:
r ' (1) = 1,0001r (1)
r ' (i ) = wlag (i )r (i )
i = 2,...,11
(4.7)
Si se representa las densidades espectrales de una ventana de la señal con sus
coeficientes de autocorrelación sin modificar y modificados, se observa como se
suavizan los picos del espectro, afectando especialmente a los picos de los formantes
principales:
73
Implementación del codificador de voz
Figura 34.- Densidad espectral de un tramo de voz sin modificar sus coeficientes de
autocorrelación y modificándolos
4.2.2.2 Algoritmo de Levinson-Durbin
Los coeficientes de autocorrelación modificados r ' (i ) se utilizan para obtener los
coeficientes de filtro LP a k , k = 2,…, 11. Esta operación se realiza tal y como se
explicó en la parte teórica, resolviendo el siguiente conjunto de ecuaciones:
11
∑ a r '( i − j ) = −r (i)
j =2
j
i = 2,...,11
(4.8)
que se obtienen a partir de la ecuación fundamental del modelo LPC y, donde los
coeficientes a j son las estimaciones de los coeficientes a k .
Este conjunto de ecuaciones (4.8) se resuelve mediante el algoritmo de Levinson
Durbin. Esto puede realizarse mediante la función levinson de Matlab, a la cual solo se
le pasa como argumento los coeficientes de autocorrelación modificados.
La solución final se expresa por a j = a [j10 ] , j = 1,…,11, con a1 = 1,0 .
74
Implementación del codificador de voz
4.2.2.3 Conversión LP -> LSP
Los coeficientes de filtro de predicción lineal (LP), aj, j = 1,…,11, se convierten
para los efectos de cuantificación e interpolación en coeficientes de pares del espectro
lineal (LSP). Esta conversión se efectúa tal y como se vio en la parte teórica, aunque a
efecto prácticos se usará el comando de Matlab poly2lsf, que realiza dicha conversión.
4.2.2.4 Cuantización de los coeficientes LSP
De una manera sencilla se utilizará una cuantización lineal de los coeficientes
LSP, en lugar de la cuantización vectorial descrita en la recomendación, que se dejará
para posteriores estudios.
4.2.2.5 Interpolación de los coeficientes LSP
Los coeficientes LP cuantizados (y no cuantizados) se utilizan para la segunda
subtrama. Para la primera subtrama, los coeficientes LP cuantizados (y no cuantizados)
se obtienen mediante interpolación lineal de los parámetros correspondientes en las
subtramas adyacentes. La interpolación tiene lugar en los coeficientes LSP del dominio
coseno. Sean qi(actual) los coeficientes LSP calculados para la trama actual de 10 ms, y
qi(anterior) los coeficientes LSP calculados en la trama anterior de 10 ms. Los coeficientes
LSP interpolados (no cuantizados) en cada una de las dos subtramas corresponden a:
Subtrama 1: q i(1) = 0,5qi( anterior ) + 0,5q i( actual )
i = 1,...,10
= 0,5q
i = 1,...,10
Subtrama 2: q
(2)
i
( actual )
i
(4.9)
El mismo procedimiento de interpolación se aplica a los coeficientes LSP
cuantificados, sustituyendo qi por q̂ i en la ecuación (4.9)
4.2.2.6 Conversión de LSP a LP
Una vez cuantificados e interpolados los coeficientes LSP, se reconvierten en
coeficientes LP ak. Esta conversión se realiza de la siguiente manera. Se hallan los
coeficientes de F1(z) y F2(z) ampliando las ecuaciones 2.26 tras conocer los coeficientes
LSP cuantificados e interpolados. Los coeficientes f1(i) ,i = 1,…,5, se calculan a partir
de qi mediante la relación recursiva:
75
Implementación del codificador de voz
para i = 1 a 5
f 1 (i ) = −2q 2i −1 f1 (i − 1) + 2 f i (i − 2 )
para j = i − 1 decreciendo hasta 1
f 1[i ] ( j ) = f 1[i −1] ( j ) − 2q 2i −1 f1[i −1] ( j − 1) + f 1[i −1] ( j − 2 )
fin
fin
con valores iniciales f1(0) = 1 y f1(-1) = 0. Los coeficientes f2(i) se calculan de manera
similar, sustituyendo q2i-1 por q2i. Después de determinar los coeficientes f1(i) y f2(i),
F1(i) y F2(i) se multiplican por el factor 1+z-1 y 1-z-1 respectivamente, obteniendo F1′( z )
y F2′( z ) , o sea:
f 1′(i ) = f 1 (i ) + f 1 (i − 1)
f 2′(i ) = f 2 (i ) − f 2 (i − 1)
i = 1,...,5
(4.10)
i = 1,...,5
Finalmente, los coeficientes LP se calculan a partir de f 1′(i ) y f 2′ (i ) mediante:
0,5 f1′(i ) + 0,5 f 2′(i )
ai = 
0,5 f1′(11 − i ) − 0,5 f 2′ (11 − i )
i = 1,...,5
i = 6,...,10
(4.11)
Esto se deduce directamente de la relación A( z ) = (F1′( z ) + F2′( z )) / 2 , así como el
hecho de que F1′( z ) y F2′( z ) son respectivamente, polinomios simétricos y
antisimétricos.
4.2.3 Ponderación perceptual
El filtro de ponderación perceptual se basa en los coeficientes del filtro LP no
cuantizados ai y viene definido por:
k
−k
A( z γ 1 ) 1 + ∑k =1 γ 1 a k z
W ( z) =
=
A( z γ 2 ) 1 + ∑10 γ 2ki a k z −k
10
(4.12)
k =1
Los valores de γ 1 y γ 2 determinan la respuesta de frecuencia del filtro W (z ) .
Mediante un ajuste adecuado de estas variables es posible lograr una ponderación más
eficaz. El método consiste en hacer de γ 1 y γ 2 una función de la forma espectral de la
señal de entrada. Se efectúa esta adaptación una vez por trama de 10 ms, pero aplicando
un procedimiento de interpolación para cada primera subtrama, a fin de suavizar el
proceso de adaptación. La forma del espectro se obtiene a partir de un filtro de
predicción lineal de 2º orden, como resultado secundario de la recursión de LevinsonDurbin. Los coeficientes de reflexión k1 se convierten en coeficientes oi , logaritmo
relacionado de zona (LAR, Log Area Ratio) mediante:
76
Implementación del codificador de voz
oi = log
(1,0 + k i )
(1,0 − k i )
i = 1, 2
(4.13)
Los coeficientes LAR correspondientes a la trama actual de 10 ms sirven para la
segunda subtrama. Los coeficientes LAR de la primera subtrama se obtienen mediante
interpolación lineal de los parámetros LAR de la trama anterior. Los coeficientes LAR
interpolados en cada una de ambas subtramas están dados por:
Subtrama 1 : oi(1) = 0,5oi(anterior ) + 0,5oi(actual )
(2 )
Subtrama 2 : oi
i = 1, 2
( actual )
= oi
i = 1, 2
(4.14)
La envolvente del espectro se caracteriza como plana (flat = 1) o inclinada (flat
= 0). Para cada subtrama se logra esta caracterización aplicando a los coeficientes LAR
una función umbral. Para evitar cambios bruscos, se realiza una histéresis tomando en
cuenta el valor de la envolvente (flat) en la subtrama anterior m-1,
0
si o1(m ) < −1,74 y o2(m ) > 0,65 y flat (m −1) = 1

flat = 1
si o1(m ) > −1,52 o bien o2(m ) < 0,43 y flat (m−1) = 0

( m −1)
en los otros casos
 flat
(
( flat
(m )
)
(4.15)
Cuando el espectro interpolado para una subtrama se califica de plano
= 1 , los factores de ponderación se establecen en γ 1 = 0,94 y γ 2 = 0,6 . Cuando
)
(
)
el espectro se califica de inclinado flat (m ) = 0 , el valor de γ 1 se establece a 0,98 y el
de γ 2 se adapta a la intensidad de las resonancias en el filtro de síntesis LP, pero
limitado entre 0,4 y 0,7. En caso de registrarse una fuerte resonancia, el valor de γ 2 se
fija más cerca del límite superior. Esta adaptación se logra en base al criterio de la
distancia mínima entre dos coeficientes LSP sucesivos para la subtrama actual. La
distancia mínima está dada por:
d min = mín[ω i +1 − ω i ]
i = 1,..., 9
(4.16)
El valor de γ 2 se calcula mediante la relación lineal:
γ 2 = −6,0d min + 1,0
en el int ervalo 0,4 ≤ γ 2 ≤ 0,7
(4.17)
Si se representa la forma del filtro para cada una de estas situaciones, es decir,
con γ 1 = 0,94 y γ 2 = 0,6 para el caso en que el espectro resulte plano, y con unos
valores cualesquiera de entre los posibles, por ejemplo γ 1 = 0,98 y γ 2 = 0,7 , para un
espectro inclinado:
77
Implementación del codificador de voz
Figura 35.- Comparación del filtro de ponderación cuando la envolvente se considera plana y
cuando se considera inclinada
La señal vocal ponderada en una subtrama está dada por:
10
10
k =1
k =1
sw(n) = s (n) + ∑ a k γ 1k s (n − k ) − ∑ a k γ 2k sw(n − k )
n = 1,...,40
(4.18)
Figura 36.- Tramo de señal vocal sin ponderar y ponderado en el espacio muestral y en
frecuencia
78
Implementación del codificador de voz
Si se compara el mismo tramo de la señal vocal sin ponderar y una vez
ponderado, se aprecia el efecto que tiene la ponderación sobre la señal vocal, que
consiste principalmente en una disminución de la amplitud de los picos y valles de la
señal, sin grandes cambios en la forma de onda.
Figura 37.- Representación señal vocal sin ponderar frente a señal vocal ponderada en el espacio
muestral
Figura 38.- Representación espectro señal vocal sin ponderar frente a espectro señal vocal
ponderada
79
Implementación del codificador de voz
La señal vocal ponderada sw(n) se utiliza para estimar el retardo de tono en la
trama vocal.
4.2.4 Análisis de tono en bucle abierto
Con el fin de disminuir la complejidad que implica buscar el mejor retardo de la
tabla de códigos adaptativos, el campo de búsqueda se limita en torno a un retardo
candidato Top, que se obtiene de un análisis de tono en bucle abierto. Este análisis de
tono en bucle abierto se efectúa una vez por cada trama (10 ms). La estimación de tono
en bucle abierto utiliza los valores de la señal vocal ponderada sw(n) de la ecuación
4.18, y el método descrito a continuación:
-
como primer paso, se establecen tres máximos de la correlación
80
R(α ) = ∑ sw(n) sw(n − α )
(4.19)
n =1
para los tres rangos siguientes:
i = 1: 81,…,144
i = 2: 41,…,80
i = 1: 21,…,40
-
Los máximos retenidos R(ti), i = 1,…,3 se normalizan mediante:
R' (t i ) =
-
R(t i )
i = 1,...,3
∑n sw 2 (n − ti )
(4.20)
El ganador de las tres correlaciones normalizadas se selecciona favoreciendo
aquellos retardos que presentan valores en la gama inferior. Ello se logra
ponderando las correlaciones normalizadas correspondientes a los retardos más
largos. El mejor retardo de bucle abierto Top se determina de la siguiente manera:
Top = t1
R' (Top ) = R' (t1 )
si R' (t 2 ) ≥ 0,85 R' (Top )
R' (Top ) = R' (t 2 )
Top = t 2
fin
si R' (t 3 ) ≥ 0,85 R' (Top )
R' (Top ) = R' (t 3 )
Top = t 3
fin
80
Implementación del codificador de voz
El recurso de dividir la gama de retardos en tres secciones para favorecer los
valores menores tiene por objeto evitar la elección de los múltiplos del tono
fundamental (pitch).
4.2.5 Cálculo de la respuesta impulsiva
La respuesta a impulsos h(n) del filtro de síntesis ponderado W(z)/Â(z) se
necesita para indagar las tablas de códigos adaptativos y fijos. Se calcula la respuesta de
impulso h(n) para cada subtrama filtrando una señal consistente en los coeficientes del
filtro A(z/γ1) completado con ceros, a través de ambos filtros 1/Â(z) y 1/A(z/γ2).
El filtro de síntesis y el filtro de síntesis ponderado se muestran en la figura 39.
Puede observarse claramente el efecto de la ponderación:
Figura 39.- Filtro de síntesis y filtro de síntesis ponderado
La respuesta impulsiva de este filtro es la siguiente:
Figura 40.- Respuesta impulsiva del filtro de síntesis ponderado
81
Implementación del codificador de voz
4.2.6 Cálculo de la señal objetivo
La señal objetivo x(n) que se usará como referencia para la búsqueda de la tabla
de códigos adaptativos suele calcularse restando la respuesta de entrada cero del filtro
de síntesis ponderado W(z)/Â(z) = A(z/γ1)/[ Â(z)A(z/γ2)] de la señal vocal ponderada
sw(n) de la ecuación 4.18. Esto se realiza para cada subtrama.
Un procedimiento equivalente para calcular la señal objetivo, que será el que
usaremos en este desarrollo, consiste en filtrar la señal LP residual r(n) a través de la
combinación del filtro de síntesis 1/Â(z) y el filtro de ponderación A(z/γ1)/A(z/γ2). Tras
determinar la excitación correspondiente a la subtrama, los estados iniciales de dichos
filtros se actualizan filtrando la diferencia entre las señales residuales y de excitación.
La actualización de la memoria de estos filtros se examinará más adelante.
La señal residual r(n), necesaria para determinar el vector objetivo, también se
aplica a la búsqueda de la tabla de códigos adaptativos, para ampliar la memoria
intermedia de la excitación anterior. El recurso simplifica el procedimiento de búsqueda
de la tabla de códigos adaptativos para retardos menores que el correspondiente a una
subtrama de tamaño 40, como se verá en el siguiente apartado. El residuo LP está
definido por:
10
r ( n ) = s ( n ) + ∑ âk s ( n − k )
n = 1,…,40
(4.21)
k =1
Si se calcula el residuo del tramo de voz que se está empleando, se obtiene:
Figura 41.- Residuo LP de un tramo de la señal de voz
La señal objetivo se muestra en la figura 42. Al igual que en el residuo LP
todavía se aprecia la periodicidad de la señal.
82
Implementación del codificador de voz
Figura 42.- Señal objetivo en el tiempo y en la frecuencia
4.2.7 Búsqueda de la tabla de códigos adaptativos
La tabla de códigos adaptativa se basa en un filtro de síntesis de pitch, que es el
responsable del tratamiento de los efectos de largo plazo. La salida del filtro de pitch ó
de largo plazo es simplemente la señal de excitación previa retrasada una cierta cantidad
(retraso) y escalada con una cierta ganancia.
Los componentes de la tabla de códigos adaptativos representan la periodicidad
de la señal de excitación usando un retraso de pitch fraccionario con una resolución de
1/3. El índice y la ganancia de la tabla se encuentran usando una búsqueda en bucle
cerrado sobre el retraso obtenido en la búsqueda en bucle abierto. La señal a ajustar será
la señal objetivo.
Los parámetros de la tabla de códigos adaptativos (o parámetros de tono) son,
por tanto, el retardo y la ganancia. Con arreglo al método de la tabla de códigos
adaptativos para aplicar el filtro de tono se repite la excitación para retardos menores
que la longitud de la subtrama.
En la fase de reconocimiento, la excitación se amplia mediante el residuo LP,
para simplificar la búsqueda en bucle cerrado. La búsqueda de la tabla de códigos
adaptativos se efectúa para cada subtrama (5 ms).
Para cada subtrama, el retardo óptimo se determina mediante un análisis en
bucle cerrado que minimiza el error cuadrático medio ponderado. En la primera
subtrama, se determina el retardo T1 investigando un pequeño intervalo (seis muestras)
de valores de retardo en torno al retardo en bucle abierto Top. Los límites de la
búsqueda, tmin y tmax, se definen mediante:
83
Implementación del codificador de voz
t min = Top − 3
si t min < 20 entonces t min = 20
t máx = t min + 6
si t máx > 143 entonces
t máx = 143
t min = t máx − 6
fin
Para la segunda subtrama, el análisis de tono en bucle cerrado se efectúa en
torno al tono seleccionado para la primera subtrama, para determinar el retardo óptimo
2
2
T2. El intervalo de búsqueda está limitado entre t min − y t máx + , donde tmin y tmax se
3
3
deducen de T1 como sigue:
t min = int(T1 ) − 5
si t min < 20 entonces t min = 20
t máx = t min + 9
si t máx > 143 entonces
t máx = 143
t min = t máx − 9
fin
La búsqueda de tono de bucle cerrado reduce al mínimo el error cuadrático
medio ponderado entre la señal vocal original y la reconstruida. Esto se logra haciendo
máximo el término:
R (α ) =
∑
∑
40
n =1
40
n =1
x ( n ) yα ( n )
(4.22)
yα ( n ) yα ( n )
donde x(n) es la señal objetivo e yα(n) la excitación filtrada anterior en el retardo α
(excitación anterior convolucionada con h(n)). Obsérvese que el intervalo de búsqueda
está limitado en torno a un valor preseleccionado, correspondiente al tono en bucle
abierto Top para la primera subtrama y T1 para la segunda subtrama.
La convolución yα(n) se calcula para el retardo tmin. Para los demás retardos
enteros en el intervalo de búsqueda α=tmin+1,…,tmax, se actualiza mediante la relación
recursiva:
yα (n) = yα −1 (n − 1) + u (−α )h(n)
n = 40,...,1
(4.23)
donde u(n), n = -144,…,40 es la memoria intermedia de excitación e yα-1(-1) = 0. Nótese
que, en la fase de búsqueda, las muestras u(n), n = 1,…,40 no se conocen y se necesitan
para determinar los retardos de tono inferiores a 40. Para simplificar la búsqueda, se
84
Implementación del codificador de voz
copia el residuo LP a u(n), de modo que la relación expresada en la ecuación (4.23) sea
válida para todos los retardos.
Para determinar T1 y T2 cuando el retardo en bucle cerrado entero óptimo es
inferior a 85, deben probarse las fracciones alrededor del retardo entero óptimo. La
búsqueda de tono fraccionario se realiza interpolando la correlación normalizada de la
ecuación (4.22) para encontrar su valor máximo. La interpolación tiene lugar mediante
un filtro FIR b12 basado en una función sinc de Hamming ventanizada con truncamiento
a ± 11 y completando con ceros a ± 12 [b12(12) = 0]. El filtro tiene una frecuencia de
corte (-3 dB) a 3600 Hz en el dominio de sobremuestra. Los valores interpolados de
R(α) para las fracciones -⅔, -⅓, 0, ⅓ y ⅔ se obtienen aplicando la fórmula de
interpolación:
3
3
i =0
i =0
R (α ) t = ∑ R (α − i )b12 (t + 3i ) + ∑ R (α + 1 + i )b12 (3 − t + 3i )
t = 0,1, 2
(4.24)
donde t = 0, 1, 2 corresponde a las fracciones 0, ⅓ y ⅔, respectivamente. Debe tenerse
presente la necesidad de calcular los términos de correlación de la ecuación (4.22)
utilizando el intervalo entre tmin – 4 y tmáx + 4, para permitir una interpolación adecuada.
4.2.7.1 Generación del vector de tabla de códigos adaptativos
Una vez determinado el retardo de tono se calcula el vector de tabla de códigos
adaptativos v(n) interpolando la señal de excitación anterior u(n) en el retardo entero
dado α y la fracción t:
9
9
i =0
i =0
v(n) = ∑ u (n − α + i )b30 (t + 3i ) + ∑ u (n − α + 1 + i )b30 (3 − t + 3i ) ; n = 1,...,40 ; t = 0,1, 2
(4.25)
El filtro de interpolación b30 se basa en una función sinc de Hamming
ventanizada con truncamiento a ± 29 y completando con ceros a ± 30 [b30(30) = 0]. El
filtro tiene una frecuencia de corte (-3 dB) a 3600 Hz en el dominio de sobremuestra.
85
Implementación del codificador de voz
Figura 43.- Filtro de interpolación
4.2.7.2 Cálculo de la palabra de código para retardos de tabla de códigos
adaptativos
Los retardos de tono T1 y T2 no se envían directamente, sino que se codifican
para enviarlos al decodificador, dos índices P1 y P2 que se obtienen a partir de los
retardos fraccionarios, compuestos de su parte entera int(T) y su parte fraccionaria
frac/3, frac = -1, 0, 1.
El índice de tono P1 se obtiene de la siguiente manera:
3(int(T 1) − 19 ) + frac − 1
P1 = 
(int(T 1) − 85) + 197
si T1 = [19,…, 85], frac = [-1, 0, 1]
si T1 = [86,…, 143], frac = 0
(4.26)
El índice de tono T2 se codifica en relación con el valor de T1. Aplicando la
misma interpretación arriba indicada, se codifica el retardo fraccionario T2,
representado por su parte entera int(T2) y una parte fraccionaria frac/3, frac = -1, 0, 1,
sobre la base de:
P 2 = 3(int(T 2) − t min ) + frac + 2
(4.27)
donde tmin se deriva de T1, igual que en el apartado 4.2.7.
4.2.7.3 Cálculo de la ganancia de tabla de códigos adaptativos
Después de determinar el retardo de tabla de códigos adaptativos, se calcula la
ganancia de tabla de códigos adaptativos gp según:
gp
∑
=
∑
40
n =1
40
x ( n) y ( n)
en el intervalo 0 ≤ gp ≤ 1,2
y ( n) y ( n)
n =1
86
(4.28)
Implementación del codificador de voz
donde x(n) es la señal objetivo e y(n) es el vector de la tabla de códigos adaptativos
filtrado [respuesta al estado cero de W(z)/Â(z) respecto de v(n)]. Este vector se obtiene
mediante convolución de v(n) con h(n):
n
y ( n) = ∑ v (i )h( n − i )
n = 1,...,40
(4.29)
i =1
4.2.8 Tabla de códigos fijos: estructura y búsqueda
La tabla de códigos fijos refleja lo que queda de la señal de voz original una vez
se le ha extraído la información del tracto vocal y la del pitch (corto y largo plazo). Se
basa en una estructura de tabla de códigos algebraicos mediante un diseño de
permutación de impulso individual intercalado (ISPP, interleaved single-pulse
permutation). En esta tabla, cada vector de la tabla de códigos contiene cuatro impulsos
no cero. Cada impulso puede tener amplitudes +1 o -1 y asumir las posiciones que
aparecen en el siguiente cuadro:
Impulso
i0
i1
i2
i3
Signo
Posiciones
m0: 1, 6, 11, 16, 21, 26, 31, 36
m1: 2, 7, 12, 17, 22, 27, 32, 37
m2: 3, 8, 13, 18, 23, 28, 33, 38
m2: 4, 9, 14, 19, 24, 29, 34, 39
5, 10, 15, 20, 25, 30, 35, 40
s0: ±1
s1: ±1
s2: ±1
s3: ±1
Tabla 7.- Estructura de la tabla de códigos fijos
El vector de tabla de códigos fijos c(n) se construye tomando un vector de
dimensión 40 e introduciendo los cuatro impulsos unitarios en las posiciones
encontradas, multiplicadas por su signo correspondiente:
c(n) = s 0δ (n − m0 ) + s1δ (n − m1 ) + s 2δ (n − m2 ) + s3δ (n − m3 )
n = 1,...,40
(4.30)
donde δ(0) es un impulso unitario. Si se representa el vector de la tabla de códigos fijos
del tramo de voz analizado, se tiene:
87
Implementación del codificador de voz
Figura 44.- Vector de la tabla de códigos fijos, c(n)
En este caso, los cuatro impulsos tienen signo negativo.
Una característica especial incorporada en la tabla de códigos es que el vector de
tabla de códigos seleccionado se pasa a través de un prefiltro adaptativo P(z) que amplia
los componentes armónicos para mejorar la calidad de las señales vocales reconstruidas.
Se utiliza para ello el filtro:
(
P ( z ) = 1 1 − βz −T
)
(4.31)
donde T es la componente entera del retardo de tono de la subtrama actual y β una
ganancia de tono. El valor de β se hace adaptativo aplicando la cuantificación de la
ganancia de la tabla de códigos adaptativos de la subtrama anterior, es decir:
β = gˆ (pm−1)
en el intervalo 0,2 ≤ β ≤ 0,8
(4.32)
El prefiltro adaptativo para el tramo de señal de voz a estudio, que tiene una β de
0,2 y una T de 52 (que equivale a una frecuencia de 153,85 Hz):
Figura 45.- Prefiltro adaptativo
88
Implementación del codificador de voz
Para retardos menores de 40, la tabla de códigos c(n) de la ecuación (4.30) se
modifica con arreglo a:
c(n)
c( n) = 
c(n) + β c(n − T )
n = 0,..., T - 1
n = T ,...,40
(4.33)
Esta modificación se incorpora a la búsqueda de la tabla de códigos fijos
modificando la respuesta a impulsos h(n) según:
h ( n )
h ( n) = 
h ( n ) + β h ( n − T )
n = 0,..., T - 1
n = T ,...,40
(4.34)
4.2.8.1 Procedimiento de búsqueda de la tabla de códigos fijos
La tabla de códigos fijos se explora para hacer mínimo el error cuadrático medio
entre la señal de voz ponderada de entrada, sw(n), de la ecuación (4.18) y la señal de
voz ponderada reconstruida. Se actualiza la señal objetivo utilizada para la búsqueda del
tono en bucle cerrado restando la contribución de la tabla de códigos adaptativos, o sea:
x ′(n ) = x (n ) − g p y (n )
n = 1, ..., 40
(4.35)
donde y (n ) es el vector de la tabla de códigos adaptativos de la ecuación (4.29) y
g p corresponde a la ganancia de la tabla de códigos adaptativos de la ecuación (4.28).
Para el caso del tramo de la señal de voz estudiado, la ganancia de la tabla de la
tabla de códigos adaptativos es cero (gp = 0), por tanto, la señal objetivo actualizada será
igual a la señal objetivo original. Si se toma otro tramo donde esa ganancia no sea 0,
Figura 46.- Comparación señal objetivo y señal objetivo actualizada
89
Implementación del codificador de voz
Se aprecian pequeñas diferencias en ciertos lugares de la gráfica. Las diferencias
entre una señal y otra no son muy significativas debido a que los valores que toma la
ganancia de la tabla de códigos adaptativos son pequeños.
La matriz H se define como la matriz inferior de convolución triangular de
Toeplitz con diagonal h(1) y diagonales inferiores h(2), …, h(40).



H =




h (1)
h (2 )
0 

0 
h (2 ) h (1) L 0 

M
M
O M 
h (39 ) h(38) L h(1)
0
h (1)
h (3)
M
h (40 )
0
0
L
L
(4.36)
La matriz Ф=HtH contiene las correlaciones de h(n), mientras que los elementos
de esta matriz simétrica están dados por:
40
Φ (i, j ) = ∑ h(n − i )h(n − j )
i = 1, ..., 40
j = i, ..., 40
(4.37)
n= j
La señal de correlación d(n) se obtiene a partir de la señal objetivo x’(n) y la
respuesta a los impulsos h(n) mediante:
40
d (n ) = ∑ x ′(i )h(i − n )
n = 1, ..., 40
(4.38)
i =n
Si ck representa el k-ésimo vector de la tabla de códigos fijos, la tabla de códigos
se explora para hacer máxima la expresión:
C k2
=
Ek
(∑
)
d (n )c k (n )
n =1
40
2
c kt Φc k
(4.39)
donde t denota transposición.
Por tanto, para calcular las posiciones y el signo de cada uno de los cuatro
impulsos que conforman el vector de códigos fijos se va probando con cada una de las
diferentes opciones que existen para cada uno de ellos, tomando la posición y el signo
de aquel que maximice la expresión (4.39). Como ejemplo se presenta cómo se obtiene
el primero de los impulsos para el tramo de voz estudiado:
90
Implementación del codificador de voz
Figura 47.- Valores que toma la expresión (4.39) para el rango del primer impulso
Viendo la gráfica, puede apreciarse que la expresión (4.39) tiene su máximo en
la posición 31, dentro del rango de posibles valores para el primer impulso, y con signo
negativo. Por lo tanto, el vector de códigos fijos tendrá un impulso negativo en la
posición 31.
4.2.8.2 Cálculo de palabra de código de la tabla de códigos fijos
Para la codificación de los impulsos se usarán dos palabras código: una para el
signo y otra para la posición de los mismos.
Definiendo s=1 cuando el signo es positivo y s=0 cuando el signo es negativo, la
palabra de código de signo se obtiene de:
S = s1 + 2 s 2 + 4 s 3 + 8s 4
(4.40)
y la palabra de código de la tabla de códigos fijos se obtiene de:
C = (m1 5) + 8(m 2 5) + 64(m3 5) + 512(2(m 4 5) + jx )
(4.41)
donde jx = 0 cuando m4 = 4, 8, …, 39, y jx = 1 cuando m4 = 5, 10, …, 40.
4.2.8.3 Cálculo de la ganancia de la tabla de códigos fijos
Se calcula la ganancia de la tabla de códigos fijos a partir de las variables y
vectores que se han calculado. La ganancia será equivalente a la expresión utilizada para
calcular la posición y el signo de los impulsos del vector de la tabla de códigos fijos,
pero sin elevar el numerador al cuadrado. La expresión de esta ganancia se obtiene en la
parte teórica (apartado 2.4.2) y es:
91
Implementación del codificador de voz
gc
∑
=
40
n =1
d (n )c k (n )
(4.42)
c kt Φc k
4.2.9 Actualización de la memoria
Es necesario actualizar los estados de los filtros de síntesis y de ponderación
para calcular la señal objetivo en la subtrama siguiente. Después de cuantificar las dos
ganancias, la señal de excitación, u(n), en la subtrama actual se obtiene mediante:
u (n ) = gˆ p v(n ) + gˆ c c(n )
n = 1, ..., 40
(4.43)
donde ĝ p y ĝ c son las ganancias cuantificadas de las tablas de códigos adaptativos y
fijos respectivamente, v(n ) es el vector de tabla de códigos adaptativos (excitación
anterior interpolada) y c(n ) es el vector de tabla de códigos fijos que incluye los
armónicos ampliados.
Si se representa la señal de excitación de una subtrama y de toda la ventana que
estamos estudiando, se obtiene:
Figura 48.- Señal de excitación de la subtrama y del tramo de la señal de voz
92
Implementación del codificador de voz
4.3 Descripción de las funciones del decodificador
El principio del decodificador es el siguiente:
-
Se decodifican los parámetros enviados desde el codificador.
Esos parámetros se usan para calcular la señal de voz reconstruida.
La señal vocal reconstruida se mejora mediante una operación de
postprocesamiento consistente en un postfiltro, un filtro paso de alta y un
escalamiento ascendente.
4.3.1 Procedimiento de decodificación de los parámetros
En nuestro caso, al no haberse realizado codificación de los coeficientes LSP,
simplemente se realizó una cuantización lineal, solo habrá que aplicar el
procedimiento de interpolación descrito en el apartado 4.2.5 para obtener dos
conjuntos de coeficientes LSP interpolados (correspondientes a dos subtramas).
Para cada subtrama los coeficientes LSP interpolados se convierten en
coeficientes ak del filtro LP, que se utilizan para sintetizar la señal vocal
reconstruida en la subtrama.
Figura 49.- Flujo de señales en el decodificador
93
Implementación del codificador de voz
El proceso de decodificación tiene lugar en el siguiente orden (se repiten los
siguientes pasos para cada subtrama):
1234-
Decodificar el vector de tabla de códigos adaptativos
Decodificar el vector de tabla de códigos fijos
Decodificar las ganancias de las tablas de códigos adaptativos y fijos
Calcular la señal vocal reconstruida
4.3.1.1 Decodificación del vector de tabla de códigos adaptativos
El índice P1 de tabla de códigos adaptativos se utiliza para determinar las partes
entera y fraccionaria del retardo de tono T1. La parte entera y la parte fraccionaria se
obtienen a partir de T1 como se indica a continuación:
si P1 < 197
int (T1 ) = (P1 + 2 ) / 3 + 19
frac = P1 − 3 int (T1 ) + 58
de otro mod o
int (T1 ) = P1 − 112
frac = 0
fin
Las partes enteras y fraccionarias de T2 se obtienen a partir de P2 y tmin, donde
tmin se deriva de T1 como sigue:
t min = int (T1 − 5)
si t min < 20 entonces t min = 20
t max = t min + 9
si t max > 143 entonces
t max = 143
t min = t max − 9
fin
Ahora se decodifica T2 mediante:
int (T2 ) = (P 2 + 2 ) / 3 − 1 + t min
frac = P 2 − 2 − 3((P 2 + 2 ) / 3 − 1)
(4.44)
El vector de tabla de códigos adaptativos v(n) se encuentra interpolando la
excitación anterior u(n) (en el retardo de tono) mediante la ecuación (4.25, tal y como se
definió en el apartado 4.2.7.1 (Generación del vector de la tabla de códigos adaptativos).
94
Implementación del codificador de voz
9
9
i =0
i =0
v(n) = ∑ u (n − α + i )b30 (t + 3i ) + ∑ u (n − α + 1 + i )b30 (3 − t + 3i ) ; n = 1,...,40 ; t = 0,1, 2
(4.45)
4.3.1.2 Decodificación del vector de tabla de códigos fijos
El índice recibido C de tabla de códigos fijos se utiliza para extraer las
posiciones de los impulsos de excitación. Los signos de los impulsos se obtienen a partir
de S. Para ello se invierte el proceso descrito en el punto 4.2.8.2.
C = (m1 5) + 8(m2 5) + 64(m3 5) + 512(2(m4 5) + jx )
(4.46)
donde jx = 0 cuando m4 = 4, 8, …, 39, y jx = 1 cuando m4 = 5, 10, …, 40.
Se toma la palabra código y se ve si es un número entero o por el contrario es
decimal. La aportación de los tres primeros impulsos del vector de la tabla de códigos
fijos a la palabra código es un número cuya parte decimal es 0.8. Ahora bien, si el
cuarto impulso del vector está dentro del rango 4, 9, …, 39, su aportación a la palabra
de código será un número con parte decimal 0.2 y, por tanto, la palabra de código será
un número entero. Si por el contrario el cuarto impulso tomara su valor dentro del rango
5, 10, …, 40, su aportación a la palabra de código sería un número entero, por lo que la
palabra de código obtenida sería un número no entero y con parte decimal igual a 0.8.
Resumiendo, si la palabra de código de la tabla de códigos fijos no es un número entero,
entonces m4 = 5, 10, …, 40 y se despejaría su valor exacto del último término de la
ecuación 4.46. Si, por el contrario, el número es entero, se divide la palabra de código
por 512 y se busca el número inmediatamente inferior al obtenido con parte decimal 0.8,
con el cual se despejaría el valor de m4, con m4 = 4, 9, …, 39.
Se resta a la palabra de código la aportación del cuarto impulso, se divide por 64
y se busca el número inmediatamente inferior al obtenido con parte decimal 0.6, que
sirve para calcular la posición exacta del tercer impulso m3.
Para el segundo impulso se realiza la misma operación que para el tercero,
dividiendo por 8 y buscando un número con parte decimal igual a 0.4. Con el número
resultante de restar a la palabra de código la contribución de los 3 últimos impulsos (m2,
m3 y m4 ) se calcula la posición del primer impulso.
En el caso de la palabra de código de signo, que se obtenía:
S = s1 + 2 s 2 + 4 s 3 + 8s 4
(4.47)
definiendo s=1 cuando el signo es positivo y s=0 cuando el signo es negativo.
Se estudian todos y cada uno de los posibles valores de S (que se encuentran
entre 1 y 15) que hacen que el signo de cada uno de los impulsos sea positivo.
95
Implementación del codificador de voz
Una vez decodificados los signos y las posiciones de los impulsos, se construye
el vector c(n) de tabla de códigos fijos de acuerdo con la ecuación:
c(n) = s 0δ (n − m0 ) + s1δ (n − m1 ) + s 2δ (n − m2 ) + s3δ (n − m3 )
n = 1,...,40
(4.48)
Si la parte entera del retardo de tono T es inferior al tamaño de la subtrama,
fijado en 40, se modifica c(n) con arreglo a la ecuación:
c(n)
c( n) = 
c(n) + β c(n − T )
n = 0,..., T - 1
n = T ,...,40
(4.49)
Si se dibuja el vector c obtenido para la primera subtrama que se viene
analizando:
Figura 50.- Vector de tabla de códigos fijos de la subtrama una vez decodificado
Comparando este resultado con el vector obtenido para la misma subtrama
(figura 48), puede comprobarse que coinciden, teniendo los impulsos en las mismas
posiciones y con los mismos signos.
4.3.1.3 Decodificación de las ganancias
Para nuestro estudio se optó por codificar las ganancias simplemente usando una
cuantificación lineal, por lo que no es necesaria la decodificación de las mismas.
4.3.1.4 Cálculo de la señal de voz reconstruida
La excitación u(n) (véase la ecuación (4.43)) entra al filtro de síntesis LP. La
señal de voz reconstruida para la subtrama está dada por:
96
Implementación del codificador de voz
10
sˆ(n) = u (n) − ∑ aˆ k sˆ(n − k )
n = 1, ..., 40
(4.50)
k =1
donde â k son los coeficientes interpolados del filtro LP para la subtrama actual. Si se
representa el tramo de voz:
Figura 51.- Señal de voz reconstruida y espectro de la misma en el decodificador antes de ser
postprocesada
Si se pone una señal frente a la otra en la misma gráfica, puede verse como las
dos tienen prácticamente la misma forma de onda, aunque las amplitudes no son
exactamente iguales. Este hecho se corrige, en parte, al realizar el postprocesamiento de
la señal reconstruida sˆ(n) . Este postprocesamiento se describe en el siguiente apartado.
4.3.1.5 Postprocesamiento
El postprocesamiento consta de tres funciones: postfiltrado adaptativo, filtrado
de paso alto y aplicación de un escalamiento ascendente a las señales. El postfiltro
adaptativo es una cascada de tres filtros:
-
Un postfiltro de largo plazo Hp(z)
Un postfiltro de corto plazo Hf(z).
Un filtro de compensación de pendiente Ht(z).
Todo ello seguido de un procedimiento de control de ganancia adaptativo.
Los coeficientes del postfiltro se actualizan cada subtrama de 5 ms. El proceso
de postfiltrado se organiza de la siguiente manera. En primer lugar, la voz reconstruida
sˆ(n) es filtrada inversamente a través de Â(z/γn), produciendo la señal residual rˆ(n) .
Esta señal se usa para calcular el retardo T y la ganancia g t del filtro de largo plazo
Hp(z). La señal rˆ(n) se filtra entonces a través del postfiltro de largo plazo Hp(z) y el
filtro de síntesis 1 g Aˆ ( z γ ) . Por último, la señal de salida del filtro de síntesis
[
f
d
]
97
Implementación del codificador de voz
[
]
1 g f Aˆ ( z γ d ) se pasa a través del filtro compensación de pendiente Ht(z), para generar
la señal vocal reconstruida postfiltrada sf(n). El control de ganancia adaptativo se aplica
entonces a sf(n) para ajustar la energía de sˆ(n) . La señal resultante sf ′(n) pasa por un
filtro de paso alto se escalona para producir la señal de salida del decodificador.
4.3.1.5.1 Postfiltro de largo plazo
El postfiltro de largo plazo está dado por:
H p (z ) =
1
1 + γ p gl
(1 + γ
p
g l z −T
)
(4.51)
donde T es el retardo de tono y gl el coeficiente de ganancia. Obsérvese que gl es como
máximo 1 y que su valor se fija en cero si la ganancia de predicción a largo plazo es
inferior a 3 dB. El factor γp controla la cantidad de postfiltrado a largo plazo y tiene el
valor γp = 0,5. El retardo y la ganancia a largo plazo se calculan a partir de la señal
residual rˆ(n) , que se obtiene al filtrar la señal vocal sˆ(n) a través de Â(z/γn),
numerador del postfiltrado de corto plazo (véase el apartado 4.3.1.5.2).
10
rˆ(n) = sˆ(n) + ∑ γ nk aˆ k sˆ(n − k )
(4.52)
k =1
El retardo de largo plazo se calcula en dos pasos. El primer paso selecciona el
mejor entero T0 en el intervalo [int(T1)-1,int(T1)+1], siendo int(T1) la parte entera del
retardo (transmitido) de tono T1 en la primera subtrama. El retardo entero mejor es el
que hace máxima la correlación:
40
R(α ) = ∑ rˆ(n )rˆ(n − α )
(4.53)
n =1
El segundo paso selecciona el mejor retardo fraccionario T con una definición de
1/8 en torno a T0. Esto se obtiene buscando el retardo con la mayor correlación
pseudonormalizada:
∑ rˆ(n)rˆα (n )
∑ rˆα (n )rˆα (n )
40
R ′(α ) =
n =1
(4.54)
40
n =1
donde rˆα (n ) es la señal residual en el retardo α. Obtenido el retardo óptimo T, la
correlación correspondiente R´(T) se normaliza respecto de la raíz cuadrada de la
energía de r̂ (n ) . El cuadrado de esta correlación normalizada se utiliza para determinar
si el postfiltro de largo plazo debe desconectarse. Para ello se introduce gl = 0 cuando:
98
Implementación del codificador de voz
R ′(T ) 2
∑n=1 rˆ(n )r (n )
40
< 0,5
(4.55)
De otro modo, el valor de gl se calcula a partir de:
∑ rˆ(n )rˆα (n)
=
∑ rˆα (n )rˆα (n)
40
gl
en el int ervalo 0 ≤ g l ≤ 1,0
n =1
40
(4.56)
n =1
La señal retardada no entera rˆα (n ) es el primer valor calculado mediante un
filtro de interpolación de longitud 33. Después de seleccionar T, se calcula de nuevo
rˆα (n ) mediante un filtro de interpolación más largo, de longitud 129. La nueva señal
reemplaza a la anterior solamente en el caso en que el filtro más largo aumente el valor
de R´(T).
Para el caso del tramo de voz que se está analizando el coeficiente de ganancia
es cero, ya que el retardo de la señal es mayor de 40, por lo que el postfiltro de largo
plazo es un filtro de con valor la unidad en todo la banda. Se puede deducir que el
postfiltro de largo plazo solo tendrá valor distinto de 1, es decir, solo será efectivo,
cuando el retardo de la señal esté por debajo de 40, lo que equivale a tener una
frecuencia por encima de los 200 Hz.
4.3.1.5.2 Postfiltro de corto plazo
El postfiltro de corto plazo está dado por:
1
H f (z ) =
gf
k
−k
Aˆ ( z γ n )
1 1 + ∑k =1 γ n aˆ k z
=
10
Aˆ ( z γ d ) g f 1 + ∑k =1 γ dk aˆ k z − k
10
(4.57)
donde Â(z) es el filtro LP inverso cuantificado recibido (no hay análisis LP en el
decodificador), mientras que los factores γ n y γ d controlan la cantidad de postfiltrado
de corto plazo, fijándose en γ n = 0,55 y γ d = 0,7 . El término de ganancia g f se
calcula en la respuesta a los impulsos truncada h (n) del filtro Aˆ ( z γ ) Aˆ ( z γ ) y
f
n
d
viene dado por:
20
g f = ∑ h f (n )
(4.58)
n =1
99
Implementación del codificador de voz
Figura 52.- Respuesta impulsiva truncada del filtro Aˆ ( z γ n ) Aˆ ( z γ d )
Figura 53.- Postfiltro de corto plazo para la subtrama de estudio
4.3.1.5.3 Compensación de la pendiente
El filtro H t ( z ) compensa la pendiente en el postfiltrado de corto plazo H f ( z ) y
viene dado por:
H t (z ) =
(
1
1 + γ t k1′z −1
gt
)
(4.59)
donde γ t k1′ es el factor de pendiente, siendo k1′ el primer coeficiente de reflexión
calculado a partir de h f (n ) para:
100
Implementación del codificador de voz
k1′ = −
rh (2)
rh (1)
rh (i ) =
20 −i
∑ h ( j )h ( j + i )
j =1
f
f
(4.60)
El término de ganancia g t = 1 − γ t k1′ compensa el efecto decreciente de g f en
H f ( z ) . Se ha visto además que el filtro producto H f ( z )H t ( z ) no suele generar
ganancia. Dos valores de γ t se aplican según el signo de k1′ . Cuando k1′ es
negativo, γ t = 0.9 , cuando k1′ es positivo, γ t = 0.2 .
Figura 54.- Filtro de compensación de la pendiente para la subtrama estudiada
4.3.1.5.4 Control de ganancia adaptativo
Se aplica el control de ganancia adaptativo para compensar las diferencias de
ganancia entre la señal vocal reconstruida sˆ(n) y la señal postfiltrada sf(n). El factor de
escala de ganancia G para la subtrama actual se calcula mediante:
∑
G=
∑
40
n =1
40
sˆ(n )
(4.61)
sf (n )
n =1
La señal de ganancia postfiltrada a escala sf ′(n) está dada por:
sf ′(n) = g (n ) sf (n )
n = 1, ..., 40
(4.62)
donde g (n ) se actualiza para cada muestra y su valor está determinado por:
g (n ) = 0,85 g (n −1) + 0,15G
n = 1, ..., 40
(4.63)
Se utiliza el valor inicial de g (0 ) = 1,0 . Seguidamente, para cada nueva subtrama,
g (0 ) se iguala a g (40 ) de la subtrama anterior.
101
Implementación del codificador de voz
Veamos el efecto que tiene este postprocesamiento sobre la señal de voz
comparando la señal antes de realizar el postprocesamiento y una vez realizado éste:
Figura 55.- Comparación entre la señal de voz reconstruida en el decodificador antes y después
del postprocesamiento
4.3.1.5.5 Filtrado de paso alto y escalamiento ascendente
Se aplica un filtro de paso alto con una frecuencia de corte 100 Hz a la señal de
voz postfiltrada reconstruida sf ′(n) . El filtro viene dado por:
0,93980581 − 1,8795834 z −1 + 0,93980581z −2
H h 2 (z ) =
1 − 1,9330735 z −1 + 0,93589199 z − 2
Figura 56.- Filtro paso alto
102
(4.64)
Implementación del codificador de voz
La señal filtrada se multiplica por 2 para restaurar el nivel de la señal de entrada.
Por último, se compara la señal de entrada que se introdujo en el codificador y la
señal de salida obtenida una vez realizada la decodificación.
Figura 57.- Tramo de voz original
Figura 58.- Tramo de voz una vez decodificado
103
Implementación del codificador de voz
Las dos señales tienen una periodicidad evidente. No debe olvidarse que el
tramo de voz elegido pertenece a un sonido vocálico. En la señal de voz original la
periodicidad es más marcada, siendo el tramo que se repite prácticamente igual en cada
repetición. En la señal decodificada también se observa esta periodicidad, si bien el
tramo que se repite no es exactamente igual en cada repetición, aunque conserva los
picos de la señal original en las mismas posiciones. Este hecho puede apreciarse con
más detalle si se superponen las dos señales en una misma gráfica, tal y como se hace en
la figura 59:
Figura 59.- Comparación tramo de voz original y decodificado
Si se realiza el mismo proceso para la señal en la frecuencia, poniendo en primer
lugar el espectro de la señal de voz original, a continuación el de la señal de voz
decodificada y, por último, superponiendo las dos señales en la misma gráfica. Puede
verse cómo el espectro y la envolvente de las dos señales es prácticamente la misma
teniendo magnitudes similares para cada frecuencia. Al mismo tiempo se aprecia que
los picos del espectro de la señal decodificada son más finos que los de la señal original,
estando situados más o menos en las mismas posiciones, lo cual queda de manifiesto en
la figura 62.
104
Implementación del codificador de voz
Figura 60.- Espectro señal de voz original
Figura 61.- Espectro de la señal reconstruida (salida decodificador)
105
Implementación del codificador de voz
Figura 62.- Comparación espectros de señal de voz original y señal de voz reconstruida a la
salida del decodificador
106
Simulaciones
5
Simulaciones
Una buena parte de las simulaciones se ha ido realizando a medida que se iba
implementando el codificador, verificando en cada punto la evolución de la señal de
voz, así como los diferentes filtros y señales que intervienen en cada uno de los puntos
del procesado de la señal de voz.
Para comprobar cómo de bien actúa el codificador que se ha implementado ante
diferentes hablantes (con diferentes frecuencias de pitch) se tomarán dos frases: la
primera de una voz masculina y la segunda de una femenina, y se estudiarán los
resultados obtenidos en el espacio muestral, así como los espectrogramas y el pitch para
cada una de ellas. Por último, se ha probado a introducir en el codificador una señal de
audio para ver cómo de bien son codificadas este tipo de señales.
En primer lugar se analizará la frase “Tengo una casa en el campo”, pronunciada
por un hombre. En las siguientes figuras se muestran las representaciones de la señal de
entrada al codificador y de salida del decodificador en el espacio muestral.
Puede apreciarse cómo la señal de entrada al codificador (figura 63) y la señal de
salida del decodificador (figura 64) son bastante similares, Con lo cual se puede decir
que la forma de onda de las señales se ha modelado correctamente. Ahora bien, esto no
es demasiado significativo, ya que a veces, aunque las señales no se parezcan en el
tiempo, sí tienen las mismas características y, por lo tanto, suenan parecidas.
Para analizar más detenidamente las características de las señales se usará el
espectrograma de las mismas, que permitirá conocer si tienen las mismas características
en la frecuencia. La representación de los espectrogramas de las señales de entrada al
codificador (señal de voz original) y la de salida del decodificador se muestran en las
figuras 65 y 66. Comparando los dos espectrogramas de las señales puede verse cómo la
forma de onda en los dos casos es prácticamente la misma, confirmando lo
107
Simulaciones
anteriormente avanzado en el análisis muestral de las señales. Con esto, se puede
concluir que el tracto vocal se ha modelado correctamente.
Figura 63.- Señal de entrada de voz masculina en el espacio muestral
Figura 64.- Señal de salida de voz masculina en el espacio muestral
108
Simulaciones
Figura 65.- Espectrograma de la señal de voz masculina original
Figura 66.- Espectrograma de la señal de voz masculina a la salida del decodificador
109
Simulaciones
Figura 67.- Señal de voz masculina de entrada: contorno de pitch, espectrograma y
representación temporal
Figura 68.- Señal de voz masculina de salida: contorno de pitch, espectrograma y representación
temporal
110
Simulaciones
Si en estas representaciones se estudia el pitch de la señal, se comprueba que
éste se aprecia mucho mejor en la señal original, apareciendo de una manera menos
clara en la señal decodificada, con lo que no puede asegurarse que sea igual en las dos
señales.
A continuación se realizará un estudio del pitch de la señal para comprobar que
realmente la señal obtenida tras la decodificación conserva el mismo pitch que la señal
original, es decir, que esta información no se ha perdido en el proceso de codificación y
decodificación. Esto se comprobará utilizando el programa wavesurf v.0.9.5, que
permite analizar el pitch de la señal.
Si se toma la señal de entrada y se analiza mediante el programa mencionado y
se representa el contorno del pitch de la señal, su espectrograma y su representación
temporal se obtienen las gráficas de la figura 67. Realizando el mismo proceso para la
señal de salida se obtienen las representaciones de la figura 68.
Para apreciar mejor las modificaciones que haya podido sufrir el pitch de la
señal tomaremos las representaciones del contorno de pitch de las dos señales y las
compararemos. Observando las figuras 69 y 70 puede verse que, a pesar de que existen
pequeñas variaciones en el contorno de pitch de la salida respecto del de la entrada,
ambas siguen más o menos la misma trayectoria y con unas frecuencias de pitch
similares, por lo que se podría decir que el pitch de la señal de entrada se mantiene tras
la decodificación, si bien el codificador no consigue extraerlo con total precisión,
perdiéndose de vez en cuando.
Figura 69.- Contorno de pitch de la señal de voz masculina de entrada
Figura 70.- Contorno de pitch de la señal de voz femenina de salida
A continuación se realizará el mismo proceso (se representarán las señales de
voz original y una vez decodificada en el espacio muestral, sus espectrogramas y se
analizará el pitch mediante el programa wavesurfer v.0.9.5) con otra señal de voz, esta
vez pronunciada por una mujer, para corroborar los datos obtenidos en estas
simulaciones. En esta ocasión se utilizará la señal de voz “Mi casa es muy bonita”.
111
Simulaciones
Figura 71.- Señal de voz femenina de entrada en el espacio muestral
Figura 72.- Señal de voz femenina de salida en el espacio muestral
112
Simulaciones
Figura 73.- Espectrograma de la señal de voz femenina original
Figura 74.- Espectrograma de la señal de voz femenina a la salida del decodificador
113
Simulaciones
Figura 75.- Señal de voz femenina de entrada: contorno de pitch, espectrograma y
representación temporal
Figura 76.- Señal de voz femenina de salida: contorno de pitch, espectrograma y representación
temporal
114
Simulaciones
Se puede observar como para una voz femenina el análisis de los resultados
obtenidos es prácticamente el mismo que para la voz masculina. Al igual que se hizo
con esta última se representará el pitch de cada una por separado para poder hacer una
mejor comparación.
Figura 77.- Contorno de pitch de la señal de voz femenina de entrada
Figura 78.- Contorno de pitch de la señal de voz femenina de salida
Como ocurría para el caso de una voz masculina, el pitch de la señal de salida se
asemeja bastante, salvo ciertas desviaciones, al de la señal original, manteniendo
prácticamente niveles de frecuencia similares.
Además, si se comparan los resultados obtenidos para el pitch en los dos casos,
se ve que para la voz masculina la frecuencia de pitch ronda los 150 Hz y en la
femenina está más o menos por los 250 Hz, muy por encima de la del hombre, como
generalmente suele ocurrir.
Por último, vamos a introducir una señal de audio en el codificador para ver
cómo se comporta el mismo ante este tipo de señales. En las figuras 79 y 80 se
representan las señales de entrada y salida del sistema en el espacio muestral. En las
figuras 81 y 82 se hace lo propio con los espectrogramas de las dos señales.
115
Simulaciones
Figura 79.- Señal de audio de entrada en el espacio muestral
Figura 80.- Señal de audio de salida en el espacio muestral
116
Simulaciones
Figura 81.- Espectrograma de la señal de audio original
Figura 82.- Espectrograma de la señal de audio a la salida del decodificador
117
Simulaciones
Puede observarse cómo, al igual que ocurría con las señales de voz
anteriormente analizadas, tampoco en las señales de audio se aprecia si se mantiene o no
el pitch de la señal original, por lo que es necesario realizar el estudio del contorno de
pitch para poder asegurar que se mantiene (figuras 83 y 84).
Figura 83.- Contorno de pitch de la señal de audio de entrada
Figura 84.- Contorno de pitch de la señal de voz audio de salida
Prácticamente se puede apreciar lo mismo que para las señales de voz. El pitch
de la señal de audio de salida toma valores de frecuencia en el mismo rango que la señal
de entrada, existiendo variaciones más notables que para las observadas para las señales
de voz.
Si se escucha la señal a la salida, ésta se encuentra muy distorsionada con
respecto a la original y que, si bien sigue siendo inteligible, tiene mucho ruido e
interferencias. Con esto podemos concluir que el codificador implementado está
específicamente diseñado para trabajar con señales de voz y aunque puede trabajar con
señales de voz, la calidad obtenida es muy pobre.
118
Conclusiones
6
Conclusiones
En el apartado 1 se ha realizado una introducción al mundo de la voz, estudiando
las señales de voz y sus características y propiedades más importantes y analizando cada
una de ellas con más detalle. Se ha definido el concepto de codificación, evidenciando
la importancia que tiene en las comunicaciones en la vida actual, explicando la
evolución que ha experimentado este campo desde la introducción de la codificación
PCM y comentando algunos de los avances que se han ido introduciendo.
Se han visto las propiedades más importantes de los codificadores de voz, que
son las que los caracterizarán y los harán mejor ó peor en comparación con los demás.
Estas características son la tasa de bit, el retraso, la complejidad y la calidad de la señal
de salida. Se han presentado los diferentes tipos de codificadores que existen (de forma
de onda, vocoders e híbridos), comentando sus particularidades y el funcionamiento de
los más destacados dentro de cada tipo. Por último, se han identificado los tipos de
codificadores ó estándares empleados en las redes de comunicación existentes en la
actualidad, presentando, además, una tabla resumen comparando los más usados.
En el apartado 2 se ha realizado una revisión teórica de los conceptos más
relevantes que se usarán en la implementación del codificador, analizando los conceptos
básicos de la predicción lineal, los coeficientes LSF, la codificación mediante análisis
por síntesis y los codificadores CELP.
En primer lugar se estudia la codificación mediante predicción lineal, que es la
base de casi todos los estándares de codificación de voz aprobados en los últimos años.
En ella la muestra de voz actual se predice a partir de una combinación lineal de
muestras anteriores. El método utilizado para su resolución (obtención de los
coeficientes del filtro de predicción lineal) ha sido el de autocorrelación, mediante el
algoritmo de Levinson-Durbin.
119
Conclusiones
Se introducen los coeficientes LSF (coeficientes espectrales de línea). Son una
representación paramétrica alternativa de los coeficientes de predicción lineal, que
poseen una serie de características que los hacen muy apropiados para la transmisión de
información de codificador a decodificador. Las propiedades más importantes de estos
coeficientes son: tener un rango limitado, orden secuencial de los parámetros, simple
revisión de la estabilidad del filtro y una sensibilidad espectral localizada, comprobando
cada una de estas propiedades. También se incluye el proceso de conversión de
coeficientes de predicción lineal a coeficientes LSF.
La codificación mediante análisis por síntesis usa el mismo filtro de síntesis que
en el análisis LPC, pero se optimiza cuidadosamente la señal de excitación. Se sintetiza
la señal de voz en el codificador, es decir, el decodificador se incluye en el codificador,
minimizando el error porcentual ponderado entre la señal de voz original y la
sintetizada. Consta de un generador de excitación, un filtro de síntesis (pueden ser 2:
uno de corto plazo ó de predicción lineal, que elimina la contribución del tracto vocal y
uno de largo plazo ó de pitch, que elimina el pitch ó la redundancia que queda tras la
eliminación de la contribución del tracto vocal) y un minimizador de error que optimiza
la señal de excitación. Se ha verificado todo esto proceso tomando una señal de voz,
pasándola por los diferentes bloques del codificador y comprobando cómo se va
eliminando la información de la señal hasta quedar una señal prácticamente aleatoria.
En los codificadores CELP (“Code Excited Linear Prediction”) las tramas de la
señal de excitación se modelan por un vector gaussiano elegido de una tabla
minimizando el error ponderado entre la señal de voz original y la sintetizada.
La ITU es la Unión Internacional de Telecomunicaciones y la ITU-T, la parte de
la misma que se ocupa del sector de las telecomunicaciones. Esta entidad establece una
serie de recomendaciones, que son acuerdos entre un segmento de la industria, pero no
son de obligado cumplimiento. La recomendación en la que se basa el presente estudio
es la G.729 (Codificación de la voz a 8 kbit/s mediante predicción lineal con excitación
por código algebraico de estructura conjugada). Se contempla cómo se creó la
recomendación, quiénes fueron los artífices de su elaboración, el calendario que se
siguió y los objetivos y requerimientos perseguidos, que eran básicamente obtener un
codificador que trabajase a 8 kbit/s con unas características equivalentes o incluso
mejores a las del codificador de la recomendación G.726, que trabaja a 32 kbit/s. La
calidad obtenida por el mismo es buena, teniendo en cuenta su tasa de bit. En la figura
85 puede verse su relación calidad-tasa de bit comparada con la de otros codificadores
del mercado.
La principal innovación de este codificador frente a otros del mismo tipo es la
utilización de una estructura de códigos conjugada, lo cual le otorga una mayor robustez
frente a errores en el canal y reduce la memoria necesaria y la complejidad de las
búsquedas en la tabla. También se incluyen en el apartado las aplicaciones que tiene el
codificador y las modificaciones más importantes introducidas en el mismo en forma de
anexos.
Por último se ha implementado en Matlab un codificador basado en el de la
recomendación G.729, dejando para posteriores estudios temas como la cuantización y
envío de parámetros del codificador al decodificador
120
Conclusiones
Figura 85.- Comparación de calidad para diferentes codificadores
Al igual que el codificador de la recomendación el codificador implementado
está diseñado para trabajar con señales digital, por tanto, hay que efectuar primero un
filtrado con la anchura de la banda telefónica de la señal analógica de entrada, seguido
de un muestreo a 8000 Hz y su conversión a una modulación por impulsos codificados
(MIC) lineal de 16 bits, para entrar en el codificador. La salida del decodificador se
reconvierte a una señal analógica siguiendo un método similar. La señal se divide en
tramas de 10 ms, que equivale a 80 muestras, y subtramas de 5 ms. Una vez en el
codificador, las señales de voz son pasadas por un filtro paso alta y puestas a escala para
su procesamiento.
En primer lugar se realiza un análisis de predicción lineal sobre las tramas para
modelar el tracto vocal de la señal, de donde se extraen dos juegos de coeficientes LSF,
uno para cada una de las subtramas.
El siguiente paso es el análisis de la excitación, que se realiza separadamente
para cada subtrama. En cada una, la excitación se representa como la suma de dos
componentes. La primera es la versión retrasada de la excitación usada hasta ese
momento, y la segunda una señal con cuatro impulsos en diferentes posiciones. Al
primer componente se le denomina contribución de la tabla de códigos adaptativos y
modela la periodicidad de la señal de voz. Este retraso es en realidad el retraso de pitch
de la señal de voz. La segunda parte de la excitación se conoce como contribución de la
tabla de códigos fijos, que recoge la secuencia de excitación que queda una vez
eliminadas las contribuciones de los términos de corto y largo plazo.
A la vez que se ha ido implementando el codificador se han ido representando
los distintos filtros y señales que intervienen en el proceso, así como las modificaciones
que se van realizando a la señal de voz de entrada para la extracción de los parámetros.
121
Conclusiones
Para cada subtrama se calcula un número fijo de parámetros: retraso de pitch,
ganancia de la tabla de códigos adaptativos, la excitación de la tabla de códigos fijos
(consistentes en las posiciones y signos de los impulsos) y la ganancia de la tabla de
códigos fijos. Estos parámetros son cuantizados y enviados al decodificador. El modo
de transmisión de los mismos queda fuera de este estudio. Una vez en el decodificador,
los datos son extraídos y la señal de voz es reconstruida siguiendo los mismos pasos que
en el codificador, pero a la inversa.
Se han realizado diversas simulaciones para comprobar la eficiencia del
codificador implementado, probando con voces masculinas y femeninas, estudiando los
resultados obtenidos en tiempo y frecuencia, así como sus espectrogramas y contornos
de pitch. Al analizar los resultados de las simulaciones, se ha observado lo siguiente:
-
El sistema propuesto modela bastante bien el tracto vocal de la señal. Si se
contemplan las formas de onda de las señales de entrada y salida en los
espectrogramas de las diferentes simulaciones, se puede ver que son muy similares.
Esto es lógico ya que esta parte se modela mediante predicción lineal sin introducir
ninguna modificación.
-
Al realizar un análisis del pitch de las dos señales se ha comprobado que a primera
vista no es tan fácil asegurar que el pitch sea igual en las dos, ya que en todos los
espectrogramas de los distintos experimentos el pitch de la señal original se aprecia
con bastante más nitidez que en el de la señal decodificada, donde simplemente se
intuye. Realizando un análisis más detallado (se ha usado el programa wavesurfer
v.0.9.5, que permite representar el contorno de pitch de las señales), se comprueba
cómo el pitch de las dos señales es parecido, salvo pequeñas variaciones. Por tanto,
si bien la extracción del pitch de la señal no es perfecta, a grandes rasgos se puede
decir que se mantiene el pitch de la señal de entrada.
-
Si bien al escuchar las dos señales se aprecia una cierta degradación de la señal de
voz original, típica en este tipo de codificadores, la señal continúa siendo inteligible
y puede identificarse al hablante como el de la señal original.
Por último se ha probado a introducir una señal de audio en el codificador para
probar cómo de bien trabaja el sistema implementado con otro tipo de señales. Los
resultados obtenidos bastantes pobres, escuchándose la señal a la salida muy
distorsionada, a pesar de conservar algunas de las características de la señal original.
Esto confirma que el codificador implementado está específicamente diseñado para su
uso con señales de voz.
Con todo esto, podemos concluir que el codificador implementado consigue una
calidad de sintetización de la señal de voz aceptable, si bien está por debajo de la
obtenida en el codificador de la recomendación G.729
122
Líneas futuras de investigación
7
Líneas futuras de investigación
Como posibles líneas para futuras investigaciones se proponen las siguientes:
-
Implementación del codificador estudiado en un procesador digital de señal
(DSP).
-
Estudio de la cuantización vectorial y su aplicación a la codificación de las
diferentes variables que se transmiten desde el codificador al decodificador.
-
Inclusión del codificador dentro de un esquema de compresión de silencios,
implementando un detector de actividad vocal (VAD) y un generador de ruido
comfort (CNG).
123
Líneas futuras de investigación
124
Bibliografía
Bibliografía
-
Recomendación G.729: “codificación de la voz a 8 kbit/s mediante predicción
lineal con excitación por código algebraico de estructura conjugada” ITU-T 03/96
-
Federico Miraya, “La voz humana”, 2000
-
Richard V. Cox and Peter Kroon, “Low bit-rate speech coders for multimedia
Communication”, 1996
-
Gene Lew, “VoIP overview for operators”, may 2005
-
Boneung Koo, “Speech”, 2002 CRC Press LLC
-
Luis Hernando Gómez, Eduardo López Gonzalo, Luis Villarrubia Grande y Ismael
Cortázar Mújica, “Reconocimiento de voz en el entorno de las nuevas redes de
comunicación UMTS e Internet”, Noviembre 2001
-
W T K Wong, R M Mack, B M G Cheetham and X Q Sun, “Low rate speech coding
for communications” BT Technol J Vol 14 No 1 January 1996 (pag 30)
-
A.M. Kondoz, “Digital Speech: coding for low bit rate communication systems”,
Wiley, 1994
-
Itakura F., “Line spectrum representation of linear predictive coefficients of speech
signals” 1975
-
“Transactions on speech and audio processing”, vol.4 NO 6, November 1996 of the
IEEE
-
Akitosi Kataoka, Takehiro Moriya and Shinji Hayashi, “An 8 kb/s Conjugate
Structure CELP (CS-CELP) Speech Coder”, 2001
-
Fang Zheng, Zhanjiang Song and Ling Li, “The distance measure for line spectrum
pairs applied to speech recognition”, 1999
-
Design and description of CS-ACELP: a toll quality 8 kb/s speech coder”, published
in “Transactions on speech and audio processing” of the IEEE, vol.6 NO 2, Marzo
1998.
-
Climent Nadeu, “Representación de la voz en el reconocimiento del habla”, 2004,
http://www.imim.es/quark/num21/021063.htm
-
Verkatraman Atti and Andreas Spanias, “On-line simulation modules for teaching
speech and audio compression techniques”. November 2003
-
Erwin Janssen and Cornelis H. Slump, “Evaluation of a new design approach for
next generation mobile multi-media terminals”, 2001
-
Verkatraman Atti and Andreas Spanias, “A simulation tool for introducing algebraic
CELP (ACELP) coding concepts in a DSP course”, 2002
-
S. Grassi, L. Besacier, A. Dufaux, M. Ansorge and F. Pellandini, “Influence of gsm
speech coding on the performance of text-independent speaker recognition”, 2000
-
Dr. Noor M. Sheikh, “Real time implementation and optimization of ITU-T’s G.729
Speech Codec running at 8 kbits/sec using CS-ACELP on Tm-1000 VLIW DSP
CPU”, 2001
125
Bibliografía
-
Haribalaji Kumar and Krishman Sundaresan, “Implementation of the Code Excited
Linear Predictive (CELP) Codec for VoIP”, 2000
-
Ozgu Ozun, Phillip Steurer and Daniel Thell, “Wideband speech coding with linear
predictive coding (LPC)”, 2002
-
A.Tripathi, S. Verma and D. Gajski, “G.729E Algorithm Optimization for
AMR926EJ-S Processor”, 2003
-
Jonathan D.Rosenberg, “G.729 Error recovery for Internet telephony”
-
Miguel Ángel Gutiérrez Galindo, Bernabé Rufino Salvador, “Desarrollo de un
compresor LPC de voz de tiempo real”, 2001
-
Sami Lemmetty, “Review of Speech Synthesis Technology”, 1999
-
A.S. Spanias, “Specch Coding: A tutorial Review”, Proc.IEEE, vol. 82, Oct. 1994
-
J.P. Adoul, P. Mabilleau, M. Delprat and S. Morisete, “ Fast CELP coding based on
algebraic codes”, IEEE, Abril 1987
126
Descargar