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

[复制链接]
) |; q& F9 u+ X2 N& \2 t

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

3 L7 D5 Z+ M/ W" {* T2 h

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

; f0 n/ k7 F. t

1.1 smooth函数

m( ?% v! g2 U0 `: [4 T0 l! b

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

, N' I/ q! b/ P1 p) n0 v

1)xx = smooth(x)

: P2 x: U% p0 _9 r

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

5 x/ D3 B, S! m$ J3 }1 Z% ]" @2 F

xx(1) = x(1)

( z3 p8 ~" X$ H( {) i8 B

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

7 n; ~& o! I$ n, }' X2 p( m) o

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

0 W3 a T0 H" @7 G" m1 a6 }

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

# ^% C' q! b& u* E* ~" a. j

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

3 E0 f, ^$ R5 w' |# w

2)xx = smooth(x,span)

6 }; \" f( @% E2 x6 e$ f N

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

: @/ t! P: q5 k5 u. q; o h- q

3)xx = smooth(x,method)

- l, a* h2 P" V9 y2 n9 z& X5 L. E

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

7 S4 j o+ @8 L. y

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

$ B: _5 @" p, ~% T6 w! D

, u z, P: c4 d7 E# q+ O! r. Q" W

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

4 v7 D; S A; ~0 J( x

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

; e6 M; o k, |5 G

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

/ D4 H1 ~6 T( d6 \0 o. m, {

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

2 J7 y+ X+ m" |- f

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

- h7 W' z; s$ G3 L: R) @1 A5 f

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

4 Y/ v' ~/ \4 d& h

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

! ^( R) o: F& c5 B

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

$ O- B$ [7 H# Z: P

【例题1】

; U" u v8 n$ U4 r( w

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

* ^) O, O! @1 n( U0 ?/ H

思路:

1 [2 N' C( y) h* R

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

/ w8 t: m2 r' S2 t- T4 @

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

! ^9 K; A( B1 K% J! V

3. 绘制加噪波形图。

! @' A, `" A- Z

解题步骤:

/ n% ~' a; E: c, K. s" M% K7 H

1)构建数据

+ m7 J% m- l& G$ _. T

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

: W) q6 _- Y/ g( c

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

: Z+ e; q6 T1 J! j. {& Z+ ]

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

7 S2 P; A, X8 \1 O, {

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

: F1 [/ j7 k [

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

8 W% o0 c. y) }. p2 Y9 n

2)制作基础图

, u: v3 U z1 s; z6 a6 y1 \

figure; % 新建一个图形窗口

( t. `! w, S1 T; k: @

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

2 A& q" s) U: v6 w& M0 t) u1 \. u/ t

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

O2 b3 B* _ n" ^0 c4 Q- ?

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

8 ~) p% `6 b" n1 J3 u/ M) E w6 z u

, a; @ d2 w4 W( D

3)制作平滑波形图

0 d/ o% u! {4 u* [

【方法一】

; F7 P4 u% Q( f% L) ]7 a z6 u

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

1 E' x1 \$ _. T# F

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

! w- m3 T0 }) @/ B% c

figure; % 新建一个图形窗口

: M' \) m8 `# G# v

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

. \% A- F- b! j) h

hold on;

/ ~1 D' f% }/ h" ?1 Y! Y1 n

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

5 M' s/ W$ x. I, X

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

6 h5 b! e: y( R8 Y

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

8 v! \, l% [" U: ?9 ]: E6 H3 B

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

8 B0 D* F: G8 b4 d. Q

6 Z0 M5 A$ f" ?4 l

【方法二】

/ b+ B# x; l, `( p1 o

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

% P( y t7 ^; C$ K, M: C

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

3 P, z; S1 n' t

figure; % 新建一个图形窗口

! |/ K. E3 ^4 m

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

6 g$ T/ Q4 b! k- c" { l, B+ n

hold on;

w/ ^, w3 c* S y# K

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

8 J: }8 k9 z# A2 ^4 a# L

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

$ `1 O$ G" u! F' F& i3 S2 {' F

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

9 c9 Z7 F1 L+ C0 c3 T

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

S6 F; T4 k. f) @9 I

# Y2 R) U' W) a

【方法三】

: _+ r) D, z* ` h- N

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

$ W" [+ ^3 a' y! t( h$ K" s

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

/ b% [( y% f5 k

figure; % 新建一个图形窗口

; B6 q6 k9 I( ~& @8 _) A9 T, H$ d

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

2 U$ L4 w r) W( y

hold on;

8 _! H& B( a( C4 |5 e y4 f

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

3 w' P( ~, P8 d) |$ i2 \, k

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

# N6 @( w# T; Q* S1 {& s

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

1 F1 S4 }! j: H9 s0 [, u3 y: z

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

2 X, `: O9 K7 ^0 C

X8 v% y6 w% ~" [9 N

【方法4】

0 R4 q: c4 N0 m, z$ b

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

1 z- ~5 \$ [' `6 u$ I& v

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

* \0 C; `8 J1 w" N2 O

figure; % 新建一个图形窗口

' X" C; B* V6 b4 W8 r

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

$ I* b9 L1 C% _* y" K! n

hold on;

6 j6 E. w2 T9 y$ @

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

( U5 j- n1 d1 w. m8 d7 y3 I8 l J

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

+ v7 Z4 p6 B2 V! y1 f* q) Y0 o# `

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

1 g: \- T& F! Q+ D( s( ] K

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

% v4 g9 \( D1 L4 u

" ?$ R. C- |) d, O

【方法五】

: h4 D/ n8 Y$ K) I7 k) e

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

& G/ i2 a3 g8 }( V' Y3 Z& [

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

$ L* W" `/ F+ r0 ?5 m

figure; % 新建一个图形窗口

; c* _- T2 @1 |' I" g- ]5 c4 ~

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

: Z7 _0 a0 s$ P8 b5 z7 H6 D7 A" y# C

hold on;

4 x: l u! z2 Y0 t0 q2 p4 E! w: w

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

# D L2 u/ L8 g7 K1 V: n5 k

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

- Z: h% l; J' l' x' v% V9 I0 Q/ K

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

" S K7 @7 }; r

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

9 ], `2 g% p+ d, P& h- B& t

# h$ j! D6 r: g! R6 u2 o( [ 8 o4 a) u) O4 g, E0 ]' Z# N- N4 q: H* J8 s6 e/ d0 o " D& W5 t" m7 @& \; Q8 y& Q7 I4 C! ^6 K8 @# b0 ?
回复

举报 使用道具

相关帖子

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