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

[复制链接]
2 s* ?7 f. d* P: ^

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

. T2 }# o1 D2 B6 i% L, E' f

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

: l9 A: Y, O1 D2 ]6 i2 F5 G: l

1.1 smooth函数

8 G' ]. d/ P9 g

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

5 Y, B" q- X. W) o1 `, R

1)xx = smooth(x)

) O2 E; W2 `% [' u4 \" o/ t

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

2 E: y, y2 S" f8 w9 i

xx(1) = x(1)

- h1 @( v$ k! V5 `' O/ I

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

+ Q2 t( Q d, G% r

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

" Q7 q: }3 K. u9 b

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

0 \4 j8 j9 r6 l/ ?! d

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

2 ^6 E4 V: {( }

2)xx = smooth(x,span)

- B& e0 l# w. t5 D5 i6 R, j

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

4 v* h- D2 H; l, ^- M5 q3 m

3)xx = smooth(x,method)

/ R! X* q& L+ N1 @, t8 o/ @2 h

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

( c: {4 R' ^9 b0 B+ d4 Q

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

' L/ B& U* N3 ^9 q' i

9 R1 X2 z( j9 V

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

$ t4 M" H% V6 Q9 X

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

/ O4 v) U1 q2 S* H! o# {

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

7 M: w8 y/ M' N+ Z

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

# t5 c3 s: G8 v9 f' |

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

' O# V9 ^% {3 n2 N/ z# X3 ^

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

: H! h/ i: Q2 {& v2 S# K

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

% ]( _' ^+ E0 T0 J/ ~3 ]: A' w

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

. h: ~6 R- b, w% z

【例题1】

5 E [0 X( @: ~! b. U

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

2 y& F/ ~$ l" j3 i

思路:

8 z- d. Z1 } q) b# j- F9 M

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

' {* z7 N8 F {# ~ L o

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

! |0 h+ Y3 y6 N T7 g) G) f

3. 绘制加噪波形图。

- G- t4 ~2 x7 P) h: E, \

解题步骤:

8 K9 R/ s7 q( g: j6 u/ o

1)构建数据

x l* e9 p' t% b3 f0 i( m

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

( \) {/ G, I, z7 _

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

; c. b' b) G% r: E5 L

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

, L: f- {+ D, j: s! l) A

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

0 ~" V% T9 d" T9 h) W

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

. H* x" {3 Y) g

2)制作基础图

: M+ j3 P. C l

figure; % 新建一个图形窗口

; H3 t! i @+ m5 p9 q6 }4 W

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

$ O6 o( ~$ y/ v. X% V8 F! Q

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

" P/ \& u; ]; ?4 B/ ^

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

3 ^5 m% p; ~- j! }$ x! E6 z9 A

0 l7 r. a# Y0 L9 `5 c& F- C- U4 h

3)制作平滑波形图

( T: J _( _% y1 D

【方法一】

: t7 M5 x! b' b, J8 }

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

# a5 ~7 Q1 d g+ Z2 V$ T W

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

6 H0 y, P1 {, h& P/ x6 `9 m

figure; % 新建一个图形窗口

, G; q8 m) T: k4 M" g

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

& ~. [8 l& J0 f7 q. t5 N4 }

hold on;

: n: h F. Y9 d5 n

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

& r: A* b _' B8 }1 ]; [' t! I

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

* N' p5 h3 }. O% q" z. j

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

, r5 K3 l, a$ {7 c4 J

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

" p6 `1 |( E: g; q ]2 ^

6 L6 t3 F1 ]: L

【方法二】

4 [. E/ A* b- c$ y# L

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

6 v q! }: ]" \ z$ k1 P9 D; f, `

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

5 E$ N6 F4 \: i5 H8 ]5 i

figure; % 新建一个图形窗口

7 \" j& n2 W3 }% U

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

4 a- {- g8 v8 ~. r

hold on;

# j! P |1 e. `

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

( P: x# \) B6 w5 L5 a5 S

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

' {) _6 o' C! e0 L1 C$ M( C

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

8 _6 E9 C/ y/ c% w {' }

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

M1 {7 Y. o; A# s, G

( x) Q, {8 |) @; e

【方法三】

' \! r8 ^: I: w* ?2 G& n

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

8 A' w1 ~9 G$ u% P; J5 Z; u0 t

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

3 c2 k; h9 K' {$ E8 I/ i$ w2 X

figure; % 新建一个图形窗口

' a2 |; V$ C% g! l8 h

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

6 j ]' [; B8 ^$ n8 K; d9 R

hold on;

( F' b! E% a7 N0 w4 R1 L6 C

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

9 K/ u$ J0 c- B7 ?: g% }! I

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

7 }) Z! a2 m2 I

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

; v! v: @4 s e5 v; h/ [8 N5 F1 W

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

1 G. s# j7 o2 s! H; W5 O

6 M' e5 v+ q3 j! B

【方法4】

7 l0 Q% c4 P7 L- v% S. m* i

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

" x. I; }( f, e: _9 C5 F

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

4 O; l- Q4 a( L$ F7 D

figure; % 新建一个图形窗口

$ U5 @: N6 z* f: N1 X; o i

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

: O9 m2 [1 r8 R; W

hold on;

1 k& T2 Z- n a) a# f

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

; S0 D2 t: \4 t, d& Y7 b

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

/ T/ e# G! I: k6 Q' s, j8 j! R

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

4 O2 H0 U, l4 H n

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

* \8 \3 W6 @6 Q, a5 P2 A- G

, \, }6 s' ]# G& B9 y

【方法五】

& g" z, D" r/ A& A+ M4 d

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

X8 z" Q6 V( b* k- X' m1 r2 U

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

- B$ P0 t, ~7 E$ d" ~

figure; % 新建一个图形窗口

( Y) |- \0 c, W7 s2 c0 w

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

9 T6 y7 J5 {& e4 P8 L: k

hold on;

. n8 m, i2 n1 W" _) C

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

8 @" f7 ~. M& e9 q

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

e9 S$ F! q) J' I" {3 M

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

1 h( ?* D8 P' [+ {0 |8 l$ P1 N

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

- y" R; ]7 o _* P/ H5 H$ r: N

& A1 `4 e2 L% g% r/ n$ Q* U3 j: S- c% h" k+ } . Y1 b5 U3 M% X1 T; I. y g- j% K% T" a* f E" `2 v G; }4 S! F
回复

举报 使用道具

相关帖子

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