Изображение рассматриваемого графика
Я начал пытаться решить эту проблему на Python и запустил в одну последовательную проблему. Даже после сглаживания графика написанная мной программа для расчета средней амплитуды вычисляет среднее значение неточностей графика (значения в несколько пикселей в микромасштабе), а не фактическое движение объекта в макромасштабе. .
Я запустил свою программу на идеальной синусоидальной кривой, и там она работает так, как и ожидалось, предоставляя мне среднюю амплитуду как величину смещения от положения равновесия, поскольку незначительных движений нет. которые вызывают пики и впадины, которые мой код распознает как локальные минимумы/максимумы.
Следующий код представляет собой функцию, которую я сейчас использую для получения амплитуды. Выбранная амплитуда представляет собой лишь подмножество данных и является произвольной для данного вопроса.
Код: Выделить всё
# Amplitude calculation function for smoothed data
def calculate_smoothed_amplitude(start, end):
selected_time = time[start:end+1]
selected_amplitude = smoothed_amplitude[start:end+1]
if len(selected_amplitude) < 3:
print("Selected range is too small to calculate amplitude.")
return 0
peaks = []
troughs = []
for i in range(1, len(selected_amplitude) - 1):
if selected_amplitude[i] > selected_amplitude[i-1] and selected_amplitude[i] > selected_amplitude[i+1]:
peaks.append((selected_time[i], selected_amplitude[i]))
if selected_amplitude[i] < selected_amplitude[i-1] and selected_amplitude[i] < selected_amplitude[i+1]:
troughs.append((selected_time[i], selected_amplitude[i]))
amplitudes = []
for i in range(1, len(troughs) - 1):
prev_peak = max([p[1] for p in peaks if p[0] < troughs[i][0]], default=None)
next_peak = min([p[1] for p in peaks if p[0] > troughs[i][0]], default=None)
if prev_peak is not None and next_peak is not None:
delta_amp = (prev_peak - troughs[i][1] + next_peak - troughs[i][1]) / 2
amplitudes.append(delta_amp)
if amplitudes:
average_amplitude = np.mean(amplitudes)
else:
average_amplitude = 0
return average_amplitude
Подробнее здесь: https://stackoverflow.com/questions/788 ... g-baseline