FT_FREQANALYSIS performs frequency and time-frequency analysis
 on time series data over multiple trials

 Use as
   [freq] = ft_freqanalysis(cfg, data)

 The input data should be organised in a structure as obtained from
 the FT_PREPROCESSING or the FT_MVARANALYSIS function. The configuration
 depends on the type of computation that you want to perform.

 The configuration should contain:
   cfg.method      = different methods of calculating the spectra
                     'mtmfft', analyses an entire spectrum for the entire data
                       length, implements multitaper frequency transformation.
                     'mtmconvol', implements multitaper time-frequency
                       transformation based on multiplication in the
                       frequency domain.
                     'wavelet', implements wavelet time frequency
                       transformation (using Morlet wavelets) based on
                       multiplication in the frequency domain.
                     'tfr', implements wavelet time frequency
                       transformation (using Morlet wavelets) based on
                       convolution in the time domain.
                     'mvar', does a fourier transform on the coefficients
                       of an estimated multivariate autoregressive model,
                       obtained with FT_MVARANALYSIS. In this case, the
                       output will contain a spectral transfer matrix,
                       the cross-spectral density matrix, and the
                       covariance matrix of the innovatio noise.
   cfg.output      = 'pow'       return the power-spectra
                     'powandcsd' return the power and the cross-spectra
                     'fourier'   return the complex Fourier-spectra
   cfg.channel     = Nx1 cell-array with selection of channels (default = 'all'),
                       see FT_CHANNELSELECTION for details
   cfg.channelcmb  = Mx2 cell-array with selection of channel pairs (default = {'all' 'all'}),
                       see FT_CHANNELCOMBINATION for details
   cfg.trials      = 'all' or a selection given as a 1xN vector (default = 'all')
   cfg.keeptrials  = 'yes' or 'no', return individual trials or average (default = 'no')
   cfg.keeptapers  = 'yes' or 'no', return individual tapers or average (default = 'no')
   cfg.pad         = number, 'nextpow2', or 'maxperlen' (default), length
                      in seconds to which the data can be padded out. The
                      padding will determine your spectral resolution. If you
                      want to compare spectra from data pieces of different
                      lengths, you should use the same cfg.pad for both, in
                      order to spectrally interpolate them to the same
                      spectral resolution.  The new option 'nextpow2' rounds
                      the maximum trial length up to the next power of 2.  By
                      using that amount of padding, the FFT can be computed
                      more efficiently in case 'maxperlen' has a large prime
                      factor sum.
   cfg.padtype     = string, type of padding (default 'zero', see
                      ft_preproc_padding)
   cfg.polyremoval = number (default = 0), specifying the order of the
                      polynome which is fitted and subtracted from the time
                      domain data prior to the spectral analysis. For
                      example, a value of 1 corresponds to a linear trend.
                      The default is a mean subtraction, thus a value of 0.
                      If no removal is requested, specify -1.
                      see FT_PREPROC_POLYREMOVAL for details


 METHOD SPECIFIC OPTIONS AND DESCRIPTIONS

 MTMFFT performs frequency analysis on any time series trial data using a
 conventional single taper (e.g. Hanning) or using the multiple tapers based on
 discrete prolate spheroidal sequences (DPSS), also known as the Slepian
 sequence.
   cfg.taper      = 'dpss', 'hanning' or many others, see WINDOW (default = 'dpss')
                     For cfg.output='powandcsd', you should specify the channel combinations
                     between which to compute the cross-spectra as cfg.channelcmb. Otherwise
                     you should specify only the channels in cfg.channel.
   cfg.foilim     = [begin end], frequency band of interest
       OR
   cfg.foi        = vector 1 x numfoi, frequencies of interest
   cfg.tapsmofrq  = number, the amount of spectral smoothing through
                    multi-tapering. Note that 4 Hz smoothing means
                    plus-minus 4 Hz, i.e. a 8 Hz smoothing box.

 MTMCONVOL performs time-frequency analysis on any time series trial data using
 the 'multitaper method' (MTM) based on Slepian sequences as tapers.
 Alternatively, you can use conventional tapers (e.g. Hanning).
   cfg.tapsmofrq  = vector 1 x numfoi, the amount of spectral smoothing
                     through multi-tapering. Note that 4 Hz smoothing means
                     plus-minus 4 Hz, i.e. a 8 Hz smoothing box.
    cfg.foi        = vector 1 x numfoi, frequencies of interest
    cfg.taper      = 'dpss', 'hanning' or many others, see WINDOW (default = 'dpss')
                      For cfg.output='powandcsd', you should specify the channel combinations
                      between which to compute the cross-spectra as cfg.channelcmb. Otherwise
                      you should specify only the channels in cfg.channel.
    cfg.t_ftimwin  = vector 1 x numfoi, length of time window (in seconds)
    cfg.toi        = vector 1 x numtoi, the times on which the analysis
                     windows should be centered (in seconds), or a string
                     such as '50%' or 'all' (default).  Both string options
                     use all timepoints available in the data, but 'all'
                     centers a spectral estimate on each sample, whereas
                     the percentage specifies the degree of overlap between
                     the shortest time windows from cfg.t_ftimwin.

 WAVELET performs time-frequency analysis on any time series trial data using the
 'wavelet method' based on Morlet wavelets. Using mulitplication in the frequency
 domain instead of convolution in the time domain.
   cfg.foi        = vector 1 x numfoi, frequencies of interest
       OR
   cfg.foilim     = [begin end], frequency band of interest
   cfg.toi        = vector 1 x numtoi, the times on which the analysis
                    windows should be centered (in seconds)
   cfg.width      = 'width', or number of cycles, of the wavelet (default = 7)
   cfg.gwidth     = determines the length of the used wavelets in standard
                    deviations of the implicit Gaussian kernel and should
                    be choosen >= 3; (default = 3)

 The standard deviation in the frequency domain (sf) at frequency f0 is
 defined as: sf = f0/width
 The standard deviation in the temporal domain (st) at frequency f0 is
 defined as: st = 1/(2*pi*sf)


 TFR performs time-frequency analysis on any time series trial data using the
 'wavelet method' based on Morlet wavelets. Using convolution in the time domain
 instead of multiplication in the frequency domain.
   cfg.foi        = vector 1 x numfoi, frequencies of interest
       OR
   cfg.foilim     = [begin end], frequency band of interest
   cfg.width      = 'width', or number of cycles, of the wavelet (default = 7)
   cfg.gwidth     = determines the length of the used wavelets in standard
                    deviations of the implicit Gaussian kernel and should
                    be choosen >= 3; (default = 3)


 To facilitate data-handling and distributed computing you can use
   cfg.inputfile   =  ...
   cfg.outputfile  =  ...
 If you specify one of these (or both) the input data will be read from a
 *.mat file on disk and/or the output data will be written to a *.mat
 file. These mat files should contain only a single variable,
 corresponding with the input/output structure.

 See also FT_FREQSTATISTICS, FT_FREQDESCRIPTIVES, FT_CONNECTIVITYANALYSIS