如何使用查找频谱峰值(python)

2024-06-02 05:55:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要自动找到一个特定的峰来快速处理数百个光谱。我将搜索的重点重新放在我感兴趣的光谱区域上,但这总是给出一个远远不能令人满意的结果。 我尝试了不同的参数:阈值、距离和突出度,这似乎是最适合的参数,但没有找到峰值

import numpy as np
import os
import matplotlib.pyplot as plt
import scipy.signal as sig

def N_spectres(path_file): 
    spectres = np.loadtxt(path_file, skiprows=1, usecols=(2,3))
    N_spectre = 0
    i=0
    ref = spectres[0,0]
    while i < len(spectres[:,0]) :
        if spectres[i,0]==ref :
            N_spectre +=1
        i+=1
    return N_spectre

##############################################################################
# Data declaration
##############################################################################

file_name = "F837 FeCl3 Rux3 SiO2 E14 MAP cata_532 nm.txt"
os.chdir("DataRenishaw")
correct = 0

#############################################################

file = np.loadtxt(file_name, usecols=(2,3))
N_spectra = N_spectres(file_name)

Nb_point = int(len(file[:,0])/N_spectra)
debut = Nb_point - 230

axes = plt.gca()


plt.show()


i=0
counter=1
while i < len(file[:,0]):
    peaks, _= sig.find_peaks(file[i+debut:i+Nb_point-correct, 1], prominence = 100)
    plt.plot(peaks, file[i+debut:i+Nb_point-correct, 1][peaks], "xr")
    plt.plot(file[i+debut:i+Nb_point-correct, 0], file[i+debut:i+Nb_point-correct, 1])
    axes.set_xlabel("Nombre d'onde (cm^-1)")
    axes.set_ylabel("Intensité")
    #plt.plot(file[i+debut:i+Nb_point, 0], file[i+debut:i+Nb_point, 1])
    plt.title(file_name+"\n Spectre n° : "+str(counter))
    #plt.axis([70,350,2000,10000])
    i+=Nb_point
    counter+=1
    plt.show()


在某些光谱中,会出现一个峰,这是我感兴趣的。 结果如下:

RBM spectra

我该怎么做才能从find_peaks函数中获得更好的结果


Tags: nameimportlenasnpplt光谱file