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

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

[复制链接]
2 `5 Z! x4 B4 w4 b2 W$ H

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

* T- [1 b: {! j1 K

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

3 k6 r7 J( _3 G. k" ~' s

1.1 smooth函数

( ^0 Y& H# k, l0 T' L7 [

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

. w6 `, ^' ?# i }5 T

1)xx = smooth(x)

+ y7 N1 d/ |. ]7 |

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

) h; P% Q- I( s7 T0 ?

xx(1) = x(1)

( _+ E, W. V9 K3 s' A

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

% E# Y2 b! ^4 ]0 }

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

6 d' c* s0 P' L0 o( l

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

2 S! d" A6 }& ~7 ?

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

$ J1 F, n" [7 {; y$ X5 G2 B

2)xx = smooth(x,span)

. P9 _( `2 ^' D4 ^0 k

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

4 R1 ]7 H, W' l$ X6 j

3)xx = smooth(x,method)

S# ?2 Y& M, K

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

& E Y9 r& b" t. x, r$ K

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

. W: O2 [: M4 ~4 S5 r6 U3 i1 {7 T

0 V/ A- t6 G' |. k( [; C& r" T

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

, h$ i1 K- s( z2 B0 q+ T

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

* l8 c m& d* z6 x

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

* L' W: q7 p5 ~

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

/ _* Q! }: |2 P. M2 \3 `

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

7 h! ]9 @. w9 c( ?

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

+ y% Y3 o* S- C

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

; f4 T, s/ v H% @6 i

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

( ]5 G0 `1 I1 H' r4 I5 x# |* z

【例题1】

$ m# J& G% @7 Z" K3 H- w. @" F

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

' Z7 x! ^# b' v; o/ E

思路:

+ ^) I- K3 a) u" [" {+ F

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

2 t( |6 M! D5 _& _8 b

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

, D5 ?' H1 e( v C+ T: L$ t) M& ]

3. 绘制加噪波形图。

+ L5 @: I7 {# [% E7 K: B5 l

解题步骤:

. p1 ^- n' v0 e" P0 Y

1)构建数据

' U; I4 L E* y9 K8 k9 T

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

1 U# M7 L# L0 {0 }$ V3 P) ^, }% h

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

2 W- N1 C. U, _# B! K! F" Y) F4 d

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

0 Y8 n6 b2 l$ p1 O

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

3 ]. D& q; ?8 [3 i( n' X

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

4 t8 R1 o1 m6 e: m

2)制作基础图

3 \- \$ l6 A& a; b. T5 G( K3 x

figure; % 新建一个图形窗口

# X8 H* x3 ^5 n D2 y4 z

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

9 ?6 b7 Y! ? |4 L

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

# t. s3 U& k$ @

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

1 K' ]. j0 T3 @4 V5 D6 q

6 i: H, h3 H* ?9 F- ^

3)制作平滑波形图

% R4 O8 K1 T( X

【方法一】

- w; ]8 F( ]8 B+ @

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

; O) x8 m( B4 b# c

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

$ p3 j6 g; B5 s2 i

figure; % 新建一个图形窗口

, O! ?1 I8 ^) D0 F8 ~4 s- S

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

) M( g+ b. B9 q2 @ D( U

hold on;

. I3 D, H$ t% H8 |2 L2 A( u

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

8 {) Z, o( ^0 f' x' s$ e- ^) U

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

' B! _' Y$ u9 k& |8 F! ^

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

5 n R( f& }; Q- I' e

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

. @0 s6 {; Q, J7 c, x3 V% `

4 v* j: Q! B) P* T1 w8 W

【方法二】

5 A8 ?7 E' {) e

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

# ], D j4 p0 `. H7 _: y

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

. _3 g& w S4 r/ `+ B

figure; % 新建一个图形窗口

: o0 S7 }. I ?! S' W. S

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

8 C' S# H* K4 r2 Q1 z

hold on;

$ t( [/ ]0 k0 b- U/ m: Q

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

! w5 @0 @3 G* b: Y. @

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

; Y. ^" Y5 k4 c2 M

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

/ q5 {# o6 V1 K6 T- Q

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

+ V0 j, p2 J# Y4 o

/ w) F0 R c4 N( K0 X. S

【方法三】

7 _8 L0 Q/ Q ?/ D- w

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

% Z# ]$ L7 l5 w T

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

" o- \$ `" c8 t

figure; % 新建一个图形窗口

) [1 t% @; L& O! c% j' _; Z }

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

# A# O- C7 B7 ^8 g( F) [% D

hold on;

* b$ m4 w5 Z6 n& k1 Y9 x0 g! Z7 [

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

% _0 {, }8 n% t" J5 C6 A. n$ \

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

' p1 j7 \( c1 _

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

V2 ?: |, [. i1 q4 ]. ~& y5 X

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

a$ c1 k! ^5 j3 D. [

, d, r6 c5 e. ~2 \

【方法4】

- h4 }% a' m9 a- u

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

) m2 q- ~" E& r# Z" K4 `9 O5 f

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

4 a/ g7 e2 I3 d( g+ e, s

figure; % 新建一个图形窗口

3 \' k6 T; G Y

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

9 S# p: e8 \2 W G

hold on;

, M8 a) P6 ^2 b& D/ c! v

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

) a3 s# c4 c5 g' S* X

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

, X- ^$ d: T Z/ |4 L

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

) I" e \ A' L3 ^2 J# L

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

, s8 t/ _ K- X0 @

0 d4 g. b/ w6 k) h

【方法五】

# g+ s1 e4 t, L

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

" _+ j4 J3 t0 D4 o0 c) |& |

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

0 i6 K; ?: F$ B- S1 U$ K: N4 j) r3 r: [

figure; % 新建一个图形窗口

( h, }: j+ l' L2 K

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

}2 a* c/ S( }; X

hold on;

% E4 {' B* o" V

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

- {) I, O/ B4 l

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

0 d! Q6 J% r% v8 z5 L2 Q2 ?

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

4 x2 W/ d4 C% g5 W$ u" o0 V- `

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

5 S3 R! q. X8 [; L; D

( k7 s# h9 p- V2 C; o1 ?% y" J + E1 S l8 ? [. @8 Z 1 V& l# R5 s6 _( y }8 i) h7 @* B# d9 B7 G , [- ?* N$ b0 q
回复

举报 使用道具

相关帖子

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