2016-06-02 9 views
2

Ich habe 2 Listen mit Datenpunkten in ihnen.Reduzieren von Rauschen auf Daten

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

Ich habe ein Diagramm mit matplotlib in Python erzeugt

import matplotlib.pyplot as plt 

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

Würde ich das Rauschen auf den Daten reduzieren können? Würde hier ein Kalman-Filter funktionieren?

enter image description here

Antwort

8

Es hängt davon ab, wie Sie das „Rauschen“ zu definieren und wie sie verursacht hat. Da Sie nicht viele Informationen über Ihren Fall zur Verfügung gestellt haben, werde ich Ihre Frage als "wie man die Kurve glatt machen" nehmen. Kalman-Filter kann dies tun, aber es ist zu komplex, würde ich einfach IIR-Filter

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

Nach Filter bevorzugen

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 ist eine Funktion von scipy.signal .

Übrigens, wenn Sie Kalman Filter zum Glätten verwenden möchten, bietet scipy auch eine example. Kalman-Filter sollte auch in diesem Fall funktionieren, nur nicht so notwendig.

+0

Der IIR Filter hat das Rauschen reduziert.Vielen Dank dafür und die Verbindung zum Kalman Filter. – PiccolMan

Verwandte Themen