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

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

[复制链接]
. C5 V! X7 M) Z X' E

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

5 w/ J1 d9 l6 q

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

' J% w' O+ ` L8 X( x) D1 @

1.1 smooth函数

( T8 q- m0 e, B* F1 O

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

! d c; ?2 d9 |4 i+ l

1)xx = smooth(x)

5 O1 Y7 A3 y( f P' b1 r

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

1 p d& {7 R3 {1 _, B

xx(1) = x(1)

/ X* i3 X9 U" u5 O

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

; J! Q9 J2 U& }' D- F

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

/ S' d$ C2 S/ ?9 m, [

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

) N8 E( k( j4 }

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

% n9 V, e; X+ {; [2 k [5 S

2)xx = smooth(x,span)

' W9 k5 g( y5 B8 v' Z

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

2 b, R% e2 R7 p* M& B9 R

3)xx = smooth(x,method)

D3 f0 U" ~! W& f6 d! c, R+ ?8 X8 A

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

" D+ P& ~/ N& t3 Y

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

: g" F( }% z: I# Z4 {

. H0 v5 L; P2 J# ~8 i

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

- ^% d, c1 Z" J7 ~- N

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

# _& A9 t" |, v: R& b L' `+ H

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

/ z9 u* d) w! ]- M

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

3 A( G' B: u. z& Y

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

; p# W9 v8 ~8 N$ E- D5 t

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

# t8 H2 J; I! {

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

2 x4 n8 U4 \6 v- J9 s( ? s( U/ ^

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

6 I$ } P9 G+ P% y

【例题1】

* E, z/ H8 L2 I* y! d b' D

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

0 f3 r7 o8 s- J0 \

思路:

1 p4 P4 Y; }0 T, S) x

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

5 E8 E( D) J. `. L' i6 Y$ R1 \

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

8 d, w" m* x3 Z7 h2 ?

3. 绘制加噪波形图。

" C. w$ _1 h! P \5 `

解题步骤:

( s! ]+ \4 a7 ?

1)构建数据

, ^$ @. ? i" _: `( X1 k3 N8 }" f# J

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

# F! K. r: D, n2 c$ v' A

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

a% h3 [9 H" b" S! Q

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

5 m$ n( E! O$ i+ ^

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

! Y" N6 W$ l" z+ k2 ]

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

( i+ D- q4 G, f) R; Q+ B

2)制作基础图

+ E7 `& a) R) I8 |2 N

figure; % 新建一个图形窗口

/ a! c( ^! M" M2 Y& k" x3 G6 r

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

( B* E1 W$ U6 W5 d4 g

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

$ @5 d$ \& N) i( @

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

8 g w4 s& T3 z. k+ |

8 R% Z2 A% d1 ]. Z. ~1 r- V

3)制作平滑波形图

- A) `0 S: ?3 h( f- @

【方法一】

2 e% k9 O: D+ x5 {& E

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

' v8 i' N. D0 t# M0 h

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

* I& B+ z) A) U2 ~4 G+ _

figure; % 新建一个图形窗口

7 x! ]: Q! k4 S% F. Y

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

5 y5 p7 h0 W* K4 z4 F3 c! I7 C

hold on;

6 g& R9 w* s! l8 G9 R$ F

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

2 |4 d7 H& _: a8 E

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

& c3 p. @% ?9 w) U" {" x8 I

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

5 T+ g( ^; M( N. T

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

. d: `% n4 T2 _

4 Y" j/ I9 a6 I" `( u

【方法二】

% w P# }: d. z% `

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

! t* O) Y# f- o0 @

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

6 I$ U3 w2 m" V) G" N& `) n4 j

figure; % 新建一个图形窗口

: O! A% h! d, X7 y

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

" P7 y! G1 }/ v5 {0 d- T0 F- B

hold on;

2 t7 G6 j) V8 d! |/ V2 @$ |+ \# U

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

* z$ P! U) Q. v X4 s2 U$ U

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

/ b0 |, S- E5 V" i2 [7 O" b5 ]

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

3 O1 o3 z0 E& u {3 X$ C( E

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

9 z% k; m5 C6 Y( Z( b2 M

U7 ^4 W# f9 h9 t0 c

【方法三】

% W4 J8 M/ m% @5 i

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

( S; ^& g. t* f$ w" t3 j1 H3 p+ R

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

( E' I- P& j6 q1 B

figure; % 新建一个图形窗口

& d* ~* I! D8 U+ j4 u1 c; _. i d

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

! z/ j: s6 G3 u9 J* F w! k; A0 J

hold on;

$ @2 l) B* S4 z! N! u! m$ x

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

$ `6 F& O0 l8 N( b) I

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

( @$ z& l5 u0 n9 n; |; v: s

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

" U+ `* A/ p0 f! G! Q$ J

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

' {; d B! x7 }, f$ {( k$ [5 I

) i. W1 P& p$ s1 w" M, ]9 Z, E! e% u! d

【方法4】

) Y( r' C& N' E) V8 [8 G' n) j. N

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

$ | u2 [0 @) B- Z) m1 {4 ~6 j

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

. J1 {9 ? F1 x. G/ h5 g

figure; % 新建一个图形窗口

. H( Q& q% ]2 w/ v$ a( N& t

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

( b5 r- W- F" D4 ~/ _5 J, x% e6 N

hold on;

4 C+ s+ \8 K9 [/ \- _

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

; @, O" _. c2 L

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

' y3 \ g* ?! i& a, p, k

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

0 T" |/ U( ]+ t% X; T% ]

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

1 d& h* Z Y: |* [, Y" `

4 V) J: C* N0 K9 a- ?: K B

【方法五】

6 G# F* h3 ?7 C v

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

3 @/ Q) Y, ]& y3 O1 ], B" W

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

0 C5 H; c* a1 u* g# N6 |+ H

figure; % 新建一个图形窗口

" c4 u' J. R4 o" Q4 {

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

; M& \8 ~+ K! y1 S: U$ X1 |

hold on;

+ X$ x. Q! ?0 w2 E$ }; l T7 W

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

9 Z8 {9 I* L) f& f Y; L5 ^

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

! w3 g( s. G) ?8 b7 }0 Z

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

l5 g9 o9 U/ z; n' M

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

/ c9 R+ d+ E- P% h; G6 i( A

+ g9 W1 j# u P2 D. J9 O( p- \0 T+ F3 B - h: s h' ~, u) m8 }& A! I" m" D3 g f" f4 ~) y. b ; G( V0 ~" c t! T* v% w0 w6 J
回复

举报 使用道具

相关帖子

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