>       Could anyone tell me how the power spectrum is calculated in the 
>function specx_anal€¯?
>
---
NCL usees FFTPACK to compute fourier info. The documentation
for the forward fft is at:
     ftp://ftp.ucar.edu/dsl/lib/fftpack/ezfftf.f
---
[1] detrend the series [optional]
[2] taper the series   [optional]
[3] calculate the variance of the detrended/tapered series
[4] forward fft on series
[5] square the coef [periodogram  ~2 dof]  
[6] smooth the periodogram estimates 
[7] normalize [6] so that the area under the curve is
    equal to the variance calculated in [3]
    
        area_under_curve =  SUM { S(f)*df*frac }
        
    where frac=1.0 except at the beginning
    and end values where frac=0.5
====================
>       If my understanding based on the manual is right, the power spectrum 
>should be return to the array 
>       My concern is if  spcx=|F(w)|  or  spcx= |F(w)|^2.  or  
>spcx=(|F(w)|^2) / (N^2) ? Here F(w) is the Fourier Transform of x(t), | | 
means absolute value, N is the length of the F(w).
>
Neither ... The returned apc estimates have been normailized
            to get the area under the curve.
 
FYI: The documentation for the forward fft is at:
     ftp://ftp.ucar.edu/dsl/lib/fftpack/ezfftf.f
---
You could do the above in NCL in a step-by-step process:
========================================================
In the last few days, I have been twice asked how 
NCL's specx_anal "works". It is pretty basic and
for the most part can be well simulated by use of several
of NCL's built-in functions.
   [a] input a series x[*] with no missing values.
   
   [b] remove the mean an, optionally, detrend the series.
   
         http://ngwww.ucar.edu/ngdoc/ng/ref/ncl/functions/dtrend.html
       
   [c] taper the result of [b]
   
         http://ngwww.ucar.edu/ngdoc/ng/ref/ncl/functions/taper.html
         
   [d] Calculate the variance of [c]
       
   [d] perform an FFT [ezfftf]  on [c]
   
         http://ngwww.ucar.edu/ngdoc/ng/ref/ncl/functions/fft.html
       
   [e] square the real (rc) and imaginary (ic) coef from [d]. This gives
       the periodogram. 
       
         periodogram = rc^2 + ic^2    ; array syntax
         
       The periodgram has a bandwidth of 1/N (=df [delta_frequency]) 
       but no statistical significance.
         
   [f] perform a running average over the periodogram values using
       either runave or wrunave. This creates a spectrum.
       
         http://ngwww.ucar.edu/ngdoc/ng/ref/ncl/functions/runave.html
         http://ngwww.ucar.edu/ngdoc/ng/ref/ncl/functions/wrunave.html
         
       A runave of say 5 pts creates a bandwidth of 5*df [approx]
       and approx 10 degrees of freedom.
       
   [g] normalize the area under the curve [f] to the input variance.
       Remember the first and last bandwidths are only 0.5*df.   
       
The numbers will not match 'spec_anal' exactly but should be very close.
       
++++++++++++++++++++++++++++++++++++++++++++++++++
good luck
D
_______________________________________________
ncl-talk mailing list
ncl-talk@ucar.edu
http://mailman.ucar.edu/mailman/listinfo/ncl-talk
This archive was generated by hypermail 2b29 : Sun May 08 2005 - 22:05:31 MDT