其他分享
首页 > 其他分享> > 罗曼诺夫斯基准则-噪声数据剔除

罗曼诺夫斯基准则-噪声数据剔除

作者:互联网

在平时需要处理的一些原始数据中,存在着许多噪声数据影响着我们的数据的分析与利用,如何确认这些噪声数据,并去掉这些噪声数据,或者如何将噪声数据对问题的影响降低到最小,本文先进行t检验剔除奇异值、缺失值,识别或删除离群点,之后对处理后的数据进行S-G去噪处理(在这里我们认为噪声是被测量变量的随机误差或方差),之后对去噪性能进行分析:

image.png

对于人工观测的数据还是由数据采集系统获取的数据叠加上的“噪声”干扰(反映在曲线图形上就是一些“毛刺”和“尖峰”)。采用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('总人数/人')

可以看下结果,还是比较优秀的,我用的是部分航班数据,在网上都可以查到

image.png


经过实际检验,我的数据是7阶S-G平滑去噪后效果更好,你们可以根据自身数据调节阶数,


标签:end,数据,罗曼诺夫,噪声,data,剔除,data1
来源: https://blog.51cto.com/u_15145144/2761145