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

[复制链接]
/ T( v( }' m3 U+ ]6 J

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

, @9 t( Z$ d) K1 ~, M: ]

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

5 D! F+ a7 Z& e

1.1 smooth函数

' }+ A$ D/ q/ K& E0 q. i

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

" t; H" h# [, c5 H- {

1)xx = smooth(x)

* H( Z* f- E) u" J9 G1 |2 k& j: `

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

. z) J' F, y* o+ J- }, b

xx(1) = x(1)

% q9 a- F7 n F! [9 L7 e8 Q

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

$ {- B& r7 Z0 M( v& h

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

" d4 z& r4 S8 ^& e( U/ S4 X- M

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

: Q, F/ t) y$ R1 c m& i

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

}; y3 j* B# @: j

2)xx = smooth(x,span)

+ e4 G9 z% p* B- n5 h

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

+ m' G& ?) S+ o; B3 |9 m6 B; Z$ P* k$ Y

3)xx = smooth(x,method)

+ L- M) F/ u/ D4 [( k8 X0 l: t

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

! G1 W2 a) Y) A; |4 o6 Y9 Z: b- ?& E2 K

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

x7 b& D; b1 e0 r2 I0 V

- I v! s1 I* P" H: s; O+ j

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

8 N( a: h, Z4 D* ~ g: ^

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

& {0 B4 B# h! [ ^/ A

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

3 d. v" K1 m( v7 @3 K, C ?8 N

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

0 H, I$ B! Z$ X+ t& j

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

( d8 n$ Z1 B9 k% f

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

1 ^# }* P- _( H9 ~

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

0 P% A% b$ Q; \4 @' K6 v! \$ D

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

9 e4 p; w, N B& f$ _1 a D

【例题1】

& I; d$ v) C2 J5 a- }

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

: g) g/ M! |; H- Y

思路:

. Y/ Z1 O9 B4 h. Q

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

( y8 G: }0 V* P" n, o

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

, Q# Y& l8 H0 d4 m; h. r

3. 绘制加噪波形图。

5 J4 l& @9 }3 L# c0 w

解题步骤:

% T2 |0 |( a* K8 |3 f+ u, e; ^

1)构建数据

7 S- Q/ |" a" Q7 ~. B7 a9 \2 L

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

; @* W0 T: Y4 Z4 ]2 W Y/ s- P; O

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

: W( u0 M/ C8 g( z6 m

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

7 L9 x( f) ^( r; y5 f! B' o

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

: C" o! ^8 r0 f

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

W0 F8 E" t5 s

2)制作基础图

* @( I w# G1 ^9 r) b" k7 w

figure; % 新建一个图形窗口

& \+ S5 K. v7 j* O

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

5 {7 x9 Q! K. _6 p/ S

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

$ i9 U# }8 q8 r3 }

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

! B7 O' L' t* o3 K* {! } l3 x9 z

' G0 G" _6 W/ M- k& L& k6 i& {

3)制作平滑波形图

+ T8 L& t! j4 Z, h6 L1 L8 S! N

【方法一】

5 P- s# I5 Z' g6 l- |

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

, R' o* i9 l: {& z9 S

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

% V: w5 _' R. Z2 X) F% Y8 O

figure; % 新建一个图形窗口

$ p% o8 _; C% G/ m

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

, v0 H4 C7 E1 q: J

hold on;

' R" n) v$ ~# |! t- ~2 | E9 r1 _! b

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

+ @' k% \ f A3 p5 M v0 X F

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

6 |9 y( e+ w; Z; B! c5 G3 f

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

. o, ~4 P. ?: J1 C* C& c( _9 h

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

3 ~. N( Y/ b& j$ E

% H2 q- r1 d [; ]

【方法二】

/ k- t) h; |) Z& e

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

C9 x& g! d& B

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

9 y# x3 }7 S3 n, s! O9 Y4 ?' C

figure; % 新建一个图形窗口

: t7 M7 X* E# x8 T8 ?

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

) O' C8 A: T! Y8 H, E( n* z2 Y% z) n

hold on;

( K7 \& U3 d2 L) z+ n& l1 F

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

! A# D2 R( ?" y0 D) |, g1 I

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

" l' X: K1 ?$ ]/ x

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

' |" @& Z; L+ I) S1 M1 E, E

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

9 f- s! f$ a' s5 J" m

3 h% }' Y: w- L' }1 l: P

【方法三】

# c h' d2 V" E8 N* @/ [/ U2 V) Q) x

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

! k3 D4 d. R! L8 _! Z A5 `3 W7 q

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

6 e \( G) h% ]8 C& d! I

figure; % 新建一个图形窗口

3 t+ d6 u% y& x; U W& t. N

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

) r$ o& O: Q$ J/ R2 _' m2 ]

hold on;

" @0 v2 Q' |8 s" y- q

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

& i+ I5 v* R6 P& t7 H3 ~" X1 o

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

% B" _2 Q8 @7 a- a

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

- g6 l) i: z) v g* @9 S6 v

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

) o5 a7 T# [7 x4 \5 y: O. b

" L7 u' b! q" S6 f- t7 f4 P# L n

【方法4】

" }5 v! {8 I7 [8 p! k7 V9 p

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

0 Z1 c" R7 d2 x& \$ ]5 m

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

4 o/ G8 O: t* q" I0 a* e/ Q

figure; % 新建一个图形窗口

# N4 M/ i- G7 P, Q

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

& M8 Z8 \; V* E$ Z5 V/ a$ z% c0 C

hold on;

% K4 B$ M8 ]. O/ H) e4 v2 w

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

3 q6 ^' C2 K; ^% X

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

% K K! I! N" y! a

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

1 l" y' G7 m. k

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

$ R" @' i8 W- K; r

# B# o7 _# Z& H- b

【方法五】

$ j' j- M& y1 Y& b" ?& S

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

; R2 ?- Y3 J1 k( [7 `" L8 o8 O. m

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

# Q% K5 _8 q& [; z$ M

figure; % 新建一个图形窗口

4 _6 c$ P; p; k

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

' ? ~# L0 O' G& d

hold on;

5 v5 A" U$ a. H! o" }

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

# I. \% s8 o# V) P

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

: B, ~8 r9 o; g+ s1 j' R! F

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

6 N1 ?% r c+ R6 M$ d

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

. W, e. l, u6 @: S; p5 A

8 S3 o6 _9 w' P+ `+ l! k 3 q. I/ K5 ] k! i& x 2 R0 R. [ H* a) E ( P ^- q a: a$ } 1 j# D3 y0 Y2 Q4 S
回复

举报 使用道具

相关帖子

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