Matlab - FFT en Matlab

 
Vista:

FFT en Matlab

Publicado por Luis (2 intervenciones) el 26/04/2010 16:54:36
Buenas.

En el ejemplo de como usar la transformada de Fourier en Matlab (fft, http://www.mathworks.com/access/helpdesk/help/techdoc/ref/fft.html), una vez tienen la señal, hacen esto

[i]NFFT = 2^nextpow2(L); % Next power of 2 from length of y
Y = fft(y,NFFT)/L;
[/i]

Es decir, calculan en NFFT la primera potencia de 2 a partir de la
longitud de la señal, y luego calculan la transformada de Fourier de
NFFT puntos, y lo dividen por L (longitud de la señal).
¿Sabeis por qué exactamente hacen esto?

Gracias, un saludo
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:FFT en Matlab

Publicado por Capitan Kirk (16 intervenciones) el 27/04/2010 08:48:44
Por lo que recuerdo de mis tiempos de estudiante, creo que la razón es esta:

Los algoritmos para calcular la FFT son mucho más eficientes si el número de puntos a tratar es una potencia de 2. No utilizo Matlab, pero supongo que lo que hace la primera instrucción que indicas es crear un nuevo vector añadiendo el número de elementos necesario para llegar a la siguiente potencia de 2. Es de suponer que la penalización por el incremento del tamaño del vector se compensa con creces por el incremento de la eficiencia del algoritmo de cálculo.

Una vez que has calculado la transformada, obtienes un vector de números complejos cuyos módulos te dan las intensidades de la señal a las distintas frecuencias, y los argumentos te dan la fase correspondiente a cada una de esas componentes. El incremento de frecuencia entre cada una de estas componentes es:

delta_freq = freq / num_elementos

siendo freq la frecuencia de muestreo de la señal a procesar y num_elementos el número de datos que has utilizado. El hecho de dividir simplemente por el número de elementos supongo que es por cuestión de normalización (freq = 1).

Espero haber contestado a tu pregunta. Saludos,
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:FFT en Matlab

Publicado por Luis (2 intervenciones) el 27/04/2010 11:56:42
Muchisimas gracias, una respuesta genial y muy completa.

El caso es que en el ejemplo del que hablo de matlab, crean una onda a mano

x = 0.7*sin(2*pi*50*t) + sin(2*pi*120*t);

y le hacen la fft con la proxima potencia de 2, como tu dices sera para aumentar la eficiencia del algoritmo, y en fin, como resultado obtienen una grafica donde se ven claramente las dos frecuencias de las ondas sumadas en x (50 y 120).

Lo que me pasa a mi es que capturo un sonido, por ejemplo un La tocado en una única cuerda de guitarra, y al tratar la señal, en la gráfica se observa un pico donde no corresponde realmente a la frecuencia de un La.. y eso me confunde un poco. Porque tampoco es que pase por el ruido o algo, pues siempre que toco un La sale la misma frecuencia, digamos 29, y cuando toco un Si sale 31, pero no se exactamente por qué esos números.

Igualmente tu respuesta ha sido de gran ayuda.
Gracias de nuevo!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:FFT en Matlab

Publicado por Florencia (1 intervención) el 01/07/2011 17:27:05
Hola,

Estoy necesitando alguien que me de una mano con un TP de FFT en Matlab. Pago por el trabajo. Adjunto el enunciado:
Implementación de un programa en entorno de matlab, que al ingresar un archivo x.wav, devuelva un archivo y.wav que mediante técnicas de fft, muestreo y filtrado digital aumente (o disminuya) el pitch del archivo x.wav en una cantidad entera que se ingrese como un parámetro de entrada al programa.

Gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar