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

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

[复制链接]
. l0 `+ k# k6 d; k; ~0 q

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

6 ~, ^0 B' u/ i. Z* q

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

8 O4 J9 c- c+ L- F# b) e

1.1 smooth函数

( Z; m7 \2 e; I

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

% r) j9 `3 d- Y# b

1)xx = smooth(x)

5 Z* G. w( B4 b6 W x. {& b

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

7 j( |+ G6 z& R; s1 A$ |; s- |& r$ y

xx(1) = x(1)

) E; I" D2 D# @' E3 ~3 M1 O* l

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

& }( [6 X- U1 {( N8 P

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

" o% H0 {' {# ~

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

6 X, |' ~/ u2 T" _/ Z

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

- \* I1 c* e- K* e6 ~

2)xx = smooth(x,span)

/ V! Y7 e2 m0 R: P. b4 p2 S4 `- b

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

$ O K' X* I- ?, k; W& r9 ~

3)xx = smooth(x,method)

3 w; }+ \; r( a' J0 K/ f; B

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

7 Q; ?' j; Y6 f/ h. V0 t! ~5 B

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

! k7 C# \# i' ~+ y' w; E4 E7 _

3 g0 \% x, \8 d) f% F. C

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

% @* v+ S/ f$ q, d2 v8 E' y

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

4 m* t$ z6 |- W

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

& Z. b- E! z; ^, s. ~

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

6 [) L% |5 ?* m, G9 A3 z( f

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

1 f \' t" |0 k9 z# u

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

# \7 [$ N# U3 P& L' E1 B

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

2 y1 s) I6 b: w4 ]2 H. Q: g

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

9 G: ]; x- t9 l/ i3 p0 M8 e

【例题1】

- d) h' J1 T1 s: p4 E6 B& o

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

4 T2 R$ s5 o6 `, U

思路:

! o6 O3 i, h$ v: W; _: n

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

( n( ~ F `6 @9 }+ U

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

$ r* K9 j) A8 ~, k" e

3. 绘制加噪波形图。

3 O. @' v. y4 M

解题步骤:

+ q3 W0 C8 \5 w. u9 i

1)构建数据

! h* y3 j C) t, M3 E* k3 W

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

: D4 a6 L I2 z" W& ]) P

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

% \! K1 |" _( H# E; X* m

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

0 w% T( m) ? E2 S0 Y% U

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

+ G' o# {/ F0 }4 d) K3 r

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

- m; M. Q1 T3 s$ u" E

2)制作基础图

) Q q# Q8 p; }7 N0 y

figure; % 新建一个图形窗口

8 d& v) t; W! |. _3 E

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

# r; S+ l1 O6 G) M0 L' C+ `: y

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

, d8 s& F& X* Y0 O n% p

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

- p/ |# N* h0 b* p3 `8 i B

8 _6 D8 i5 K8 G% X

3)制作平滑波形图

% ]+ @1 U ~( H- A3 T8 w

【方法一】

$ I% `/ r6 V( ~- }' ?$ U6 I

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

- w- ~# L$ u, D9 @

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

+ R$ [4 x4 V/ X0 M, N0 _2 q8 `$ Y

figure; % 新建一个图形窗口

( \+ c" A, h4 f1 F# Z0 j

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

' P/ p9 A' W- Q. T/ S" q$ A8 n9 }

hold on;

, b/ k! @) _; C" D3 r

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

' s c" r1 [6 |' e1 k( ^2 {

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

$ i U, x) m0 F* X# J

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

) b- A* Q) P Z7 r9 A# O

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

5 ?% n% p4 q+ Z; I4 }: m2 t

# o: D* o/ {* U- k* _6 o6 z) ^2 L/ Y

【方法二】

& ~ f+ w5 w. Z% j1 H

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

- K( y" G4 q% w5 ~% s; g( `2 G2 z

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

+ u; o& {" j0 {; B

figure; % 新建一个图形窗口

0 ~: B% E% n( t7 _5 v

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

/ r1 K. K) o6 z5 r2 Q

hold on;

( u. f: y' j$ Q. U( G

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

9 A: i! i0 d7 c- g8 a

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

0 t9 T7 d9 B1 i" G8 O

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

. E! ?7 r9 z& l. w! P* @: c8 z

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

* z1 l: k" l& O9 l- ^; X6 @

. K# Z4 i f& S7 j# `

【方法三】

% B, W* v3 N8 B. Q1 Z4 h) c

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

: ?) e2 b9 f h$ A

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

' j: k; ~ a1 O* n

figure; % 新建一个图形窗口

1 @# \4 x K; ~0 d, q

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

! x1 B+ `0 a+ Z% P! D5 `2 Q+ ^

hold on;

% W4 w6 X* k. U/ q0 h t- D

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

1 s! l- o1 Z$ z' F$ _8 P

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

/ e4 u+ m; M/ {3 g

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

( P1 [, N6 ~+ I1 Z9 U/ K

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

/ i( a y; h8 w1 E( L' _. b* y

6 }9 o* _3 |5 ^0 w* t

【方法4】

2 e5 n0 x2 k* T5 M% I% y3 S

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

% U! M6 h; }0 W& {

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

, n5 ]4 j# }- q0 W, r; I4 R

figure; % 新建一个图形窗口

* e0 D6 o+ T; \, a

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

# H9 \( L0 Z& Q

hold on;

" o- i5 V/ o9 G& `+ d9 b# v, {

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

) |3 }$ b6 [! z& d

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

# ^5 i* X/ T/ H7 l- D

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

2 |7 P! O+ J9 e

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

1 l8 Z5 M& k7 ? ]( e$ d

, j2 h, q3 p# H% C$ R- @

【方法五】

0 Y" l. [ Z) P6 [

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

0 u* f' T0 G I7 Z8 y& t

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

) u4 t/ P4 a/ {0 j) C

figure; % 新建一个图形窗口

" E3 s0 |; w) ~+ Y# ^

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

0 [( C- v4 {( b2 e- ~

hold on;

& K1 S9 n9 \3 x* F! G4 [' E

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

8 }% q5 [8 m$ l( c1 K0 a# Z5 i

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

, C+ s P# L* i' K7 Q

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

4 c2 o) ]$ E: k* {

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

7 I! ^" X$ y! X+ j5 D

9 i6 X% r/ d# w$ `& T3 N: g) @- } . W( L! F( H+ y' C : O3 s7 Z1 U/ j8 W9 R+ O1 b! J. ^, L3 |) I: X5 k # Y6 B i6 i5 u' D- {
回复

举报 使用道具

相关帖子

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