Pregunta

he implementado un filtro de paso-bajo rudimentaria usando un valor basado en el tiempo. Esto está bien, pero tratando de encontrar el intervalo de tiempo correcto es conjetura, y da diferentes resultados en función de los diferentes archivos de audio de entrada. Aquí es lo que tengo ahora:

- (void)processDataWithInBuffer:(const int16_t *)buffer outBuffer:(int16_t *)outBuffer sampleCount:(int)len {   
    BOOL positive;
    for(int i = 0; i < len; i++) {
        positive = (buffer[i] >= 0);
        currentFilteredValueOfSampleAmplitude = LOWPASSFILTERTIMESLICE * (float)abs(buffer[i]) + (1.0 - LOWPASSFILTERTIMESLICE) * previousFilteredValueOfSampleAmplitude;
        previousFilteredValueOfSampleAmplitude = currentFilteredValueOfSampleAmplitude; 
        outBuffer[i] = currentFilteredValueOfSampleAmplitude * (positive ? 1 : -1);
    }
}

¿Qué puedo hacer para convertir este código en el código que me va a permitir a frecuencias de corte durante un cierto Hz por un cierto nivel db?

¿Fue útil?

Solución

numérica recetas en c . Fuera de eso, no estoy seguro de que puedo ayudarle.

Cuando se diseña un filtro, es necesario calcular los coeficientes de ese filtro en función de la frecuencia para que casi necesita una clase para manejar la situación, no sólo una función.

Esto está en C ++ pero debe empezar. Siento no poder dar una respuesta concreta.

Otros consejos

Lo que tenemos es un filtro IIR, y para un mayor control Me gustaría sugerir el uso de un filtro FIR, que es más fácil de calcular los coeficientes para. Creo una función de ventana que es:

y = sin (x * bandwidth) / (sin (x) * windowWidth)

donde WindowWidth es el número de muestras de ancho de la ventana es, x rangos de -2 a 2 * pi * PI, y el ancho de banda:

bandwidth = 2 * frequency * n / sampleRate;

Esto crea una serie de números que se aplican a una amplia gama de muestras se centraron en el que desea emitir. Iterar este sobre cada muestra.

he resumido mi propio código para hacer esto, ya que el código original es bastante enrevesada.

Me implementó un filtro utilizando la interactiva diseñador filtro .

A continuación, algunos ejemplos de código, con lo integra: https://github.com/davidcairns/MediaPlayerDemo

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top