2016-06-02 4 views
2

У меня есть 2 списка с точками данных в них.Уменьшение шума по данным

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

Я вызвал граф, используя Matplotlib в питоне

import matplotlib.pyplot as plt 

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

Смогу ли я, чтобы уменьшить шум на данных? Будет ли фильтр Кальмана работать здесь?

enter image description here

ответ

8

Это зависит от того, как вы определяете «шум» и как это вызвано. Поскольку вы не предоставили много информации о своем случае, я возьму ваш вопрос как «как сделать кривую гладкой». Фильтр Калмана может это сделать, но это слишком сложно, я бы предпочел простую БИХ-фильтр

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

После фильтра

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 является функцией от scipy.signal ,

Кстати, если вы хотите использовать фильтр Калмана для сглаживания, scipy также предоставляет example. Фильтр Калмана также должен работать над этим случаем, просто не столь необходимым.

+0

Фильтр IIR уменьшил шум. Спасибо за это и ссылку на фильтр Kalman. – PiccolMan

 Смежные вопросы

  • Нет связанных вопросов^_^