Source code for orbitdeterminator.filters.sav_golay

'''
Takes a positional data set (time, x, y, z) and applies the Savintzky Golay filter on it based on the
polynomial and window parameters we input
'''

from math import *
import numpy as np
import sys
import os
sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), os.path.pardir)))
from scipy.signal import savgol_filter
from util import read_data



[docs]def golay(data, window, degree): ''' Apply the Savintzky-Golay filter to a positional data set. Args: data (numpy array): containing all of the positional data in the format of (time, x, y, z) window (int): window size of the Savintzky-Golay filter degree (int): degree of the polynomial in Savintzky-Golay filter Returns: numpy array: filtered data in the same format ''' x = data[:, 1] y = data[:, 2] z = data[:, 3] x_new = savgol_filter(x, window, degree) y_new = savgol_filter(y, window, degree) z_new = savgol_filter(z, window, degree) new_positions = np.zeros((len(data), 4)) new_positions[:, 1] = x_new new_positions[:, 2] = y_new new_positions[:, 3] = z_new new_positions[:, 0] = data[:, 0] return new_positions
# # if __name__ == "__main__": # # pd.set_option('display.width', 1000) # my_data = read_data.load_data('../example_data/orbit.csv') # window = 21 # its better to select it as the len(data)/3 and it needs to be an odd number # degree = 6 # positions_filtered = golay(my_data, window, degree) # print(positions_filtered - my_data) #