2010-04-14 29 views
5

Actualmente realicé una FFT de un conjunto de datos que me da una gráfica con la frecuencia en el eje xy la amplitud en el eje y. Me gustaría calcular el área debajo del gráfico para darme la energía.Calcula área bajo el gráfico FFT en MATLAB

No estoy seguro de cómo determinar el área porque no tengo la ecuación y también solo quiero un área determinada de la trama en lugar de toda el área debajo de la trama. ¿Hay alguna manera de hacerlo?

+0

Esta es en realidad una pregunta más general sobre el cálculo del área bajo * cualquier * gráfico, no necesariamente un gráfico FFT. Además de la motivación que das en el 1er párrafo, no hay nada específico para FFT aquí. Consideraría revisar tanto el título como las etiquetas. –

Respuesta

11

Hay muchas maneras de hacer la integración numérica con Matlab. Aquí hay un ejemplo:

%# create some data 
x = linspace(0,pi/2,100); %# 100 equally spaced points between 0 and pi/2 
y = sin(x); 

%# integrate using trapz, which calculates the area in the trapezoid defined by 
%# x(k),x(k+1),y(k),y(k+1) for k=1:length(x) 
integral = trapz(x,y); 

%# if you only want to integrate part of the data, do 
partialIntegral = trapz(x(10:20),y(10:20)); 

%# show the integrated area 
figure, 
area(x,y); 
hold on, 
area(x(10:20),y(10:20),'FaceColor','red') 
+0

Hola, muchas gracias, pero has intentado integrar parte de los datos usando tu sugerencia. Pero Matlab sigue diciéndome esto: LENGTH (X) debe ser igual a la longitud de la primera dimensión no única de Y. Creo que trapz solo acepta la longitud xey. ¿Hay una forma de evitarlo? Gracias – lytheone

+0

La integración requiere que cada coordenada x coincida con una coordenada y. Es por eso que escribo 'trapz (x (10:20), y (10:20))', es decir, tomo la misma cantidad de puntos para x que para y. Sin embargo, los puntos x no necesitan ser igualmente espaciados. Si desea eliminar algunos puntos y, también debe eliminar los puntos x correspondientes. – Jonas

3

La FFT es discreta, no continua; solo debe sumar todos los valores de la bandeja. Si observa el espectro de potencia (magnitud al cuadrado), entonces los valores de bin están en W/Hz, por lo que necesitaría multiplicar cada valor (o alternativamente solo la suma), por el ancho del compartimiento en Hz para obtener energía (y de ahí la energía total en su muestra de entrada).

+4

En realidad, necesita sumar los valores de bin y multiplicarlos por el ancho del bin si no es 1. Esto es, aproximadamente, lo que hace trapz. – Jonas

+0

@Jonas: buen punto, gracias. Actualizaré mi respuesta. –

Cuestiones relacionadas