python – 减少数据上的噪音

我有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()

我能减少数据上的噪音吗?卡尔曼滤波器会在这里工作吗?

python  – 减少数据上的噪音

解决方法:

这取决于您如何定义“噪音”及其产生方式.由于您没有提供有关您的案例的大量信息,我将把您的问题称为“如何使曲线平滑”.卡尔曼滤波器可以做到这一点,但它太复杂了,我更喜欢简单的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

python  – 减少数据上的噪音

过滤后

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

python  – 减少数据上的噪音

lfilter是scipy.signal的功能.

顺便说一句,如果你确实想使用卡尔曼滤波器进行平滑,那么scipy也提供了example.卡尔曼滤波器也应该适用于这种情况,只是没那么必要.

上一篇:RNNoise: Learning Noise Suppression(深度学习噪声抑制)(2)


下一篇:《机器学习基石》第13节课学习笔记