MATLAB Answers


calculating energy from FFT in different frequency bins

Asked by Athira Surendran on 14 Jun 2017
Latest activity Answered by Michael Dombrowski on 29 Jun 2017
Hi all,
I've generated FFTs for a set of signals in time domain at different deflections. I want to find in which frequency range the signal is more sensitive. Can someone help me do the following since I'm new to programming and signal processing??
Here's my problem:
  • So I want to select a frequency range in which all the dominant peaks are coming .
( In this case, by looking at the figure, the frequency range to be considered would be somewhere between 35000Hz-125000Hz (Is there a way to automatically find this ?) Also I don't know where to fix the threshold.)
  • Divide it into a number of bins (not more than 10) in such a way that each peak should fall completely within one of these bins. (bins need not be of equal length and should be same for all signals)
  • Then, calculate the energy for each bin in each signal.
  • Then plot curves for each bin showing the variation of energy in each bin with respect to deflection. (ie. deflection on x-axis and area under curve on y axis.)
Following is the code I'm using for getting FFT (also attached the set of time domain signals and deflection data):
[m, n]= size(amp); % amp- amplitude data
t=linspace(0,5000,n); % time
for i=1:m
L = n;
NFFT = 2^nextpow2(L);
UT = fft(amp(i,:),NFFT)/L;
f = Fs/2*linspace(0,1,NFFT/2);
ft(i,:) = zeros(1,NFFT/2);
ft(i,:) = UT(1:NFFT/2);
mag(i,:) = 2*abs(ft(i,:));
for i=1:m
hold on;
xlabel('Frequency (Hz)','fontsize',12)
title('Frequency Spectrum of recieved signals','fontsize',14)
legend(arrayfun(@(deflection) ['Deflection = ',num2str(deflection),'\mum'],deflection,'Uni',0));
set(gcf, 'Color', 'w');

  1 Comment

Sign in to comment.

1 Answer

Answer by Michael Dombrowski on 29 Jun 2017

I suggest you have a look at the findpeaks function and the named values NPeaks, MinPeakHeight, Threshold, and MinPeakDistance.


Sign in to comment.