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

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

[复制链接]
T2 \5 M2 U/ ]& ~( M

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

/ f3 S; d: Z2 {4 u( w* O7 [7 n5 R

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

) C6 |' { T! d, o3 E2 T+ A) a: g

1.1 smooth函数

9 S; e! _5 h% o0 ^" d" z8 ^+ F

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

3 G/ |8 ~! \, i3 ~ n/ G

1)xx = smooth(x)

" v0 V& X% M& A( t( L7 N

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

: i# Y! J0 p8 n6 B1 R. d

xx(1) = x(1)

l# y. h w( J6 O. ?

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

0 ^0 F# }4 p* Z, |) r0 B5 v1 ^

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

( W& P. Z. ?6 r: _( J" B" D0 ~

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

. U! s3 `, r# b6 b

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

1 T7 @6 N0 z; ~/ m% s

2)xx = smooth(x,span)

8 }8 U# c' P. G& B" Q/ H

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

1 w$ h) P& w7 x' F2 B8 q _

3)xx = smooth(x,method)

$ X: F. d6 r1 z& o

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

$ R& }+ @" l I( z5 w( _- J

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

) J. [( q7 Q; O, d. C: y5 G* ~/ O

w9 L+ q. I. [3 w, f

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

7 _8 D0 `' g4 i; ^

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

+ E% s# A$ T# a3 a$ Y* V

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

) f+ V; y% d! j5 M! M0 o8 ]

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

* ^2 s1 o7 i% ^3 H) l4 u: E/ a

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

1 [3 Z: |3 ]# J( l2 D2 M- @

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

* r4 f9 A4 b; t

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

$ P) w, `0 g {% _+ T+ h

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

0 H; Q3 N1 [* F. V

【例题1】

+ i# X8 @9 Y' p% P+ |8 r: R

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

! n2 `: o6 p8 m8 H3 F1 s; n4 k1 e

思路:

4 B' Z' ]$ C& N7 @, G, \6 S

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

: ^) n: j; _2 @0 o6 R9 c

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

$ o' b- x {5 E, M# H

3. 绘制加噪波形图。

5 H, m0 S l- ^2 o0 m

解题步骤:

: ]8 B5 }. ]1 r8 G$ z

1)构建数据

1 B; ^5 L7 N# h( v

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

6 R# E& v. \0 P) x5 x9 P& p

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

! k9 N* W' w( X4 `: _' _

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

* G' y, t+ b( I& H- V5 Q+ `. U

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

* G& n. l3 b/ e& U R

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

8 t' E4 V. e: a$ u: N5 d" X1 t

2)制作基础图

6 E8 l' V4 ?% B/ b3 K4 L

figure; % 新建一个图形窗口

2 \; Q9 j/ U7 x1 I/ l% ~* d3 o% d

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

+ t& Z$ E$ W. z( R8 q

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

2 h5 C1 K; H& Z; b7 Y

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

" E* J! r$ c0 E8 _ b; F& t& h

' b: E6 v% U) k- O- {" S2 A

3)制作平滑波形图

" L+ K; A9 t! J) A- ?

【方法一】

$ L& p7 w9 C% M; X0 U9 t+ K

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

8 k% b/ Q; T* z

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

6 }- t% }8 e- Y, R1 z% M

figure; % 新建一个图形窗口

/ q1 `7 P7 H5 t `. |

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

' i- \* l' ~6 |, d9 N

hold on;

. u( e5 j" A1 I+ u

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

- i2 E# y7 Q* ^- m8 X5 @

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

* z8 s0 J5 m$ X0 C6 @: ^: r

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

& ^0 c4 u0 G4 _ \# l6 \

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

4 c6 M7 {0 ]8 J

" l* k i8 a) Z& i

【方法二】

3 E3 ~8 h# a4 Q2 @& S3 A% N( r

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

. |1 H/ K- | Q7 M4 T

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

$ g0 U; H5 D y' n& a

figure; % 新建一个图形窗口

! I7 F9 b: c6 X

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

, ~5 E# @& a- C( ~. A) H

hold on;

/ |: L: N( _& t+ P

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

/ \# s2 Q% c- I

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

8 d+ h& f( c, f& q3 f2 I/ O

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

l9 R" q/ D+ L+ m$ l! H

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

3 Z9 v2 q- \. n$ l0 b& m% n! ^1 v

5 q e% A9 _, R; Q+ K! w

【方法三】

/ } S2 l( k/ [$ J9 O

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

$ { S1 b. {2 x, ?" j5 K1 |

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

. _' y% v# K6 n% ` s

figure; % 新建一个图形窗口

" j8 R1 h. X7 n# R" r- S

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

3 Z4 t' n+ Z$ V+ a: E) c

hold on;

( g. ~9 v Q6 a5 {

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

" l- i8 v0 z9 _7 F* u$ E

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

% X. G3 X% ?0 n! X9 g' ?

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

y' S- c, V z3 ]* y) C5 c

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

! x: u" O0 v V6 @7 v3 y# R( p9 s

0 }' z! q7 T6 U9 g) o9 C

【方法4】

W8 K0 J; J+ y* R7 d3 P# l j |) c

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

) Z) |# R, H3 v9 B

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

6 \* ?7 M: |* |9 S4 L. u1 a2 Z. A' }

figure; % 新建一个图形窗口

_; j2 c2 S1 r4 j

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

/ ^5 E2 L: Y. g4 N1 i

hold on;

2 ]) W* }! Q# ]6 N1 O' m

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

# e" l5 ]# C: _

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

: W0 O3 _1 |6 k

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

) \) W8 k: y+ J& J; N, u" n- i

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

; `: ?& J' z/ y

$ N; O4 c5 Q! K: t0 f

【方法五】

9 [- x9 S: J5 \$ v) u' }

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

( V1 n' n u6 c: H0 E' Y

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

+ @* \5 \1 y$ `1 y

figure; % 新建一个图形窗口

- |9 e" z9 U/ P: r6 f

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

9 a& a, v0 r; r

hold on;

& c2 V/ N5 x ?- F, S

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

4 ^# L+ {4 i0 F' d* Y# ~

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

# { ~( b% x; r7 w: h }* k" P: o

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

) A4 r0 Z2 ^; d* ?

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

- u* Y* w! e: F9 m( |

]- k& c) `% U @4 L) N - h' a& V, k3 g( Q ' E* N( P# r1 T3 R 4 {; E2 z* D2 x: t3 N2 W / \6 x8 B, V# s& J$ A7 f) `" R
回复

举报 使用道具

相关帖子

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