Как найти среднюю амплитуду графика с блуждающей базовой линией?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Как найти среднюю амплитуду графика с блуждающей базовой линией?

Сообщение Anonymous »

Я работаю над школьным проектом, в котором мне нужно наблюдать за движением определенного объекта. Я получил этот график, описывающий его движение после первых шагов анализа. Однако я не уверен, как я могу взять среднее значение всех пиков и впадин, которые я вижу здесь, и получить значение амплитуды, которое описывает этот конкретный набор условий. Я не могу просто принять среднее значение значений за положение равновесия, так как происходит «дрейф» базовой линии, а это значит, что вместо этого мне нужно попытаться найти «дельта-амплитуду» для каждой точки и усреднить все это для амплитуду этого набора условий.
Изображение рассматриваемого графика
Я начал пытаться решить эту проблему на 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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Получите среднюю амплитуду аудиофайла во время его воспроизведения.
    Anonymous » » в форуме Android
    0 Ответы
    21 Просмотры
    Последнее сообщение Anonymous
  • Получите среднюю амплитуду аудиофайла во время его воспроизведения.
    Anonymous » » в форуме Android
    0 Ответы
    17 Просмотры
    Последнее сообщение Anonymous
  • Как вычислить взвешенную среднюю среднюю с помощью Pandas?
    Anonymous » » в форуме Python
    0 Ответы
    0 Просмотры
    Последнее сообщение Anonymous
  • PyWavelet: преобразовать величину в амплитуду?
    Anonymous » » в форуме Python
    0 Ответы
    12 Просмотры
    Последнее сообщение Anonymous
  • PyWavelet: преобразовать величину в амплитуду?
    Anonymous » » в форуме Python
    0 Ответы
    17 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Python»