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

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

[复制链接]
( G' ^. b* M( V2 e; ~7 u

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

/ G& A" I/ |8 U7 P. |

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

9 v4 [" v) G! b$ e7 _7 e

1.1 smooth函数

$ e J M* X# k; ~" X6 B

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

3 u. [: m- z: W* {5 T

1)xx = smooth(x)

# \2 t/ u/ z: H) k

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

- Q: K s- x: G' m. `& g p

xx(1) = x(1)

- g# p" u$ I+ z

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

' R, @$ b8 ^ ]" H+ c

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

" i# c8 `9 s3 L+ ?- `

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

: t6 R Q; v) W4 o

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

3 ]2 h/ c: [, c0 v+ Q

2)xx = smooth(x,span)

. D# n& R9 s4 e7 b/ u1 T

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

$ p2 Y" W# F" {$ T! H. r+ U0 O c

3)xx = smooth(x,method)

: h# D1 G/ \* x9 H; q& ^$ m

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

5 g4 i; i) s( e) N7 E+ e

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

n4 Q$ @. w9 l% a9 y( R$ T- O5 o

K4 h+ W0 [- g

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

2 Y0 z/ a: ^- Y D$ U

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

* h( t* v5 B2 D5 G

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

+ x1 e- u3 ? L

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

8 X' C! h: y, F! E

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

6 ~- N# z* h- S* `

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

$ K* M5 |/ a* S" ]9 q2 j$ h. B

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

( ^$ E5 U# r7 l

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

5 d! V) N/ h- |4 W9 S

【例题1】

" R/ o5 F* p" ^/ [) `; e) y5 E

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

& N0 z5 }2 f. L5 F( p2 U

思路:

8 [" a; L5 V M8 ?0 i3 m

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

9 ^8 T- H; ?; q& \! S0 W

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

: G& k! H% S& A) w! D* p

3. 绘制加噪波形图。

* ]+ Q3 K, \. Q

解题步骤:

3 c0 R: h: {5 k" H7 A0 n

1)构建数据

5 Z3 |8 k& b* F: F: z

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

$ t0 z# V- Y5 Z0 h3 u* z" y+ @) Q) E+ B

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

% z1 X* p- H8 R

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

% x. O( ]" x. @' j8 R ~

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

; Y) i$ O" h$ O

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

: U, ]0 ?' y! j0 v1 y" X

2)制作基础图

: [6 S e1 X8 e% E

figure; % 新建一个图形窗口

6 T8 j# a! V8 L" j, w- U

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

; e" A" ]* K, p" j5 s4 i" H

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

% ]& o% `: T6 S3 h- I+ u

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

6 W( P* v) p4 a( W7 J' a* _, \6 _

% Y& V5 I+ h9 [$ e; e( F' p( B ~! D

3)制作平滑波形图

" F! K$ l ]: h1 m; f% k: b* E

【方法一】

5 s/ G& z* H. O' r& E% O( o8 T' L

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

. o& S% ~9 G1 x+ N$ D

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

; x G& O* l2 a( u! `9 N0 y" [0 @

figure; % 新建一个图形窗口

# D0 ~+ b# z6 M% l

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

) h; O/ z4 G( x# j9 ~& C

hold on;

9 C5 i7 t1 \" }9 p6 R+ u

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

/ y, ?" a; h% n* d- b! X

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

+ t2 L6 r. B2 n. z

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

3 Y y' z) u" v7 @

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

0 K4 u9 }( o4 k; }8 _. J

5 w) @: s F# I& s+ ?0 c

【方法二】

! C' ^7 j7 T0 l% v9 O

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

) g9 k$ F3 m! d1 U; V) v3 K

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

( K6 W; E% w/ q# w

figure; % 新建一个图形窗口

& E2 s8 Z; y. p( x; P W6 d+ m# g

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

# |3 f$ s# Z: F+ ^

hold on;

- G/ R6 B4 S ~$ ]9 f! X7 ~

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

7 m! d" }* J4 x% \8 ~4 W

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

& Z4 M8 h5 k+ r3 i: R0 G

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

9 E/ z/ z5 r9 T2 F+ c

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

5 y* ]0 F2 u( A

) k8 a* O- }0 r

【方法三】

9 ?0 K3 f( J/ d/ ~; M" O6 t+ p

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

3 Y6 s; P3 w O- Q3 P* \. D

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

/ W4 P1 G/ K m; V$ a+ |

figure; % 新建一个图形窗口

1 I" Z8 T; j- k. b. K

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

; _' p2 z j9 e c# J6 @1 u

hold on;

% |/ L! M/ A2 A& `! G

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

" p% ~& s5 D5 {4 _$ H6 D

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

6 v3 s s- y; y2 d

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

) L& X* f" K5 M6 E

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

* C- U- n$ L% @5 t, V' ?

$ k6 { P3 d3 v: l

【方法4】

" k4 _$ Y% g: P/ L ^! C g

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

( h- I1 ?7 W# f

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

2 _- o1 F# C- ]

figure; % 新建一个图形窗口

" ? i2 c6 \* A& S8 M$ n x, a

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

% j& D- |! X% m8 }

hold on;

2 b* N8 f6 G3 u, ?0 K+ N

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

+ h2 F+ T$ i" }7 T! ~$ X

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

5 K, v$ R3 R% r* x5 S/ g2 ]0 x

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

5 \& k( c! h1 [+ l9 g$ B

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

: f2 h b, B8 O

2 c ?; Y2 i$ ^

【方法五】

# o8 d8 H/ U5 k5 [2 e" m! u% ~

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

. ^, X) G6 e% S# R+ ^) k6 @

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

2 X( q6 A0 _- {! d4 p

figure; % 新建一个图形窗口

) z, j; U/ p3 a: t0 E( X X3 o

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

: ^+ Q! ?; t3 m, I

hold on;

0 F8 ^$ v3 L4 ^! V& X

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

4 a5 Q7 S0 y" _1 j# k6 \, D

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

/ @/ r$ Z" I' O: y1 ^$ O7 k

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

5 K- s( K" E. j6 r4 x& |7 {

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

$ M" E8 g6 S( p. ~# {# T4 w T

1 D" L; C& g2 X # H5 ^4 I1 J7 W 1 Z$ i) ~/ Q4 b: ]! o4 t: D" Z ) {( E9 F6 N6 L [/ n. T7 B$ e4 T! t. j3 i9 k- G# _
回复

举报 使用道具

相关帖子

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