Area of a Spectrum

26 ビュー (過去 30 日間)
Lisa Justin
Lisa Justin 2012 年 8 月 1 日
What matlab command can give me the area of a spectrum. I have shock response spectrum but i need to find the area under the curve.

採用された回答

Dr. Seis
Dr. Seis 2012 年 8 月 1 日
The area under your curve should just be:
N = numel(x);
dt = 1/fs;
df = fs/N;
y = fft(x)*dt;
area_y = sum(abs(y))*df; % which is also equal to: sum(abs(fft(x)))/N
energy_y = sum(abs(y).^2)*df;
If you really want "energy", then energy_y should be equal to energy_x:
energy_x = sum(x.^2)*dt;
  4 件のコメント
Dr. Seis
Dr. Seis 2012 年 8 月 1 日
編集済み: Dr. Seis 2012 年 8 月 1 日
Yeah... in your case, you would just need:
area_y = sum(abs(y))/N;
The frequency increment ( df ) comes into play only if you scaled your FFT amplitudes ( y ) by the time increment ( dt ) - since dt*df = 1/ N. If you do not scale your FFT amplitudes inside your srs function, then you should just divide your sum by N to get the area. If you want to find the area between a frequency range, you will have to do something a little different. See below:
Example:
N = 4096;
fs = 2000;
x = randn(1,N);
df = fs/N;
Nyq = fs/2;
y = fft(x);
f = ifftshift(-Nyq : df : Nyq-df);
If your y represents both the negative and positive frequency amplitudes:
area_y_10_800 = sum(abs(y( abs(f) >= 10 & abs(f) <= 800 )))/N;
or if your y represents only the positive frequencies
area_y_10_800 = 2*sum(abs(y( f >= 10 & f <= 800 )))/N;
However, you do not want to double the amount if you are including either your 0 frequency or Nyquist frequency amplitude in the frequency range.
Lisa Justin
Lisa Justin 2012 年 8 月 2 日
Thanks.

サインインしてコメントする。

その他の回答 (1 件)

Wayne King
Wayne King 2012 年 8 月 1 日
Hi Lisa, If you have the Signal Processing Toolbox, you can use the avgpower() method of a spectrum object.
For example:
Fs = 1000;
t = 0:1/Fs:1-(1/Fs);
x = cos(2*pi*50*t)+sin(2*pi*100*t)+randn(size(t));
psdest = psd(spectrum.periodogram,x,'Fs',Fs,'NFFT',length(x));
avgpower(psdest,[25 75])
The final line above integrates under the PSD from 25 to 75 Hz.
Note you can get the fraction of the total power in the specified interval with:
avgpower(psdest,[25 75])/avgpower(psdest)
  1 件のコメント
Lisa Justin
Lisa Justin 2012 年 8 月 1 日
Thanks Wayne. But it is like this: I calculated the shock response spectrum Y and plotted between frequencies 10-500. I need the peaks and the area under the curve max(Y) gives me the peak and i tried area(Y) and i get a shaded plot again but what i really want is the value of the area of Y.

サインインしてコメントする。

カテゴリ

Help Center および File ExchangeGet Started with Signal Processing Toolbox についてさらに検索

タグ

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by