Skip to content
nerdull edited this page May 16, 2018 · 3 revisions

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.

Table of Contents

Class Structure

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 of N and W, where W 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

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 to vecs and vals, respectively.

gen_spectra

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 than N. If not specified, the Fourier transformation sequence will be zero-padded to the next power of 2.
  • returns:
    • spectra: numpy array
      Depending on K, it is a 1D or 2D array of the transformed spectra.

plot_sequences

plot_sequences():

Plot the DPSSs in the time domain.

  • arguments:
    • None
  • returns:
    • None

plot_spectra

plot_spectra(spectra):

Plot the DPSSs in the frequency domain.

  • arguments:
    • spectra: numpy array
      Fourier transforms of the sequences.
  • returns:
    • None

References

  1. Slepian, D. "Prolate Spheroidal Wave Functions, Fourier Analysis, and Uncertainty——V: The Discrete Case". Bell Syst. Tech. J. 57, 1371 (1978).
  2. Thomson, D. J. "Spectrum Estimation and Harmonic Analysis". Proc. IEEE 70, 1055 (1982).