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

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

[复制链接]
" j6 @" d* W: L1 h

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

8 L; c; s% m7 W8 t

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

" f/ c3 a9 V& D- G5 H5 j L& w

1.1 smooth函数

/ ^1 a% q$ M0 m" R- g

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

% B% ^$ m$ O1 A, L7 N

1)xx = smooth(x)

$ E; K6 Q+ F7 {' J# s* I

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

, _9 o# [0 X# D9 j

xx(1) = x(1)

$ m% R2 Z3 W( Z

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

& Y$ t' I5 c3 j& `0 O( j

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

% m6 Z. m% P8 G# C: y7 C0 N( R

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

, g( H/ Y8 {/ T- U" p) ]9 A

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

! ~7 M, r- Q! x7 o4 n5 E! D% H

2)xx = smooth(x,span)

2 q! l- x- |2 h) O) X

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

7 @) {, j8 ?8 Q' E/ n9 j% \- q% x& q# b

3)xx = smooth(x,method)

$ t# ? k/ G1 V2 O

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

- T2 Q8 f. p, r; M1 G9 l7 _' j

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

8 g( t3 t5 [/ a; U B5 ~# ]

2 r% w9 W$ `' E. l1 M( u. ~( [

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

& a7 \! j* P# g$ F

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

( n7 j! P1 i/ w h% h+ X

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

2 A* D1 _' T. G6 ^& Y

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

( W2 _2 {8 j( z& i

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

' N: K: X8 Z& d& P

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

% o& ]2 ~* J& v5 o; Q

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

% q* J$ F* _9 x0 G$ e6 u; D5 n

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

$ M9 {3 B( u. _# ~, w1 q

【例题1】

! K, v8 ?3 I4 `8 H

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

) d) r6 j* j, d U v& k

思路:

! [. G. q* g* u& T# D

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

7 C7 ]' b+ f1 e5 e. \0 u0 y

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

5 N+ v/ B' R0 s, |

3. 绘制加噪波形图。

; A3 v/ \7 ^' v/ _6 ]. o# Z

解题步骤:

% ]$ {( ^% k) X

1)构建数据

4 c% [2 D8 k" W! R+ C0 w

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

I$ {7 n7 Z& K

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

% e. Q% t2 l8 m6 o0 B5 b% [

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

0 ?! X9 ]9 [0 ^

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

1 I# g1 v* i7 G) t. B) v5 U- Z- B' W

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

1 |1 k3 _7 j* c

2)制作基础图

8 t; t# B* s) J: M* i

figure; % 新建一个图形窗口

& \1 H' ?8 Y2 ~6 H; I8 x! }

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

% p9 d3 X. A. z/ X; C% @; _ j

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

2 f( m G( @6 ?" y& n# K/ B

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

7 O* S# ~0 W! k1 l+ u+ Z% D

7 S* I( F% z9 w0 w) M

3)制作平滑波形图

, j5 `, Z- Q* W1 O* N! B

【方法一】

9 H9 c! ~8 r0 |

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

: m8 c% ]7 e d- s( z! c; k

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

5 {8 ~- F7 v2 {$ F& D

figure; % 新建一个图形窗口

0 D: N' M4 R! d! B" V8 w0 j2 s

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

2 H2 z$ \ p* x5 W

hold on;

; g! I/ Q/ F* B! \& m

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

1 w/ J9 A3 }3 C9 I, y

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

. q" J$ V7 e4 d, w9 l/ [

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

3 D& R. T9 u& o$ R0 B& j

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

" ]; Y D9 h! u5 C, X$ x- r @, |) D! N

- d! _8 `/ I9 M' l7 l" [

【方法二】

& ]# c! F" c B* N' m

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

3 [4 u% P! P6 B- b8 l+ ?4 t% n

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

J- S) c [) l, |# Z& `

figure; % 新建一个图形窗口

2 L- Z, x" x2 q7 O

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

" E$ p1 h7 W4 o# C8 {

hold on;

7 ?: A' e: Z" h9 C* X

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

) X7 e# r/ Z* Y: N* q# K

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

! U7 D4 C4 p2 t; t3 `8 s

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

$ Z$ n1 c) Z8 Y. s3 t

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

8 |$ {. O( i$ H2 j

( f0 u9 i/ z' C( f; ]: j, F: h

【方法三】

/ B- R' O* ]0 h; o: w+ O$ l. L' n8 ]

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

2 n1 b# o% K# T$ }3 \& s; v

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

' g' X) n5 x. P4 B4 e, l9 l/ W

figure; % 新建一个图形窗口

" x5 z0 B+ g/ P& e& j

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

3 M* k7 Q' i) ?8 c

hold on;

8 |. ^2 Q' E* d, S

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

2 ?: u) b. N ^" }- K3 ]

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

" P" |2 {1 |& W6 f' t9 [

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

0 i( c: z+ i7 C) U8 b

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

( }5 f2 p- |7 R' p

3 W. q! K- X7 t8 @$ H& L

【方法4】

7 s( Q2 }2 R# H/ e- e! R# m }

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

) h% \$ v% i2 g% l

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

3 j, u7 q% l& b( ? E

figure; % 新建一个图形窗口

7 `0 `6 L) N: K3 r& ^

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

8 ^3 K6 w2 s Q. Y

hold on;

N5 a- p6 b5 M

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

8 l1 K5 i# f1 B G0 i( J

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

" _7 r: S0 |+ F4 m/ c. F

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

8 D) n5 n3 X7 s5 E. X/ R

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

3 _1 m* [4 R6 {5 q, b

* S. C7 Z" {; \1 j( \

【方法五】

) o6 b% n2 Q8 K

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

* b' F6 n; c* Y' X$ Y* Q# u$ d

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

' a1 y$ t- S8 X" E

figure; % 新建一个图形窗口

( `7 Q3 Y6 n" V7 U* v1 Y

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

- v/ I9 v% h0 h+ V. S

hold on;

0 V& _% b9 s( D9 I5 s

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

: J# r: F" e" c$ g8 a$ {7 {

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

Q% g- J7 ]; b% @" @, J6 J* f8 H

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

+ Y7 U! Q- T, I) K# L

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

. C f# B" X4 E9 L& Y

, _5 N: u5 e* d5 R5 u+ Z" Z, P ) k3 S" F( ^6 U. \& O2 Y' Q# Z$ Q& c; _( f ' b' H8 N- f/ h) r / W# E2 `: P+ H' ^7 L3 S$ W
回复

举报 使用道具

相关帖子

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