2016-06-02 1 views
2

J'ai deux listes avec des points de données.Réduction du bruit sur les données

x = ["bunch of data points"] 
y = ["bunch of data points"] 

J'ai produit un graphique à l'aide matplotlib en python

import matplotlib.pyplot as plt 

plt.plot(x, y, linewidth=2, linestyle="-", c="b") 
plt.show() 
plt.close() 

Serais-je capable de réduire le bruit sur les données? Un filtre de Kalman fonctionnerait-il ici?

enter image description here

Répondre

8

Cela dépend comment vous définissez le « bruit » et comment il est causé. Puisque vous n'avez pas fourni beaucoup d'informations sur votre cas, je vais prendre votre question comme "comment rendre la courbe lisse". filtre de Kalman peut le faire, mais il est trop complexe, je préfère simple filtre IIR

import matplotlib.pyplot as plt 

mu, sigma = 0, 500 

x = np.arange(1, 100, 0.1) # x axis 
z = np.random.normal(mu, sigma, len(x)) # noise 
y = x ** 2 + z # data 
plt.plot(x, y, linewidth=2, linestyle="-", c="b") # it include some noise 

enter image description here

Après filtre

from scipy.signal import lfilter 

n = 15 # the larger n is, the smoother curve will be 
b = [1.0/n] * n 
a = 1 
yy = lfilter(b,a,y) 
plt.plot(x, yy, linewidth=2, linestyle="-", c="b") # smooth by filter 

enter image description here

lfilter est une fonction de scipy.signal . Par ailleurs, si vous voulez utiliser le filtre de Kalman pour lisser, scipy fournit également un example. Kalman filtre devrait également fonctionner sur ce cas, mais pas si nécessaire.

+0

Le filtre IIR a réduit le bruit. Merci pour cela et le lien vers le filtre kalman. – PiccolMan