Softonic.com otorga a LoginControl la corona Softonic del Muy Bueno.


LoginControl hace presencia en...



... y en el CD4 de...




 

Convertidor de Audio a MIDI

Volver al Índice

 
Métodos de detección de Pitch
  Basados en FFT

  En el primer método en el que se piensa cuando se trata de calcular la frecuencia fundamental de un segmento determinado es hacer la FFT al mismo.
  A continuación se escoge el máximo de la FFT calculada, y ya se tiene la frecuencia fundamental del segmento, pero surgen 2 problemas básicos que hay que resolver:
1. Previamente hay que eliminar la componente continua, porque si no se hace el máximo resulta ser casi siempre para la componente continua (frecuencia cero), por lo que no saldría ningún resultado válido. Otra opción es hacer la búsqueda en un determinado rango de frecuencias, con lo que también se elimina el mencionado problema del pico para frecuencia = 0.
2. Si un determinado instrumento tiene algún armónico con mucha energía, puede ser que la amplitud del armónico sea superior a la de la frecuencia fundamental del segmento en cuestión, como ya se comentó en el primer capítulo, en referencia a las limitaciones de la conversión. Por lo tanto la detección fracasaría, dando un resultado erróneo. Una solución a este problema es hacer un filtrado pasobajo (la solución tomada en este caso).
  Para hacer el algoritmo más rápido, ya que no se pretende una gran calidad es hacer la FFT del segmento completo, y, en el dominio de la frecuencia, una vez calculado el valor absoluto de la transformada, hacer el filtrado mediante una simple multiplicación componente a componente . Se han probado varios métodos de filtrado, lineal, exponencial, logarítmico, etc. El que mejor resultado ha dado es un filtro lineal que multiplica la 'continua' (frecuencia 0) por 1 y la frecuencia Fs/2 por 0 , aunque no tenga sentido desde el punto de vista de la transformada solamente es para calcular la frecuencia fundamental (de esta forma es más rápido, ya que no se va a realizar la transformada inversa).

 
   

Tipos de filtrado usados
Se pueden observar las gráficas de los distintos tipos de filtrado paso-bajo usado:

 
Segmento a analizar FFT del segmento

Filtrado lineal paso-bajo

FFT tras el filtrado
   

Filtrado lineal paso-bajo suave

FFT tras el filtrado


Basados en parámetros temporales
  Otros posibles métodos, dejando a parte el dominio de la frecuencia, se basan en la función de autocorrelación. La autocorrelación es una función que devuelve un vector, el cual contiene información sobre lo repetitiva que es la señal respecto a sí misma, y se calcula de la mediante la fórmula siguiente:

  Siendo R(k) la función de autocorrelación y x el vector cuya autocorrelación queremos calcular.
  Por otro lado, como se ven en la siguiente gráfica, el valor de la autocorrelación disminuye a medida que aumenta el valor de k, esto se debe principalmente a una reducción del número de sumandos que hay a medida que aumenta k (ver ejemplo del pié de página). Para solucionar esta limitación existe otra función de autocorrelación que normaliza el resultado de la sumatoria anterior al número de sumandos. Esta última se llama autocorrelación sin desplazamiento o ‘Unbias’, mientras que la primera se llama autocorrelación con desplazamiento o ‘Bias’.
  A continuación se muestran dos gráficas correspondientes al mismo segmento para el cual se calculó la fft con sus correspondientes filtrados paso-bajo, pero ahora mostrando las dos autocorrelaciones, con y sin desplazamiento.


Correlación "Bias"


Correlación "Unbias"

Algoritmo SIFT
  Consiste en utilizar el modelo LPC (Linear Prediction Code) de producción de voz, que supone que la excitación es un tren de pulsos (cuerdas vocales, sonido sonoro) o un ruido blanco (el aire proveniente de los pulmones) que pasa por un filtro todo-polos (cavidad bucal – ver gráfica siguiente). Este método de detección de pitch utiliza ese modelo, por lo que los resultados sólo son buenos en los casos en que el origen del sonido se ajuste bien a ese modelo, caso que se da en la voz (el modelo LPC es un modelo de producción de voz, es aplicable también para audio aunque los resultados no son tan satisfactorios como para la voz).

  Los pasos a seguir son los siguientes:

• Obtengo el filtro todo-polos (Hz) correspondiente (Función lpc.m de MATLAB)
• Obtengo la excitación por la siguiente fórmula: S(z)=E(z)/A(z) => E(z) = A(z)∙S(z) donde A(z) es el filtro LPC, E(z) es la excitación y S(z) es el segmento en el dominio de la transformada Z, todo en el dominio de la transformada, en el tiempo el producto se convierte en una convolución por las propiedades de la citada transformada.
• Aplico un center clip a la señal de excitación para eliminar el ruido blanco de fondo.
• Calculo la función de autocorrelación de la señal de excitación calculada. (Se ha usado solamente el caso de la autocorrelación con desplazamiento porque da mejores resultados que sin desplazamiento, como se ha comprobado en las gráficas anteriores).
• Calculo el retardo kmax para el que la función de autocorrelación es máxima, y se calcula con él la frecuencia fundamental del segmento que se está analizando, sabiendo la relación Fpitch=Fs/kmax

• Determinación del filtro A(z)
Criterio: Minimizar el error cuadrático medio, calculado éste como ∑e2(n)
  Finalmente el valor del filtro es a = -Rx•rx,, siendo a un vector que contiene los parámetros del filtro todo-polos.

 
  Siga en: Justificación de Parámetros
Se ve mejor con resolución de 800x600 ó superior.
PandreOnline.com - Copyright © 2002-2004 José Andrés Gómez Martín. Todos los derechos reservados.