El primer paso es verificar que tanto su frecuencia de muestreo inicial como su frecuencia de muestreo objetivo sean números racionales . Como son enteros, son números automáticamente racionales. Si uno de ellos no fuera un número racional, aún sería posible realizar un cambio en la frecuencia de muestreo, pero es un proceso muy diferente y más difícil.
22∗32∗52∗7227∗5332∗7225∗5
Los pasos anteriores deben realizarse sin importar cómo desee volver a muestrear los datos. Ahora hablemos sobre cómo hacerlo con FFT. El truco para volver a muestrear con FFT es elegir longitudes de FFT que hagan que todo funcione bien. Eso significa elegir una longitud FFT que sea un múltiplo de la tasa de diezmado (441, en este caso). Por el bien del ejemplo, escojamos una longitud FFT de 441, aunque podríamos haber elegido 882, o 1323, o cualquier otro múltiplo positivo de 441.
Para entender cómo funciona esto, ayuda a visualizarlo. Empiezas con una señal de audio que se ve, en el dominio de la frecuencia, como la figura de abajo.
Cuando haya terminado con su procesamiento, desea disminuir la frecuencia de muestreo a 16 kHz, pero desea la menor distorsión posible. En otras palabras, simplemente desea mantener todo desde la imagen de arriba de -8 kHz a +8 kHz y soltar todo lo demás. Eso da como resultado la imagen a continuación.
Tenga en cuenta que las frecuencias de muestreo no están a escala, solo están ahí para ilustrar los conceptos.
25∗5
Como puede sospechar, hay un par de posibles problemas. Revisaré cada uno y explicaré cómo puedes superarlos.
¿Qué haces si tus datos no son un buen múltiplo del factor de diezmado? Puede superar esto fácilmente rellenando el final de sus datos con suficientes ceros para convertirlo en un múltiplo del factor de diezmado. Los datos se rellenan ANTES de ser FFT.
ll−1ceros (tenga en cuenta que el número de muestras de datos y el número de muestras de relleno deben ser AMBOS múltiplos positivos del factor de diezmado; puede aumentar la longitud del relleno para cumplir con esta restricción), FFT 'los datos rellenados, multiplicando el dominio de frecuencia datos y filtro, y luego aliasar los resultados de alta frecuencia (> 8 kHz) en los resultados de baja frecuencia (<8 kHz) antes de soltar los resultados de alta frecuencia. Desafortunadamente, dado que el filtrado en el dominio de la frecuencia es un gran tema en sí mismo, no podré entrar en más detalles en esta respuesta. Sin embargo, diré que si filtra y procesa los datos en más de un fragmento, deberá implementar Overlap-and-Add o Overlap-and-Save para que el filtrado sea continuo.
Espero que esto ayude.
EDITAR: La diferencia entre el número inicial de muestras de dominio de frecuencia y el número objetivo de muestras de dominio de frecuencia debe ser uniforme para que pueda eliminar el mismo número de muestras del lado positivo de los resultados que del lado negativo de los resultados. En el caso de nuestro ejemplo, el número inicial de muestras fue la tasa de diezmado, o 441, y el número objetivo de muestras fue la tasa de interpolación, o 160. La diferencia es 279, que no es par. La solución es duplicar la longitud de FFT a 882, lo que hace que el número objetivo de muestras también se duplique a 320. Ahora la diferencia es pareja, y puede eliminar las muestras de dominio de frecuencia apropiadas sin problemas.