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

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

[复制链接]
2 K3 I1 I9 Y/ S; `2 n" Z, y

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

x6 ~6 @9 m8 n. M" K; ?, j2 h

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

- x' G4 x4 F, i$ H: Y

1.1 smooth函数

3 D( i" `: _" G# M

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

+ S8 \" C3 U6 D

1)xx = smooth(x)

# A& m( g! I$ R7 j9 z

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

1 L; e/ c7 r% A: t

xx(1) = x(1)

. g4 d: X2 D5 F- C1 b

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

. r) t. I2 D+ g5 i2 P/ Y* V

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

! s& @7 T3 l, P+ y+ c9 A$ F

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

1 Z! j+ Q+ D* B

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

, r* _1 S+ m% \8 H( v* p# Q

2)xx = smooth(x,span)

5 h: d, f( y0 W

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

' R# r1 G- V$ \$ k! C: ?( I6 w+ W

3)xx = smooth(x,method)

y3 j, o: ~$ s/ w9 y& \3 h

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

4 b0 |' o0 H2 s# u6 I; t

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

& B r0 K* {* {

% x6 q+ |3 ~' e: r0 X

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

8 }5 k ~2 n) A9 y2 Y0 L& M0 Z8 s

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

& [6 U! J w$ z+ _7 B" W/ b

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

+ [4 Y" A8 m* I/ S

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

; [- R1 x# `; n' o$ w; \

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

8 Z. [; Z% W* w4 k

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

9 q5 r9 l' B- n! ?( [8 D+ p U- T

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

9 |, A8 Y+ r. p o, `4 D4 W8 |

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

( {0 ^9 ~2 ~. [7 }6 d' x; i

【例题1】

. `: N& }. p: m+ z8 e' ?1 I

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

* L, Q& R* n3 J/ U: T

思路:

% }" O- @9 O- n' T" w0 X

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

7 C& o- m$ h% Z6 f+ d4 Y/ B

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

) m- d7 @" B7 c$ _) A6 V9 m

3. 绘制加噪波形图。

1 S. K5 `' q' y1 z/ j

解题步骤:

1 ?6 _* a! \% g! U' d

1)构建数据

4 M' a: f0 c- X2 v

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

. J) M% L' V( V: n. L4 e

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

0 I7 N& r5 u5 q" D# c5 f1 j

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

( w( Q$ l% F. p' V& o, J0 u

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

1 @) W* l1 X5 v) a

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

/ k# {1 |9 `% e9 M

2)制作基础图

: T# ~9 l0 Z3 R7 a+ |

figure; % 新建一个图形窗口

" d- _0 h4 r. y/ w9 w

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

8 K6 n6 l1 [, R2 M. E* n

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

7 T( n' N% n5 X. i" C7 f8 _

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

3 `8 i4 | |- g; y# `( `. d

M0 r# L7 L$ E) g0 S0 g

3)制作平滑波形图

5 v. k; c( e. O

【方法一】

+ _5 [8 W$ M t) g, H1 S6 C

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

" Q9 A2 t3 N e* y5 J

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

, ~, m; P& _9 e* L" ~) @

figure; % 新建一个图形窗口

1 d% @6 p; [# c8 U. \9 @" x/ N

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

/ A! z8 ^/ |0 h% c. u

hold on;

9 D+ N$ q9 `# P* Y- R3 m

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

* U- c0 F. Z% z8 P! L- ]

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

2 R. a( d6 c A

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

$ F( u1 S7 c2 s# K) t

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

3 N2 z9 Y) g4 [3 @9 T

/ R; {4 T7 C) |5 c2 O/ D7 Y* q

【方法二】

3 E# G0 @% E' q2 I# z0 ?

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

1 Q8 u# w4 P6 |% f

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

$ x' M0 I0 j: }) p4 Y( C+ t* v% c

figure; % 新建一个图形窗口

. s2 v- O' j/ P+ Q" L

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

, s# ]/ D& W6 L& k( A

hold on;

/ H1 }6 y" g+ k0 r. x N( ~* Z

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

5 Z& T: |( O% _ T

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

; T8 a1 @( d/ l0 i; d/ i9 d, l7 s: h

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

4 H0 |4 l+ f$ H( W# ^

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

2 s: _, J, p! b U3 U; c

7 I1 n5 d6 x; V* D

【方法三】

8 L2 K: [ D1 K) g- Y# j/ z) b

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

- c! S; J1 j( O4 r1 M3 [, n) Q

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

J$ ^1 U8 G5 d2 t9 f

figure; % 新建一个图形窗口

. W0 D4 a( S! ?8 \7 E

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

+ f' u# s! A+ G: J

hold on;

4 m; a2 d2 k: n

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

0 i* c! S: [2 y/ n- ~4 G8 m' X

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

# G4 C; C ?, a6 g

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

) F' Q2 r( ?3 v- T

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

5 {9 r6 V$ N% e D

5 T% x8 ]8 w5 F

【方法4】

1 L6 P# M: ?1 L

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

' N$ Q2 H' f; V4 j6 L

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

5 ~- e* P, Q7 E k: w, b

figure; % 新建一个图形窗口

8 ?1 d0 w4 ~! W

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

1 g1 [/ N/ U9 x* X: q

hold on;

- Q+ w* W1 E: f# T

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

. C! G e. W6 @, d0 m! p& H

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

, `2 Q% V) P' k, V, A8 i7 A. S. c- E! L

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

* s D5 c( V2 T) s. n5 y

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

4 d/ ]: M) d$ Y& X4 v# w" C

8 h, m+ l1 s) Q

【方法五】

t5 M" q; W4 m

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

, h2 W0 [( y5 \1 c4 [2 {& w+ W

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

# Y$ V1 ~4 w9 n+ U4 ~4 v$ }

figure; % 新建一个图形窗口

T- `0 A+ V; H" D- b( t0 S9 B

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

1 l! ^" x" |* O* l# Z6 T

hold on;

# F$ Y; `& q5 [3 o+ N0 f% y" o, ^

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

. E* S3 x3 @* _; h( A

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

$ S/ X+ c$ P6 p) e

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

, x1 ?' j+ M' u0 ~% V

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

9 \/ Q# v: o+ T. ^/ V' x$ C

* N: ?, B7 x$ c! z' H+ K8 [) J 8 ~" j L" s' P8 g! K # L: p0 Z4 }% p) A6 |4 E# Q7 }& x: _" I* G) ~) q , m7 _$ n3 P. k5 e( r" ]2 `7 o6 T
回复

举报 使用道具

相关帖子

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