Prácticas de laboratorio Práctica 2: Análisis en el Dominio del Tiempo 1. INTRODUCCIÓN El objetivo de la práctica es programar funciones en C, dentro del entorno LTVWIN, para el cálculo de parámetros temporales de la voz. Concretamente: • • • Energía Densidad de Cruces por Cero Autocorrelación. Estas funciones se aplicarán sobre señales reales con el objetivo de evaluar los resultados con diferentes parámetros de cálculo (tamaño de las ventanas, desplazamiento, etc...) Las funciones de energía y densidad de cruces por cero se evalúan por ventanas solapadas temporalmente. Además, el entorno presupone que las ventanas se encuentran centradas, es decir, el resultado se asocia al instante temporal del centro de la ventana. La siguiente figura aclara estas ideas: Fco Javier Molina Cantero Pag. 1 1.1 Cálculo de la ENERGÍA INSTANTÁNEA En el cálculo de la energía, utilice la siguiente expresión: 1 L/2 2 En = ∑ s(n + i ) L i = − L/2 Al dividir por L se reduce el rango de valores que se alcanza con esta función, que podría desbordar el formato FLOAT si el tamaño de la ventana utilizada es my grande. La función a programar es la siguiente: FICHERO: AnalisisTemporal.cpp VOZDLL_API long Energia(DataIn,DataOut,NumDatosIn, LonVent, DespVent) float * DataIn; float *DataOut; long NumDatIn; long LonVent; { } Pag. 2 long DespVent; return XXX; // Array con los datos de audio // Array con los resultados // Número de datos de entrada // Tamaño de las ventanas de análisis // Desplazamiento entre ventanas // La función debe devolver el número de datos del array de salida 1.2 Cálculo de la DENSIDAD DE CRUCES POR CERO La densidad de cruces por cero se evaluará contabilizando los cambios de signo de los datos a lo largo de la ventana. D= C. Signo L La función a programar es la siguiente: FICHERO: AnalisisTemporal.cpp VOZDLL_API long Ceros(DataIn,DataOut,NumDatosIn, LonVent, DespVent) float * DataIn; float *DataOut; long NumDatIn; long LonVent; { // Array con los datos de audio // Array con los resultados // Número de datos de entrada // Tamaño de las ventanas de análisis // Desplazamiento entre ventanas long DespVent; return XXX; // La función debe devolver el número de datos del array de salida } 1.2 Cálculo de la AUTOCORRELACIÓN El cálculo de la función de autocorrelación se realizará sobre la ventana de tamaño M que se define mediante las marcas de selección del visor de señales. Por tanto, ES NECESARIO QUE SELECCIONE UNA VENTANA con el editor continuo de señales. Para el cálculo, utilice la definición que ofrece la siguiente ecuación: Rn (k ) = M − 1− k ∑ x(n + m) ⋅ x(n + m + k ) m= 0 k ∈ [0, NCoef ] donde: n es el índice donde comienza la ventana M es el tamaño de la ventana k es el desplazamiento NCoef es el número de coeficientes a calcular Fco Javier Molina Cantero Pag. 3 La función a programar es: FICHERO: AnalisisTemporal.cpp VOZDLL_API long AutoCorrelacion(DataIn,NumDat,DataOut,Inicio, LongVentana,NumCoef) float *DataIn; // Array con los datos de audio long NumDat; // Número total de datos en DataIn float *DataOut; // Array con los resultados long Inicio; // Índice del primer dato de la ventana de análisis long LongVentana; // Número de datos de la ventana de análisis long NumCoef; // Número de coeficientes a calcular { return NumCoef; // Debe devolver el número de coeficientes calculados } Pag. 4 2. CUESTIONES 1. Aplique la función de Energía sobre el fichero Buenos.wav. Compruebe si las ventanas que ha programado están centradas. Utilice para ello un valor de desplazamiento pequeño. 2. Aplique también la función de densidad de cruces por ceros y responda a las siguientes preguntas: A) ¿A qué tipo de sonidos corresponden las regiones donde la la energía es alta y la densidad de cruces por cero baja?. Compruébelo marcando estas zonas y escuchando el audio. B) ¿Y aquellas regiones donde la densidad de cruces es alta y la energía baja?. Compruébelo también. C) Verifique si existe algún otro tipo de zona. ¿De qué tipo sería? D) Compruebe y justifique cómo cambian las curvas de energía y Densidad de cruces al modificar el tamaño de las ventanas de análisis. 3. Seleccione una ventana en el editor de señales, y ejecute el cálculo de la función de autocorrelación. Cambie la ventana de prueba seleccionando diversos tamaños, y conteste a las cuestiones que se plantean: A) Si la región seleccionada posee baja energía y alta densidad de cruces por cero, cuál es la forma de la función de autocorrelación resultante. B) Si por el contrario la región elegida es de alta energía y baja densidad de cruces por cero, cómo resulta la curva. C) Estime a partir de la densidad de cruces por cero, el PITCH o tono fundamental de la voz del tramo seleccionado. D) ¿Cuántos coeficientes deben ser seleccionados, como mínimo, para estimar el PITCH con la señal de prueba?. ¿Y en general? E) ¿Qué tamaño mínimo de ventana necesita definir para analizar P coeficientes?. Fco Javier Molina Cantero Pag. 5