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

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

[复制链接]
: j4 P: f) V! D4 U' t6 }: o

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

/ }' O) H/ p7 y Q& V

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

$ o' B% v3 y& A- ?

1.1 smooth函数

# h" a( @; ?4 F& E5 @8 s( y6 v

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

3 y- i; U2 M# g7 e+ h$ M# P

1)xx = smooth(x)

+ L0 T+ ` D' U" o

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

. `/ f; G3 k2 W* W# I' P

xx(1) = x(1)

* t: w) \( U2 Z

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

( s$ C$ [9 P* o* P

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

8 t- g1 [+ d+ k2 p- r* V

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

+ K7 @. \( ^# d+ R- g% F$ [

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

- f" t' b; S0 Y( n+ _7 T

2)xx = smooth(x,span)

. @; c, [ A( ?3 X' W6 O

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

: H3 }+ O5 i0 F9 A4 F0 R, s

3)xx = smooth(x,method)

+ G3 U6 L. V2 L

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

+ [, A+ F: z& ?3 V

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

% r$ I; k- J1 |+ |* ~; E

1 d. e* A6 o3 N; p2 y

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

- F/ r/ }7 I2 s* j: W* V+ }$ y8 t1 W

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

' y0 o) O" p! x( u( ?

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

; Q2 S7 }6 J+ Y6 S. f6 z) E+ i

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

, ? y; |2 }4 `- C" z; ?% {

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

; H. f b V$ G% T7 C" M. \$ V5 `5 i

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

" u2 F. m- J) ^; ]7 m5 H

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

1 m$ H; h) V1 u# p# w- @

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

2 a: y/ t1 n ?+ w7 D* t

【例题1】

2 f( d* S% C0 z0 x) w b

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

9 ^' J6 N# K1 g- P# r

思路:

; X! h% _0 y2 A) x

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

. P |& v+ j/ R8 t6 A- e* R

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

3 Y3 B( g2 U9 e

3. 绘制加噪波形图。

* Y4 e/ _6 i; F

解题步骤:

% h. ^) R: m# {7 e" c' ?2 S: J9 Y

1)构建数据

u: b- h$ F5 f5 `# ~/ B

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

, e. T( `: d" T# {% y' ~$ H

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

# J& X5 t$ ?3 Q. Q& `

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

/ w% a* D" f& P o

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

, i+ Y o( [/ `$ F+ a8 q

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

( g& b7 ]2 e; }5 O

2)制作基础图

1 Q# ^0 i4 H/ k

figure; % 新建一个图形窗口

, o7 h1 Q8 N! j1 _2 `. _/ T

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

& l% O9 e7 b e

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

" v I( ]) q: |

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

3 N3 V5 {) P3 ?% [7 y( {

7 L7 f7 C' Z9 t5 I" S! g

3)制作平滑波形图

7 t5 {& c- M0 Z

【方法一】

/ E" _4 [' }6 ~. @! L

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

2 \! I6 c$ T5 s( z5 Q* r0 |4 M

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

" n* [4 K, ]6 t

figure; % 新建一个图形窗口

! Z, G1 z; B$ c8 x& r

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

F, A' J5 @) i- y

hold on;

- [# a! J0 d* J

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

- D) _9 O1 G" A1 E9 j

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

; @' k1 H: Q$ [+ L4 Q

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

9 Q8 W3 A! m- G8 Y0 L) I

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

# \4 ?3 w4 q8 Q. W( k7 k/ u

+ Q7 q' V7 R# |& p+ h

【方法二】

4 j5 `* n2 Q( f K8 L% \9 g) M

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

% w* i# \4 f/ i% Q+ U4 ?8 L Z8 T

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

3 c8 R' w$ z0 A. b e6 D

figure; % 新建一个图形窗口

$ T9 R5 o) ?( F: ]

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

: D4 L- R& z5 Q7 r* C2 x

hold on;

2 D! r8 t7 K; v. M

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

j* K/ R* K8 L0 x

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

$ d' _: m5 T2 b: G" t% T

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

- d- W7 J2 ?: B5 n

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

8 S1 k q' I8 W% h+ k! E6 A$ M

* \2 d" e7 ]( L% H) w

【方法三】

0 v, u" [* t" m' P. k1 q2 J t" @

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

0 L2 R8 h4 p7 F; n

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

) q3 s& _$ F9 o6 [) L

figure; % 新建一个图形窗口

( \( K/ P! h, B8 B2 {& m

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

A4 u. ?1 |% q5 ]9 w( U

hold on;

/ A1 W2 F, ~* M, K. {

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

, n# ^3 N) k( [ N! P( w$ E

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

+ `3 p8 P1 ^: Z1 e( W

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

H0 W% H$ r% Y$ J: Y

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

; K1 f( {; o9 e

1 |" S( z1 J+ ^, C/ p1 o$ S+ T

【方法4】

. Q: `% d( G* ]

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

/ [+ r0 k% H: N9 x5 U1 ^

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

# ~' o& w' Y+ l/ p5 V% X! w2 h

figure; % 新建一个图形窗口

& `/ s0 k& R& ~7 {

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

( \- k2 H# i6 m- n' \

hold on;

, w6 }% T7 w/ V

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

7 a3 O6 u- a7 l

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

6 r: p8 F6 d2 D" i* y# L! F% m0 |

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

: |, T( y2 ^; g

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

* w, W# W; l4 B& J& G

! @' B, i2 K, P2 K' r3 r% H& Z

【方法五】

. m2 H+ C( s7 W) o

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

3 d+ [4 I# A, ^) }

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

% v2 O2 v) _5 Y1 D

figure; % 新建一个图形窗口

- v; @) V9 t' F. \& f5 V

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

; E! a" P/ v& k9 W& C/ a, R5 [

hold on;

6 S6 `4 C) `9 ]

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

# Y0 Q3 i7 Z$ }. _

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

& G( ?2 r- R m) ?" V6 g. u; y7 A

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

- x% c+ Z1 O& j

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

0 T% {' ]7 m4 ~4 n* O

7 s% W7 Y: }/ }" P$ p; v0 k0 _( ~9 a8 w7 H+ n% o: w+ b 6 Y$ h, B/ M5 k( E: T. y; S2 e - n( w; H+ y. P1 j- C0 l . F# m& ^) U! B; \8 f8 |
回复

举报 使用道具

相关帖子

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