Фильтр нижних частот для получения второй производной данных из pandas кадра данных - PullRequest
1 голос
/ 17 июня 2020

У меня есть фрейм данных (отрывок показан ниже):

    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 секунды.

1 Ответ

1 голос
/ 17 июня 2020

Из этого ответа здесь . Они использовали shift для вычисления второй производной:

df = df.set_index("Time")
for col in df:
    df[col+"_second_der"] = df[col] - 2*df[col].shift(1) + df[col].shift(2)

Вывод:

         head  hip_center  left_ankle  head_second_der  hip_center_second_der  left_ankle_second_der
Time                                                                                                
0.00  1916.65     1487.84     1152.10              NaN                    NaN                    NaN
0.01  1916.80     1487.87     1152.11              NaN                    NaN                    NaN
0.02  1916.91     1487.93     1152.11            -0.03                   0.04                  -0.01
0.03  1916.99     1488.33     1152.08            -0.03                   0.34                  -0.03
0.04  1917.11     1488.30     1152.24             0.04                  -0.44                   0.19

Сообщите мне, работает ли это для вас!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...