Нахождение нескольких интерполированных значений x из функции, которая не является обратимой - PullRequest
0 голосов
/ 29 мая 2019

Я пытаюсь найти два интерполированных значения x для функции, найденной при пересечении порога.

here

Я попытался переключить значения x и y, как предлагалось в предыдущих ответах, на аналогичные вопросы; однако, это возвращает только одно из двух значений x, которые я ищу из-за значений, имеющих одинаковую координату x при инвертировании.

Inverted Graph.

Красная точка на каждом графике показывает точку, которую я уже нашел, со следующим кодом:

interp = interp1d(data[1], data.times)
val = interp(great.middle.iloc[1])

Где данные - это фрейм данных pandas, который содержит все события (так что здесь мы смотрим на событие 1) и один столбец времени, а большим является еще один фрейм данных pandas, где среднее значение является наибольшим значением в столбце событий, разделенном на 2. Здесь val равен 42.28045192307682, который представляет собой интерполированное время, за которое достигается среднее значение (во второй раз).

Я пытался сузить значения для функции интерполяции, но интерполяция значения y всегда приводит к значениям Nan x.

Данные, которые я использую, довольно большие, но вот выход для напряжения и времени: https://drive.google.com/open?id=16xPB5HU_ZJ4qmIdD8icKrDKAAXAO2lH7 https://drive.google.com/open?id=1Yc-_ole-dFAnpTNJhEjKNYU6hQfCSiar

1 Ответ

0 голосов
/ 31 мая 2019

Вот как я решил это:

#save the event data column as pulse (y-values)
pulse = data[1]
#save the time data as time (x-values)
times = data.times

#resample the zero points of the data (the data - the threshold)
spulse = signal.resample(pulse - np.max(pulse)/2., 10*len(pulse))

#find the place where the data changes signs
crossings = np.where(np.diff(np.sign(spulse)))[0]

#because the data has noise, average the first and second crossings 
first = np.mean(crossings[crossings < np.argmax(spulse)])/1000
second = np.mean(crossings[crossings > np.argmax(spulse)])/1000

#print the times that the threshold was crossed
print "First crossing at: " + str(first) + ", Second at: " + str(second)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...