title: How do I obtain Energy spectrum of a signal after FFT in Matlab?
body: <p>EDIT:</p>
  
  <hr>
  
  <p>I stumbled on this explanation to obtain the energy spectrum from an IEEE paper(Open Circuit Fault Diagnosis in 3 phase uncontrolled rectifiers, Rahiminejad, Diduch, Stevenson, Chang). 
  "A recorded sample of the signal containing a number of samples equivalent to 4T is captured and its FFT is determined using an FFT size equal to the record length (where T is the fundamental period). 
  Assuming the FFT size is matched to 4 periods of a periodic waveform, every 4th FFT bin will coincide with a harmonic frequency, in particular the center of FFT bin <em>4k+1</em> will coincide with the <em>kth</em> harmonic frequency.</p>
  
  <p>The <strong>energy of the <em>kth harmonic</em> is calculated</strong> as the <strong>sum of the squared magnitudes of the 5 consecutive FFT values</strong> centred at bin <em>4k+1</em>. The additional FFT values are included in the harmonic energy calculation so as to reduce the sensitivity of the calculated energy to an error in the frequency estimate which oculd result in the <em>kth harmonic</em> peak shifting away from bin <em>4k+1</em>."</p>
  
  <p>I do not fully understand the passage above. In my limited understanding, the <strong>bold line</strong> 
  refers to the sum of the squared magnitudes of the output of function fft(), i.e. the complex fourier series coefficients. </p>
  
  <p>Can someone please show some light into obtaining the energy spectrum ?
  @fpe : I am not sure if ESD performs the same as energy spectrum. BTW, thanks alot for your answer:)</p>
  
  <hr>
  
  <p>I am trying to plot the energy spectrum of a signal to look at the for example Normalised energy contained first three harmonics, energy ratio of fundamental to 2nd harmonics etc....</p>
  
  <p>Here I have managed to get the Hanning window FFT amplitude-Hz and power-Hz. But, I have no idea how to get energy-Hz for each frequency components.</p>
  
  <p>Any help is much appreciated !</p>
  
  <pre><code>function [f,Xall_Wnd]=fftplotExxx(time,X_input)
  Fs = 20000; % Sampling frequency
  x = X_input; 
  
  % Fast Fourier Transform 
      L = length (X_input); % Length of FFT
      nfft = 2^nextpow2(L); % Next power of 2 from length of signal
  
  %wave = wave.*hamming(length(wave));
  x_HammingWnd = x.*hamming(L);
  
  % Take fft, padding with zeros so that length(X) 
  %is equal to nfft 
  
  Xall_Wnd = fft(x_HammingWnd, nfft)/L;  %hamming window fft
  
  % FFT is symmetric, throw away second half
  
  % Take the magnitude of fft of x 
  mx_Wnd = 2*abs(Xall_Wnd(1:nfft/2+1)); 
  
  % To get Power of x(t) by sqr of magnitude
  m2x_Wnd = mx_Wnd.^2; 
  
  % I am Not sure how to get energy spectrum
  for i=1:L:nfft-L
  E(i) = sum(Xall_Wnd(1:nfft/2+1).^2);
  end
  
  % Frequency vector
      f = Fs/2*linspace(0,1,nfft/2+1);
  
  % Generate the plot, title and labels. 
  subplot(2,2,1)
  plot(time,X_input);
  title('Time Domain')
  xlabel('Time(s)')
  
  subplot(2,2,2)
  plot(f,m2x_Wnd); 
  title('Power Spectrum of x(t)'); 
  xlabel('Frequency (Hz)'); 
  ylabel('Normalised Power of fft');
  
  subplot(2,2,3)
  plot(f,mx_Wnd); 
  title('Hamming Window_ Spectrum of x(t)'); 
  xlabel('Frequency (Hz)'); 
  ylabel('Normalised Magunitude of fft');
  
  subplot(2,2,4)
  plot(f,E); 
  title('Energy Spectrum of x(t)'); 
  xlabel('Frequency (Hz)'); 
  ylabel('Energy');
  end 
  </code></pre>