首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >python中相似光谱中的匹配峰

python中相似光谱中的匹配峰
EN

Stack Overflow用户
提问于 2019-05-17 21:38:06
回答 1查看 530关注 0票数 2

我有一系列数千(1D)的光谱,对应于实验的不同重复。对于每一次重复,相同的数据都是由两种不同的仪器记录的-所以我有两个非常相似的光谱,每个光谱由几百个单独的峰/事件组成。这些仪器具有不同的分辨率、精度和可能的检测效率,因此每对光谱都是不同但相似的-用眼睛仔细观察它们,可以自信地匹配每个光谱中的多个峰。我希望能够自动和可靠地匹配每一对光谱的两个光谱,即自信地说出哪个峰值对应于哪个峰值。这可能会涉及“丢弃”一些不能肯定匹配的数据(例如,两个仪器中只有一个检测到一个事件)。

我附上了一张数据在整个光谱上的图像,并放大到一个相对稀疏的区域。红色光谱基本上已经被发现了峰值,因此除了真实事件所在的地方,它在任何地方都是0。我已经对蓝色跟踪使用了scipy.signal.find_peaks(),并绘制了找到的峰值,这似乎很好用。

现在我只需要找到一种可靠的方法来匹配光谱之间的峰值。我尝试过通过将彼此最接近的峰进行配对来匹配峰-然而,由于一些峰不存在于两个光谱中,这会遇到重大问题。我可以添加一些限制,比如峰值必须接近才能匹配,但我认为可能还有更好的方法。还有一些问题是因为红色轨迹的分辨率低于蓝色轨迹。我希望有一些模式发现算法/python包最适合做这件事--但这并不是我的专业领域,所以我真的不知道从哪里开始。提前谢谢。

放大示例频谱对的相对备用区域:

一对完整的光谱示例,显示了一些非常密集的区域:

生成用于绘制光谱的示例代码:

代码语言:javascript
复制
from scipy.signal import find_peaks


for i in range(0, 10):

    spectra1 = spectra1_list[i]
    spectra2 = spectra2_list[i]
    fig, ax1 = plt.subplots(1, 1,figsize=(12, 8))
    peaks, properties = scipy.signal.find_peaks(shot_ADC, height=(6,None), threshold=(None,None), distance=2, prominence = (5, None))
    plt.plot(spectra1)
    plt.plot(spectra2_axis, spectra2,  color='red')
    plt.plot(peaks, spectra1[peaks], "x")
    plt.show()
EN

回答 1

Stack Overflow用户

发布于 2019-05-17 22:13:31

深度学习观点:您可以使用从信号A到信号B的循环损失映射来训练一对神经网络,然后再次将您带到信号的初始点。

一个好的开始应该是阅读CycleGAN,它使用它来改变图像的样式。

诚然,这将是一个有点研究的项目,可能需要一段时间才能稳健地工作。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56187600

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档