用于估计某些局部静止过程的 Wigner 谱的多锥窗方法的 Python 实现
项目描述
LSPOpt
该模块是[1]中描述的多锥窗口方法的 Python 实现,用于估计某些局部静止过程的 Wigner 谱。
[1]的摘要:
本文研究了为一类局部平稳过程 (LSP) 提供均方误差最佳 Wigner 谱估计的时间离散多锥体。评估了 LSP 时变 Wigner 谱估计的准确性,并与其他常用方法进行了比较。最优多锥度也用 Hermite 函数逼近,计算效率更高,并研究了这种逼近引入的误差。此外,多锥度频谱估计中包含的窗口数量通常很重要,并且需要对限制该数量所导致的误差进行调查。最后,可以存储相同的最佳权重集并将其用于不同的窗口长度。结果表明,最优多锥体可以很好地近似于 Hermite 函数,
安装
通过 pip 安装:
pip install lspopt
测试
测试pytest:
pytest tests/
每次提交到 GitHub 时都会运行测试,结果以及测试覆盖率可以在Azure Pipelines进行研究。
用法
要仅生成锥形窗口,请使用以下lspopt方法:
from lspopt import lspopt
H, w = lspopt(N=256, c_parameter=20.0)
还有一种方便的方法可以将SciPy 频谱图方法
与lspopt多锥窗口一起使用:
from lspopt import spectrogram_lspopt
f, t, Sxx = spectrogram_lspopt(x, fs, c_parameter=20.0)
然后可以使用例如matplotlib进行绘制。
例子
可以生成啁啾 过程实现并在其上运行频谱图方法。
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()
顶部:使用 SciPy 的频谱图方法。底部:使用 LSPOpt 的频谱图解决方案。
参考
[1] Hansson-Sandsten, M. (2011)。使用 Hermite 函数对一类局部平稳过程进行最优多锥 Wigner 谱估计。EURASIP 信号处理进展杂志,2011,10。
变更日志
此项目的所有显着更改都将记录在此文件中。
格式基于Keep a Changelog,并且该项目遵循Semantic Versioning。
1.2.0 - 2022-06-08
添加
- 新的绘图文件
固定的
- PyPI 上的源分布被破坏。修改
MANIFEST.in以纠正该问题(#5 和 #6) - 缺少绘图文件的 URL
1e3使用符号修复了一些不正确的 int 声明
已移除
- 删除了 Pipfile
1.1.1 - 2020-09-28
添加
- 添加
CHANGELOG.md
改变了
- 将 CI 从 Azure Devops 更改为 Github Actions
1.1.0 - 2019-06-19
添加
- 第一个 PyPI 发布的版本
[1.0.0] - 2016-08-22
添加
- 被视为功能完整、稳定的库。
项目详情
下载文件
下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。