Нахождение пика и анализ на python - PullRequest
0 голосов
/ 21 апреля 2020

Я написал код, который читает в моем файле данных и строит его, а затем подгоняет его и находит пики, однако у меня есть 6 пиков, и код только в настоящее время соответствует 2 из пиков и не возвращает никаких данных о них по коду выглядит следующим образом:

 from scipy.optimize import curve_fit
 import numpy as np
 import matplotlib.pyplot as plt
 from scipy.signal import find_peaks

 data = np.genfromtxt("C:\\Users\\lenovo laptop\\practice_data_ll16ame1.dat", skip_header = 15)
 x = data[: , 0]
 y = data[: , 1]

 plt.plot(x,y)
 plt.show()

 def func(x, *params):
   y = np.zeros_like(x)
   for i in range(0, len(params), 3):
    ctr = params[i]
    amp = params[i+1]
    wid = params[i+2]
    y = y + amp * np.exp( -((x - ctr)/wid)**2)
return y

guess = [0, 60000, 80, 1000, 60000, 80]
for i in range(12):
guess += [60+80*i, 46000, 25]   

popt, pcov = curve_fit(func, x, y, p0=guess)
fit = func(x, *popt)

plt.plot(x, y)
plt.plot(x, fit , 'r-')
plt.show()

1 Ответ

0 голосов
/ 21 апреля 2020

Когда я посмотрел на график вашей пользовательской функции, стало ясно, что большинство точек находятся в более или менее горизонтальной линии, поэтому функция не будет хорошо соответствовать вашим пикам. Поскольку шума нет, а пики настолько заметны, вам просто нужно передать значения y и пороговое значение в функцию find_peaks.

Реализуя find_peaks вместо вашей пользовательской функции, вы получаете следующий код :

from scipy.optimize import curve_fit
import numpy as np
import matplotlib.pyplot as plt
from scipy.signal import find_peaks

data = np.genfromtxt("C:\\Users\\lenovo laptop\\practice_data_ll16ame1.dat", skip_header = 15)
x = data[: , 0]
y = data[: , 1]

points = find_peaks(y, height = 100)

plt.plot(x, y)
for i in points[0]:
    plt.scatter(x[i], y[i])
plt.show()

Find_peaks возвращает кортеж, состоящий из двух вещей: 1. Индекс пиков (points[0] в приведенном выше коде) 2. Высота каждого пика (points[1])

Код дает следующий график, который, я думаю, вам нужен: enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...