Python 中的同步压缩、小波变换和时频分析
项目描述
Python中的同步压缩
Synchrosqueezing 是一种强大的重新分配方法,它关注时频表示,并允许提取瞬时幅度和频率。友好的概述。
特征
- 连续小波变换 (CWT)、正向和反向及其同步压缩
- 短时傅里叶变换 (STFT)、正向和反向及其同步压缩
- 小波可视化和测试套件
- 广义莫尔斯小波
- 脊提取
- Python 1中最快的小波变换,超过了 MATLAB
1:随意打开问题,否则显示
安装
pip install ssqueezepy
. 或者,对于最新版本(很可能是稳定的):
pip install git+https://github.com/OverLordGoldDragon/ssqueezepy
GPU 和 CPU 加速
默认启用多线程执行(通过 禁用os.environ['SSQ_PARALLEL'] = '0'
)。GPU 需要安装CuPy >= 8.0.0
和PyTorch >= 1.8.0(通过 启用os.environ['SSQ_GPU'] = '1'
)。pyfftw
可选地支持最大 CPU FFT 速度。请参阅性能指南。
基准
代码。转换使用填充、float32
精度(float64
支持)和输出形状
(300, len(x))
,平均超过 10 次运行。pyfftw
未使用,这将进一步加速 1 线程和并行。坐在作者的 i7-7700HQ、GTX 1070 上。
len(x) -转换 |
1 线程 CPU | 平行 | 显卡 | 小波 | scipy | 图书馆 |
---|---|---|---|---|---|---|
10k-英担 | 0.126 | 0.0462 | 0.00393 | 3.58 | 0.523 | - |
10k-stft | 0.108 | 0.0385 | 0.00534 | - | 0.118 | 0.0909 |
10k-ssq_cwt | 0.372 | 0.148 | 0.00941 | - | - | - |
10k-ssq_stft | 0.282 | 0.147 | 0.0278 | - | - | - |
16万英担 | 2.99 | 1.25 | 0.0367 | 12.7 | 10.7 | - |
160k-stft | 1.66 | 0.418 | 0.0643 | - | 1.93 | 1.38 |
160k-ssq_cwt | 8.38 | 3.16 | 0.0856 | - | - | - |
160k-ssq_stft | 4.65 | 2.48 | 0.159 | - | - | - |
例子
1. 严重噪声下的信号恢复
2. 医疗:脑电图
3. 测试套件:CWT vs STFT,反射添加并行线性啁啾
4. 岭提取:三次多项式。FM+纯音;无噪音和 1.69dB SNR
5. 测试套件:GMW vs Morlet,反射添加双曲啁啾(极端时间定位)
6. 高阶GMW CWT,加反射平行线性啁啾,3.06dB SNR
内省
ssqueezepy
配备了可视化工具包,可用于探索跨尺度和配置的小波行为。(另见解释和代码)
效果如何?
简而言之,同步压缩利用时间频率表示的冗余来稀疏地定位振荡,通过施加先验。也就是说,我们假设 x
被 AM-FM 组件很好地捕获,例如基于我们对底层过程的了解。我们超越了海森堡的限制,但仅限于所有可能信号的一个子集。它也类似于注意力机制。
与本地化的分析内核卷积
计算相位变换,然后将振荡与共享速率相结合
最小的例子
import numpy as np
import matplotlib.pyplot as plt
from ssqueezepy import ssq_cwt, ssq_stft
def viz(x, Tx, Wx):
plt.imshow(np.abs(Wx), aspect='auto', cmap='turbo')
plt.show()
plt.imshow(np.abs(Tx), aspect='auto', vmin=0, vmax=.2, cmap='turbo')
plt.show()
#%%# Define signal ####################################
N = 2048
t = np.linspace(0, 10, N, endpoint=False)
xo = np.cos(2 * np.pi * 2 * (np.exp(t / 2.2) - 1))
xo += xo[::-1] # add self reflected
x = xo + np.sqrt(2) * np.random.randn(N) # add noise
plt.plot(xo); plt.show()
plt.plot(x); plt.show()
#%%# CWT + SSQ CWT ####################################
Twxo, Wxo, *_ = ssq_cwt(xo)
viz(xo, Twxo, Wxo)
Twx, Wx, *_ = ssq_cwt(x)
viz(x, Twx, Wx)
#%%# STFT + SSQ STFT ##################################
Tsxo, Sxo, *_ = ssq_stft(xo)
viz(xo, np.flipud(Tsxo), np.flipud(Sxo))
Tsx, Sx, *_ = ssq_stft(x)
viz(x, np.flipud(Tsx), np.flipud(Sx))
另请参阅山脊提取自述文件。
学习资源
DSP 基础:我建议从 3b1b 的傅里叶变换开始,然后继续DSP 指南第 7-11 章。离散傅里叶变换为使用真实数据进行信号处理奠定了基础。更深入的 DFT 系数在这里,也是3b1b。
贡献者(值得注意)
- David Bondesson : 山脊提取 (
ridge_extraction.py
;examples/
:extracting_ridges.py
,ridge_extraction/README.md
)
如何引用
简写:
John Muradeli,ssqueezepy,2020 年。GitHub 存储库,https://github.com/OverLordGoldDragon/ssqueezepy/。DOI: 10.5281/zenodo.5080508
中文提供:
@article{OverLordGoldDragon2020ssqueezepy,
title={ssqueezepy},
author={John Muradeli},
journal={GitHub. Note: https://github.com/OverLordGoldDragon/ssqueezepy/},
year={2020},
doi={10.5281/zenodo.5080508},
}
参考
ssqueezepy
最初移植自 MATLAB 的Synchrosqueezing Toolbox,由 E. Brevdo 和 G. Thakur [1] 编写。Synchrosqueezed Wavelet Transform 由 I. Daubechies 和 S. Maes [2] 引入,在 [3] 中进行了跟进,并在 [4] 中适应了 STFT。许多实现细节来自[5]。基于[6]的岭提取。
- G. Thakur,E. Brevdo,N.-S。Fučkar 和 H.-T。吴。“时变光谱分析的同步压缩算法:鲁棒性特性和新的古气候应用”,信号处理 93:1079-1094,2013。
- I. Daubechies,S. Maes。“基于听觉神经模型的连续小波变换的非线性压缩”。
- I. Daubechies、J. Lu、HT Wu。“同步压缩小波变换:经验模式分解的工具”,应用和计算谐波分析 30(2):243-261,2011。
- G. Thakur,HT Wu。“基于同步压缩的非均匀样本瞬时频率恢复”,SIAM 数学分析杂志,43(5):2078-2095,2011。
- Mallat, S. “第 3 版信号处理小波导览”。
- D. Iatsenko、PVE McClintock、A. Stefanovska。“关于从信号的时频表示中的脊中提取瞬时频率”。
执照
ssqueezepy 已获得 MIT 许可,可在LICENSE文件中找到。某些源功能可能在其他作者/许可下;请参阅NOTICE.txt。
项目详情
下载文件
下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。
源分布
内置分布
ssqueezepy -0.6.3.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 51cb9c1cf03604fe96f2249ddcd6ed149517f1fea353f9b297743bd87b6846df |
|
MD5 | 979cce866f1753e58151321ce0e29311 |
|
布莱克2-256 | 3f483ee496ee7a64a6d0030c67ce4bc9d57ed724501c5d376665b58a2fae716a |
ssqueezepy -0.6.3-py3-none-any.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | baa5db4b4113b6d345ef20a76a6e660e9a44db7c32227586a3ffcc1e16cc405b |
|
MD5 | 72374cc59b56aa104a92b252854b4883 |
|
布莱克2-256 | 5cbe7f5c95facc4844811da30726126fb5af51a4637e126ce2c5b034ebd6f2dc |