Signal Processing Toolbox |
Power spectral density using multitaper method (MTM)
Syntax
[Pxx,w]=
pmtm(x,nw) [Pxx,w]=
pmtm(x,nw,nfft) [Pxx,f]=
pmtm(x,nw,nfft,fs) [Pxx,Pxxc,f]=
pmtm(x,nw,nfft,fs) [Pxx,Pxxc,f]=
pmtm(x,nw,nfft,fs,p) [Pxx,Pxxc,f]=
pmtm(x,e,v,nfft,fs,p) [Pxx,Pxxc,f]=
pmtm(x,dpss_params,nfft,fs,p) [...]=
pmtm(...,'method
') [...]=
pmtm(...,'range
') pmtm(...)
Description
pmtm
estimates the power spectral density (PSD) of the time series x using the multitaper method (MTM) described in [1]. This method uses linear or nonlinear combinations of modified periodograms to estimate the PSD. These periodograms are computed using a sequence of orthogonal tapers (windows in the frequency domain) specified from the discrete prolate spheroidal sequences (see dpss
).
[Pxx,w]
estimates the PSD Pxx for the input signal =
pmtm(x,nw)
x
, using 2*nw-1
discrete prolate spheroidal sequences as data tapers for the multitaper estimation method. nw
is the time-bandwidth product for the discrete prolate spheroidal sequences. If you specify nw
as the empty vector []
, a default value of 4 is used. Other typical choices are 2, 5/2, 3, or 7/2. pmtm
also returns w
, a vector of frequencies at which the PSD is estimated. Pxx
and w
have the same length. The units for frequency are rad/sample.
The power spectral density is calculated in units of power per radians per sample. Real-valued inputs produce (by default) full power one-sided (in frequency) PSDs, while complex-valued inputs produce two-sided PSDs.
In general, the length N of the FFT and the values of the input x
determine the length of Pxx
and the range of the corresponding normalized frequencies. For this syntax, the (default) length N of the FFT is the larger of 256 and the next power of 2 greater than the length of the segment. The following table indicates the length of Pxx
and the range of the corresponding normalized frequencies for this syntax.
Real/Complex Input Data |
Length of Pxx |
Range of the Corresponding Normalized Frequencies |
Real-valued |
(N/2) +1 |
[0, ] |
Complex-valued |
N |
[0, 2) |
[Pxx,w]
uses the multitaper method to estimate the PSD while specifying the length of the FFT with the integer =
pmtm(x,nw,nfft)
nfft
. If you specify nfft
as the empty vector []
, it adopts the default value for N described in the previous syntax.
The length of Pxx
and the frequency range for w
depend on nfft
and the values of the input x
. The following table indicates the length of Pxx
and the frequency range for w
for this syntax.
[Pxx,f]
uses the sampling frequency =
pmtm(x,nw,nfft,fs)
fs
specified as an integer in hertz (Hz) to compute the PSD vector (Pxx
) and the corresponding vector of frequencies (f). In this case, the units for the frequency vector f are in Hz. The spectral density produced is calculated in units of power per Hz. If you specify fs
as the empty vector []
, the sampling frequency defaults to 1 Hz.
The frequency range for f
depends on nfft
, fs
, and the values of the input x
. The length of Pxx
is the same as in the Table , PSD and Frequency Vector Characteristics above. The following table indicates the frequency range for f
for this syntax.
Real/Complex Input Data |
nfft Even/Odd |
Range of f |
Real-valued |
Even |
[0 , fs/2 ] |
Real-valued |
Odd |
[0 , fs/2) |
Complex-valued |
Even or odd |
[0, fs ) |
[Pxx,Pxxc,f]
returns =
pmtm(x,nw,nfft,fs)
Pxxc
, the 95% confidence interval for Pxx
. Confidence intervals are computed using a chi-squared approach. Pxxc
is a two-column matrix with the same number of rows as Pxx
. Pxxc(:,1)
is the lower bound of the confidence interval and Pxxc(:,2)
is the upper bound of the confidence interval.
[Pxx,Pxxc,f]
returns =
pmtm(x,nw,nfft,fs,p)
Pxxc
, the p
*100%
confidence interval for Pxx
, where p
is a scalar between 0 and 1. If you don't specify p
, or if you specify p
as the empty vector []
, the default 95% confidence interval is used.
[Pxx,Pxxc,f]
returns the PSD estimate =
pmtm(x,e,v,nfft,fs,p)
Pxx
, the confidence interval Pxxc
, and the frequency vector f
from the data tapers contained in the columns of the matrix e
, and their concentrations in the vector v
. The length of v
is the same as the number of columns in e
. You can obtain the data to supply as these arguments from the outputs of dpss
.
[Pxx,Pxxc,f]
uses the cell array =
pmtm(x,dpss_params,nfft,fs,p)
dpss_params
containing the input arguments to dpss
(listed in order, but excluding the first argument) to compute the data tapers. For example, pmtm(x,{3.5,'trace'},512,1000)
calculates the prolate spheroidal sequences for nw
= 3.5
, using nfft
= 512, and fs
= 1000, and displays the method that dpss
uses for this calculation. See dpss
for other options.
[...]
specifies the algorithm used for combining the individual spectral estimates. The string =
pmtm(...,'method
')
'
method
'
can be one of the following:
'adapt'
: Thomson's adaptive nonlinear combination (default)
'unity'
: A linear combination of the weighted periodograms with unity weights
'eigen'
: A linear combination of the weighted periodograms with eigenvalue weights
[...]
specifies the range of frequency values to include in =
pmtm(...,'range
')
f
or w
. This syntax is useful when x
is real. 'range
' can be either:
'twosided'
: Compute the two-sided PSD over the frequency range [0,fs)
. This is the default for determining the frequency range for complex-valued x
.
fs
as the empty vector, []
, the frequency range is [0,1)
.
fs
, the frequency range is [0, 2).
'onesided'
: Compute the one-sided PSD over the frequency ranges specified for real x
. This is the default for determining the frequency range for real-valued x
.
Note
You can put the string arguments ' range ' or ' method ' anywhere after the input argument nw or v . |
with no output arguments plots the PSD estimate and the confidence intervals in the current figure window. If you don't specify pmtm(...)
fs
, the 95% confidence interval is plotted. If you do specify fs
, the confidence intervals plotted depend on the value of p
.
Examples
This example analyzes a sinusoid in white noise:
randn('state',0); fs = 1000; t = 0:1/fs:0.3; x = cos(2*pi*t*200) + 0.1*randn(size(t)); [Pxx,Pxxc,f] = pmtm(x,3.5,512,fs,0.99); hpsd = dspdata.psd([Pxx Pxxc],'Fs',fs); plot(hpsd)
See Also
dpss
, pburg
, pcov
, peig
, periodogram
, pmcov
, pmusic
, pwelch
, pyulear
References
[1] Percival, D.B., and A.T. Walden, Spectral Analysis for Physical Applications: Multitaper and Conventional Univariate Techniques, Cambridge University Press, 1993.
[2] Thomson, D.J., "Spectrum estimation and harmonic analysis," Proceedings of the IEEE, Vol. 70 (1982), pp. 1055-1096.
pmcov | pmusic |
© 1994-2005 The MathWorks, Inc.