我有2个列表,其中包含数据点.
x = ["bunch of data points"]
y = ["bunch of data points"]
我在python中使用matplotlib生成了一个图形
import matplotlib.pyplot as plt
plt.plot(x, y, linewidth=2, linestyle="-", c="b")
plt.show()
plt.close()
我能减少数据上的噪音吗?卡尔曼滤波器会在这里工作吗?
解决方法:
这取决于您如何定义“噪音”及其产生方式.由于您没有提供有关您的案例的大量信息,我将把您的问题称为“如何使曲线平滑”.卡尔曼滤波器可以做到这一点,但它太复杂了,我更喜欢简单的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
过滤后
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
lfilter是scipy.signal的功能.
顺便说一句,如果你确实想使用卡尔曼滤波器进行平滑,那么scipy也提供了example.卡尔曼滤波器也应该适用于这种情况,只是没那么必要.