Multivariate power spectral density on a logarithmic scale can be performed by the LPSD algorithm, which is an application of Welch's averaged, modified periodogram method, cross-spectral density estimates are not evaluated at freqencies which are linear multiples of the minimum frequency resolution 1/T where T is the window lenght, but on a logarithmic scale. The algorithm takes care of calculating the frequencies at which to evaluate the spectral estimate, aiming at minimizing the uncertainty in the estimate itself, and to recalculate a suitable window length for each frequency bin.
ao/lcpsd estimates the cross-spectral density of time-series
signals, included in the input aos. Data are windowed prior to the estimation of the spectra, by multiplying
it with a spectral window object, and can be detrended by polinomial of time in order to reduce the impact
of the border discontinuities. Detrending is performed on each individual window.
Syntaxis
b = lcpsd(a1,a2,a3,...,pl)
a1, a2, a3, ... are aos containing the input time series to be evaluated. They need to be in a number N >= 2. b includes the NXN output objects. The parameter list pl includes the following parameters:
As an alternative, the user can input, as a value for the 'Win' key, a string corresponding to the name of the window. In the case of Kaiser window, it's necessary to specify the additional parameter 'psll'.
If the user doesn't specify the value of a given parameter, the default value is used. |
The function makes CPSD estimates between all input aos. Therefore, if the input argument list contains N analysis objects, the output a will contain NxN CPSD estimates. The diagonal elements will be S_ai_ai and will be equivalent to the output of lpsd(ai).
Example
Evaluation of the CPSD of two time-series represented by: a low frequency sinewave signal superimposed to white noise, and a low frequency sinewave signal at the same frequency, phase shifted and with different amplitude, superimposed to white noise.
nsecs = 1000; fs = 10; x = ao(plist('waveform','sine wave','f',0.1,'A',1,'nsecs',nsecs,'fs',fs)) + ... ao(plist('waveform','noise','type','normal','nsecs',nsecs,'fs',fs)); x.setYunits('m'); y = ao(plist('waveform','sine wave','f',0.1,'A',2,'nsecs',nsecs,'fs',fs,'phi',90)) + ... 4*ao(plist('waveform','noise','type','normal','nsecs',nsecs,'fs',fs)); y.setYunits('V'); z = lcpsd(x,y,plist('nfft',1000)); iplot(z(1,1)); iplot(z(1,2)); iplot(z(2,2));