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

[复制链接]
2 K! A h s/ x+ F

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

3 `4 p5 l4 c/ q/ C& n; K& W

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

) l& ?! L* c4 T/ W" m* C# t0 Y D

1.1 smooth函数

1 I, F' d4 |8 z7 a

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

, R+ G1 c( n; b% F

1)xx = smooth(x)

& w- {5 C/ S# G. w! t4 q8 E2 L

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

& w) X- |0 J" F

xx(1) = x(1)

" ?3 }2 N" T% U9 T" ]8 k; `

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

; E6 [ d7 L% @/ i; N" b

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

, [( s4 D! ~" F4 q x* P$ ~

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

/ x+ n& {+ c) K7 W2 B' C

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

7 J+ H6 |9 E- F; `+ X9 @6 z6 T

2)xx = smooth(x,span)

# d0 f! a8 i; P0 G2 e. y5 c' Z

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

/ ?3 w! X3 S0 f

3)xx = smooth(x,method)

& R& A+ D5 m. }0 x5 `& D: F$ w

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

% F' f8 D# a$ ~2 a8 b, b& ?2 L

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

/ h6 z7 ?, D L( O8 ^+ I

: K) Q8 I6 z" M) {5 |; C% T

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

; Z7 Z E& K! O+ b& s: y$ ]( T

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

) j$ Z# l, ?* s+ n+ E& l! L- K

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

% \' a% |2 M8 d5 e8 }, E

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

) L" ~% b s* f: j7 n; K) {

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

1 D7 U2 L3 [* C

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

# Y. F6 h! i# N& S. U1 c8 ^) |

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

; Q6 z; |+ d% T5 N! }

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

; G o! O: `+ r4 G6 T" t, c) h

【例题1】

* p/ P6 _- x, ~8 i/ A3 @# Y

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

/ x: o; r7 D0 B8 ^; L/ Y+ Y

思路:

, c8 J( Y( x- j! x+ \* j& J

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

0 P' [/ Z! V9 ]

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

; _5 q1 a/ S% |7 }7 x

3. 绘制加噪波形图。

6 B' [6 c' M. V% v# M% d6 I( b

解题步骤:

5 n) q8 [0 g, K8 [! q8 K

1)构建数据

, P7 `, E8 t1 g4 M, h, c/ E2 P

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

5 J, W E' _( P g, |5 a1 M

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

9 A* L* e7 M# M z+ H* y! W' N: ^! [

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

% m3 p& D+ }! {4 C" K

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

& ?6 g1 v% ~# S2 Q0 h1 E9 {

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

' v4 A* `- |$ ?' S9 Z2 b

2)制作基础图

. z+ |' C" J j1 h7 S% R

figure; % 新建一个图形窗口

5 b/ c8 K0 U& O+ g

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

$ q+ x* Z2 _9 O* v2 w

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

1 G. |! d- l1 n

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

- x& e5 f" Q$ m# B

4 J$ O( M. s$ h6 d* { M9 z- j

3)制作平滑波形图

! U7 r) e# R/ o8 y% v! f _" ^

【方法一】

9 i: ?. v$ C$ p9 l& G

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

* k8 g; Y8 k, l5 F$ l- c

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

! p3 U8 p! c; h( n$ O G0 c, u

figure; % 新建一个图形窗口

. |# s' P7 ~3 i/ _' H

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

5 Q* k/ Q0 |7 V# X

hold on;

" O* d+ b. w1 }$ K4 ^

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

6 Y% n! ]2 [0 g( |+ `/ r

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

: z! v0 h, g0 R" h

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

8 A) w3 f2 p$ M) \

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

( F4 J5 B* G! c

: O* Z; e/ Q. ?. P% k& J

【方法二】

; _9 D9 W& h& p% l0 A, S

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

G; N) w; n! R( ^2 M |+ i' M/ O

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

0 c8 w' N0 {( A! u

figure; % 新建一个图形窗口

& |* M. R* q+ {: M& v' u# L

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

7 Z/ ] l3 K: O- v2 } V9 A- a3 F8 _

hold on;

2 y5 z0 i# m1 m, I' R' i# ^9 s

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

* s. T% F( \9 V' t; ?# f1 c4 Z

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

8 G, o$ r7 e: m _

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

`0 D, l. k$ f) t

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

' C1 j0 x2 k/ r/ B

$ N" N& A' o7 B- z( Q3 O: d" U

【方法三】

! p- S; m1 Y: I8 P

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

: q# w8 t, @" t0 M. w; g2 k

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

3 @/ p% o: o6 ]$ q9 V1 o

figure; % 新建一个图形窗口

: \2 Q' S. E! t/ f4 q

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

4 `: b5 R- B9 H* \% B

hold on;

/ W6 r& e4 [% k% z- D

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

: z$ ~9 u5 u8 e' l& |2 R$ O$ E) k3 V

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

: P8 _) E! q; i) a9 E6 @- A

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

! f: K5 R( r0 [9 t

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

& j# P/ _$ o' x) u# H

5 M0 d1 X+ E% h/ i+ w

【方法4】

2 H( c. ~' l7 _0 b2 |

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

6 |6 ]& q3 y6 w0 @( R! k

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

, m( I3 e4 s/ c% `

figure; % 新建一个图形窗口

0 ]0 ]. f& T3 l1 z& N/ o8 H& ]# ^

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

# P# t8 P E+ ]) C

hold on;

8 e; h2 U" d) C2 e1 d+ L$ W

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

) P0 [4 K8 k0 U8 Z9 {

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

3 D. `- y! V6 B4 p2 [

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

+ k. e) h: J7 O0 f3 _! W* c. R

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

$ _( y( J+ I( p8 |& c2 ^7 n

# k. p) a* D, n9 Y7 t

【方法五】

+ t# i: @ c- A& Z* m( |+ N

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

. `- d# y6 l2 X G" }7 Z

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

: e: w- {& M- \0 V5 C; [5 ] ]- H

figure; % 新建一个图形窗口

( W" ] M- n5 L. J. O

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

& O/ ^+ V7 Y8 B$ p. {7 e3 U

hold on;

6 `* d0 D: h- h/ T$ ]

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

. N6 w) C3 ?* h7 s! Z, \

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

m7 v4 B' E' T& K2 l6 P

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

. x' H% n# R$ N2 t& U- f

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

7 Y( e9 N1 _2 e4 ?/ v% @, H5 r

3 ~0 E& u( O$ h : h: k7 U2 [' U8 i( K0 P# y& P 9 Q6 X( g' H r8 N% W5 z$ a; q ( k/ ^4 j4 O7 S1 @# Y1 e( q+ v( w* n# o! X. a L- b) z
回复

举报 使用道具

相关帖子

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