У меня есть набор данных x и y, где x - независимая переменная, а y - зависимая переменная.
у = 2x
Я добавляю немного шума к 'y' и применяю скучный фильтр Савицкого Голея. Когда я пытаюсь получить первую производную от y, я получаю производную как ноль.
Я понимаю, что это потому, что фильтр принимает только «у» в качестве входных данных. Я хотел бы иметь фильтр, который учитывает и x, и y, а также предоставить мне производное значение.
Здесь я показываю свою реализацию с графиками, указывающими неверные данные.
import numpy as np
from scipy import signal
import matplotlib.pyplot as plt
# create some sample twoD data
x = np.linspace(-3,3,100)
y = 2*x
y = y + np.random.normal(0, 0.2, y.shape)
# filter it
Zn = signal.savgol_filter(y, window_length=29, polyorder=4, deriv=0)
Zf = signal.savgol_filter(y, window_length=29, polyorder=4, deriv=1)
# do some plotting
plt.plot(x,y, label = 'Input')
plt.plot(x,Zn, label= 'Savitzky-Golay filtered')
plt.plot(x,Zf, label= 'Savitzky-Golay filtered - 1st derivative')
plt.legend()
plt.show()
Результат:
Производный результат:
dy / dx = 2.
Мне нужен фильтр Савицкого-Голея, чтобы дать мне этот результат. Пожалуйста, помогите мне с реализацией Python, которая рассматривает две переменные.