-
Notifications
You must be signed in to change notification settings - Fork 2
DPSS
The Discrete Prolate Spheroidal Sequence (DPSS) was proposed by D. Slepian [1], when he was trying to solve the energy concentration problem at the Bell Labs. The problem states: among all the temporally constrained signals, find the one that maximizes the energy within the frequency band [-W, W] with respect to the full spectrum. Slepian had realized that the problem is essentially equivalent to the eigen-decomposition of a tri-diagonal matrix, whose non-zero elements are uniquely defined by the half bandwidth W. The eigenvectors are just the sought DPSSs, and the respective eigenvalues are the energy concentration ratios. Those sequences were later considered to be extremely useful as special windows for the development of the multitaper method by Slepian's colleague, D. J. Thomson [2]. More words on the multitaper will be addressed on a separate page: The Working Horse.
In the script dpss.py
, the DPSS-related computations, including the generation of the sequences and the Fourier transformation of them, are encapsulated in the class DPSS
.
DPSS(N=1000, NW=3, K=4, eigenvalue=False)
Instantiate the class.
-
arguments:
-
N
: int, default 1000
Length of the discrete sequences. -
NW
: float, default 3
Product ofN
andW
, whereW
is the half bandwidth. -
K
: int, default 4
Number of the sequences, ordered descendently by their corresponding eigenvalues. -
eigenvalue
: bool, default False
If True, also generate the corresponding eigenvalues.
-
gen_sequences(eigenvalue)
Generate the discrete prolate spheroidal sequences. The polarities of the sequences follow the Slepian convention.
-
arguments:
-
eigenvalue
: bool
If True, also generate the corresponding eigenvalues.
-
-
returns:
-
None
The generated sequences and eigenvalues are stored as class attributes, which can be retrieved by referring tovecs
andvals
, respectively.
-
gen_spectra(n_point=None):
Fourier transform the sequences into the frequency domain.
-
arguments:
-
n_point
: int, default None
Length of the frequency spectra. It should be no less thanN
. If not specified, the Fourier transformation sequence will be zero-padded to the next power of 2.
-
-
returns:
-
spectra
: numpy array
Depending onK
, it is a 1D or 2D array of the transformed spectra.
-
plot_sequences():
Plot the DPSSs in the time domain.
-
arguments:
None
-
returns:
None
plot_spectra(spectra):
Plot the DPSSs in the frequency domain.
-
arguments:
-
spectra
: numpy array
Fourier transforms of the sequences.
-
-
returns:
None
- Slepian, D. "Prolate Spheroidal Wave Functions, Fourier Analysis, and Uncertainty——V: The Discrete Case". Bell Syst. Tech. J. 57, 1371 (1978).
- Thomson, D. J. "Spectrum Estimation and Harmonic Analysis". Proc. IEEE 70, 1055 (1982).