收藏本站 劰载中...网站公告 | 吾爱海洋论坛交流QQ群:835383472

如何使用Matlab对数据进行预处理

[复制链接]
! _- ~- s/ @) v5 D1 H4 x

如何使用Matlab对数据进行预处理

) n0 [; z5 f5 Q. Q' C+ b1 d

在对于时间序列数据(例如股票价格等)进行统计分析,往往需要对数据进行平滑处理,我们介绍基于MATLAB的数据处理方法,本次我们主要讲解smooth函数的用法

/ M/ o2 Q/ e" n$ S

1.1 smooth函数

7 l8 U$ p( `& w( y& q( a( G2 S- [" w

Matlab曲线拟合工具箱中提供了smooth函数,用来对数据进行平滑处理,其调用格式如下:

. ]0 N' U; d) i! ~8 u% B

1)xx = smooth(x)

5 A1 d8 m$ Z$ v

利用移动平均滤波器对列向量x进行平滑处理,并返回与x等长的列向量xx。移动平均滤波器的默认窗口为5,xx中元素的计算方式如下:

+ u5 W# y, [) i0 d8 h" y

xx(1) = x(1)

3 v4 j W7 W7 t5 S

xx(2) = (x(1)+x(2)+x(3))/3

+ I/ Y/ Q* u8 A$ ~2 d5 X

xx(3) = (x(1)+x(2)+x(3)+x(4)+x(5))/5

/ \# f; B' A3 ^3 P7 L( N W& Z, h

xx(4) = (x(2)+x(3)+x(4)+x(5)+x(6))/5

& R* d1 \; F: u

xx(5) = (x(3)+x(4)+x(5)+x(6)+x(7))/5

/ F. o @" C& P4 Z9 u0 @. _4 ^, {& s

2)xx = smooth(x,span)

$ I6 w/ k8 N0 e2 k1 [7 |4 K9 B

用span参数指定移动平均滤波器的宽度,span为奇数。

; K0 ]. M& ?+ _( g% w

3)xx = smooth(x,method)

. r. @0 p, U7 n1 m

用method参数指定平滑数据的方法,method是字符串变量,可用的字符串见下表1:

" J C, M' A6 }" {8 Q

表1 smooth参数支持的method参数值列表

, ~) ]0 M% g- X2 @( S

+ {7 e$ h5 r3 B% } e

4)xx = smooth(x,span,method)

7 q) B- \7 G1 L# U6 x

对于由method参数指定的平滑方法,用span参数指定滤波器的窗宽。对loess和lowess方法,span是一个小于或等于1的数,表示占全体数据点总数的比例;对于移动平均法和Savitzky- Golay法,span必须是一个正的奇数,只要用户输人span是一个正数, smooth丽数内部会自动把span转为正的奇数。

$ O2 U p9 D' U8 w( w3 r# i

5)xx = smooth(x,sgolay, degree)

4 m l/ }! G9 w3 u5 I3 H- W9 J

利用Savitzky- Golay方法平滑数据,此时用degree参数指定多项式模型的阶数。degree是一个整数,取值介于0和span-1之间。

; A8 i% k) G8 n: `1 I9 d' f) @" O8 t4 l

6)xx = smooth(x, span, sgolay , degree)

) X/ l& _. y: ]+ i, i- M8 O

用span参数指定Savitzky-Golay滤波器的窗宽。span必须是一个正的奇数,degree是一个 整数,取值介于0和span-1 之间。

4 l' H( N4 ^! O- s

7) xx = smooth(x,y, ..)

7 g( v5 D& s; W' @

同时指定x数据。如果没有指定x,smooth函数中自动令x=1:length(y)。当x是非.均匀数据或经过排序的数据时,用户应指定x数据。如果x是非均匀数据而用户没有指定method参数,smooth函数自动用lowess方法。如果数据平滑方法要求x是经过排序的数据,smooth函数自动对x进行排序。

+ y: [9 E5 v5 F

【例题1】

) L1 o3 }/ B: k" J4 O$ f+ {

产生一列正弦波信号,加入噪声信号,调用smooth函数对加入噪声的正弦函数进行滤波(平滑处理)。

/ `, l, ?) ~" _- K

思路:

4 Y" v% P. M5 v* x5 t

1. 调用smooth函数进行加噪数据的平滑处理;

5 u4 U7 W3 M2 n5 j+ i

2. 产生加噪正弦波信号;

# S* Y5 Z4 L/ d. x

3. 绘制加噪波形图。

5 q$ [* G' _* |7 S, R

解题步骤:

) L, ^& x# |- H+ h

1)构建数据

3 j( L, S5 v) m: J

t = linspace(0,2*pi,500); % 产生一个从0到2*pi的向量,长度为500

4 O1 \# e4 [# M" K0 J

y = 100*sin(t); % 产生正弦波信号

9 |( t; f2 M# r

% 产生500行1列的服从N(0,152)分布的随机数,作为噪声信号

* g* C3 M' Y+ p/ e

noise = normrnd(0,15,500,1);

! M# u6 p. ` E! |

y = y + noise; % 将正弦波信号加入噪声信号

6 u V3 Z0 L0 |2 H* h

2)制作基础图

: w- n7 L, E3 r l& L

figure; % 新建一个图形窗口

- ?7 W9 |9 U4 q6 b/ B- ]& L g& k4 b

plot(t,y); % 绘制加噪波形图

+ L) e- n4 G% P5 D

xlabel(t); % 为X轴加标签

# B) E/ Q6 A7 E

ylabel(y = sin(t) + 噪声); % 为Y轴加标签

8 r: m+ x4 k3 ?" p2 M6 C

* _+ Y. g8 x( ]

3)制作平滑波形图

. F6 R- g0 w! X2 B6 U# U3 G# k* ^

【方法一】

6 [) d: {! {$ d1 B' N

利用移动平均法对加噪信号进行平滑处理,绘制平滑波形图

, q3 z4 Q7 A5 J! V! c! B

yy1 = smooth(y,30); % 利用移动平均法对y进行平滑处理

5 e1 w) x% o6 R5 k; s% V4 R

figure; % 新建一个图形窗口

6 c" b: I6 ]+ o' z6 B/ L1 @" U

plot(t,y,k; % 绘制加噪波形图

" m( O/ P7 I# x* [' {0 u

hold on;

% e( w5 X, z1 J

plot(t,yy1,k,linewidth,3); % 绘制平滑后波形图

! C: \0 a2 Z: B, s

xlabel(t); % 为X轴加标签

Y& o' r/ U4 Q1 q4 M4 l1 P

ylabel(moving); % 为Y轴加标签

! Z6 Q" C. r r5 `- w; B$ J

legend(加噪波形,平滑后波形);

4 z& d" j$ c! q1 Q1 x) i* }

4 b$ P8 c4 q; u

【方法二】

9 `; b0 q: t2 e, _& w

利用lowess方法对加噪信号进行平滑处理,绘制平滑波形图

4 K l- O2 L1 d3 C/ X k

yy2 = smooth(y,30,lowess); % 利用lowess方法对y进行平滑处理

$ U5 O$ T. g! f( C) X

figure; % 新建一个图形窗口

) ]. I1 T( e! W: X

plot(t,y,k; % 绘制加噪波形图

) R+ d% H3 o; B$ j- k

hold on;

/ ?% k8 R. Z B9 x! p$ g1 @

plot(t,yy2,k,linewidth,3); % 绘制平滑后波形图

1 M4 e; w, e% R' ]

xlabel(t); % 为X轴加标签

2 n: E. l$ k( t$ ?, b+ q

ylabel(lowess); % 为Y轴加标签

0 S+ Y6 ?8 D7 }8 A9 H/ `9 x

legend(加噪波形,平滑后波形);

- }6 l% e# o, E. N5 o

# X8 g& F7 N% ]2 S! ]4 Q# L1 s; Y

【方法三】

* X' M8 z1 D+ h3 p

利用rlowess方法对加噪信号进行平滑处理,绘制平滑波形图

; J! `# r& I# Q& y. V" b

yy3 = smooth(y,30,rlowess); % 利用rlowess方法对y进行平滑处理

' F/ p) p8 x0 U3 n u

figure; % 新建一个图形窗口

" P ]& J9 L) n; f

plot(t,y,k; % 绘制加噪波形图

" Z' Q u) V* N- ]: G9 O" Z# ?7 H' B

hold on;

0 I$ f" q$ h2 ] }) L

plot(t,yy3,k,linewidth,3); % 绘制平滑后波形图

7 h3 a! @) {2 w8 h0 d

xlabel(t); % 为X轴加标签

- A9 ~ J: X/ x' L3 ?% W, K! D

ylabel(rlowess); % 为Y轴加标签

2 x o* T5 d) E6 H" N8 D X

legend(加噪波形,平滑后波形);

9 S& I3 d" g3 v/ T! T/ x4 f

4 F V0 Q9 W- {& Q! D

【方法4】

& @9 M# {( s4 j# F+ q

利用loess方法对加噪信号进行平滑处理,绘制平滑波形图

1 A! @' @. @" D: |/ ~1 q, ?

yy4 = smooth(y,30,loess); % 利用loess方法对y进行平滑处理

' Z, H8 \' F( N2 A1 d2 w6 R& P x% c

figure; % 新建一个图形窗口

/ l- t: R7 n, I/ E

plot(t,y,k; % 绘制加噪波形图

* }* | n6 Q o, ^# L6 |

hold on;

5 \" ^6 k$ x3 W$ A

plot(t,yy4,k,linewidth,3); % 绘制平滑后波形图

% k E( r& `3 L

xlabel(t); % 为X轴加标签

- h5 `) E4 ]6 i4 A! l$ N

ylabel(loess); % 为Y轴加标签

+ I% A( l( h" q" L6 w4 ~

legend(加噪波形,平滑后波形);

5 z0 I) v N+ L b# x- I1 r0 E

3 O3 R0 Z7 H5 b! z2 r) p" G

【方法五】

q" _: {% J, g0 {

利用sgolay方法对加噪信号进行平滑处理,绘制平滑波形图

6 O8 R: p+ n" F1 @2 c3 q

yy5 = smooth(y,30,sgolay,3); % 利用sgolay方法对y进行平滑处理

0 p$ g$ s: R v. }

figure; % 新建一个图形窗口

, A9 U/ U' y B7 [- v6 Z5 e9 X/ m

plot(t,y,k; % 绘制加噪波形图

8 {3 x9 b: j( y, P( h% G: t

hold on;

4 }% O. L( k! ]$ h7 c) i

plot(t,yy5,k,linewidth,3); % 绘制平滑后波形图

" V' O1 Q+ x) W! s- G: j3 k

xlabel(t); % 为X轴加标签

: w% a+ K. C L! t3 {( k

ylabel(sgolay); % 为Y轴加标签

+ P2 F8 f' M2 }. f) p) u

legend(加噪波形,平滑后波形);

2 N9 ]% U9 a% ]! D& \% Y! m

" g d+ h- P+ K/ b# {) D 4 z6 q3 r7 ]+ y% U: K2 N/ A! q& r8 O& a 7 b* q8 }( l+ R: d- N1 G# ]5 Y* a' f& i' g$ u
回复

举报 使用道具

相关帖子

全部回帖
暂无回帖,快来参与回复吧
懒得打字?点击右侧快捷回复 【吾爱海洋论坛发文有奖】
您需要登录后才可以回帖 登录 | 立即注册
深宫鲍
活跃在4 天前
快速回复 返回顶部 返回列表