如何在Python中平滑统计上正确的信号?

问题描述 投票:1回答:1

我偶然发现了在不夸大测量数据准确性的情况下平滑数据的问题。

Sample of "Original data"

[当我寻找简单的解决方案时,我发现了很多过滤方法,这些方法使数据的形状保持不变(即,数据点的数量没有减少);从我的角度来看,这意味着要么数据在进行某种拟合(Scipy cookbook: Savitzky Golay)(这意味着它实际上不是原始数据),要么只是统计上不正确(例如“相邻平均” ,因为它是假装精度高于实际值,因此它是平均每个数据点在一个数据点窗口上的平均值。我遇到过这样的情况,其中这种平滑处理使信号伪像显得很重要,而事实并非如此。

我创建了一个示例,其中实际特征由于平均而在不减少数据点数量的情况下显示不正确。如果您知道真实的数据,尤其是右侧的主峰看起来非常宽阔,但是大量的数据点使其看起来非常整洁和平滑。此外,噪声水平几乎被完全消除,但是现在一些较小的特征似乎在中心上升并显示为重要数据,但是正如您在原始数据中看到的那样,它们并不是。

Incorrect smoothing

我现在正在寻找简单有效的方法来减少噪声的统计正确性,这些噪声不会对数据施加任何假设(例如,选择的拟合函数等),也不了解不同实现方式的优缺点。

python smoothing
1个回答
2
投票

源自图像处理的一种方法是skimage包中的downscale_local_mean。

import matplotlib.pyplot as plt    
from skimage.transform import downscale_local_mean
data=np.genfromtxt(r'example_smoothing_data.txt',delimiter=";")

smoothed=downscale_local_mean(data, (8, 1))

plt.figure()
plt.plot(data[:,0],data[:,1],'b-',label='Original data')
plt.plot(smoothed[:,0],smoothed[:,1],'r-',label='Smoothed data')
plt.legend()
plt.show()

enter image description here

在图中,可以清楚地看到,数据点的数量减少了,这基本上只是测量期间的另一个积分窗口; x方向上精度的降低基本上可以弥补y方向上精度的提高。]

© www.soinside.com 2019 - 2024. All rights reserved.