Matlab笔记数据预处理剔除异常值及平滑处理Word文档格式.docx
《Matlab笔记数据预处理剔除异常值及平滑处理Word文档格式.docx》由会员分享,可在线阅读,更多相关《Matlab笔记数据预处理剔除异常值及平滑处理Word文档格式.docx(16页珍藏版)》请在冰豆网上搜索。
10
11
12
GJn
13
14
15
20
30
40
50
100
200
500
(Dn
如果某测量值与平均值之差的绝对值大于标准偏差与肖维勒系数之积,则该测量值被剔除。
xixnSx
例1.利用肖维勒方法对下列数据的异常值()进行剔除:
上述数据保存于文件
代码:
x=load('
'
);
n=length(x);
subplot(2,1,1);
plot(x,'
o'
title('
原始数据'
)
axis([0,n+1,min(x)-1,max(x)+1]);
w=1+*log(n);
yichang=abs(x-mean(x))>
w*std(x);
%若用拉依达方法,把w改成3即可,但本组数据将不能成功剔除异常值。
x(yichang)=[];
savex-ASCIIsubplot(2,1,2);
rs'
异常值剔除后数据'
x=
原始期居
3.5Iiiir~
2.5-Q
1.5-oooooQo□o
I-
Q匚LII|||_
80246810
异常值剔除后数据
3.51111r
3-
2.5-
2-
1.5-□n□n□□□□zi
1-
Q5I||IIL_
0246810
3.一阶差分法(预估比较法)
用前两个测量值来预估新的测量值,然后用预估值与实际测量值比较,若大于事先给定的允许差限值,则剔除该测量值。
预估值
织xn1(Xn1Xn2)
比较判别:
XnXnW
该方法的特点是
(1)适合于实时数据采集与处理过程;
(2)精度除了与允许误差限的大小有关外,还与前两点测量值的精确度有关;
(3)若被测物理量的变化规律不是单调递增或单调递减函数,这
一方法将在函数的拐点处产生较大的误差,严重时将无法使用。
(二)数据的平滑处理
对于一组测量数据(xi,yi)i=1,…,n,不要直接就想着求出
的拟合多项式的线性参数,而是要先平滑处理去掉“噪声”。
平滑处
理在科学研究中广泛使用,它可以减少测量中统计误差带来的影响,尤其被用于无法利用多次重复测量来得到其平均值的情况和当yi随
xi有徒然变化的那些测量段
1.“(2n+1点)单纯移动平均”平滑滤波
取出以yi为中心的前后各n个数据
(yi-n,…,yi-1,yi,…yi+n)求平均值代替yi,即
11n
yi2H1knyi1
优点:
方法简单,计算方便。
缺点:
方法产生误差会造成信号失真;
前后各n个数据无法平滑。
适用性:
适用于变化缓慢的数据。
n越大平滑效果越好,但失真也越大。
例2.“9点单纯移动平均”平滑滤波
%n
%注意函数要单独保存为与函数名同名的.m文件
functionY=smooth_data(y,n)
m=length(y);
j=1;
fori=(n-1)/2+1:
(m-(n-1)/2)
p=i-(n-1)/2;
q=i+(n-1)/2;
Y(j)=sum(y(p:
q))/n;
j=j+1;
end
%主程序
clcclearn=length(t);
Y=5./(1+tA2);
%原始测试数据
y=Y+(1,n));
%给测试数据加上噪声干扰
y1=smooth_data(y,9);
%调用函数作9点滤波处理
plot(1:
n,Y,1:
n,y,,-o,,5:
n-4,y1,,-*,);
legend('
无噪声’,’含噪声'
'
9点平滑后'
);
运行结果:
2.“加权移动平均”平滑滤波
加权的基本思想:
作平均的区间内中心处数据的权值最大,愈远离中心处
的数据权值越小小。
这样就减小了对真实信号本身的平滑作
用。
权重系数可以采用最小二乘原理,使平滑后的数据以最
小均方差逼近原始数据。
即令
min
k
(YikYi
k)2
通常采用“五点二次平滑”
(n=5,k=-2,-1,0,1,2)
2
(YikAAik4k2)0
k2
(YikAAk色k2)k0
22
(YikA)AkAk)k0
五点二次平滑权重系数表:
归一系数
Y-2
Y-1
V。
Y1
Y2
35
31
-3
-5
Y0
17
‛1
Y0-3y212yi
3.用“smooth函数”平滑滤波
调用格式:
Z=smooth(Y,span,method)
说明:
Z:
平滑后的数据向量
Y:
被平滑的数据向量
span:
平滑点数,缺省为5点
method:
平滑方法,缺省为移动平滑,其它还有
moving'
Movingaverage(default)单纯移动平
均
lowess'
Lowess(linearfit)线性加权平滑
loess'
Loess(quadraticfit)二次力□权平滑
sgolay'
Savitzky-Golay
rlowess'
RobustLowess(linearfit)
rloess'
RobustLoess(quadraticfit)
例3.用matlab自带的平滑函数作平滑滤波实例。
t=-10:
:
10;
n=length(t);
y=5./(1+tA2);
y1=y+*(1,n));
%给测试数据加上噪声干扰%调用多个滤波函数作滤波处理y2=smooth(y1,3);
y3=smooth(y1,9);
y4=smooth(y1,3,'
y5=smooth(y1,9,'
y6=smooth(y1,3,'
y7=smooth(y1,9,'
y8=smooth(y1,3,'
y9=smooth(y1,9,'
figure
(1);
%第一张图
subplot(3,2,1);
plot(t,y);
axis([-1010-16]);
gridon
无噪声信号'
subplot(3,2,2);
plot(t,y1,'
-*'
含噪声信号'
subplot(3,2,3);
plot(t,y2,'
3点单纯移动平均'
subplot(3,2,4);
plot(t,y3,'
9点单纯移动平均'
subplot(3,2,5);
plot(t,y4,'
3点线性加权平滑'
subplot(3,2,6);
plot(t,y5,'
9点线性加权平滑'
figure
(2);
%第二张图
gridontitle(,含噪声信号'
plot(t,y6,'
3点二次加权平滑'
plot(t,y7,'
9点二次加权平滑'
plot(t,y8,'
gridontitle('
3点rloess平滑'
plot(t,y9,'
9点rloess平滑'
运行结果:
Figure1
无噪声信号
6|:
4:
A,d
2.'
’-J:
?
■1I
-10-50510-
3点单轲移动平均
6|T:
b
含屏声信号^±
Xb-
10-5Cl$10g点单纯移动平均
■:
I
-10-5
0510
3点线性加权平滑
-1C-5
9点线性加权平滑
-I0-50
510
Figure2
含噪声信号
3点二馍加权平滑
C
-IO-5051。
9点「I。
际平捐
4,用“smoothts函数”(盒子法、高斯窗法、指数法)平滑滤波
调用格式:
b'
wsize)%盒子法
g'
wsize,stdev)%高斯
e'
n)%指数法
output=smoothts(input)output=smoothts(input,output=smoothts(input,窗方法
output=smoothts(input,
例4.读取股市数据,对开盘价的240条数据,调用smoothts函数进
行平滑处理。
x=xlsread('
D:
\ProgramFiles\MATLAB\MyWorks\'
%读取数据文件
p0=x(1:
240,1)'
;
%用开盘价所在列的前240条数据
%注意若不转置可能导致后面处理结果异常
subplot(2,2,1);
plot(p0,'
k'
LineWidth'
;
%绘制平滑后曲线图,黑色实线,线宽
xlabel('
观测序号"
ylabel(,股市日开盘价'
axis([025010001400]);
pl=smoothts(p0,'
30);
%用盒子法平滑数据,窗宽为30
subplot(2,2,2);
.'
%绘制日开盘价散点图
,markersize,,3);
可以改变点的大小
holdonplot(p1,'
观测序号'
ylabel('
盒子法'
原始散点'
平滑曲线'
location'
northwest'
p2=smoothts(p0,'
%高斯窗方法,窗宽为30,标准差为默认值
subplot(2,2,3);
holdon
plot(p2,'
高斯窗方法'
p3=smoothts(p0,'
%用指数法平滑数据,窗宽为30
subplot(2,2,4);
plot(p3,'
指数方法'
4W
100ISO200250
.现冽斤玲
00500050005000
43322-11
1111111年色rrL尸卷
1DOO
501001502002&
观测序号
JId—
MJ5OM)SO^O一43322
原始歌声平涓曲线
攫胆霜寒
500050005000
8$2?
1-1图板版崔
1050
1000DM1M150
O
•温小那点
平唔口等
M100150200250
规制林信
OT5O00&
OM5ODO50-M
观刖后号
5,用medfiltl函数(一维中值滤波)
y=medfilt1(x,n)
y=medfilt1(x,n,blksz)
y=medfilt1(x,n,blksz,dim)
例5.产生一列正弦波信号,加入噪声信号,然后调用medfiltl函数
对加入噪声的正弦波进行滤波(平滑处理)
t=linspace(0,4*pi,500)'
%产生一个从0至Ij4*pi的向量,长度为500
y=100*sin(t);
%产生正弦波信号
noise=normrnd(0,15,500,1);
%产生500行1列的服从N(0,152)分布的随机数,作为噪声信号
y=y+noise;
%将正弦波信号加入噪声信号
时间'
加噪声的正弦波’);
%调用medfilt1对加噪正弦波信号y进行中值滤波,并绘制波形图
yy=medfilt1(y,30);
%指定窗宽为30,Xyy进行中值滤波
subplot(2,1,2);
plot(t,y,'
b:
%b:
表示蓝色虚线
plot(t,yy,'
2);
%绘制平滑后曲线,黑色实线,线宽2
中值滤波'
加噪波形'
平滑后波形'
150
时间