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

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

[复制链接]
6 W# ]1 @6 V9 q( C$ R3 t

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

7 ?& S1 p: B# r

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

; i4 b. R8 l" S

1.1 smooth函数

! o/ s9 A @' d" B/ |/ @

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

+ I N7 q, N9 E* x! B

1)xx = smooth(x)

2 s$ R/ v( @3 k' h3 G# g

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

( ]. I7 R- Z% p* ~: O/ D5 v

xx(1) = x(1)

: D7 |6 u" y" ]: @+ ^ s3 @+ {

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

! ^) e( U' f/ d

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

& l5 P+ n# [2 p7 @$ {* w( Z) y

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

9 X( O' |& B, ?

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

. \0 \1 X( n- d3 V! r B

2)xx = smooth(x,span)

& f6 C% s# Y8 s- s2 h

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

3 P) \, ]( F1 }0 n

3)xx = smooth(x,method)

: m& d3 p8 I9 [$ ? X: Y

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

' e& i) W4 Z2 ^9 E: Y2 ^/ H

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

8 F. d& a0 e# f- d" k k

9 s# r) U1 D) U" X% z* A

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

/ [7 G% {6 r& I9 ]; h2 ~/ f

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

/ P8 O0 A* }7 a& Y% q, B1 Z5 p

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

8 P' t) ~2 A, p3 i& P9 Z

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

# X- m* G" J. @& T

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

" z8 T# I6 }; E! o9 {

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

8 C4 p, O0 Q/ m( k3 G( y3 f! }2 E7 {

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

& k; k4 J3 k4 T! s5 f/ f

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

* V8 S3 b2 V% l! e! R( }: \0 U

【例题1】

" z. d: J* J! i( T/ p" C I' ]

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

) I) k5 n2 l2 ^) |$ {* }

思路:

) p% S+ P! l8 ^/ t3 L+ R

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

" y3 d' r j4 K- E/ B1 D1 N

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

5 Q% g: K' m9 t! ?! e7 K' K

3. 绘制加噪波形图。

3 ^2 ?9 w, u4 d2 h3 g0 A

解题步骤:

# t. l, q# i2 m

1)构建数据

# L* m3 D T2 }$ ~+ i

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

" d+ U2 q5 |% L" V$ E* u9 w0 r

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

6 Q5 T, }5 Z9 ~4 k9 l7 ], M/ z

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

; D# Q) V; \6 W: ?5 l

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

8 w" U7 x$ }& }8 j

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

! \$ F+ }) w3 p0 ^

2)制作基础图

6 ~; S9 `8 y' m3 V/ V

figure; % 新建一个图形窗口

5 a( t- d X0 y, `4 }% ~8 A

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

; v4 |# A: V+ a& b+ h, n

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

* W! S4 C$ m! w

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

' ^( w+ J' f# y4 W5 d r1 o

: O5 C+ ~$ u9 I/ O/ B# E) e

3)制作平滑波形图

1 e. }3 D1 L: r+ b3 C

【方法一】

3 B- e) H1 O% w- `* O

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

m( O% L7 j# P

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

7 @' J: m% [4 a

figure; % 新建一个图形窗口

. B: d& }' N2 v' O7 P) N$ t: p

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

4 o9 W3 ~( Y6 b9 X

hold on;

! f2 S- y+ |. ~8 H8 w0 ^

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

$ A2 P6 Y/ U3 s

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

* H9 X* }; @, o1 [$ H! S6 g

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

% g, }5 D5 l/ ~) b

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

: b: z% s+ L( y! M

" H. x/ S: E1 h$ @+ Q B

【方法二】

! P1 k6 Y/ G z k* X

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

1 j X1 B( M+ w% K

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

3 o2 O& \6 x5 \7 T

figure; % 新建一个图形窗口

1 C( N9 A1 {2 G2 `$ }; w- k

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

9 X: \4 a6 |8 ~3 y) _

hold on;

2 H4 x) s) a! @7 A( _) o6 s3 k9 T

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

' [- o G5 |& N3 b/ l

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

8 I/ m0 v: g( t

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

' h$ U4 c3 m1 v4 b

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

: w% N4 Y/ K" C0 y' _, W" ^* F

3 k: d! `% w+ o$ C

【方法三】

& t7 {! O( R% d$ `' A0 B1 k" c

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

' u& R) c8 |0 L M4 d L

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

1 G. j" M% Q4 r0 _9 ~& k$ _

figure; % 新建一个图形窗口

g. L5 J4 i1 s; T( B+ u: @

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

' q; e# W, d5 G, j% O' Y

hold on;

9 ~9 Q" Q/ r" J' [/ L z

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

9 y+ Q8 R4 S$ E/ p! v0 p

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

) i4 V2 {" }. w* {. I

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

6 r1 y6 w$ I( E1 [. s$ a

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

/ C- e. x) t% i& p* M. b* l- R% l

# m Q$ _% W; R8 w: p4 a

【方法4】

: B) s: h# {" l( X

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

0 A+ J/ _; i8 B; l* K8 R" o6 O

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

/ s2 g; Z; N, R6 H9 F0 V

figure; % 新建一个图形窗口

7 N# _4 s4 B0 `9 u

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

0 u) I% G. t. C$ M- t/ e

hold on;

- o/ J8 Z4 u& I h

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

9 i0 E c0 `; w4 V7 |& o) C

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

6 q( Y; V/ s4 o$ C8 u8 B. \6 X3 W

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

3 Y3 }, ~1 Z$ f# f

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

4 k& H5 u0 g( E$ L$ x

: V# o1 O: t5 {+ N; u/ u7 ]; W

【方法五】

, Y# b" W( p: M. G8 V

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

/ Z- e" I2 b4 C: v5 G

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

. R: E3 I% u5 s8 |& T8 A# _, o, u0 {

figure; % 新建一个图形窗口

' m* k' O8 _1 w. z+ t, @

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

( S& g) K! U: @, A8 d. r" |! v, m

hold on;

2 r: g% t; ` P+ c1 H6 j3 r8 P: x* S

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

8 y! ~/ E2 O% N9 T# r

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

9 ~0 r5 o! p( u' `3 e. n5 \$ w1 S

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

, d- o; ^- h3 r( {2 u

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

9 J1 R9 q' r* X' C+ p; s

% [/ I% b. ~# i6 p8 [) D* S) }* R1 K3 j 1 {5 h, A& _- ]- s3 L! P# w. w( a2 G - X$ ~- K) [8 S: ~1 s 3 C, M, w# [) S0 }+ ]% c
回复

举报 使用道具

相关帖子

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