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

[复制链接]
7 w) O1 b" [/ v

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

1 @$ @ p, P( ~3 _

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

% ~7 p; D1 N: S' x' y9 V9 J

1.1 smooth函数

1 {5 n" b9 Y/ E6 Z* K

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

7 R- n$ [& l, W! e. ?" b

1)xx = smooth(x)

2 v1 Q% \2 ]' L! }6 U

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

) X0 Z) O, K# k/ {) G+ q2 m

xx(1) = x(1)

( l4 ]- r2 m4 F. u5 _# F& R

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

1 S, X3 J( ^; _9 s$ ^

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

3 @* D9 y3 ]8 \! b! k

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

- e* V/ @# `2 B0 j

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

u" Z7 P) T- I0 j( p5 o+ Z

2)xx = smooth(x,span)

7 l* t {) @1 A0 x/ A; Q/ r

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

; H- x8 L9 M3 |

3)xx = smooth(x,method)

" F# ~+ g, j( J% X- A4 K3 W

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

$ P: g$ K) v9 _; s" o i* @3 _

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

2 N( g: B. B" R- Y( c6 R

9 k+ V& W) l; a

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

/ z0 [# u; F! j) P

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

% t" `" ~/ u& |/ ~" w

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

9 l, y, g3 z! {' q& k8 v$ q

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

! j9 L' O7 R% ? y, A1 N

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

! v9 M$ z2 W2 M" V/ X

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

& M6 q# Z& |. ~2 a# H: j

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

+ v& r# Q" m8 y$ G( l& K

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

! [+ o8 J$ `: ]

【例题1】

% l" `2 J0 j/ I7 a L) ]0 i$ ?7 I

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

1 a/ t0 x3 P6 V1 K1 G: K6 B

思路:

$ r% l x2 M4 ]

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

w0 a2 M+ x5 A" M

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

' X1 M* B" M6 a M. S0 O

3. 绘制加噪波形图。

" [2 V) q& {0 m+ Z$ H7 U

解题步骤:

/ y$ D0 q" C& q, V7 X2 U; w

1)构建数据

/ G. E4 }& ] W

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

7 {2 U L8 D/ j+ G3 [- `2 i

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

( ]" T$ b- v/ q1 u

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

. \- h% V4 v* F! X L) U7 j' _

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

9 U# E+ H& Q9 N! [- F

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

4 ^7 g' b' P/ C) a1 ]* |

2)制作基础图

U) v$ J" W2 _7 K0 u: G6 s: ?8 x

figure; % 新建一个图形窗口

8 F0 t" K; _& x: m% @# Y A- M

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

3 f# ?& Z- j5 C. g! f2 J+ Y

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

3 p& N1 M3 A6 R7 q; Z. Y

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

% B9 m$ D4 d; G

3 i8 \/ ]) V3 Y9 z8 E, i" f

3)制作平滑波形图

; N* H0 x$ i4 l, c, t- \

【方法一】

9 m# y, N/ ?3 z# Q

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

}8 }- f! D- p5 C. W

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

8 G' _3 {) A* h2 m2 H6 G

figure; % 新建一个图形窗口

: T8 }) o, Z2 ^$ ^, j5 c8 y

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

1 G" o: C% i0 `/ ^# I% P

hold on;

9 O5 M) k* K% _" u; a! u4 X7 k

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

7 T. v2 K6 ?% @( @9 h8 Z

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

c/ s; ~2 }' Z9 W+ Q' C6 Y

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

4 u5 \: o) n6 f8 H- f M1 H2 h

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

8 V, w( {5 U8 X; H- n: F

% W, U$ E9 y' u% o

【方法二】

6 d+ _9 L: l6 R K* J6 f1 q* A

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

3 Q. F9 B5 y, R! S

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

6 H# _( m$ H6 q- I9 `

figure; % 新建一个图形窗口

; E/ G+ n1 }9 Y) {% Y: J$ {/ K

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

/ C7 g! o, G9 L

hold on;

5 E- {6 ~* h* o/ G( h

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

, [' e4 }: |; |5 m1 c: v

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

. m# K( S3 l0 v7 ~( F& ^

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

, ^7 {; h" I# s1 W# I3 G

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

7 L4 W1 h' i3 J3 H) K5 t: M! ]

. [' }6 S* Q3 e$ B3 T# o

【方法三】

~5 f/ }) n- M' R0 j

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

; T' J& I5 `+ v3 o

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

& d" x2 [# E5 x/ |+ k2 f

figure; % 新建一个图形窗口

) R; O4 G! t" L) r: s7 A; L% G

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

s! ?" v3 i1 p- @9 E8 v* z. q) ^

hold on;

& ]$ H& S5 W$ M( s) _1 X

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

& \( h1 Y* B- R: J

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

C7 [0 e/ u E% K8 J" n- _

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

" T6 W) q$ t, b- L4 I4 k1 J

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

5 [7 Z$ s* M9 n, n

# H2 ` D0 ]4 a7 v1 `7 Z' w; ]7 D6 Y

【方法4】

* q, Q9 I9 q& i0 x J1 K% g5 X. N

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

?5 V) M- w+ C8 }5 C

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

8 |$ G0 Z& @1 D4 Z9 x4 ~# A

figure; % 新建一个图形窗口

7 H" k0 B0 {, e$ s9 A; W/ v; K

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

/ ^+ d* T, ?3 x

hold on;

- f, u% ^1 r8 _+ b

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

7 t3 s0 e* y' I8 ]

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

) {" B. o7 W( m6 R9 F1 X% }6 v) y

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

3 N; b" E( T2 U7 W

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

`2 \ l. s2 _. Q. F

2 ^7 f6 Z2 \* V# a2 U7 m J- f

【方法五】

. @0 A8 t! p% w- D. P7 p( |

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

; y. I6 ^7 u- V

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

5 a; U, D; f0 g! T

figure; % 新建一个图形窗口

% D7 C' r5 ]0 `! W( d

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

" g& S* @; ]. s2 j! M

hold on;

$ H& l$ N$ [- `$ }

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

+ N& v% S) _; h% [# k) J

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

1 l; O3 e8 e/ e* t; n

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

; H; p( h8 y" T# K1 W

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

3 } a5 N% H) C! o

/ ]& [1 V8 [8 B& j5 g & F2 I3 }* i' O" C( q8 u) i; w; z3 ]$ C$ p3 r* E5 o; M g" Q ' V3 F) _7 E3 J+ H0 H( R! }: X( L: H; P' @1 o) w7 ~ P
回复

举报 使用道具

相关帖子

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