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

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

[复制链接]
! P! s% v! H1 ?/ \8 U+ a F

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

5 |3 z$ y2 h4 e# R3 \

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

' j" h; b- W8 A+ D% `+ U

1.1 smooth函数

6 S/ H% `. j& g* m

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

J* ^; u0 P( Y2 a* G: L+ Y. y# T& Y; `% g

1)xx = smooth(x)

! V: v7 t/ d& r# n* d

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

" f3 d2 e# s Z2 O$ x% _* n" h

xx(1) = x(1)

$ w2 F. b) O' i

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

: X. Y6 x' C" m+ D

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

' s9 D8 A7 T% h: d8 ~

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

& Z5 E7 Z/ B: L/ m. x$ S

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

9 o1 H! I5 K5 k* l* l

2)xx = smooth(x,span)

P. K5 M5 a3 ]/ M

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

) z/ n: N. K5 f3 u6 L- u3 [, T$ n

3)xx = smooth(x,method)

I4 Z/ @' y- G5 S8 K3 B9 ^

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

# n, Y O% `& W- m! n! y; h7 T s

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

7 O; k o0 j1 r' T7 u

6 O, x7 Q5 y4 Y4 X

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

. o5 {+ W. Y8 ~; S, x1 j. @2 ?% P# B% v; N

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

7 q) a6 O2 j f$ ^

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

7 @1 j' X* J8 z G" w1 ~

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

$ a8 ~9 s7 Z _! O! j& _: A

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

9 u: i8 g1 E/ _$ R" S' Z9 m

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

& Q) ?! ~+ }( D7 ^& `5 i H2 A$ D# s' L

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

9 J8 e. ?% Q% i( V8 R

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

$ _% O1 K. r6 f, L: ^: a- _

【例题1】

* @5 X8 j& H- |& W, c" ]

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

/ `* _- T0 {7 x4 }" ?

思路:

( Y( ?7 N! F, S7 l( ]: y

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

. `/ b3 {' p7 r4 X1 T ]* N7 `

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

% ~/ ^! v# B) O$ h) s- N, I

3. 绘制加噪波形图。

- n1 A( t: { c m% m

解题步骤:

) ^/ C9 q: S4 `3 q! f

1)构建数据

8 R2 S* Z1 g( O: Q2 i2 G8 l0 {3 X

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

* f6 |! W0 ?, ^- h) n' c

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

6 Z/ a! C, s: U- Y* X+ ^% o

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

& h. K* Q3 n+ K# a! f# K- {

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

- f) ^2 F) c/ i( d* O. U9 b

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

8 g* p, r, \$ N* y

2)制作基础图

2 s; u) t. U0 r$ Y" L- J# v. w

figure; % 新建一个图形窗口

1 g1 y- I" J: P' W* o7 c3 h

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

- w8 i% Q( c3 Y5 e. j5 E

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

: I( \- @, Y; ^5 B5 @% M1 d! u

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

) g$ b5 z; m; X F1 P" n. x

, l" Q2 |( }6 J5 X4 Z

3)制作平滑波形图

6 c' g* j5 o0 ?6 z

【方法一】

4 l# y- e) Q" X; V4 X1 B

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

4 R0 u) t! k6 a7 J. H7 h# t% o

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

, V6 C. W* ]" U$ s0 u7 |

figure; % 新建一个图形窗口

$ }; v4 n3 ^! f0 ]; ]2 P

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

. H$ y6 Z6 f, k( u! e+ _) K; N

hold on;

. k+ `8 Y! _* T

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

) ?$ a3 b/ u p: o) e8 R

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

5 T& z& O" p0 s7 N/ n

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

: C' w7 y. b$ e0 [" @8 q5 b

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

/ U# \$ y- ^% X9 |5 G

5 s x$ @- `" v0 ]& I1 l9 s& M

【方法二】

. M" |3 ?0 x+ T& [& O8 J- k

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

4 {. B: Q9 D8 v y

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

( B/ ?! Y: c v1 |+ d+ x/ o

figure; % 新建一个图形窗口

0 r, p( ]" m! A7 q* `/ U

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

% R& w3 Z! C% g! q, ]4 u

hold on;

. i$ E& v% R) o" k0 X8 E

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

8 {# n. j; n) u$ C0 v0 X# E( R: ] b

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

, f; Q+ {% H8 h1 ]

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

7 o' w" S, |* B c, E9 `5 U* z' D, _

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

( }; n; l8 T4 k. Z2 b9 f

$ M W4 z8 W% B

【方法三】

2 B, R6 R- o/ Y9 c, g

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

/ l6 N7 P' r4 [ z6 b

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

1 ^: O e5 X) C1 m* P: ? w7 s

figure; % 新建一个图形窗口

& W G4 q7 t/ T7 J: k$ a0 s

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

+ |# R4 E6 I6 f' P, o4 h

hold on;

% K5 Z Q2 V) o8 T' y) z

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

0 S* |) t, l6 J, u

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

6 {- o! T, {* _

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

' }# {- V9 t* r! ^+ p" b

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

6 F4 v- E& C$ Y- S! Y6 t

, q& [) e9 Z) u: {1 R- ^9 M$ s# q. |

【方法4】

5 C G. }- `( u

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

0 Y' l( @7 W4 j* m2 l

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

K5 n( C1 Q+ \) }( R+ p/ U

figure; % 新建一个图形窗口

' E6 U' I! ]3 z) _( U( A

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

! i% y& Q+ f+ ]" k w; y$ K x

hold on;

7 I; m1 a5 e- x/ a G

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

* o; M1 C4 t3 p4 G

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

: l' Q1 Z$ Y4 J- A& x: ?

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

. u. o0 _6 a3 |. j1 x9 g4 D

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

a# b) t0 m3 h% p1 s* j

" m Q3 t" B/ \9 d# T

【方法五】

4 ]/ a; v9 g3 k1 w+ ]1 d+ A9 Q

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

5 @" a# [2 h" b

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

& g- s( ?! O$ Y6 K" v

figure; % 新建一个图形窗口

* D: y+ h3 G$ p9 W! Q8 d; y) Q

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

# Z, k$ X1 _% U2 p' _

hold on;

9 v% W2 ^+ r6 [( c1 Y

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

* e1 E" J5 s6 X1 }9 n* r8 C0 L

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

5 I6 n h+ E+ @& \1 I' f

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

* D g; }/ z0 D% S$ Z

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

: p. p0 h- s9 R% X! ?8 m5 |6 J

' `$ ]0 M& p0 T6 i8 Q) x- V1 F8 O% w1 q5 E" ]" h- X7 W $ J8 H/ [; U8 e( _4 Z ) q6 n! @: S) E7 e# w& B! c \# j ; q# y7 C! z; L& M
回复

举报 使用道具

相关帖子

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