[ncl-talk] calculate the ensemble mean power spectrum

Dennis Shea shea at ucar.edu
Tue Mar 3 20:29:02 MST 2020


This type of question was recently answered on ncl-talk.

To avoid repeated emails, I extracted the pertinent section.
PLEASE look-at and think-about what is being done!
Add your own print statements to examine any issues.

This has not been tested on your data. There may be errors.
It is your responsibility to fix them.
+++++++++++++++++++++++++++++++++++++++++++++++++
hist_anom1=hist_anom(:,:,{-7},{160})     ;(ntim, ens) ; (240,100)
=====
  nLen = ntim/2
  spec  = new ( nLen, typeof(hist_anom1))
  spec  = 0.0
  z1    = 0.0
  xtsVar= 0.0

  iopt  = 0
  jave  = 1                           ; periodigram for each segment
  pct   = 0.1
                                           ; loop over  every ensemble
member
  do ns=0,nens-1                 ; spectra for each ensemble member
     sdof   = specx_anal(hist_anom1(:.ns),iopt,jave,pct)
     spec   = spec + sdof at spcx      ; sum spectra
     xtsVar = xtsVar + sdof at xvari   ; sum ensemble member variances
                                                      ; sum z-traansformed
lag-1 correlations
     z1     = z1   + 0.5*log((1+sdof at xlag1)/(1-sdof at xlag1)) ; Fischer
z-transform
  end do

  spec  = spec/nens                      ; average spectra ==> ensemble
mean spectra
  z1    = z1/nens                           ; ensemble mean z=transformed
lag1
  xvari = xtsVar/nens                    ; mean variance of ensemble members

                                                    ; create a new variable
  ss           = (/ sdof /)
  ss at dof   = 2*nens                       ; # degrees freedom
  ss at bw    = sdof at bw
  ss at spcx  = spec
  ss at xvari = xvari
  ss at frq     = sdof at frq
  ss at xlag1 = (exp(2*z1)-1)/(exp(2*z1)+1)  ; match specx_anal

  printVarSummary(ss)

;************************************************
; plotting parameters
;************************************************
  pltDir  = "./"
  pltName = "ens_mean"
  pltPath = pltDir+pltName
  pltType = "png"

  wks  = gsn_open_wks(pltType,pltPath)

  r  = True                                                  ; plot mods
desired
  r at gsnMaximize   = True                        ; blow up plot
  r at tiMainString  = "???"                          ; title
  r at tiXAxisString = "Frequency (cycles/day)"    ; xaxis
  r at tiYAxisString = "Variance"                  ; yaxis
  splt = specx_ci(ss, 0.05, 0.95)                ; calc confidence interval
  r at xyLineThicknesses   = (/2.,1.,1.,1./)   ; Define line thicknesses
  r at xyDashPatterns      = (/0,0,1,1/)          ; Dash patterns
  plot = gsn_csm_xy(wks,ss at frq, splt,r)



On Tue, Mar 3, 2020 at 7:08 AM Sri.durgesh Nandini-Weiss via ncl-talk <
ncl-talk at ucar.edu> wrote:

> Dear ncl users,
>
> I am trying to perform power spectral analysis of a time series of
> ensemble data (time*ens==>20years*100ensemble to compute over the year
> and each ensemble member and than calculate the ensemble mean of the
> spectra.
>
> The best way would be to use specx_anal() and write it as a loop but
> this is where i am failing.
>
> I would later on like to know how to add the Markov red noise and the
> upper and lower confidence levels?
>
> would someone advice me on my script below?
>
>
> begin
>
>     f     = addfile ("anom_hist_zo_slr.nc", "r")
>     hist_anom    = f->hist_anom
>     printVarSummary(hist_anom)
>
>     f1     = addfile ("anom_rcp45_zo_slr.nc", "r")
>     rcp45_anom   = f1->rcp45_anom
>     printVarSummary(rcp45_anom)
>
>     dimx = dimsizes(hist_anom)
>     ntim = dimx(0)           ; 240
>     nens = dimx(1)           ; 100
>     nlat = dimx(2)           ; 45
>     nlon = dimx(3)           ; 90
>     lat1=nlat
>     lon1=nlon
>
>     nmos = 12
>     nyrs   = ntim/nmos       ; 20
>     printVarSummary(nyrs)
>
>
> ;==================================================================
> ; print ("Data read in - start calculations")
> ; Region domain lat and lon, ensemble average
> ;==================================================================
>
>    hist_anom1=hist_anom(:,:,{-7},{160}) ;(ntim, ens)
>    printVarSummary(hist_anom1)
>    aveX=dim_avg_n_Wrap(hist_anom1,(/1/))
>    printVarSummary(aveX)     ; [time]
>
>    rcp45_anom1=rcp45_anom(:,:,{-7},{160})                ;(ntim, ens)
>    printVarSummary(rcp45_anom1)
>    aveY=dim_avg_n_Wrap(rcp45_anom1,(/1/))
>    printVarSummary(aveY)      ; [time]
>
>
>    d   = 0                      ; detrending opt: 0=>remove mean
> 1=>remove mean + detrend
>    sm  = 7                    ; smooth periodogram:: should be at least
> 3 and odd
>                                     ; Average 7 periodogram estimates
> using modified Daniell
>    pct = 0.10                 ; percent taper: (0.0 <= pct <= 1.0) 0.10
> common.
>
> ;==================================================================
>    ;i can either use ndtooned and carry out specx_anal on this or make a
> loop.
>
>    aveX = ndtooned(hist_anom1)
>    printVarSummary(aveX)
>
>    aveY = ndtooned(rcp45_anom1)
>    printVarSummary(aveY)
>
>    spec = specx_anal(aveX,d,sm,pct)
>    printVarSummary(spec)
>
>    spec1 = specx_anal(aveY,d,sm,pct)
>    printVarSummary(spec1)
>
>
> Thanx
>
> Sri
>
>
> --
> Dr. Sri Nandini-Weiß
> Research Scientist
>
> Universität Hamburg
> Center for Earth System Research and Sustainability (CEN)
> Cluster of Excellence 'Climate, Climatic Change, and Society' (CLICCS)
>
> Bundesstrasse 53, 20146 Hamburg
> Tel: +49 (0) 40 42838 7472
>
> _______________________________________________
> ncl-talk mailing list
> ncl-talk at ucar.edu
> List instructions, subscriber options, unsubscribe:
> http://mailman.ucar.edu/mailman/listinfo/ncl-talk
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.ucar.edu/pipermail/ncl-talk/attachments/20200303/4124ef42/attachment.html>


More information about the ncl-talk mailing list