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

[复制链接]
( Y( d! m0 F# c; e8 i

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

r5 L% [- `8 M0 F% I! S* o3 k

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

6 o/ Q, ?5 F' ?8 j

1.1 smooth函数

( T: W4 R' s9 g! W8 t l: Z

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

* D* J; s1 J" [0 H+ {

1)xx = smooth(x)

5 F+ U; D9 u" N$ g+ e

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

W/ _2 C5 E, V% {4 t! s

xx(1) = x(1)

. R5 w) {- @% c' S( k) i

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

" x* H2 Z8 |$ h/ Y7 `

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

8 I, n2 d# H- p$ L5 R) L6 \

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

0 K; h# k! p% O6 v9 V* C

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

0 X: B: E: F( ]) A6 D2 o2 ]. b

2)xx = smooth(x,span)

- U/ j9 I" f& V, W! ]4 e! Q7 _4 w

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

. V$ D1 _) y/ p" a& S3 u8 c

3)xx = smooth(x,method)

- Y, L: F5 S' X$ G* l9 a0 v+ G- z

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

1 z& F% u1 [) X: G- w( e6 @

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

0 i3 \' M O! S: d0 B" J( {$ J

' [: a, a& D ]% [# z/ X

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

* q- z4 @ o1 L) A4 T' Y

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

! o b2 Z6 v0 ?. }" L

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

1 j1 D$ e: X6 A- J! o' t$ Q6 |

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

9 g$ L. B: H- h/ M) d- }/ H

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

' o& t, d. U) a6 \+ C* n3 y$ K& i M

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

$ _' A! f9 s( p1 D% u+ N" J

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

1 ^' [( d% M2 g% K+ H

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

* ^* g" w" h }0 j. h

【例题1】

/ i7 i+ B7 q6 }7 S

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

4 O- G' g9 ], Z- E3 Y# O! I" Z1 S

思路:

. x5 e1 L, A. A; F

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

: I# ?- I" ^$ U9 P* y

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

# r: u: \6 v1 A/ d: U, I, J

3. 绘制加噪波形图。

; I4 Q9 j4 G: m% _

解题步骤:

9 I/ d: ` C {

1)构建数据

* V5 R$ ~# u* S W0 ]( l$ Y

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

; k; M8 f8 F; r+ ? D6 @

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

: X+ [- r& R( I1 }0 E1 t1 R

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

- k' ]. Q4 d. ]4 F* j

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

! P* B7 u% d+ j- A1 V

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

$ E6 P: e# i# y5 @# `

2)制作基础图

/ X5 [6 }. _# P% p5 @* t9 j

figure; % 新建一个图形窗口

; A/ G' c; V: Q4 |+ l& B- X

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

3 w2 k- A! j1 X& m

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

" J7 J* A6 v$ ^& m

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

3 [7 K; e, @3 G5 i( `

9 Y5 s* w9 N, o. D

3)制作平滑波形图

; D0 Y/ W( V: t; [ E& `7 `/ J

【方法一】

+ e. l" o/ H) R

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

" o0 I+ x, d. G5 x

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

! K! d5 l2 L4 G1 p- P6 O

figure; % 新建一个图形窗口

: W4 {! P5 T; V. x

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

6 x0 v- U* {+ v. t$ G

hold on;

2 R( V0 g, o( f6 W( \

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

2 }! I) K7 u2 V( w! U

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

* e" P, C$ }9 |& G

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

- v' E+ @4 ?) p! \6 `

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

; x8 B- h4 O% b! {

( Z( ^( H! A: g8 Q2 F

【方法二】

, @, }: u# {* }7 u

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

r+ J, W: E& y- E5 w7 i5 l3 y r

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

" f) e. g) }& P3 g9 s

figure; % 新建一个图形窗口

* \7 h5 \7 q& y" x* {9 k

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

1 v, \1 M* h: E! u8 C: |: K- [" C0 W

hold on;

' a# Q4 @' R3 W& |7 E P* Y! @

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

{( d! c8 U1 C9 y. G6 s* W. l7 ]

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

; Z8 W0 Q" E: V4 m

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

0 }* p- G1 j, Y6 w* V: s( y

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

9 e' ]$ J) l6 N4 I$ u/ O

6 A( T0 o% |7 H3 n j

【方法三】

) y# u) [- W! d! H, V

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

: F6 a0 Y$ F( t

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

! o. m, F. Z: d9 ]

figure; % 新建一个图形窗口

/ U& Z! D" Z* a

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

& G: [+ s. Z1 ^' n

hold on;

: `& d) e% S4 Y, L) ?3 R6 t4 E

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

6 l9 c, \, d: Y* j b

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

5 L& P' a# m" e: u' v

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

, j/ {6 H& R4 q4 C* }7 \ x/ f

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

' H4 b2 n/ ~; J- z$ M# X: u

1 G! U1 Z3 j u8 b7 ]

【方法4】

$ A. k$ d! y' K, C' A1 V# r

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

, D% [- G2 x# N0 S; H3 D" H

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

/ A, L. s# F- c' C/ M

figure; % 新建一个图形窗口

6 J; O& F+ }- a7 C( N6 q) v- ?; O& S

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

0 f/ j4 A! f0 M {( g- ^& k6 @1 M$ Z0 f

hold on;

! ^ n# {9 n5 A7 m5 k$ d q

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

5 E6 v b% X3 J b5 _3 p& t

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

! Q& X2 W7 s9 l, v+ I

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

( v- o% o# v4 u. z% h( {* f

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

2 |! c# B) }. L; @; q

1 x9 Z0 w! X) M) `

【方法五】

/ j+ J; p7 F: h# M" b

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

, D. d$ [" Y) ?2 M

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

! h! A. R8 X" y; J" p! Z t1 g

figure; % 新建一个图形窗口

0 h4 ]; I5 |) e) ^. n( X0 q {

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

; k3 c0 q& G! ]- s5 K3 ]

hold on;

1 S4 s8 C C4 J6 n% ]- x

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

0 S. H# z) `1 Z* a( a

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

# \! }: j$ @. G1 q

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

' ?4 H; k" P- ?$ o5 E% f

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

1 G& S5 g: Y; W

! l1 P m" S# N) \, V- g 9 ? j! ^4 R* d4 J2 E- m7 J' | ( a) m3 S' w* [' f# S4 a$ L 9 v: {% k% o9 F p0 R$ @3 [. K% W. X3 T& R* f

相关帖子

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