MATLAB光滑数据的方法总结
MATLAB #Dataprocessing
MATLAB光滑数据的方法总结
对于数据的光滑,我开始理解的不透彻,直接用了一些MATLAB、Python的内置函数,没有理解其内在本质,仔细看了一些技术文章,了解了其基本原理,总结出来,希望以后可以用到
含普通噪声的数据的光滑
普通噪声即随机的噪声,是一些比较随机的波动。我们可以做的只是让这些波动变得平均。要去除背景还得用测量的结果减去背景才行。MATLAB内置了很多的函数,我们取其中的smoothdata,filter,movmean函数,另外还可以手动来做卷积,来比较结果的异同。smoothdata的处理含movmean的选项,所以我们直接用smoothdata函数即可。代码如下
1 | x=linspace(0,10,100); |

我们是在原函数的基础上加了背景,所以数据即使被光滑以后,也还是与源数据对不上。降噪此时只是减去了波动,而不是真的可以减去噪声。如果我们减去同样比例波动的噪声呢?

发现结果就可以在源数据附近波动了。
从上面的结果还可以看见,movmean相当于对于一个均匀的窗口函数做卷积,不过边界点movmean会又专门做特殊处理。
处理离群值(粗大误差)的方法
离群值是指在测量值中,出现了一些反常的值,这个反常值与附近的其它正常值差别非常大。实验中经常有一些异常值,比如我们的荧光实验中会有一些突然的亮点,这些值可能来自宇宙射线等,怎么处理掉这些值呢?
我这里主要想介绍标准差法和MAD法。
标准差法又叫做 3
法。目的是规定一个数据波动阈值,当数据超过这个阈值的时候,便认为该数据离群。这个方法阈值的选取方法,采用窗口数据的3倍标准差。 MAD法也是定义了一个阈值,这个阈值叫做中位数绝对偏差MAD。如果超过了3倍的MAD,则认为该数据离群。
两者在Matlab里,可以用filloutliers()函数进行实现。下面代码对比了标准差法和MAD法在消除离群值的效果:
1 | t = 0:0.06:10; |

可以看见离群值通过MAD方法可以被非常有效的去除掉。
兼顾去噪和去除离群噪声?
MATLAB自带的函数smoothdata还有几种基于回归的方法,
'lowess'— Linear regression over each window ofA. This method can be computationally expensive, but results in fewer discontinuities.'loess'— Quadratic regression over each window ofA. This method is slightly more computationally expensive than'lowess'.'rlowess'— Robust linear regression over each window ofA. This method is a more computationally expensive version of the method'lowess', but it is more robust to outliers.'rloess'— Robust quadratic regression over each window ofA. This method is a more computationally expensive version of the method'loess', but it is more robust to outlier

从上面图可以看见,loess,rlowess可以兼顾噪声和光滑数据。







