Trabajo Práctico Nro. 1
Introducción al Modelado, Predicción y Síntesis de Señales de
Voz
- Objetivos
Al finalizar el Trabajo Práctico usted debería ser capaz de:
- Usar ecuaciones en diferencias para modelar, procesar y sintetizar
señales de voz.
- Usar Matlab para simular la respuesta temporal de modelos en ecuaciones
en diferencias usados en predicción, procesamiento y síntesis de voz.
- Ingresar archivos de sonido (en particular de señales de voz) en formato
WAV (formato de sonido WAVE de Microsoft) al espacio de trabajo de Matlab,
mediante el comando wavread.
- Usar Matlab para crear archivos de sonido WAV mediante el comando
wavwrite.
- Usar Matlab para reproducir archivos de sonido mediante el comando
sound.
- Usar Matlab para representar señales de voz en el dominio tiempo (formas
de onda), mediante los comandos plot, y en el dominio tiempo-frecuencia
(espectrogramas), mediante el comando specgram.
- Usar Matlab para sintetizar palabras aisladas y sonidos simples con modelos
LPC del tracto vocal.
- Problemas propuestos
- Síntesis de palabras aisladas
- Mediante el comando wavread, ingrese al espacio de trabajo de
Matlab el archivo Juan_Carlos_cuadro.wav, que contiene un cuadro del segmento de
voz contenido en el archivo Juan_Carlos.wav. Este archivo contiene un sonido
correspondiente a la vocal /a/ cantada por J.C.G.
- Implemente un algoritmo para la determinación el período aproximado de la
señal, usando FFT o correlación.
- Mediante el uso del comando lpc determine los coeficientes de
predicción lineal que parametrizan el modelo LPC del tracto vocal.
- Sintetice el sonido correspondiente al cuadro haciendo uso del modelo LPC
estimado para construir un filtro al cual deberá excitar con un tren de impulsos
de la frecuencia determinada en 2. Para generar el tren de impulsos puede hacer
uso de la función tren_impulsos2.m.
- Sintetice un segmento de voz de la duración correspondiente al del archivo
Juan_Carlos.wav, repitiendo periódicamente la señal sintetizada
en 4.
- Compare auditivamente y gráficamente (forma de onda) la señal
sintetizada en el punto anterior con la correspondiente al archivo
Juan_Carlos.wav. Para reproducir un archivo .wav desde Matlab
deberá hacer uso de los comandos sound, o soundsc.
- Escriba una función Matlab que permita separar en cuadros de longitud
determinada un segmento de voz. Para esto puede modificar la función
rowblock.
- Separe en cuadros el segmento de voz contenido en el archivo
Juan_Carlos.wav, y repita los puntos 2. a 5. para cada cuadro de este
segmento de voz.
- Compare auditivamente y gráficamente (forma de onda) la señal
sintetizada en el punto anterior con la correspondiente al archivo
Juan_Carlos.wav.
- Sintetize la palabra /bienvenido/ contenida en el archivo
tp1_2.wav. Para esto puede usar la función lpc_frames.
Esta función segmenta en cuadros, estima los coeficientes LPC del modelo del
tracto vocal en cada cuadro, estima la frecuencia de excitación del modelo LPC
usando FFT, filtra el tren de impulsos con un modelo exponencial
de la glotis, y escala la señal sintetizada en cada cuadro de acuerdo a
la energía de la señal original en dicho cuadro.
- Síntesis de un trozo musical
El objetivo de esta sección es sintetizar un trozo musical usando los coeficientes
LPC del modelo de tracto vocal obtenidos del segmento de voz contenido en el archivo
Juan_Carlos_cuadro.wav.
- Notación Musical
- Relación entre la altura de la nota y la frecuencia
Se propone sintetizar el siguiente trozo de música que corresponde a los primeros
compases del Hallelujah Chorus del Oratorio Messiah de G. F. Handel.
La obra se estrenó en Dublin en 1742. A partir de 1750, Messiah se interpretó en
funciones anuales a beneficio del Foundling Hospital, una organización londinense
de caridad que se ocupaba de los niños huérfanos, a la cual Handel estuvo
vinculado hasta su fallecimiento en 1759. En su testamento, Handel legó los
derechos de autor de la obra al Foundling Hospital.
Las cuatro líneas corresponden
a las voces de soprano, alto, tenor y bajo.
Para realizar la síntesis puede utilizar
las funciones nota, que genera un tren de pulsos con la frecuencia y
la duración de la nota deseada y silencio que genera silencios de
duración deseada
- Archivos Matlab
- Generador de Tren de Impulsos Unitarios. (Matlab-function
tren_impulsos2.m )
- Generador de Tren de Pulsos de Glotis (modelo
exponencial).(Matlab-function glottal_pulse.m)
- Row Operator: Operador que pone los bloques fila de una matriz uno
al lado del otro. (Matlab-function rowblock.m )
- Vec Operator: Operador que pone los bloques columna de una matriz,
uno debajo del otro. (Matlab-function colblock.m)
- Programa para síntesis de una palabra (Separa en frames, determina
frecuencia de cada frame, escala la señal sintetizada de acuerdo a la energía
de cada frame)(Matlab-script lpc_frames)
- Función nota.
- Función silencio.
- Archivos de Sonido (.wav)
Juan Carlos Gómez, Octubre de 2004