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

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

[复制链接]
0 t6 e+ P* r* Y* S; g( q

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

( v' M8 Y" e5 r8 J1 R0 Z

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

0 ~9 P8 B4 A- z. v

1.1 smooth函数

( o) W) q! ^9 _7 W% |' S7 u

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

' U+ W x5 \' p/ ]6 d, w m( @

1)xx = smooth(x)

9 d' J4 v$ B7 }+ d' J' v! f8 [. ~

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

i$ ?. M* D- K S

xx(1) = x(1)

- w. _6 W2 @ z+ q/ ^

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

* }& U( N; Q" k: c) `, G

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

& p5 S$ v5 P, A, m

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

2 @% |3 o1 m4 p/ [4 E3 k7 s% P

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

; P4 P" `3 c( v: G

2)xx = smooth(x,span)

5 \: B: p2 T1 H" Q3 h ~

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

9 A6 f9 d9 t) m# K* w, R" {6 Z

3)xx = smooth(x,method)

4 O' I. u6 u8 K: V5 W8 @' W, n

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

9 Z i; v! e# o4 B2 Y: w! _3 K

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

7 |& j2 B n* d: x. c

2 `2 \1 \8 f) l1 Y9 W5 N

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

7 K4 N8 C! U4 ^: {, E e

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

# G- }7 d) ^+ q) H) r

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

. X$ |, i3 m0 B* C

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

: |6 I5 m3 @1 l1 X: |; `

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

/ z; }! n" \" O& G) F- n

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

$ K5 n0 j- m% V7 y8 ^% Y

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

) m* B2 M! m- y5 h0 [( }( a$ S0 {

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

' ~/ ?# P/ g4 z+ x0 T9 B

【例题1】

+ w7 e3 z" a4 k

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

) {2 j. }6 `; }" `, ^

思路:

& { c5 i$ ~5 ], b# Y

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

, \$ ]" R F! l

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

! z" f H- q/ m9 A

3. 绘制加噪波形图。

1 P3 L# ~ @9 `

解题步骤:

! U, u0 p0 @. O7 P d

1)构建数据

9 }5 |. M& U2 _8 |- Y% q" t7 c

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

0 o* Z( q4 e' {, t5 ^4 p0 m

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

" N9 Q% X' H: Z! f q6 T: a

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

8 v0 P2 u, Q. j' l/ |

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

1 l4 y' a( U7 J" h, p3 J2 P

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

0 J9 v& H3 f+ f

2)制作基础图

) p) I4 g/ D' y. }1 j

figure; % 新建一个图形窗口

0 @8 Z9 U1 J! y* D

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

+ @5 B. L- n/ i: C/ w/ ]

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

" K1 J8 _% S$ |+ F6 ?2 o! f

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

, N1 \) ~! H8 Y# L+ g! \( X

$ N3 B8 @ l2 a0 B0 S

3)制作平滑波形图

$ Z' H0 U- s- r' u' c3 C2 [. Y

【方法一】

' _4 O- g9 g* E

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

7 i, k; k+ _1 K" e* r; @2 D" F

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

; ]; c q- Z* c5 C& u0 B

figure; % 新建一个图形窗口

! m" v- @/ f. h: K2 I* ~4 H4 y

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

* N0 s3 f7 z" l

hold on;

# S, X; q* n# f9 w

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

' O8 @0 _6 `8 x. N$ \

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

) Y$ o* h1 t0 t, K4 `

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

& {3 o/ D. M$ _. R1 N1 k2 r# h

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

1 I! I# w# V6 m2 D% S7 t! E0 Q" t

1 N( g& ~1 X% q6 l* W

【方法二】

6 G- f1 T) ?8 S% u4 \8 o

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

7 P0 I- ?6 j+ e. [/ z5 Q9 B3 O

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

7 ^4 Z3 b9 A9 k! b, l6 ^

figure; % 新建一个图形窗口

3 z4 ]2 v/ [7 Z- b

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

2 L6 x# X6 a, X" ~5 L

hold on;

! ]' s# W. Y, k7 w

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

4 Y3 k3 m+ l3 }. x: r( Y$ i

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

% g% Q! W! m4 f* \$ _8 \7 }

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

9 J2 J" B$ T8 }& ~' c' s

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

8 {& e9 F# ^, d# H7 i

, s8 [. e! i) @& J: c, m& Q

【方法三】

: U' g0 k1 W+ I* R+ u9 e* L

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

/ ~9 [9 g6 W: `/ O- }7 |* K

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

3 h" V9 @1 Z: T2 I& Y

figure; % 新建一个图形窗口

; _7 f. p {9 S; y6 v1 M

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

. E [4 D9 `) f: M0 x7 V+ {9 U6 P

hold on;

3 @, m. x* ^$ {- R, S/ M, O

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

: Q$ t, s) H# [) u% J

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

5 _& @! ?0 T+ I% A! m N

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

; h) \3 l) {8 N* h. v1 y

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

. M# p6 u6 H! ^( {" D' t! I0 \' Z( x

4 i, m, L( i' `8 [5 ^" p9 n. K1 n# r

【方法4】

) t" [- k% m, c5 _( M2 V

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

/ w. ]/ d( `% R" r8 D2 N0 g

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

% s! b+ w1 |: N& C7 _- ?

figure; % 新建一个图形窗口

0 S! r3 q4 D. a( [# e

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

5 {3 l8 e+ d5 ~& W b/ o8 v0 W) U

hold on;

; g1 i3 \. Q6 b

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

' V, d0 O; @1 o

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

1 ~6 K+ l5 T! d+ x: I' Y0 V

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

3 L0 c2 G; S" I/ U% Q9 P9 w

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

9 ^. @1 D# |. r

7 h2 x$ n0 s8 _5 r: U* _

【方法五】

8 W8 ^6 ^* S" @+ R0 F

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

- Y+ X0 f1 W8 h% Z' \9 T/ ]9 ?, b

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

- P Q! D c% A# W8 k) W# D4 r

figure; % 新建一个图形窗口

$ k2 }1 G7 T2 _; f! X) C

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

& I+ ~# f- L( ]: {

hold on;

! Z$ x# l7 ?5 m0 L; A# i) T! E

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

. x3 C$ S+ l8 b* V

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

0 V) M6 G4 L* Z8 W8 S5 I: }

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

! v2 n0 P1 B; [6 H D2 m- {$ `

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

@' L/ u5 B0 J Y; C# P

% ?* ^. M+ T. \" G " N: a4 l9 P3 O$ r 0 Y( C( W$ l% y3 i* E9 S5 K" {4 k, Q% T. `, s" A+ X % S6 ], B5 E6 y+ T/ ~3 ]
回复

举报 使用道具

相关帖子

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