Este documento describe la implementación de un vocoder simple en MATLAB. Explica el proceso de codificación y decodificación de señales de voz, incluyendo el uso de ventanas, transformada de Fourier, estimación de pitch y filtrado LPC. También propone mejoras como el uso de ventanas más cortas, detección de pitch por ventana y envío de pitch para mejorar la calidad de sonido. Concluye que aunque los vocoders siempre comprimirán la señal, estas mejoras permiten una voz más auténtica y diferenciable con un ligero aumento en la comp
1. IMPLEMENTACION DE UN VOCODER SIMPLE EN MATLAB
Mauricio Herrera Duran
C.C 1128453482
Jonny Uribe
Tratamiento de señales III
Universidad de Antioquia
Ingeniería de telecomunicaciones
Medellín
2012
2. CODIFICADOR
Señal de voz del profesor
SONIDO7
1
0.8
0.6
0.4
0.2
amplitud
0
-0.2
-0.4
-0.6
-0.8
-1
0 1 2 3 4 5 6 7
n
Señal de voz del alumno
vozmauro
0.15
0.1
0.05
0
amplitud
-0.05
-0.1
-0.15
-0.2
0 1 2 3 4 5 6
n
3. Ventanas intermedias de la señal de voz sin usar un tipo de enventanado (donde hay voz)
Aquí se puede notar un tipo de semiperiocidad en los pequeños intervalos de tiempo. Esta se
puede objetar como semipioridica en los intervalos donde hay voz gracias al principio de
aleatoriedad que tiene la voz.
Ventanas intermedias de la señal de voz con enventanado de Hamming (donde hay voz)
4. Entre las dos ultimas se nota mucho una semiperiodicidad, mas que todo al principio donde la
señal empieza a tener buenas amplitudes debido al recorte que hace la ventana de Hamming,
como una curva de distribución normal a los extremos de cada ventana como se muestra a
continuación:
Ventanas intermedias de la señal de voz con enventanado rectangular (donde hay voz)
5. Si se miden los máximos se puede notar que distancia entre picos y las semejanzas entre las 4
graficas llevarían a pensar en una semiperiodicidad. La ventana rectangular es una función
constante de amplitud unitaria, por ende la señal pasa sin ser recortada o suavizada, lo cual
representara cambios abruptos al analizar la señal en frecuencia. Dicha ventana se representa
así:
En las anteriores figuras en eje de abscisas representa la variable n que representa el numero
de muestras y el eje de ordenadas la amplitud de la señal.
Para que se usa el enventanado?
Las ventanas son funciones matemáticas usadas con frecuencia en el análisis y el
procesamiento de señales para evitar las discontinuidades al principio y al final de los bloques
analizados. La utilización de una ventana (diferente a la rectangular) cambia el espectro en
frecuencia de la señal permitiéndole una gran veracidad en sus componentes a causa de las
componentes de frecuencia que se podrían perder debido a las discontinuidades.
6. COMPARACION ENTRE LA TRANSFORMADA DE FOURIER Y LA RESPUESTA AL LPC
FFT
10
0
-10
-20
-30
-40
-50
-60
0 0.01 0.02 0.03 0.04 0.05 0.06 0.07
LPC de la señal, envolvente de la FFT
-10
-20
-30
-40
-50
-60
-70
0 500 1000 1500 2000 2500 3000 3500 4000
Las figuras se sacaron de una señal vocálica en tiempo discreto de 8Kmuestras/segundo.
Si montáramos la segunda figura en la primera, inmediatamente se notaria que esta es una
envolvente basada en cálculos de varianza de la primera, en la que se muestra el espectro
completo de la señal. La gran ventaja de esta evolvente, que es una respuesta de la señal al
LPC, es que su menor robustez hace que los datos que vayamos a enviar al decodificador se
mermen notablemente actuando este LPC entonces como un principio de la compresión.
9. El filtro de atenuación esta amplificando la señal en un factor de 2. Esto en un sistema real se
haría para recuperar potencia de la señal que su puso haber perdido en la transmisión debido
a efectos que ejerce el canal sobre ella, por ejemplo atenuación en un canal de fibra óptica que
es de 0.2dB/Km. De la señal generada localmente se puede notar que permitirá frecuencias
aproximadamente entre los 0 y 1 KHz, recortando entonces componentes de frecuencia altas
que harían que la voz perdiera un poco de riqueza e identidad ya que la voz humana se
encuentra entre 0.3 y 3.3 KHz. De la teoría de ecualizadores se puede recordar que las
frecuencias bajas son denominadas bajos y haría que se pierdan los brillos que caracterizan la
voz de un hablante en particular (habría un sonido como ahogado).
Frames donde se muestra la señal de estímulo y el filtrado de la señal con los coeficientes del
filtro LPC.
En las dos primeras graficas se puede ver que hay una señal que gracias a los procesos de
filtrado a ganada suavidad en su forma, debida en gran parte al filtrado LPC y al recorte de
frecuencias. En las ultimas dos donde la máxima amplitud es de (6 y 2) * 10^-3 se nota que son
ventanas donde no hay voz, pero que también fueron suavizadas ya que el proceso se aplico a
todas las ventanas.
Comentarios
Si comparamos la señal recibida con sonido7 se puede notar que hubo una compresión,
pequeña pero la hubo, ya que sonito7 pesa 101KB y recibido pesa 87.2KB.
La velocidad de procesamiento es buena, ya que el programa se ejecuta rápidamente.
10. En cuanto lo concerniente a la calidad del sonido, no es la mejor. Esto se debe a varios factores
en los que se pueden incluir el recorte de frecuencias que hubo con la señal estimulo, la idea
de tomar un pitch constante para todo el proceso, considerar los espacios donde no hay voz
como señal, la con clasificación de sonidos sonoros o sordos.
MEJORA
En los archivos de cod2.m y dec2.m se marcan 4 mejoras.
1- Enventanado de menor duración
Con esto se logra que la señal suene un poco menos robotizada en el recetor. Lo
recomendado es tenerla entre 20 y 30 ms así que haciendo pruebas alrededor de ese
intervalo el de mejor apreciación fue el de 15 ms para la voz de un hombre. A demás
hay que tener en cuenta que sobre estos intervalos de tiempo es que se calculara el
pitch mas adelante y hay que tener sumo cuidado al escoger la cantidad de tiempo ya
que se puede calcular un pitch errado debido a la baja cantidad de muestras y energía
en el intervalo.
2- Detección de pitch por ventana
Con esto se provocara que no se pierdan los formantes de la señal, ya que la señal de
excitación en el receptor funcionara como una especie de primer filtro que suavizara la
señal que debe estar a una frecuencia a los alrededores del pitch calculado. Con esto
se dará información de si el segmento de la señal es sonoro o sordo para que se tome
la decisión de si enviar el segmento de la señal o ruido respectivamente. Este detector
de pitch usa el concepto de energía que establece que si la energía está por encima de
un cierto umbral el segmento es declarado sonoro, en caso contrario el segmento es
sordo. En este caso se considero un umbral de 0.5.
3- Switch de ruido
En este bloque lo que se hace es enviar AWGN si la señal es sorda y luego a ese ruido
sacarle los coeficientes y varianza de error (unitaria) y si la señal es sonora sacarles los
coeficientes y la varianza al segmento como en el punto 1.
4- Envío de pitch
Se enviara la frecuencia fundamental por cada ventana para crear la señal de
excitación en el receptor a esa respectiva frecuencia. Con esto se garantizara un mejor
suavizado de la señal y las componentes de frecuencia se garantizaran haciendo que la
11. voz sea un poco mas distinguible entre una persona y otra y entre una palabra o silaba
que tenga riqueza en un rango de frecuencias diferente a otro, no como en el punto 1
en el que la voz sonaba plana, ya que se consideraba que todos los sonidos tenían el
mismo pitch, incluyendo los segmentos sordos.
5- Expansión de las componentes de frecuencia de la señal de estimulo
Con esto se logrará darle mucha mas riqueza a la voz, dejando esta misma con sus
componentes en el ancho de 4 KHz. Se hubiera podido dejar en 3.3 KHz que es la
frecuencia máxima en donde esta la voz pero dada la frecuencia de muestreo de la
señal original de fue de 8 KHz se podría pensar en su mitad debido a Nyquist (4 KHz).
GRAFICAS QUE MUESTRAN LA MEJORA
En Las anteriores graficas se muestran 2 espectros, el del estimulo ruidoso y el estimulo
sinusoidal respectivamente.
Estas son las señales a ser reproducidas en el decodificador. En la primera se ve el ruido que
tiene una amplitud pequeña para no interferir notablemente en la reproducción de la señal, ya
que este ruido se utilizo fue como señal de control. En la segunda se ve el espectro de un
fonema sonoro y su representación en el tiempo, el cual tiene frecuencias hasta 1500 Hz y se
nota que la señal en el tiempo es muy parecida a la generada en el punto 1.
12. El vocoder mejorado presenta la siguiente condicionalidad:
Para hablantes hombres el enventanado se debe realizar de 15ms, para hablantes mujeres
entre los 12ms y 14ms y para niños entre los 9ms y los 11ms. Esto se debe principalmente al
aumento en frecuencia de la señal semipioridica que hace que si la ventana es grande el
análisis de los picos no sea el mejor. Por eso cuando hay un aumento del pitch se deben tener
ventanas de menor duración y por ende con menor cantidad de muestras, para que halla un
poco mas de eficiencia en los cálculos.
CONCLUSIONES
El vocoder es un sistema de codificación y amplificación de voz que dado el carácter del LPC
que hace parte de el, nunca podrá sonar de manera igual que la señal original, ya que el LPC es
un filtro predictivo y reduce en gran cantidad el tamaño de la señal o un segmento de la señal
original.
Calculando la energía de un segmento de la señal se puede definir mediante un criterio de
umbral si un sonido tiene un pitch o no, si no lo tiene se envía ruido blanco aditivo gaussiano y
de tenerlo se hace una estimación de los picos máximos o mínimos de la señal segmentada.
Luego para saber si son máximos locales se plantea la correlación y según el resultado de esta
se determinan los máximos absolutos y se procede a medir el tiempo entre esos picos cuyo
inverso es la frecuencia de resonancia vocal o pitch.
En el archivo de audio decodificado en el receptor se puede notar una leve diferencia de los
pesos que tienen el archivo reproducido en el decodificador 1 y el reproducido en el
decodificador2. El audio sonido7.wav pesaba 101KB al salir por el codificador, el
decodificador1 lo reprodujo con un peso de 87.2KB y el decodificador2 con 87.1KB, así que a
demás de haber ganado en autenticidad de voz, en diferenciación de las frecuencias de
fonemas, la mejor tonalidad también se gano un poco en el tema de memoria ocupada por el
archivo. Por otra parte el tiempo de procesamiento de los 2 codificadores fue de 1 segundo
aproximadamente mientras que los decodificadores se demoraron entre 2 y 5 segundos, el
primero de ello unos 3 mientras que el segundo unos 5 debido al ciclo que lo envolvía. El
tiempo utilizado por un sistema de procesamiento Dual core fue bueno y teniendo en cuenta
que hoy en día hay mejores capacidades de procesamiento en los equipos, el tiempo de
compilación puede mejorar.
En la actualidad es raro encontrar sistemas y aparatos remotos de voz que hagan uso de
memoria para reproducir una señal, aunque los teléfonos fijos y faxes aun lo hacen. Pero por
ejemplo la telefonía celular que es netamente digital un mensaje de voz es guardado pero en
memorias de la central telefónica. Así que se podría implementar de esta forma un sistema de
ese tipo aunque en el momento hay mejores soluciones para voz como los sistemas híbridos
entre otros.