lspopt 1.3.0

Creator: bigcodingguy24

Last updated:

Add to Cart

Description:

lspopt 1.3.0

LSPOpt



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()


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.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.

License

For personal and professional use. You cannot resell or redistribute these repositories in their original state.

Customer Reviews

There are no reviews.