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

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

[复制链接]
/ M8 E7 _- ] V9 k3 i4 t! \

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

: _& P( ?, R9 D( Q1 g3 ]+ B; m/ A

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

% E4 q5 p7 }- A9 W

1.1 smooth函数

. S6 M! k& x6 h* h0 l6 s

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

1 f( |- z5 f0 X4 Y I7 b2 [

1)xx = smooth(x)

! a# z. M( o4 M* W9 m0 i1 L

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

! n( ^5 r7 p4 c8 B) Q; j/ |1 v# E

xx(1) = x(1)

: ~# u; i, i( V0 m2 S/ e* x5 _. k

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

- x* K. ~( F$ H, ~" C

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

' g( a+ O2 D0 u

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

& u' L( K- r2 S. j7 z# w- E0 w: [

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

; U, h+ f( [* q9 z7 q# l e# M

2)xx = smooth(x,span)

$ K( N- J2 B! f {

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

$ u5 r# o2 F9 v8 F3 Y* A

3)xx = smooth(x,method)

' h2 }0 m1 ~) w! B5 e |

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

1 s# T5 H: L4 y' c u; a" o- S

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

, A3 _2 Y% K1 \2 b" P3 e

# g G% Q! s7 j4 Z

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

I, g' F- L# e" F

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

6 s( H1 C; W* q: u! G+ b/ B

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

& Z5 o7 N% t1 Q9 m

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

# H, S5 x* m+ B7 l5 A ?9 [

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

# M, c& q ^) M+ H5 i y

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

8 e2 M' a U, d/ D1 c

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

2 u1 [7 A5 r0 S* L2 T' i7 r

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

% k" {. j" P1 @( `* t9 T0 N8 |- c( S% g

【例题1】

& k6 M) e1 f# W# Y: e6 j$ \/ N9 [+ z

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

/ k+ M" T! L/ C. f0 K! F

思路:

" p3 B: V3 O$ |, i o

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

H3 p: n2 ^3 R/ Y1 J

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

1 X$ y2 ]" V; j, g0 {: T" P6 O9 y" C

3. 绘制加噪波形图。

$ m2 u. p) ~/ m

解题步骤:

+ d2 C9 g) b$ m% _' } O

1)构建数据

% a/ ]6 J: p& k7 C

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

$ P' G$ x8 w3 D

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

2 { E2 E- Q% ^" b# y

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

4 i0 _# p! ]$ V* y$ d

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

% S; k$ n# j! f

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

3 w0 \$ c+ Z! C% k. i

2)制作基础图

& i2 b: V; M( G3 h" K7 M

figure; % 新建一个图形窗口

" T$ i B% c8 I' |' T

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

% q" {) L" `' M. B& B* |! d/ ~

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

! T" Y U; D5 C/ v

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

) [# ?* V3 s% i: N

' _8 q R& }/ Q+ `( i5 E

3)制作平滑波形图

4 P0 {7 \5 K6 N6 Y

【方法一】

6 b& R5 p( t/ p

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

, X+ a7 d( S. `5 p0 \

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

6 |: W3 I' l! @( E9 Y) G& A

figure; % 新建一个图形窗口

- j" B5 u# K! f2 f# K' `

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

/ p! a& E H, C" F& C/ a; o( B9 E0 T

hold on;

! V& R3 {/ _ j

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

; ~0 H% y- v% j- t0 W

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

1 T5 B- F: v. s! N) s

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

# \7 ~0 U" I& s9 Q, w9 ^

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

# O* X; X1 k0 e$ [ T

$ H4 B0 J) A6 E6 w+ a

【方法二】

0 s* I- X* x0 F

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

/ d& ~7 ?6 D; _6 j& X0 \* q; a: ^! s

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

" J+ T- W2 O& n% g, h; T* o! [

figure; % 新建一个图形窗口

/ ]- A! d/ O7 S4 }0 d2 w

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

, f3 ~3 _, }! l; T; Y

hold on;

! }! R" `# O: B

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

# z' k. k2 ?: e+ a

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

' d( l: d" J x% |- @, f

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

5 \3 U" d* t$ |4 B) H$ b/ P

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

1 V$ P: b3 X# X y+ p P

- Y0 @4 A% x1 ^ e6 r

【方法三】

* c- r7 G: X7 _* y- \

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

, E3 w" G4 i+ s" r1 a+ p

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

& b [# L% n) f- B

figure; % 新建一个图形窗口

* E7 v: z# E- b% S% I4 ~! [( a0 l& S

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

9 V- w' Z" [1 ]- k

hold on;

! e5 \$ g5 u8 _5 ~' k

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

0 c; u1 E+ ~. t8 t" A) j

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

, l/ B; s3 e7 q5 T# o: t

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

" x! N& b2 U$ e7 i

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

. B6 @0 S3 H2 w/ @/ `7 I- u* X

& k% y* [% f, ]8 N

【方法4】

; T! L: J8 ]( U: r, e

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

7 ^/ e" D' l3 z* E/ N

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

7 u7 _/ N5 }; X" F8 y

figure; % 新建一个图形窗口

, |2 v* P0 x+ u1 T/ ~/ |

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

& c( Q7 w; {+ `5 Q9 p7 Q

hold on;

% W# W' G* c* h, `

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

' f# k) J9 N. ]+ N# S$ ], K& P Y

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

8 b0 `' W6 H# f/ ?0 Y

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

) z2 N9 b: v) y2 x8 A0 U2 }

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

, r6 ~ i- e b+ l4 w9 B) g

3 T. \2 @: \* i: \$ z1 O

【方法五】

4 }1 D& b# }2 x) M# c

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

- ]5 j/ |" z! M) |% o5 s

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

' }4 @! ~6 ^6 f/ _9 p; ?

figure; % 新建一个图形窗口

: g' r: v. g2 N! ]3 f5 M# g) \6 S

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

% G0 w/ j$ ~. J& w+ q

hold on;

! j6 U5 Z- n* |% U1 D3 _+ Q x0 M7 T

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

! M9 T+ x( c! U6 t1 g, |

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

) {: d7 l/ z- ~0 Y$ A: f* \: Z

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

: B* p- F& d: K$ K

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

; Q0 K$ z4 J3 L# C6 [) ~3 J/ u

) C+ T" Y% {+ k! X / x) \; |7 T) z. S* y # m/ r b" s u t0 j/ ?" g; {9 D% Q- J' q1 L$ q! T' ^$ N$ i, K6 n( M 2 e6 L" ~1 _3 N; H
回复

举报 使用道具

相关帖子

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