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

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

[复制链接]
H L/ w; d, \+ [

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

2 l9 k9 c& U5 \

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

2 w9 V4 g! f1 r: t J0 a

1.1 smooth函数

) B, M) k2 y% q% [

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

# E/ B/ m6 z# a0 X. _

1)xx = smooth(x)

& h6 m# H3 A8 }2 C& K3 R

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

! p. G6 a4 _8 P9 C2 |; {

xx(1) = x(1)

k, X8 M8 p( }5 O$ n/ ?

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

" r2 H6 B0 f6 P3 U6 T' D

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

) X; {3 i# t8 h# a- _

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

8 w# X% J9 L, M1 d: l( p+ G

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

$ c; i7 ?! c1 q: a8 y4 [( a. L

2)xx = smooth(x,span)

4 i' p9 m& R1 Y, e' J2 J, G

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

]8 Y: @$ ~( D4 [

3)xx = smooth(x,method)

: `2 Y2 h# {1 ?. _

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

8 ~- Z. Z5 C8 H/ u9 W9 j N/ {

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

, o! g: d, D, S) @$ d# ]0 u: Q

4 H9 g% w4 }+ W

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

# \. L- R; V/ n2 X" @

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

/ e: @2 W2 }8 Y3 Z( h6 J( j

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

+ M: Q2 T2 n9 _1 v7 M4 b9 t

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

6 H7 x! I& d$ B

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

9 |$ [9 Q% k+ X& t) R) ^5 Y% A

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

+ r% {. X- M5 O, L" W: K

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

, Q* `6 l8 u( }/ z y: t; N( n

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

) \$ c7 N% h5 z+ W- U% l* I

【例题1】

4 Z- q+ N+ K$ m* A0 z

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

# C, ~9 }0 c8 I0 P

思路:

\. j1 [ e( o# y

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

8 I& F# ^! x! D) E* T& c

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

" K. ^0 H5 K' e5 ^

3. 绘制加噪波形图。

2 E9 X7 s( N' R8 V& R$ r

解题步骤:

- f$ r8 ] U2 Y# e/ k, G0 f* s; `% v

1)构建数据

) H: m8 ^/ b, ^6 W1 O1 |

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

+ l/ f% p j) \- Y( w

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

2 q. N6 h) l: L6 \( a6 t0 s! [& K

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

$ z1 v% D6 w2 U

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

. ]1 w0 M3 G$ V% ] C8 c: N; N# j

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

" B- b: X# Y! n8 ]

2)制作基础图

4 W0 e- w- d2 F" L V* j- y, S4 Q

figure; % 新建一个图形窗口

* B# c. w5 x( h4 x; Z( I8 K: F

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

9 U8 H2 d6 Y5 M$ w0 x* z

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

) _6 F. J8 O$ B

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

( P2 q0 V: z* Q5 K9 ~

4 d+ I9 S) ]9 {% W1 R

3)制作平滑波形图

" G1 r, g: Y6 j4 A, E3 z: c

【方法一】

3 y) |: o" V n a y& y, `; d+ K

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

* E; ?' h( `8 t) y# J! M

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

( D" K! `, ]( k: m

figure; % 新建一个图形窗口

, y1 N# k# j! @; @! ~% F

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

1 o! s2 U# h" N* s. O

hold on;

$ ~8 J/ V! X) t

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

% @5 f5 H' _# I% y7 @: J4 e: ~

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

( K9 ?8 [# u' [" b: P, m) k

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

) O3 Z0 \* G( W) V8 e3 W8 I! o

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

" r/ I6 j2 A4 p8 u. m* y) B2 U

/ t0 ?$ r" p, @

【方法二】

$ b( h3 X8 b0 q* v

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

( m2 z0 c' u- D. _+ C. t1 A

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

N Q( P+ N$ p: T1 T' Q" `

figure; % 新建一个图形窗口

& J- K0 L N( {+ _

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

* [: l2 U& h, J- D7 _

hold on;

0 x: P1 b; I% ^/ {

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

4 Z- W7 ~" R8 ]5 m3 y9 p+ |

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

. c! `) F% [. l& i5 Z

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

& h% a" K0 R1 t, d9 h

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

4 s7 K+ D! \' ]7 Q8 l8 z8 H

9 ^6 t/ O; e0 `- ~5 R1 @

【方法三】

, w3 O# d5 h ^/ M- b3 h

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

7 ]! J% d% \) p2 s2 u( D) C

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

) f5 E. r, C/ E$ d

figure; % 新建一个图形窗口

3 v& U8 A/ B) `( Z# L# [# y

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

6 v2 |4 [7 C. Q0 K$ S2 E

hold on;

1 o% j2 U4 o9 }9 G

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

3 f% F0 B- Q! z% [7 Q

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

0 p, j5 X3 D* A+ K

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

6 [& O' s! y9 T: T8 O6 n

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

% H9 V& n* \, `% E

' T: d$ G' R- `: _/ N2 K

【方法4】

$ z7 ]+ u8 n+ l3 h( N% p% C F

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

3 F( S/ k( V" h- e

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

`; V* U' _3 J- \8 w# [8 t

figure; % 新建一个图形窗口

$ s# @! F8 z+ j5 |8 R

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

6 I/ @. ?5 T: a3 `" S

hold on;

' S: O$ d) P; L: ]2 p. v0 |

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

6 E' U5 u) W/ }& O+ f7 \

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

, @5 `" m% ], j: l4 b

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

' I# p3 e+ s+ p! a' _

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

5 g, h) Q; | p0 w- s9 e# G

5 y$ P/ z$ i3 b2 n( M0 `# @

【方法五】

. V, X' z Y7 `# T$ J

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

$ h; _5 ^' i0 f

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

/ [$ d+ a9 v0 l9 W8 S: @' a

figure; % 新建一个图形窗口

' L+ P v+ e$ u4 u5 c) O

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

. K+ x5 L0 M2 s0 ^' {

hold on;

- m0 Y! A* X T# M

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

" i6 t( f( q+ A8 V5 ]

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

' f6 A% G' J% \ |3 Z+ @& q& D7 l

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

4 x7 |; ~( f5 x, W) z$ g, M

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

& |$ N, Z; k% v

- t; u3 z) A- x) O) P 2 @' p) I. q+ p1 Y : v. X3 ]6 Y# [* o6 }( O V1 n n! w 8 Z+ n" \2 r! \% J" ~3 W z0 e/ p! W/ v' q3 {2 T3 G0 H
回复

举报 使用道具

相关帖子

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