完整版Matlab学习系列012数据预处理1剔除异常值及平滑处理Word下载.docx
- 文档编号:16313998
- 上传时间:2022-11-22
- 格式:DOCX
- 页数:13
- 大小:131.32KB
完整版Matlab学习系列012数据预处理1剔除异常值及平滑处理Word下载.docx
《完整版Matlab学习系列012数据预处理1剔除异常值及平滑处理Word下载.docx》由会员分享,可在线阅读,更多相关《完整版Matlab学习系列012数据预处理1剔除异常值及平滑处理Word下载.docx(13页珍藏版)》请在冰豆网上搜索。
7
8
9
10
11
12
ωn
1.38
1.53
1.65
1.73
1.80
1.86
1.92
1.96
2.00
2.03
13
14
15
20
30
40
50
100
200
500
2.07
2.10
2.13
2.24
2.39
2.49
2.58
2.81
3.02
3.20
如果某测量值与平均值之差的绝对值大于标准偏差与肖维勒系数之积,则该测量值被剔除。
例1.利用肖维勒方法对下列数据的异常值(2.5000)进行剔除:
1.50341.50621.50341.50241.49852.50001.50071.50671.49931.4969
上述数据保存于文件erro.dat
代码:
x=load('
error.dat'
);
n=length(x);
subplot(2,1,1);
plot(x,'
o'
title('
原始数据'
)
axis([0,n+1,min(x)-1,max(x)+1]);
w=1+0.4*log(n);
yichang=abs(x-mean(x))>
w*std(x);
%若用拉依达方法,把w改成3即可,但本组数据将不能成功剔除异常值。
x(yichang)=[];
saveerrornew.datx-ASCII
subplot(2,1,2);
rs'
异常值剔除后数据'
运行结果:
x=
y=
1.50341.50621.50341.50241.49851.50071.50671.49931.4969
3.一阶差分法(预估比较法)
用前两个测量值来预估新的测量值,然后用预估值与实际测量值比较,若大于事先给定的允许差限值,则剔除该测量值。
预估值
比较判别:
该方法的特点是
(1)适合于实时数据采集与处理过程;
(2)精度除了与允许误差限的大小有关外,还与前两点测量值的精确度有关;
(3)若被测物理量的变化规律不是单调递增或单调递减函数,这一方法将在函数的拐点处产生较大的误差,严重时将无法使用。
(二)数据的平滑处理
对于一组测量数据(xi,yi)i=1,…,n,不要直接就想着求出的拟合多项式的线性参数,而是要先平滑处理去掉“噪声”。
平滑处理在科学研究中广泛使用,它可以减少测量中统计误差带来的影响,尤其被用于无法利用多次重复测量来得到其平均值的情况和当yi随xi有徒然变化的那些测量段。
1.“(2n+1点)单纯移动平均”平滑滤波
取出以yi为中心的前后各n个数据(yi-n,…,yi-1,yi,…yi+n)求平均值代替yi,即
优点:
方法简单,计算方便。
缺点:
方法产生误差会造成信号失真;
前后各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
%主程序
clc
clear
t=-15:
0.5:
15;
n=length(t);
Y=5./(1+t.^2);
%原始测试数据
y=Y+(0.5-rand(1,n));
%给测试数据加上噪声干扰
y1=smooth_data(y,9);
%调用函数作9点滤波处理
plot(1:
n,Y,1:
n,y,'
-o'
5:
n-4,y1,'
-*'
legend('
无噪声'
'
含噪声'
9点平滑后'
2.“加权移动平均”平滑滤波
加权的基本思想:
作平均的区间内中心处数据的权值最大,愈远离中心处的数据权值越小小。
这样就减小了对真实信号本身的平滑作用。
权重系数可以采用最小二乘原理,使平滑后的数据以最小均方差逼近原始数据。
即令
通常采用“五点二次平滑”(n=5,k=-2,-1,0,1,2)
五点二次平滑权重系数表:
归一系数
y-2
y-1
y0
y1
y2
y-2’
35
31
-3
-5
y-1’
y0’
17
y1’
y2’
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;
y=5./(1+t.^2);
y1=y+0.5*(0.5-rand(1,n));
%调用多个滤波函数作滤波处理
y2=smooth(y1,3);
y3=smooth(y1,9);
y4=smooth(y1,3,'
lowess'
y5=smooth(y1,9,'
y6=smooth(y1,3,'
loess'
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);
%第二张图
plot(t,y6,'
3点二次加权平滑'
plot(t,y7,'
9点二次加权平滑'
plot(t,y8,'
3点rloess平滑'
plot(t,y9,'
9点rloess平滑'
Figure1
Figure2
4.用“smoothts函数”(盒子法、高斯窗法、指数法)平滑滤波
output=smoothts(input)
output=smoothts(input,‘b’,wsize)%盒子法
output=smoothts(input,‘g’,wsize,stdev)%高斯窗方法
output=smoothts(input,‘e’,n)%指数法
例4.读取股市数据,对开盘价的240条数据,调用smoothts函数进行平滑处理。
x=xlsread('
D:
\ProgramFiles\MATLAB\MyWorks\gupiaoshuju01.xls'
%读取数据文件
p0=x(1:
240,1)'
;
%用开盘价所在列的前240条数据
%注意若不转置可能导致后面处理结果异常
subplot(2,2,1);
plot(p0,'
k'
LineWidth'
1.5);
%绘制平滑后曲线图,黑色实线,线宽1.5
xlabel('
观测序号'
ylabel('
股市日开盘价'
axis([025010001400]);
p1=smoothts(p0,'
b'
30);
%用盒子法平滑数据,窗宽为30
subplot(2,2,2);
.'
%绘制日开盘价散点图
markersize'
3);
可以改变点的大小
holdon
plot(p1,'
盒子法'
原始散点'
平滑曲线'
location'
northwest'
p2=smoothts(p0,'
g'
%高斯窗方法,窗宽为30,标准差为默认值0.65
subplot(2,2,3);
plot(p2,'
ylabel('
高斯窗方法'
p3=smoothts(p0,'
e'
%用指数法平滑数据,窗宽为30
subplot(2,2,4);
plot(p3,'
指数方法'
gridon
5.用medfilt1函数(一维中值滤波)
y=medfilt1(x,n)
y=medfilt1(x,n,blksz)
y=medfilt1(x,n,blksz,dim)
例5.产生一列正弦波信号,加入噪声信号,然后调用medfilt1函数对加入噪声的正弦波进行滤波(平滑处理)。
t=linspace(0,4*pi,500)'
%产生一个从0到4*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,对y进行中值滤波
plot(t,y,'
b:
%b:
表示蓝色虚线
plot(t,yy,'
2);
%绘制平滑后曲线,黑色实线,线宽2
中值滤波'
加噪波形'
平滑后波形'
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 完整版 Matlab 学习 系列 012 数据 预处理 剔除 异常 平滑 处理