tutorial ejemplos code anti matlab fft

ejemplos - Comprender el ejemplo de Matlab FFT



fft spectrum matlab (4)

Soy nuevo en Matlab y FFT y quiero entender el ejemplo de Matlab FFT . Por ahora tengo dos preguntas principales:

1) ¿Por qué el eje x (frecuencia) termina en 500? ¿Cómo sé que no hay más frecuencias o simplemente las ignoran?

2) ¿Cómo sé que las frecuencias están entre 0 y 500? ¿No debería decirme la FFT, en qué límites están las frecuencias? ¿La FFT solo devuelve el valor de amplitud sin la frecuencia?

Gracias por cualquier pista!

Ejemplo en cuestión:

Considere datos muestreados a 1000 Hz. Forme una señal que contenga una sinusoide de 50 Hz de amplitud 0,7 y 120 Hz sinusoidal de amplitud 1 y corrométela con un ruido aleatorio de media cero:

Fs = 1000; % Sampling frequency T = 1/Fs; % Sample time L = 1000; % Length of signal t = (0:L-1)*T; % Time vector % Sum of a 50 Hz sinusoid and a 120 Hz sinusoid x = 0.7*sin(2*pi*50*t) + sin(2*pi*120*t); y = x + 2*randn(size(t)); % Sinusoids plus noise plot(Fs*t(1:50),y(1:50)) title(''Signal Corrupted with Zero-Mean Random Noise'') xlabel(''time (milliseconds)'')

Convirtiendo al dominio de la frecuencia, la transformada discreta de Fourier de la señal ruidosa y se obtiene tomando la transformada rápida de Fourier (FFT):

NFFT = 2^nextpow2(L); % Next power of 2 from length of y Y = fft(y,NFFT)/L; f = Fs/2*linspace(0,1,NFFT/2+1); % Plot single-sided amplitude spectrum. plot(f,2*abs(Y(1:NFFT/2+1))) title(''Single-Sided Amplitude Spectrum of y(t)'') xlabel(''Frequency (Hz)'') ylabel(''|Y(f)|'')


1) ¿Por qué el eje x (frecuencia) termina en 500? ¿Cómo sé que no hay más frecuencias o simplemente las ignoran?

Termina a 500 Hz porque esa es la frecuencia Nyquist de la señal cuando se muestrea a 1000Hz. Mira esta línea en el ejemplo de Mathworks:

f = Fs/2*linspace(0,1,NFFT/2+1);

El eje de frecuencia del segundo gráfico va de 0 a Fs / 2, o la mitad de la frecuencia de muestreo. La frecuencia de Nyquist siempre es la mitad de la frecuencia de muestreo, porque por encima de eso, se produce un aliasing :

La señal se "replegaría" sobre sí misma y parecería tener una frecuencia igual o inferior a 500Hz.

2) ¿Cómo sé que las frecuencias están entre 0 y 500? ¿No debería decirme la FFT, en qué límites están las frecuencias?

Debido al "plegado" descrito anteriormente (la frecuencia de Nyquist también se conoce comúnmente como la "frecuencia de plegado"), es físicamente imposible que aparezcan frecuencias de más de 500 Hz en la FFT; las frecuencias más altas se "replegarán" hacia atrás y aparecerán como frecuencias más bajas.

¿La FFT solo devuelve el valor de amplitud sin la frecuencia?

Sí, la función MATLAB FFT solo devuelve un vector de amplitudes. Sin embargo, se asignan a los puntos de frecuencia que le pasas.

Déjame saber qué necesita aclaración para poder ayudarte más.


Hay algunos conceptos erróneos aquí.

Las frecuencias superiores a 500 pueden representarse en un resultado de FFT de longitud 1000. Desafortunadamente, estas frecuencias están todas juntas y mezcladas en los primeros 500 contenedores de resultados de FFT. Por lo tanto, normalmente no desea alimentar una FFT con una señal que contenga frecuencias iguales o superiores a la mitad de la frecuencia de muestreo, ya que a la FFT no le importará y mezclará las frecuencias altas junto con las bajas (aliasing) haciendo que el resultado sea bastante muy inútil Es por eso que los datos deben ser filtrados de paso bajo antes de ser muestreados y alimentados a una FFT.

La FFT devuelve amplitudes sin frecuencias porque las frecuencias dependen, no solo de la longitud de la FFT, sino también de la frecuencia de muestreo de los datos, que no es parte de la FFT o su entrada. Puede alimentar la misma longitud de datos FFT a cualquier frecuencia de muestreo, ya que así puede obtener cualquier rango de frecuencias.

La razón por la que los gráficos de resultados finalizan en 500 es que, para cualquier entrada de datos real, las frecuencias superiores a la mitad de la longitud de la FFT son simplemente repeticiones duplicadas (conjugadas complejas) de los datos en la primera mitad. Como son duplicados, la mayoría de la gente simplemente los ignora. ¿Por qué trazar duplicados? La FFT calcula la otra mitad del resultado para las personas que alimentan los datos complejos de FFT (con componentes tanto reales como imaginarios), lo que crea dos mitades diferentes.


La razón por la cual su eje X traza frecuencias solo hasta 500 Hz es su declaración de comando ''f = Fs / 2 * linspace (0,1, NFFT / 2 + 1);'' . Su Fs es 1000. Entonces, cuando lo divide por 2 y luego lo multiplica por valores que van de 0 a 1, devuelve un vector de longitud NFFT / 2 + 1. Este vector consiste en valores de frecuencia equidistantes, que van de 0 a Fs / 2 (es decir, 500 Hz). Dado que traza usando el comando '' plot (f, 2 * abs (Y (1: NFFT / 2 + 1))) '', su límite del eje X es 500 Hz.


Parece que necesita leer algunos antecedentes sobre lo que es una FFT (por ejemplo, http://en.wikipedia.org/wiki/FFT ). Pero para responder a sus preguntas:

¿Por qué el eje x (frecuencia) termina en 500?

Debido a que el vector de entrada es de longitud 1000. En general, la FFT de una forma de onda de entrada de longitud N dará como resultado un vector de salida de longitud N Si la forma de onda de entrada es real, entonces la salida será simétrica, por lo que los primeros 501 puntos son suficientes.

Editar: (No noté que el ejemplo rellenaba el vector del dominio del tiempo).

La frecuencia va a 500 Hz porque la forma de onda del dominio del tiempo se declara con una frecuencia de muestreo de 1 kHz. El teorema de muestreo de Nyquist dicta que una señal con frecuencia de muestreo fs puede soportar una señal (real) con un ancho de banda máximo de fs/2 .

¿Cómo sé que las frecuencias están entre 0 y 500?

Véase más arriba.

¿No debería decirme la FFT, en qué límites están las frecuencias?

No.

¿La FFT solo devuelve el valor de amplitud sin la frecuencia?

La FFT simplemente asigna una amplitud (y fase) a cada bin de frecuencia.