Remuestreo de audio de 48kHz a 16kHz

0

Estoy utilizando ADAU1761 en mi proyecto y su salida I2S está configurada para un relleno estéreo de 48 kHz / 24 bits, 8 bits, que proporciona 32 bits por canal, 64 BCLK por fotograma. Sin embargo necesito 16kHz / 16bits. 24b a 16b se puede realizar mediante un simple cambio de bits (> > 8). Estoy teniendo problemas con la conversión de 48kHz a 16kHz. Soy un principiante en el procesamiento de audio, pero hasta donde entiendo, no puedo tomar cada tercera muestra del audio original y guardar debido al aliasing. Debe haber un filtro de paso bajo, pero no sé qué frecuencia de corte y orden debería tener. La plataforma de destino es STM32L4 pero es más fácil simplemente codificar en la PC y luego transferir el código. Aquí hay un fragmento:

fread(&WAVE_header, sizeof(WAVE_header_t), 1, pFile); // read wave header, 
uint16_t* ptr = malloc(WAVE_header.SubChunk2Size); // allocate memory for audio data
fread(ptr, WAVE_header.SubChunk2Size, 1, pFile); // read audio data
uint16_t *ptrOut = malloc(WAVE_header.SubChunk2Size/3); // after resampling
for(uint32_t i = 0; i < WAVE_header.SubChunk2Size/3; i+=5){ // 
    ptrOut = ptr+i; // channel 1
    ptrOut = ptr + 1+i; // channel 2
    //filter here?
}
fwrite(ptrOut, WAVE_header.SubChunk2Size/3, 1, outFile);
    
pregunta KRol

1 respuesta

1

Si vas a una frecuencia de muestreo de 16 kHz, cualquier cosa igual o más de la mitad causará un alias. Por lo tanto, a 8 KHz, la atenuación del filtro debe ser lo suficientemente alta como para que el alias sea aceptable.

El orden y el límite de uso depende de usted. Un orden superior permitirá que la banda de paso se acerque a 8kHz ya que la transición es más nítida. Una orden inferior es más simple.

    
respondido por el Phil Frost

Lea otras preguntas en las etiquetas