#IMPORT ALLE MODULER import matplotlib.pyplot as plt import numpy as np import scipy as sp from scipy import signal from scipy import stats plt.style.use('seaborn') class Databehandling: def __init__(self, data): self.data = data def Differential(self, nrolling): """ Udregner et rullende mean efterfulgt af første grads (Velocity) og andengrads differentiering (Acceleration) """ self.x_rolling = pd.Series(self.data).rolling(nrolling).mean().dropna() self.time = np.array([i / 1000 for i in range(0, len(self.x_rolling), 1)]) #Tidsvektor self.t_length = len(self.time) dt = np.diff(self.time) dx = np.diff(self.x_rolling) self.velocity = dx/dt dv = np.diff(self.velocity) self.acceleration = dv/dt[0:self.t_length-2] return [self.x_rolling, self.time, self.velocity, self.acceleration] def LowpassFilter(self, velocity, acceleration, sampling_frequency=1000, cutoff_frequency=3, orden=4): """ Laver et lowpass butterworth filter, og benytter på data. velocity og acceleration kommer fra differential funktionen. Hvis intet andet er nævnt, vil sampling_frequency være på 1000Hz, cutoff på 3Hz og være et 4.ordens filter. """ #LAV BUTTERWORTH FILTER fs = sampling_frequency fc = cutoff_frequency low_pass = fc / fs w = fc / (fs/2) b, a = sp.signal.butter(orden, w, btype='lowpass') self.vel = signal.filtfilt(b, a, velocity) self.acc = signal.filtfilt(b, a, acceleration) return [self.vel, self.acc] def Diskriptiv_Statistik(self): """ udregnet forskellige diskriptiv statistik som gennemsnit, max værdi, min værdi """ vel_mean = np.mean(self.vel) acc_mean = np.mean(self.acc) vel_max = np.max(self.vel) acc_max = np.max(self.acc) vel_min = np.min(self.vel) acc_min = np.min(self.acc) return [vel_mean, vel_max, vel_min, acc_mean, acc_max, acc_min] def LinearRegModel(self, vel, acc, time): """linear regression med dertilhørende hældning, intercept, r værdi, p værdi og std error """ vel_lm = slope, intercept, r_value, p_value, std_err = stats.linregress(time[0:self.t_length-1], vel) acc_lm = slope, intercept, r_value, p_value, std_err = stats.linregress(time[0:self.t_length-2], acc) return [vel_lm, acc_lm] def Plot(self, x_rolling, time, vel, acc): fig, (ax1, ax2, ax3) = plt.subplots(nrows=3, sharex=True) ax1.plot(self.time, self.x_rolling, 'b') ax1.set_title('Position') ax2.plot(self.time[0:self.t_length-1], self.vel, 'g') ax2.set_title('Velocity') ax3.plot(self.time[0:self.t_length-2], self.acc, 'r') ax3.set_title('Acceleration') plt.grid(True) plt.show()
Run
Reset
Share
Import
Link
Embed
Language▼
English
中文
Python Fiddle
Python Cloud IDE
Follow @python_fiddle
Browser Version Not Supported
Due to Python Fiddle's reliance on advanced JavaScript techniques, older browsers might have problems running it correctly. Please download the latest version of your favourite browser.
Chrome 10+
Firefox 4+
Safari 5+
IE 10+
Let me try anyway!
url:
Go
Python Snippet
Stackoverflow Question