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

[复制链接]
+ \9 m0 U I2 ?/ v1 v! V

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

3 o4 |" U; o% ]) E

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

# y3 E: w3 `# D* r/ @6 V0 ^

1.1 smooth函数

/ U* ~- V! N' a; v: _' ~

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

* w3 ?5 t a7 v* A/ w5 ^% `+ Z* N

1)xx = smooth(x)

6 \2 M, m, L" e% R$ j- f) ]: S; {

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

& ]+ [' v/ a0 U

xx(1) = x(1)

1 {! a4 l; _* _

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

; P& u. B) p) V! c1 f9 R2 ^- j4 ^% A

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

! B" A* {' Z" a% x1 e$ z

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

. x! q+ ~" Z0 l% e) q& L! o

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

) }' r' k# w6 @

2)xx = smooth(x,span)

! Q) s! p" t+ P/ G" d& r$ _

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

& s' u( s/ d9 |

3)xx = smooth(x,method)

# G$ i% e5 U5 @7 c7 g/ K( [

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

2 j* E6 `+ G) W) U

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

7 `- b. e1 D# X4 ~

; t; N: \/ s& F, e7 v

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

1 {0 [( p5 M. f: p% ?, b1 Q

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

8 P0 F( j: U: K7 m2 x

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

/ | }; ^% _' I$ [4 i; q! [ ]% H. `

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

' }: P2 g% H* e3 N. R W

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

, q1 d& ]8 A( v

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

9 i5 y. K5 X2 M: K i+ J

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

6 T& Q/ {; ]( `. J) B, ?1 K

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

7 ^ H; b8 g" Q$ m' S# L+ L

【例题1】

+ y. y0 i5 O0 y; U8 F7 W

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

0 H' k6 f* O$ q( y3 i

思路:

% g! t0 Z; e. V7 q: g9 v

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

" ~/ A4 }9 ?' H h. R0 {: w' C+ `2 U

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

# v5 R) o3 | J2 M5 y; \8 j$ S

3. 绘制加噪波形图。

$ n Q/ @, N6 o8 |

解题步骤:

' Y/ ^5 y8 l3 ]- O) G4 P

1)构建数据

2 C u) ?% \: a3 ?7 r$ L* d/ ~

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

& s' v- m- ]' z; I

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

5 k) g3 { r4 ^3 k7 o

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

0 q6 V9 i1 |1 s! F

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

3 M7 C9 z4 p5 x1 X( y, E

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

9 }1 L Q8 d1 L D7 p( [6 z

2)制作基础图

/ ^3 j: J: z9 b8 X; K

figure; % 新建一个图形窗口

( T1 d; M3 y/ Q) G' F* _

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

$ E" r/ s& W# k- I7 b. t

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

" `* L M9 d, J$ m8 _5 q7 m7 f" i

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

+ @; }+ T! O/ o0 u* w2 l

S1 z) U/ |0 c( [" g. F; U

3)制作平滑波形图

! W9 g8 g8 e8 Y+ s2 G

【方法一】

8 }+ q* V. K+ E8 X

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

8 }, B; d/ I( t6 g/ @, B

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

3 F* i, A7 n: t0 U2 q

figure; % 新建一个图形窗口

& z8 x; X$ B% B. { T

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

3 E$ _8 s5 E" U! ~ U+ t4 e

hold on;

, a3 K7 B+ i& Y/ T! w4 N0 o$ K

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

; A3 q- ^; e" B& f

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

8 x2 a+ K& h" j4 n. f

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

& d& z* M( u' W

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

! y7 w8 [) E& n8 P

6 p& t: y4 Z2 C/ O* L5 y) c

【方法二】

3 _" d% n: l( G, k) x- ]

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

4 c- k5 _5 D: s! r

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

8 c1 J% L# r7 D1 K! P

figure; % 新建一个图形窗口

T6 h; b+ h1 ?9 C7 t4 I- N) U

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

z4 K+ q' N, l. k) Y" n# p) `

hold on;

! l& V4 g: ]' s- x7 p8 g

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

1 M% n# b. `( ^" O3 e

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

1 N! `1 N6 q; w. \! e3 u

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

. Q2 H6 _" T* z2 k! u/ @+ Q

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

/ i+ @- g2 O# b) H7 J! ~5 h( w. x! {

$ e$ Q8 z+ i! R" H' {, j' m

【方法三】

4 K" t+ w7 Z7 H" h

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

" o' t7 `+ t' X3 h7 N1 W

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

" n# ~; U+ y+ ` W3 Y

figure; % 新建一个图形窗口

. U/ d1 W, X& t6 F" x) ]

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

+ V N) T4 e2 Q9 O; w6 p5 |$ j

hold on;

/ k6 L+ y: p0 K/ Z

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

: g" r* s9 `- a

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

. j) V- i% s- o( K8 b! `. E4 a& P

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

9 ]9 |$ ?! z v( j0 t: D( z

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

! Q. m I. Y( l N

+ n+ e' w2 H% C$ H) \4 j' d2 T2 p t

【方法4】

! O4 V1 n; Q& n6 ~) T

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

8 k1 g1 ]8 P. p" B* I

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

' B# j/ ^) M3 _, t1 K

figure; % 新建一个图形窗口

2 y4 d! W! |7 [6 K

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

5 G! h: q5 D/ w2 P$ r9 j" f) x9 c

hold on;

, P' a4 V- j: B0 I' \( s$ ?, U

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

* H9 ?$ d/ C0 f

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

. K8 c3 H( D3 ? c; g ~0 J8 p

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

% e0 |$ H c( D) W

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

+ Q- D5 K: ?/ ~% \% l

% u8 n1 c1 ?! y# ]5 y/ K

【方法五】

! d* r. ]$ [" E# ?# {0 L

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

: z) B4 T0 A; I7 e

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

, L0 @6 L+ x: Y& z' G7 b& @

figure; % 新建一个图形窗口

3 L+ {3 h4 e' B7 ]

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

, i2 U* f5 w7 s+ N) ^3 s: ?

hold on;

! a, @6 W5 I' A7 y. W a: @0 e3 I

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

, C" H% _4 V+ |

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

* J& d! ~! ]" R w& O0 W8 u

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

u3 f5 X5 ^3 Z) ]3 n/ ^

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

0 N" Q! D) i4 g& W& }' s: B

- i- D% `3 A& L+ C4 _8 o + c. h9 {$ ?! [% L* v2 q( r- d3 O " v7 p4 x+ q* O; j e1 S9 T( n; T1 v1 B $ i$ ~! \: P9 n9 V$ G
回复

举报 使用道具

相关帖子

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