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

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

[复制链接]
- \6 ]$ ^1 O, [5 S

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

& Y1 Z& k5 D9 A! y# M" Q

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

) ?7 }, F2 W V* `7 q* b

1.1 smooth函数

$ K# I, h+ R0 X9 [' \' d/ m/ i& U+ i7 w4 i

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

3 S. d. u+ n h$ p1 H

1)xx = smooth(x)

( m- j0 K% t; O: `# i( |5 i

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

& t# [3 H: w+ H ?! R" N

xx(1) = x(1)

* T% u1 T) W h5 o0 a$ x5 {

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

# Y6 N- C) h! q& I7 ^' G+ s5 }

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

, Q' Y3 c& ~& s

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

# a* |; m- R5 u0 j3 ^2 t

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

) c$ L' b6 v+ ^. H8 P6 L% _

2)xx = smooth(x,span)

8 z0 L( F. [" { m! t

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

8 |" S, o! b8 _' ], D# X2 |- n5 U+ P7 S

3)xx = smooth(x,method)

' C7 \. c% ]0 \# f! c

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

* Z; p. k% I5 J" E$ |0 a

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

% \" _- Y8 F) Y# A

$ d% O" e+ |8 @; q# E- t* N

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

8 {$ m6 Q7 H2 m

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

& s- `2 C; J4 N( }

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

4 ]. U0 B3 |7 x2 ?, Z

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

- ]8 f- g* N% M# P9 l) |/ m$ O7 L

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

& J) ]. Y6 s) W2 A/ i R' i+ w$ O

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

. y3 S3 H5 n( W- q+ a; r4 _/ u

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

* b7 N, l( G0 a9 U2 y( [* T- P

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

! s' T* X6 J ` ]# e, i+ E; A

【例题1】

8 a& B7 ?% j% M" n$ d

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

7 y) X, _+ I$ n

思路:

' |; U& X6 i2 S8 y0 Q7 P% [0 H. b

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

- u. S7 ?8 F- w) c) w

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

: L7 k9 \- X9 J. {$ T& N

3. 绘制加噪波形图。

6 t7 n2 i5 {1 ?& D+ [5 f w

解题步骤:

' ^& |+ \1 t T9 D

1)构建数据

( p( ?0 A$ }5 e

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

" Y' p/ A4 q# F( [) a

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

% _$ w2 a3 c" F2 G6 I; t2 ^

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

+ A4 ^8 S# I' x, Z* L% @

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

9 E6 m. }; Z6 G

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

( `3 x" B7 ^& c: y; r5 N5 ? j

2)制作基础图

7 e' p- j$ M, A- ~

figure; % 新建一个图形窗口

0 E9 c8 p& p6 W& y0 M% D! S

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

3 n: z6 d" j, e

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

( B9 O' x. T" t. y8 v

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

9 A: R/ |% d$ I9 E! b- E

2 \; d7 U: u) D* A# N+ M- q" G* a# v

3)制作平滑波形图

( P; }9 d; Y) M$ Z! S ?

【方法一】

2 P8 V5 h0 s E/ K

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

/ N. t) Y$ c4 ^0 \7 }1 ?

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

A% ^, `$ f4 e

figure; % 新建一个图形窗口

- H K: D' Y/ H. x5 N& k

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

- O3 K9 k1 I, ?9 ~/ C

hold on;

, m# ~ P* [8 Y

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

& R0 \6 C! J' D

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

$ G. b9 y% e7 u) ]2 ~( U

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

9 r* H8 V) U. P

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

# i9 v0 }) z$ z4 H2 w% ?. l" q

' [" c( G0 Q8 S+ K/ Q

【方法二】

/ r6 E: l. I5 s4 D- N. i4 \5 W

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

+ X2 v8 c4 y4 B2 E# c

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

/ {0 w" g, s' r1 l

figure; % 新建一个图形窗口

7 D) u& w% J& f! H5 [8 P$ F0 |9 ^8 ]

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

( s# E4 f. i4 H: ^" K3 L5 p

hold on;

! D" q& [1 r0 `3 K- {% L6 {& N

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

, w- M% R* L1 Z& u; w* c$ ^1 \# F

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

5 {+ u& Q; z! ]; J5 b6 W3 O( z

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

$ O$ p9 p) d7 t$ M

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

S |' m% Y, v) w3 H4 d

4 o9 J/ h& d$ C

【方法三】

3 x: ^: S# ~: Z

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

" N6 R5 }( J L u/ F6 A

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

7 X2 M& U3 @2 @7 g U7 l

figure; % 新建一个图形窗口

- t$ H: E5 ]( o# S: X+ _4 C

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

, ]2 B8 |0 U; }' h9 H" L w7 x

hold on;

: ^3 _( c6 G! T8 {1 W( Z! {

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

% |/ G% {/ _3 p' U( P

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

& ?0 `$ s9 G0 P: d

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

o/ ]1 _4 s9 W( J

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

1 j0 b: p, x; z' I9 P7 }4 T6 i% O

0 U7 \5 p, Z1 q5 C. U

【方法4】

) @% |* h* ^: o" c4 @

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

0 t' G" ~8 i: C9 w, T3 V

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

' O- b4 K6 r* T$ G$ s5 X4 R+ C

figure; % 新建一个图形窗口

& i2 \ B5 L& c. R; B

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

5 m0 }. f+ M8 m @! v

hold on;

* x4 I: B6 E# u! R& Z6 T& \$ A

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

! G N1 e' @ k

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

a& a9 [* ?/ ], R R$ }9 \

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

; |* q( p( s8 N Q. H$ d9 H

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

, r; f9 \+ C) p+ h, B( t

5 t6 V1 i9 j3 ?: ~

【方法五】

, W0 O1 ?1 N' K, S7 [! v. q9 i) u

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

1 u' ^- C, m3 s+ Y

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

# F+ L: F' R$ l, L' x" R

figure; % 新建一个图形窗口

}, m+ f# \* R8 m- V6 f

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

/ V1 q( x' C: H

hold on;

! j* {3 s x; ?; v' p

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

0 m: S" ]; [6 C; v V" M7 z9 |

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

9 f! h; G1 H+ i! e6 a% ~

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

1 f Q1 M0 G* j c% |& ^

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

% R+ j2 x$ T* x

* j6 w& m X/ F( G" I. M9 W& ~' ?5 \% A6 t7 @0 D " z& b" |# b. w' c; B, l4 {0 _+ x8 d& b" z% I0 B ~ ' ^) a: [% ?! E5 W7 }
回复

举报 使用道具

相关帖子

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