У меня есть фрейм данных (отрывок показан ниже):
Time head hip_center left_ankle
0 0.00 1916.654646 1487.842416 1152.102052
1 0.01 1916.800455 1487.870595 1152.110548
2 0.02 1916.913416 1487.934406 1152.113837
3 0.03 1916.992517 1488.334658 1152.083790
4 0.04 1917.109599 1488.298676 1152.239034
И что я хочу сделать, так это вычислить ускорение каждого столбца для каждой строки, то есть второй производной. Но мне также нужно применить фильтр нижних частот, чтобы отфильтровать шум.
Я определил фильтр так:
#Lowpass filter
from scipy.signal import butter, filtfilt
def butter_lowpass_filter(data, cutoff, fs, order):
nyq = 0.5 * fs
normal_cutoff = cutoff / nyq
# Get the filter coefficients
b, a = butter(order, normal_cutoff, btype='low', analog=False)
y = filtfilt(b, a, data.iloc[:, 1:])
return y
#call function
butter_lowpass_filter(acc_filt, 8, 100, 2)
Итак, я хочу, чтобы каждый столбец и каждая строка , чтобы получить вторую производную с применением фильтра для ее сглаживания. Однако я не совсем уверен, на каком этапе я рассчитываю производную и как? Потому что изначально я сделал это с .diff()
, но это то, что придает безумный шум результатам.
Я хочу, чтобы вывод также был во фрейме данных. Любая помощь по этому поводу?
РЕДАКТИРОВАТЬ: Я знаю о фильтре Savgol, я тоже буду применять его, но мне нужно сделать и фильтр низких частот независимо.
EDIT2: Это формула для второй производной:
A(t) = (x(t+1) - 2 * x(t) + x(t-1)) / (SamplingPeriod * SamplingPeriod)
, где период выборки составляет 0,01 секунды.