Фильтрация Савицкого-Голея, дающая неверную производную в 1D - PullRequest
0 голосов
/ 07 июня 2019

У меня есть набор данных 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()

Результат: enter image description here

Производный результат: dy / dx = 2.
Мне нужен фильтр Савицкого-Голея, чтобы дать мне этот результат. Пожалуйста, помогите мне с реализацией Python, которая рассматривает две переменные.

1 Ответ

1 голос
/ 07 июня 2019

Чтобы использовать deriv> 0 в savgol_filter, вы также должны указать интервал координат x. Исправление простое: добавьте delta=x[1] - x[0] после deriv=1 в вызове:

Zf = signal.savgol_filter(y, window_length=29, polyorder=4, deriv=1, delta=x[1] - x[0])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...