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

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

[复制链接]
+ R1 s( g E- m- _

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

/ s+ [5 l2 l4 n' `. f

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

9 |) {' q# ]0 V8 G0 g

1.1 smooth函数

' K. Z. K. E7 X8 `8 W+ i1 r

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

! ~" \* b- G; p7 c" e

1)xx = smooth(x)

2 u: c7 p9 N2 d3 k

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

$ M3 m; f% K$ o; W. y

xx(1) = x(1)

. p- M% J& f0 O9 X K

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

2 w1 Y: u) b* C8 r. A' f; S) [

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

$ P: f# N. p1 F9 ]' Q$ Q

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

$ Z5 f; T! g8 k

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

1 q" _4 Y0 s" Z4 I: q+ S2 W( i

2)xx = smooth(x,span)

% S. \0 `7 o$ d- M) f! F

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

J0 B7 w, U6 e3 j, ^

3)xx = smooth(x,method)

1 Q* z! y8 Q: o" v

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

! P3 y& r$ X0 I

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

; M+ L! p/ W$ r0 @5 H9 K! x

* W) m; A( |5 C$ f, ]& Y, L

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

. S1 [) F9 {* |. c: M

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

' D7 J' k0 t1 L

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

) L3 Q" E: c8 z* k& y

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

8 |, P' o1 S$ S9 B' \" q& n1 S

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

e* o' i2 d5 ?" `8 P8 t5 S& y

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

. z& ^$ F; i( F P+ _6 y3 }; c; Q/ U

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

' a2 B3 u- w& q7 m

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

/ [" a( r1 \3 L4 c9 Z# l

【例题1】

: }7 E0 f* K9 z+ A/ H

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

# y6 t% @( j. Y! [2 m! W0 B

思路:

- t- C& R% F. s; _- }

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

, R/ t+ P+ {5 s( H, i q

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

# h, l- u6 L0 s+ o2 I

3. 绘制加噪波形图。

/ H! X7 x% T1 f* G+ f% b5 n9 W( F

解题步骤:

5 s& t V( r* b7 S8 A

1)构建数据

- J ~8 o7 T( G( N( P( N9 \5 `

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

6 k& I; _6 \5 _+ x5 d2 @

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

. Q3 A9 n" z1 S8 W9 x6 d

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

. F! @% f3 }# K/ D, G

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

1 ~1 `2 T2 l* T) A

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

/ `- s" w8 R: v, m1 V8 @8 S

2)制作基础图

; {" G% Q" E. c# Y

figure; % 新建一个图形窗口

2 L* i8 J. K% X4 e

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

7 C' F8 F6 V D4 i) Y

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

4 N- Q' U6 |5 H' i5 E

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

' Q0 K1 T! D! z7 q! z

+ m8 J# i- U! t& b, ~

3)制作平滑波形图

2 N. S2 |# ?. Y+ I0 f' b* J/ N

【方法一】

' D8 T1 [$ _0 G. n

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

4 Z8 T5 v7 s9 ?; _, q! n

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

$ C/ b" Q9 ]+ L: A9 @

figure; % 新建一个图形窗口

; _% L, f# f8 I+ P# j

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

4 i2 S1 F; N2 f: b4 i- v

hold on;

) |* b, n6 D1 Y& [

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

+ V6 |' E/ y; N$ a4 A+ h

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

) e7 l. v( U* D( b. i

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

* @9 i% Y. w5 P% Y9 H w; `

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

3 S% c! l) J# u3 H/ S# v

% J9 `& V: [& G2 P

【方法二】

7 A) _- V& `3 _& _) `# `6 u

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

. s! r W+ q) m' `& P

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

6 [, L7 p, D$ ?- R- F q/ i: i

figure; % 新建一个图形窗口

3 n G0 M: C: Y2 b* m$ H

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

5 [7 Q6 d: r! q" U0 W

hold on;

9 _+ g v( n/ G& U1 f+ c R

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

9 ~9 c+ }+ y6 f/ h9 m" ^& U

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

H* ]5 n" u( E

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

+ m0 @; K9 i' O9 Z( F" v" Y, B$ I" Q

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

1 c* ?0 |# o! Y! o }$ D" r

6 C1 W. V. }3 a4 [5 v w. l

【方法三】

" \8 ~% C1 l6 N( i h* d

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

$ i9 l# C* W/ I6 g, {8 I

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

8 U. k. \2 p. k: T( y% y

figure; % 新建一个图形窗口

- X- Z5 I/ h( o3 u$ t- L+ W

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

- ^# i* k% N! |4 o! G. @ T, r% n8 b5 _

hold on;

$ U( e H3 B) I' `1 z9 k

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

- d; c, O2 n& E

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

9 H6 `' Z [# [8 A4 ]7 z) f

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

' u' ^# C2 }8 s B8 I: ^

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

1 t2 M+ Y% @: j9 W- x; I3 k2 z9 w) {

$ [ e( {9 Q8 K. k0 y8 G

【方法4】

% E9 h, u! E0 C

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

7 g9 q( Z5 K2 ~$ A+ t. x

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

4 {; F7 n, F$ d6 u

figure; % 新建一个图形窗口

5 G. f# @) a3 e1 _0 K# h0 D2 m0 j

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

0 R% }( o; n+ `( p a$ C! e

hold on;

5 q3 @8 `; L4 T( i" ~* D5 t* `

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

2 ~) D' s) U# G- u3 ]; A6 i

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

0 _( k) ~& A5 F& x J

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

! j' O$ d5 @6 O5 b$ [3 G+ ^

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

0 L, H% } {. O* W; c

: }1 M% H2 P2 J- C6 a

【方法五】

& |8 z( M# v7 Y# j

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

$ U7 b: m } a" Q: e( Z- V$ u

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

+ A% c2 V, L2 @% s Q3 l

figure; % 新建一个图形窗口

# v8 | A8 V7 n8 \

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

$ z& Q$ Y$ b6 Y8 {! U& X5 P) e3 Z

hold on;

4 B2 d; V) H j3 s& |; M

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

% r* y9 \; B3 j/ l3 |. _6 l1 S# v

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

/ o& l. w4 X0 M

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

3 @5 p0 x: H4 _2 v& J d7 s. _

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

; F7 A- }9 B- E$ P4 Q- V

- h, Z+ f( p& b; H+ B3 I5 L 8 Q8 l+ q/ h/ [1 P3 i, d% M+ I& i c2 H F2 Y9 B - x( R+ u" b- t6 C 2 s- h' n- Q- D4 i
回复

举报 使用道具

相关帖子

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