Skip to main content

LSPOpt

Build and Test PyPI version Code style: black

This module is a Python implementation of the multitaper window method described in [1] for estimating Wigner spectra for certain locally stationary processes.

Abstract from [1]:

This paper investigates the time-discrete multitapers that give a mean square error optimal Wigner spectrum estimate for a class of locally stationary processes (LSPs). The accuracy in the estimation of the time-variable Wigner spectrum of the LSP is evaluated and compared with other frequently used methods. The optimal multitapers are also approximated by Hermite functions, which is computationally more efficient, and the errors introduced by this approximation are studied. Additionally, the number of windows included in a multitaper spectrum estimate is often crucial and an investigation of the error caused by limiting this number is made. Finally, the same optimal set of weights can be stored and utilized for different window lengths. As a result, the optimal multitapers are shown to be well approximated by Hermite functions, and a limited number of windows can be used for a mean square error optimal spectrogram estimate.

Installation

Install via pip:

pip install lspopt

If you prefer to use conda, see instructions in this repo.

Testing

Test with pytest:

pytest tests/

See test badge at the top of this README for link to test coverage and reports.

Usage

To generate the taper windows only, use the lspopt method:

from lspopt import lspopt
H, w = lspopt(n=256, c_parameter=20.0)

There is also a convenience method for using the SciPy spectrogram method with the lspopt multitaper windows:

from lspopt import spectrogram_lspopt
f, t, Sxx = spectrogram_lspopt(x, fs, c_parameter=20.0)

This can then be plotted with e.g. matplotlib.

Example

One can generate a chirp process realisation and run spectrogram methods on this.

import numpy as np
from scipy.signal import chirp, spectrogram
import matplotlib.pyplot as plt

from lspopt.lsp import spectrogram_lspopt

fs = 10000
N = 100000
amp = 2 * np.sqrt(2)
noise_power = 0.001 * fs / 2
time = np.arange(N) / fs
freq = np.linspace(1000, 2000, N)
x = amp * chirp(time, 1000, 2.0, 6000, method='quadratic') + \
    np.random.normal(scale=np.sqrt(noise_power), size=time.shape)

f, t, Sxx = spectrogram(x, fs)

ax = plt.subplot(211)
ax.pcolormesh(t, f, Sxx)
ax.set_ylabel('Frequency [Hz]')
ax.set_xlabel('Time [sec]')

f, t, Sxx = spectrogram_lspopt(x, fs, c_parameter=20.0)

ax = plt.subplot(212)
ax.pcolormesh(t, f, Sxx)
ax.set_ylabel('Frequency [Hz]')
ax.set_xlabel('Time [sec]')

plt.tight_layout()
plt.show()

Spectrogram plot

Top: Using SciPy's spectrogram method. Bottom: Using LSPOpt's spectrogram solution.

References

[1] Hansson-Sandsten, M. (2011). Optimal multitaper Wigner spectrum estimation of a class of locally stationary processes using Hermite functions. EURASIP Journal on Advances in Signal Processing, 2011, 10.

Changelog

All notable changes to this project will be documented in this file.

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

[1.4.0] - 2025-01-07

Added

  • Support for Python 3.12
  • Support for pip>=25
  • Support for numpy>=2
  • Support for Windows and macOS
  • Converted setup.py to setup.cfg

Removed

  • Support for Python 3.7 and 3.8
  • Unused imports

1.3.0 - 2023-01-24

Changed

  • Modified test matrix in CI

Removed

  • Support for Python 2.7 and 3.6.
  • Dependency on six.

1.2.0 - 2022-06-08

Added

  • New plot file

Fixed

  • Source distribution was broken on PyPI. Modified MANIFEST.in to correct that (#5 and #6)
  • Url to missing plot file
  • Fixed some incorrect int declarations using 1e3 notation

Removed

  • Removed Pipfile

1.1.1 - 2020-09-28

Added

  • Added CHANGELOG.md

Changed

  • Change CI from Azure Devops to Github Actions

1.1.0 - 2019-06-19

Added

  • First PyPI-released version

[1.0.0] - 2016-08-22

Added

  • Regarded as a feature-complete, stable library.

Metadata

Release files for lspopt 1.4.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for lspopt 1.4.0
File Size Uploaded
lspopt-1.4.0.tar.gz 39.5 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for lspopt 1.4.0
File Interpreter ABI Platform
lspopt-1.4.0-py3-none-any.whl Python 3 none any Details

Total release size: 74.7 kB

Release files / lspopt-1.4.0.tar.gz

Download URL lspopt-1.4.0.tar.gz
Size 39.5 kB
Tags Source
SHA-256 checksum
How to use checksums
6ea32d90cc2e6536e7c6ea559889e529bdae6d0d3795956432c9ad7d0844131e
BLAKE2b-256 checksum
How to use checksums
870a3de9f71251d6d62ab29265fb68b270bfdfe629584fbb8db7d025c429a532
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.0.1 CPython/3.12.8

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jan 7, 2025.

Transparency log

Release files / lspopt-1.4.0-py3-none-any.whl

Download URL lspopt-1.4.0-py3-none-any.whl
Size 35.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
2c1bc134126a5168248e444760468fa75df70e59d8de98184571ea150f4b494d
BLAKE2b-256 checksum
How to use checksums
39913a1959aa91eb7d50f2aaf4d8a1a49cd4a3db7315be7bdec742d16eba2810
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.0.1 CPython/3.12.8

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jan 7, 2025.

Transparency log

Release history Release notifications | RSS feed

This release

1.4.0 This release

2 release files

1.3.0

2 release files

1.2.0

2 release files

1.1.1

2 release files

1.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page