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

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

[复制链接]
/ F2 \- y6 q! w) z

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

+ q3 i. h# d# m

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

5 w* h( u) q0 R: f. y

1.1 smooth函数

; `& p1 ?5 e6 [+ p

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

6 T5 i: t0 N( H2 w- b1 U+ Y

1)xx = smooth(x)

, x5 d7 {4 ?4 ^: _5 n; W

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

" O; V# N. n; |$ V2 a! D5 E

xx(1) = x(1)

1 p8 m6 t6 A, \6 R' o$ k9 [

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

( f. M# S* l& X! r* o a

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

) g" X2 f* }, G0 V

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

" u% `0 i+ a8 t+ g

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

) S9 H; A. p; m$ M. S- [' c

2)xx = smooth(x,span)

- I3 a. t4 Z9 M4 b6 t1 Q/ \

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

4 K& R2 `; ?6 k, n3 w g) L8 Y

3)xx = smooth(x,method)

4 D7 Q3 A# Y/ k4 Y% y

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

, o" C0 e* h% Z7 s

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

- b- X$ t- Y% n" o

5 [6 b% c* g: a/ e' I

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

/ |; I- f4 S5 k

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

( k; @0 K4 D3 Y* V I L

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

7 y& O' J4 e1 s0 K( W

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

- Q. c/ f3 Q4 e

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

2 k% k' z6 i' C3 y

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

' G8 n# q! Q& a: {+ {

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

h' R: q& J: l1 a

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

L1 h2 L' o, L

【例题1】

% j( G; B3 v( Z* P. P3 r' }

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

6 ~$ W3 L4 l$ V( }

思路:

( ?( B6 q: L' G) B& U) n6 O

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

0 f$ F* E9 z, t

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

: x- G2 y) z, O. t" b" u

3. 绘制加噪波形图。

) V0 X# H6 ?! W' D0 D! h9 y2 G

解题步骤:

9 I& P* x9 i8 p' ~$ a: L

1)构建数据

P3 e& }0 ^" _! Q, ]. i$ {

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

3 Q7 ^; Q# Z7 G

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

& |' x" m2 C# s" q1 U& S2 ?+ A

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

$ I# f% S8 u- f( a \

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

" m% m2 T+ o; b3 f* ?

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

7 Q: h+ y- U9 Y. _. f7 n( ~( x

2)制作基础图

8 D' X8 |( n& F9 h

figure; % 新建一个图形窗口

2 J7 @( R) r* H1 R9 b

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

+ ]. `8 y. a9 |3 c3 I( [. @

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

" t1 Q% i7 O$ k; i

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

, B; s. \2 i* V: I6 v' |

5 J4 f9 _' S: W }$ U' Q$ L

3)制作平滑波形图

O" ~9 q) b/ l3 W0 y

【方法一】

' K: K# r+ K2 P# G, @0 m

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

) y5 q6 |8 M2 s2 P# z( g

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

" i, w; x g, p8 d7 G4 k2 U7 h

figure; % 新建一个图形窗口

' L6 F; m4 v2 W8 ^! G+ X5 i: [1 E( B4 f

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

8 e. w5 z0 n) z# z7 x

hold on;

0 d, z) D& u& r# k; x/ `

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

! s8 \9 c2 k) g7 ?

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

" E" @( l3 e5 z5 n/ l' s

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

1 D& ^7 o* Z' Y7 b. d

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

( N3 H+ g! r* {9 ?

) _+ n/ | i: z3 K2 r+ U

【方法二】

X4 q9 U g6 K' w! A3 N

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

& I; @2 p# R/ H! D# O) U

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

" e, @0 ^$ o( A- W! ^0 h; t

figure; % 新建一个图形窗口

/ o. B, P/ V8 o* z+ z6 l

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

+ o% u/ R$ E3 k6 e

hold on;

% p4 R7 Y& Q6 j) T' ~) J/ K. z

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

0 r0 w3 y& K! I. \

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

5 J Z5 ?% c4 F/ C7 d" q

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

" z) S" u! J" I6 h

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

* [/ Q7 z z4 a* f

4 r$ q: [$ i5 ^+ M+ g* A

【方法三】

, r& b* R3 o# g9 i( i

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

! E$ J/ H5 B% N) u

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

$ [, j+ ^7 r) y, @0 ?3 r

figure; % 新建一个图形窗口

$ c, [$ ?) G. e

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

$ z0 C# h7 A! C( P

hold on;

3 z# F' Y% A! ~5 X

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

; y! _8 K# j" w$ O/ E8 G/ f

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

- E% M' d' J. F4 D) q

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

% ~% }. }. h6 m f4 @

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

9 |/ c3 C% x. o) _- l- D: O

+ v0 g* U/ _5 P3 j1 Z, o

【方法4】

m U/ |% h0 B& Z) a$ n2 K

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

4 a# x6 Z; S/ [8 l1 G4 t5 p) U& t

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

! ^6 \& }8 @4 H

figure; % 新建一个图形窗口

9 R" u8 V' u7 h0 ^% [: c+ ?

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

8 \9 r3 C) ]6 S6 {& W; H

hold on;

& t7 P2 ~7 C/ r# ^

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

# T% G- O- \, w, w

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

$ Y8 {' H6 h" j E- f$ c

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

4 e3 Y& I( Z" E8 ~! r7 r- e/ E

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

% r, v# F! F" f+ Y! E. }1 X9 x

1 H4 Q3 J6 @/ h' j) t

【方法五】

% t8 @7 _% X% Z& T- c

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

, ?# J6 y; c; m. O

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

% [/ w2 m. d: T5 g( j3 [% v

figure; % 新建一个图形窗口

K/ E) ?0 ^- L

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

4 [* J/ z2 b1 I. `9 O0 r2 g

hold on;

3 U3 O' v+ j" ]% g @

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

/ p' V5 v j$ h G

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

! C" ~/ ~, M) N

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

. D6 X# U2 v" @; e+ Q5 F" l

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

4 s: f# J! X$ J/ [' v

) x: @4 M- R# p( X' C9 N0 l" T $ F; t/ k! q5 T0 A! I- ^2 a) n; _) P9 H 4 d+ l t0 c: W! Y$ g. ?, F * P/ e d. W% ?
回复

举报 使用道具

相关帖子

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