Это немного сложно объяснить. У меня есть данные временного ряда в следующем формате: https://docs.google.com/spreadsheets/d/1B8mN0uD-t4kQr2U20gS713ZFHN6IgGB7OMR3-pqJjrw/edit?usp=sharing
Эти данные представляют собой записи напряжения с интервалом 0,01 с. При построении это выглядит так:
По сути, я хочу найти время, в которое возникает первый пик в каждой очень узкой паре (т. е. ~ 0,1, 0,75, 1,6 и т. д.).
Значения времени находятся в отдельном массиве, но значения индекса (номера строк) соответствуют между двумя наборами.
Есть идеи, как это сделать?
Моя первоначальная попытка была примерно такой из руководства по Matlab
function [edges2] = risingEdge2(time, data)
threshold = 0.4;
offsetData = [data(2:end); NaN];
edges2 = find(data < threshold & offsetData > threshold);
end
Я не мог найти хороший способ игнорировать в течение n секунд после первого пика... Я также получаю намного больше пиков, чем ожидалось... возможно, из-за зашумленных данных.
findpeaks
, но я не знаю, будет ли она работать здесь с характером вверх-вниз в верхней части последовательности прямоугольных импульсов. Насколько общим и надежным это должно быть? Если вас устраивает простое пороговое значение, вы можете просто установить пороговое значение и игнорировать области, которые превышают пороговое значение более чем на N секунд. Это своего рода хак, чтобы сделать это таким образом. Если узкие сигналы являются периодическими, можете ли вы выделить их в частотной области? Опять же, последовательность прямоугольных импульсов может затруднить это. - person AnonSubmitter85   schedule 07.11.2014