Implementación de la transformada rápida de Fourier en fpga usando verilog

Hola.

Actualmente estoy desarrollando un proyecto en el que analizo una señal de voz para lo cual requiero el análisis en el dominio de la frecuencia. Dicha señal se muestreará a 6 kHz, durante unos 3 segundos. Esto me genera alrededor de 16 mil muestras en el dominio del tiempo.

En principio, para el análisis en frecuencia, pensaba aplicar el algoritmo de la transformada rápida de Fourier fft sobre la señal completa (es decir se tendrían 16384 = 2^14 muestras de entrada e igual numero de muestras de salida). Sin embargo, mi profesor dice que esto es totalmente exagerado, y que lo que se debe hacer es programar una transformada de unos 16 o 32 puntos, e ir tomando pequeñas pedazos de la señal en tiempo e ir aplicándoles la transformada. Al final de todo este proceso, se tendrían entonces 16 o 32 muestras en el dominio de la frecuencia, que representan el espectro de la señal de entrada de 16 mil muestras.

Entiendo bien cómo es el algoritmo de la transformada y cómo implementarlo en verilog. Lo que no entiendo es cómo relacionar las salidas de cada transformada realizada (sobre 16 o 32 muestras), de tal manera que al final de todo únicamente tenga 16 o 32 muestras en el dominio de la frecuencia, según sugiere mi profesor.

Les agradezco cualquier ayuda con esto.

Tengo también otra duda. La idea no es graficar la transformada como se hace regularmente (magnitud vs. frecuencia), sino hacer un espectrograma de la señal, es decir, en el eje vertical se tiene frecuencia, en el horizontal tiempo y en el gráfico se pintan diferentes tonalidades de grises dependiendo de las amplitudes. Para esto, se debe partir la señal de voz en letras (es decir, si digo "hola", debo hacer una transformada para la letra H, para la O, la L y la A). Mi pregunta es ¿cómo saber cuanto tiempo tarda cada letra para poder hacer la partición? ¿es un dato que se debería saber teóricamente, o tengo que hallarlo de alguna manera a partir de mi propia señal de voz?

Lamento haberme extendido tanto, pero pues tengo muchas dudas y quise dejar bien claro lo que estoy haciendo para que me entiendan mejor.

Mil gracias por sus aportes.
 
A ver si entendí. Vos lo que queres es que te aparesca la transformada en tiempo real para cada letra pronunciada ???. A mi me parece que vos exageraste con las 16384 muestras y tu profesor se quedó corto con las 16 o 32 muestras.
Si es en tiempo real, la cantidad de muestras que deberías tomar es durante un tiempo que uno alcance a apreciar la figura. No se cuanto es este tiempo, supongamos que es 50 ms:
entonces ---> N = 6000 Hz * 0.05 s = 300 muestras. Que deberías tomar para cada transformada.
Luego cada muestra en el dominio de la frecuencia está separada una cantidad igual a 6000 Hz/300 = 20 Hz. Esta es tu resolción en frecuencia.
 
Atrás
Arriba