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

[复制链接]
8 }/ r5 |1 ~5 _/ v* v4 x# T7 \$ ?

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

4 f6 x0 F* V& C1 Q5 @ f; S$ e; \

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

0 x3 h0 ^) ~% G! U* k

1.1 smooth函数

. ~$ y! P" r+ g2 ]! G

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

1 i3 e& O3 V/ k" w; G. `' c

1)xx = smooth(x)

. c$ e$ K# J( y7 k: y" v) u

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

6 H5 c+ g+ E8 m h

xx(1) = x(1)

# f0 n9 `: l' j6 I' `

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

5 `* W6 H+ k4 C' p: Y, \9 O) z. G# u j9 Q

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

0 W! p2 x. L, H) y0 J

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

0 O/ J& b$ `9 x9 U

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

; D( m9 Z+ U1 p1 k

2)xx = smooth(x,span)

$ Y" O3 T/ n+ P, `$ {. t* d! d

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

0 u7 m! d' ~3 S2 E- K

3)xx = smooth(x,method)

4 i7 {9 b3 J ~ f$ g. y+ |( e5 h

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

* R6 k E7 Q4 V

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

5 z1 @) \5 {+ ~2 h4 i( w, g+ X6 f

0 O$ O* H4 O4 c$ r- x0 I# X

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

/ M0 n/ Z4 n* c/ O# o. D

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

4 m2 k# Q. c. Y3 i/ `

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

6 u) N( f( U& A$ B( D+ k

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

0 m+ K4 E2 P9 g

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

0 `) B }. O7 J! s0 G: O3 Z

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

0 D: k$ b; R% z1 C' Z0 T

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

% W# L# M6 v5 D( ]) I7 P

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

1 {4 M4 x) q8 s* R- i+ @- i3 d

【例题1】

0 x K: [# V u; U& w) F, R+ l: C

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

s7 i5 {) B0 d5 y4 b3 e5 s

思路:

4 H: E0 Z3 [6 @/ H7 X* Z* |1 s

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

0 P5 r/ A+ t- i2 C& r

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

' P9 a+ u, T# M, l& P! ]8 Q3 V

3. 绘制加噪波形图。

. H1 Q/ ]7 k# m* r3 a

解题步骤:

2 L, C( Z+ g$ F- X4 ~

1)构建数据

# [& V0 C# P; N" y$ k8 \

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

3 z( f+ E8 {; B$ Y

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

: b4 C) A5 P$ T8 a7 G" Z! t

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

: R9 J, k/ \, z7 y9 v5 A y

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

8 h) \' L9 y/ e0 F3 u

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

% u3 `/ u3 Z+ w7 D' |/ o" R

2)制作基础图

& A! z; G: j, a- l t

figure; % 新建一个图形窗口

. p7 |! [& h. H* m2 \; J

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

5 g; ?" c2 K U/ M b+ s, \

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

3 \3 ]% J$ e( f" v( H* ^- }

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

7 V( x" y9 p: W* W4 }* u

3 w, N$ i& ]& ~- N! i y

3)制作平滑波形图

8 m1 |/ R# t, N5 m/ P' u

【方法一】

9 M2 f+ M g5 b; N( i8 t; X

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

: D0 V3 R- R" X

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

9 Y6 ^" ]* a& e7 m' [3 ^' Y

figure; % 新建一个图形窗口

3 H$ E, J7 G1 f: o5 P

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

' F' C& l1 D: v! s- G. }( g

hold on;

5 o- I5 I' w+ [0 k

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

a0 ~- a/ T; s0 R

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

0 b* u4 j8 z' i, a8 V- K

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

9 {' P! h+ I5 f! M

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

& I- b7 V" P. u, r

' M! f1 T j+ z9 H* R1 o

【方法二】

' i- Z* {# u! s1 x" ~8 f1 |! C

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

& A# l) Q! O4 ^7 q, e/ {

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

& e; j' q4 q( ]( ?

figure; % 新建一个图形窗口

8 Z9 E( }, D) V

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

) A6 f8 B/ W2 |5 l3 p

hold on;

6 [0 Y& M5 z% R' I' {- M

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

, a8 R( b4 M# o. v4 M

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

5 L# k& d5 w' Z

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

5 R* K, Q$ J! v

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

. a' C% \2 I6 w

1 T5 p' M$ o9 G0 }+ S- ~# a; F9 d

【方法三】

+ k$ I b) o7 m: v& G2 L( S1 R

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

4 A9 [) @0 K5 @: U0 {/ f( j

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

9 @0 {. v" X$ M( G$ u, s

figure; % 新建一个图形窗口

& ]' R5 n& R. Y0 D8 f4 t

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

3 R$ M# X" h1 b/ t

hold on;

8 Q) ~5 g3 T6 z! Y2 w2 S, c+ d

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

, v1 Q! q( W/ N; n- r1 z4 W# Q, w

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

! \9 @+ k2 m% ?* w

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

) a9 Y' C4 J6 q* Z: U5 x

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

. I1 B* f1 @9 K) X3 Q4 O

& `. b9 S. n) }

【方法4】

* f! L9 t9 e& Y( F$ C9 g3 o

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

: N' i% J9 ?. b6 S& }

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

/ h( v/ C! b/ t9 f2 G; e1 W

figure; % 新建一个图形窗口

/ x& e+ _+ a0 s, t8 s$ u! M3 v0 i. T$ @

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

. I) R( [8 |1 O, p0 ~% g

hold on;

/ F6 N! y4 U4 F4 o

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

4 t5 F5 v4 O3 G3 g* N; X

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

, m9 x$ \" u5 E4 m5 W; Z) {- E

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

* y5 i/ w# F2 {& R

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

+ k5 b( `" N+ R* Q4 u5 y

, |. R1 Y6 t0 S

【方法五】

& f: N$ L6 U) K+ N$ k, p3 h

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

" ?* K( ^9 w* m+ L- G$ V) Q' E

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

, O9 w* o4 S( J. K

figure; % 新建一个图形窗口

) c0 h0 q7 _/ r! V) k6 R# \) N: F

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

3 ] U! _5 q" O; R# V# C

hold on;

1 z. I/ z5 d; n

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

+ N, w) t }3 x' Q, ~

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

9 T; _/ \& p1 x3 g) A# V

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

/ ^8 J, i6 c3 T5 A

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

+ Z, d! C1 P* z" {6 A

) f; }3 K# V% ]- D4 H' _3 f / x( ^* V4 p2 S/ f1 T , O6 ?; N& |8 f/ @& G4 [% w' y ; K0 O( G9 I+ T% E+ F! t ! u' S0 E( Y- `0 E
回复

举报 使用道具

相关帖子

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