一种简单的谱线探测器
sslf的Python项目详细描述
sslf被设计成一个非常简单、有效和有用的一维数据谱线探测器。它利用了scipy的连续小波变换,这是一种找到甚至是弱谱线的有效方法。
因为谱线有很多定义,所以这个包不可能在所有情况下都能工作。在这里,我为高斯剖面谱线设计了sslf我的工作很大一部分集中在恢复噪声中的微弱信号上,所以sslf的目标是识别线、标记它们,并减去它们周围的非零带通
用法
对于一维谱(spectral_data)和一系列要测试的标度(例如1到20),可以在以下条件下找到具有统计意义的谱峰:
import numpy as np from sslf.sslf import Spectrum s = Spectrum(spectral_data) s.find_cwt_peaks(scales=np.arange(1, 20), snr=6.5) s.subtract_bandpass()
平坦谱包含在s.modified中,峰值位于s.channel_peaks。与峰值相关的其他参数是s.peak_snrs、s.vel_peaks和s.channel_edges。
请注意,指定给find_cwt_peaks的snr参数实际上指的是小波域中的信噪比,而不是输入信号域;因此,如果您希望所有信号都高于5西格玛,则需要做更多的工作来确定频谱的噪声rms是什么以及它如何映射到小波rms。
还要注意channel_edges可能非常不准确;默认情况下,此变量由找到谱线的小波尺度填充。小波不需要很好的匹配;它只需要有足够的意义,就可以被sslf提取。Spectrum对象有一个可选的refine_line_widths方法,该方法(希望)可以更好地查找所有检测到的谱线的通道范围。有关详细信息,请阅读sslf函数的文档。
find_cwt_peaks可以选择将小波用于小波变换(默认为ricker小波)。subtract_bandpass有点难以解释;更复杂的用法示例可以在notebooks目录中找到。sslf用法的一个相当复杂的例子是here。
贡献和建议
我创建这个软件是因为我在社区里找不到任何功能类似的东西。因此,我欢迎贡献,使这个软件更一般灵活,适合于广大观众。很简单,看看代码就知道了
问题漏洞?前后矛盾?
当然!请提出一个GitLab问题,如果你发现一些奇怪的东西,你的输入和预期的输出,我会尝试尽快解决它
安装
pip install sslf
或
- 克隆此回购(git clone https://gitlab.com/cjordan/sslf.git)
- 在目录中,运行:python setup.py install --optimize=1
依赖关系
- python 2.7.x或3.x
- 纽比1.8+
- scipy
- 未来