Calculer la zone sous graphe FFT dans MATLAB
Question
Actuellement, je fait une FFT d'un ensemble de données qui me donne une parcelle avec une fréquence à axe x et de l'amplitude à l'axe y. Je voudrais calculer l'aire sous le graphique pour me donner l'énergie.
Je ne suis pas sûr de savoir comment la zone d'une durée déterminée parce que je suis sans l'équation et aussi je veux seulement une certaine zone de la parcelle plutôt que la zone entière sous la parcelle. Est-il possible que je peux le faire?
La solution
Il y a plusieurs façons de faire l'intégration numérique avec Matlab. Voici un exemple:
%# 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')
Autres conseils
La FFT est discrète, non continue - il vous suffit de résumer toutes les valeurs de bin. Si vous regardez le spectre de puissance (magnitude au carré), alors les valeurs bin sont en W / Hz, vous devrez multiplier chaque valeur (ou bien simplement la somme), par la largeur du bac en Hz pour obtenir le pouvoir (et d'où l'énergie totale dans l'échantillon d'entrée).