罗曼诺夫斯基准则-噪声数据剔除
作者:互联网
在平时需要处理的一些原始数据中,存在着许多噪声数据影响着我们的数据的分析与利用,如何确认这些噪声数据,并去掉这些噪声数据,或者如何将噪声数据对问题的影响降低到最小,本文先进行t检验剔除奇异值、缺失值,识别或删除离群点,之后对处理后的数据进行S-G去噪处理(在这里我们认为噪声是被测量变量的随机误差或方差),之后对去噪性能进行分析:
对于人工观测的数据还是由数据采集系统获取的数据叠加上的“噪声”干扰(反映在曲线图形上就是一些“毛刺”和“尖峰”)。采用Savitzky-Golay卷积平滑算法对数据进行平滑去噪处理会比较好:
function out = fun_romanovsky(data, l, a) % 功能:罗曼诺夫斯基准则剔除粗大值 % 参数: % data 输入数据 % l 分段长度 % a 显著度 % 返回值:剔除粗大值后的数据 [m,n] = size(data); if m > 1 data = data'; end if length(data) <= l out = NaN; return; end out = data; i1 = 1; i2 = 1; while ( i1 <= length(data)-l ) temp = data(i1:i1+l); data_mean = mean(temp); % v = temp - data_mean; % 求方差 temp_std = std(temp); % K由l、a查表所得 K = 2.24; if abs(data(i1 + l) - data_mean) > K*temp_std out(i2 + l) = NaN; data(i1 + l)= []; else i1 = i1 + 1; end i2 = i2 + 1; end end 2. clear all;clc; data = xlsread('数据1.xlsx','F2:F1316'); data1= fun_romanovsky(data, 15, 0.05); x = 1:length(data); figure(2); plot(x, data, 'b-', x , data1, 'g*'); title('对原始数据进行异常值剔除') xlabel('序列');ylabel('总人数/人'); legend('处理前','处理后'); 3. clc; plot(data1)% data1为剔除异常值后的数据 hold on sg=smooth(data1,7,'sgolay'); plot(sg,'-'); legend('剔除异常值后的数据','7阶S-G平滑去噪后') title('对剔除异常值后的数据进行S-G平滑去噪') xlabel('序列');ylabel('总人数/人')
可以看下结果,还是比较优秀的,我用的是部分航班数据,在网上都可以查到
经过实际检验,我的数据是7阶S-G平滑去噪后效果更好,你们可以根据自身数据调节阶数,
标签:end,数据,罗曼诺夫,噪声,data,剔除,data1 来源: https://blog.51cto.com/u_15145144/2761145