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

[复制链接]
; s7 X4 R+ E4 h7 k; ]

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

: S$ f5 e9 d- U( {

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

. w2 G' w% V! w4 V7 q1 D- f( W! `

1.1 smooth函数

3 m: n: Q* l4 g

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

, \9 e7 d- m! q5 _

1)xx = smooth(x)

6 a% G, Q, F; F

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

- l( j4 X& {; w3 Z8 p" s2 O

xx(1) = x(1)

2 K6 k, G3 W, r8 a: q5 u% q/ t! [

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

1 v l/ g# F6 w+ z

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

, `/ a8 j6 ] ` j/ {& g5 ~

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

+ j3 E7 q5 X8 ^ H

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

) q! E1 p2 h7 f, b

2)xx = smooth(x,span)

$ F! _+ ~' b: C' ?

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

! s, Q7 P, U4 x% n1 v! x; X8 V$ m

3)xx = smooth(x,method)

+ {# I+ H* |5 z+ P+ W

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

, d/ W, D5 _# {3 K3 Q3 c/ X; e

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

. u. I3 o8 b! V# }$ {

* s/ X+ m a k( w7 K g. m

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

- ~; y `: r% R2 T1 j: |, g

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

+ `* J, @ J! Z7 Q5 ]2 }/ e

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

, O0 F' z0 R" ^, g! B3 e, x ?) Z

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

& h3 ~6 S& D8 U$ P

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

; z7 X$ a( c( R1 e# N# ^

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

5 k. a# Y2 X) u5 W: W

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

8 G6 B( N/ s6 O1 X

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

) g: e; V" e( ], R

【例题1】

; U* C) J* b& S3 [ |- y! c

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

4 ]6 I5 G. y. C

思路:

+ p2 q4 v: b, B, h# E) k

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

4 a, C( T( k% m; q" M9 q u

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

; I3 R% N- W' @: l+ `3 X

3. 绘制加噪波形图。

% O) n3 } [( O/ u6 b

解题步骤:

; P5 v0 i) j/ t1 M6 j

1)构建数据

+ l* ~! J8 y) i) b

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

% Y3 J4 w# r2 `- x& G$ _

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

, V7 o# Q, ^( v0 u- E/ e9 y; u! b

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

6 D* {9 o) K/ t

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

! ]* T: v3 i0 J

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

3 g4 d Y* T4 q" v

2)制作基础图

5 n* D* B/ T! L, ]1 L

figure; % 新建一个图形窗口

% _2 J; T/ r" J8 I& o8 k

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

; n/ M D3 u0 S+ \

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

0 r9 k+ e" J4 l4 B8 r- h0 D

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

8 @ t, D& R+ h* G; Q& h9 J

" N0 k0 _$ @% b+ K& ]% W8 q

3)制作平滑波形图

7 |1 J: Q- s" @* d

【方法一】

& Z1 P% P1 O P* R: A

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

4 B3 T% Y1 R& ~( _/ J+ L

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

, \$ a/ D( V3 n7 N

figure; % 新建一个图形窗口

- ~ N/ _4 w( h

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

2 Q' @% E7 C. J1 C5 `

hold on;

8 w( [7 E4 l8 s: R5 f

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

1 T6 [ s( }+ R( z& k+ K

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

( y% _/ y8 i- V0 ^

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

0 R* O) t: C! D6 ], P- N; K

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

- L/ m$ r: v) ~( d8 e

3 P, P: O# l. @

【方法二】

1 M' z# n( D, N6 T2 A2 R1 p3 }

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

2 ~/ k1 X2 g9 p W6 I& G b

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

0 t4 `, S+ }6 V; _9 O a- V

figure; % 新建一个图形窗口

% t5 N# X( Q+ d) M) }/ k+ s

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

% t/ ]6 r, N( f" |% R

hold on;

, F1 z, J8 J5 g: R+ b* K0 l

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

% c) _" U, s$ f% d! v. O' G

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

( V0 ]0 R- o, U7 {, `% @1 p- F! s

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

4 P1 f1 ~8 e/ x

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

3 N$ _ X3 B; t6 }

5 @. @* O8 ^, X4 E

【方法三】

( j! K0 T: ]* {: T. |* \: i

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

% W6 R! ?) G4 H3 s( e3 R1 _

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

/ c7 V2 S, ^4 F+ T& m) l

figure; % 新建一个图形窗口

2 ?" _' {9 X1 p# K. N0 X/ ~8 P

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

6 R/ [& x' h) _% J

hold on;

# S0 g! c& f2 m/ S$ g: b# F

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

2 B1 m e) o* B/ S

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

i1 X2 Q K, z. X3 M' t2 `

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

Y3 c9 Z) y; U. W/ N

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

6 Z' _# V! A* i1 M& f! K: P

1 o7 g9 J. x! M

【方法4】

u1 b" q# @3 @6 `

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

3 r2 ^0 S7 g2 q" M x0 Q( l' i" ~

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

' B( ^* c! b4 M" j, |

figure; % 新建一个图形窗口

@& K: u- i- H; y( s) ~) M

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

' I# u+ s/ D& ^3 M" n8 Z# s

hold on;

3 C2 ^" h/ i' \/ c/ ]; e$ j0 a- O

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

8 H! L+ Z4 n b+ `

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

! {1 \" d, V7 f3 S0 V5 t

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

, C. A( S, y% N/ `9 k

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

1 y# H: q* p) i/ o* o" m; K4 p

% E6 V) Y0 V; D5 `* \8 c, e

【方法五】

- Y6 G6 e T" s t+ S6 Q1 H; U

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

; k5 ^0 J3 i( E/ y( B3 K

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

, S! d) A- {- Q$ W' g& J: S

figure; % 新建一个图形窗口

' q/ D' Z+ G) [3 H5 F/ S* L, l

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

' ?- [: f7 b# R, j; z* o

hold on;

, @: Z: o) m) \2 \, \

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

1 k% `- I3 u1 w+ a& ~

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

! e$ l5 s/ `) }0 e. A- `! e

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

+ ?( \$ A7 Q+ q7 v) y# U8 Y: u

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

" w: M' s# t# b* A& W2 K

8 J5 Z1 m4 h: j; R& e! e! C! ]/ _% ^ r9 b7 k 5 X/ ?, C# g% E5 y( S! N9 k! [3 n; C3 V) Q 7 O. u" s2 B, Z3 i
回复

举报 使用道具

相关帖子

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