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

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

[复制链接]
3 _8 y9 `: |) k, i

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

- O2 M' n; J4 k+ b' l* g# {

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

& X0 w ?7 O ^& C) L

1.1 smooth函数

2 t3 \; K( }" m0 Y* ?# E; P$ k

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

- z8 n$ S2 m7 p) X9 U# x

1)xx = smooth(x)

( w( ]# T/ l+ d# T

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

9 ?7 i: T, O8 n0 T5 ^

xx(1) = x(1)

( ?( Q3 P1 @+ i3 _) x

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

2 \, y+ `: N1 x( @" j& s

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

* C# T# O8 ?+ m$ C* y5 M/ J( c

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

+ p' l- ~' j/ Q+ @& F H

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

6 x3 N& ]2 g9 ~6 l/ X

2)xx = smooth(x,span)

0 A# H* s% w. f- h9 t

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

( [" j. Z2 x4 G: N& n9 ^

3)xx = smooth(x,method)

/ L e- `4 i5 Z" u, @" S, z4 _

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

5 w! W. V8 H. K/ g5 x8 e

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

& ^ l( v% ^. G* v% c

9 G- x0 U2 R z$ U- s2 o

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

8 L4 m- [& t" [% i- y) _9 y

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

1 h4 R3 z* C W# K

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

- D. n' U/ B: ]" C9 G

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

f' D: m/ H( h2 I! ~& v4 a! N

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

' L/ [- l4 y5 ~; p

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

$ ~# T0 I# F3 X

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

; h9 I0 R% a0 M7 H' o

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

8 c# t( N$ V! F. y4 j- X' k& R

【例题1】

: ~- n$ D. i5 L; a3 D

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

$ q6 o& w4 I" j0 A

思路:

( `- R# Y! [0 \/ q

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

& N4 \ Y; N% {2 a3 H

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

3 h- s7 ` o# ]: J( X

3. 绘制加噪波形图。

+ `9 l. x; ^5 W( \; g" [

解题步骤:

8 |# X- G U' S S8 Q

1)构建数据

! T+ a' g0 B9 j3 v) w3 [6 w% D; h

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

9 S5 V% C5 W; ?

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

4 s- ?. X1 T" P

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

' d- T0 L) @$ j, C9 j4 L

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

' L- S' ^) E5 l1 q2 t7 U+ \4 x5 z2 t

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

3 A& z& \; \5 Y' c+ x" ^- x

2)制作基础图

. U5 G2 ? T$ Y! n

figure; % 新建一个图形窗口

: ~+ X7 t: u5 v6 P1 P

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

; X) y! M5 x: ~4 K& x0 @7 S& t, ~5 S

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

( X, w5 ~6 {1 @8 J: W7 H

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

) u) A# d- Q$ \+ {' |; j

' @5 s; H1 z ^; w- f) A0 w

3)制作平滑波形图

4 @8 z X0 G6 `1 W6 f! {

【方法一】

- J3 R4 E+ m1 Q4 d2 d4 N& {$ e

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

, h* J6 ]8 P1 X; g" u! k8 h

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

3 o% J% C) M( {+ C" ^

figure; % 新建一个图形窗口

j; `$ H1 ~( W1 C) P; u

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

6 Y' V* [& k' @/ |

hold on;

5 c6 ^ q) R! Q. }

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

& O# i. c* J2 L# K# @1 t. Y

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

+ j: q9 M- A- w2 L

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

, q/ K b( D; r

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

& U! |# {* G _' `* @% a+ _1 E

8 w4 ~" }/ |* H% z; V8 n% ] C

【方法二】

. u6 y5 M; `$ u0 o$ n& R

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

" H3 t k6 C5 s

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

6 t/ U3 q) d, ?2 Y) Y4 m

figure; % 新建一个图形窗口

0 u6 S* t5 z1 d2 I G( K: L

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

! Q! k- q9 e* A

hold on;

0 T% e8 g0 j# f6 U2 C# R6 x' J

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

( d$ `1 T: T1 T: m

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

" w/ s# ~' p! G) {/ f

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

. d$ F7 t( n# \4 E

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

J; O& S7 E/ k2 J7 m( ] `

) u! a2 X$ q% p4 ?; T) N$ i$ L% h7 n

【方法三】

" M- K8 V; {% D7 t* M/ p* w

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

; n+ S! ]7 { Q6 R% }

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

9 k- O( b) U6 P- y6 H, T6 ?

figure; % 新建一个图形窗口

7 O K8 Y- @$ X/ J1 p1 O" H

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

7 {9 q( }* X" m# N; @+ H: L

hold on;

- w% k7 A. E9 f+ d" U

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

1 s- W& P+ q3 u+ H; k

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

; r1 s1 W6 t, P0 d3 |1 z- h8 I7 @; y. J

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

3 v' ?4 f$ V0 K2 E( p3 S

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

8 N" V& e1 x$ F4 W

% K% z) d) i9 D9 E$ `5 ~

【方法4】

" x& i. M$ N, [) `: W

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

. U- Y3 ?( ?# P/ E G7 R, w

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

3 X _ E! \$ }. Z0 i* d# g: Q! X

figure; % 新建一个图形窗口

, T% t! ^$ A- _; ~6 T% k p

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

2 d4 e" p' d6 p8 I/ W, ~( u: w4 P. Y' s

hold on;

2 ~3 y* l0 S, k6 F# a. [- S

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

7 x# n3 z2 U* t" G

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

, K2 d* z* \; E) `# m8 U

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

6 Q. F: `$ h! u5 x

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

7 y& }+ i' }. Q( n

9 i9 A4 J1 f, b

【方法五】

% v: Q* [7 e5 i1 t* b

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

4 s+ J6 z: p, {. p# e" h0 \ q& I

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

3 @7 C1 o w2 B

figure; % 新建一个图形窗口

; X' A6 X( j3 O: Z# k

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

3 o, b/ U+ u/ s' a/ B

hold on;

2 l0 d" ^2 h! z7 g- a

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

2 b8 l! o4 Z& D: z6 I1 `- c. W

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

9 d3 m) P. c( D' \: L- E

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

- e- h& j0 t9 L4 i1 L4 X% ?: n

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

7 v2 |! W, u' c- n1 G/ ^2 Q

, O; |8 x+ k' m" z8 b ; S: @* H$ L+ \* B$ o & i+ e- m" h* Z& g* K) S- |0 J) u3 }, s7 `9 b 9 J& U; i8 O3 O& t. x+ O
回复

举报 使用道具

相关帖子

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