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

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

[复制链接]
9 F( z5 d, h! d8 ~

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

; d7 Q( ? B* X1 m. v4 o

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

* _* }- U _, v5 V9 k) h

1.1 smooth函数

8 p! A+ {; |/ { T" b1 O5 I$ q' ^

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

p( ~! n7 z+ v; d% c2 @7 q

1)xx = smooth(x)

9 S) E7 i1 C: D

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

, h/ `) x R8 [# b

xx(1) = x(1)

3 G" G# v1 R2 D9 K* C; m# z8 _2 P

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

- u, ~% ?: Q" X2 e- T, A; Z

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

* t( p4 V: f# Z j' y' s

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

9 \4 _3 x& N% B4 r, n# R0 T" O/ l

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

) W6 `8 `' Z- n

2)xx = smooth(x,span)

. e5 f+ f7 O# U+ t+ h

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

5 A; z3 p) A/ n# d' X

3)xx = smooth(x,method)

& w4 O3 h; E8 _1 C4 c8 E

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

( q: A+ i# j) O& L; e$ ]; A

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

: O8 F' Q, d1 _: h* P7 K0 K

" |5 `9 I: [+ A) t4 I

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

J* t" s: A7 H7 C" S& g) E$ w+ E* J

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

- n! A8 Y* q2 y# Z% T0 f5 E

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

2 g/ l' t" I- Z1 j# k

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

. _2 L4 K$ O, G Q

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

% a# s; r4 z+ @- x& A+ ]3 D) y# J* \

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

" v& f6 [9 H% c+ j7 y

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

: u1 P( t+ r9 {8 \0 G$ H

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

/ D- _* }, S- m6 u- v7 u& `

【例题1】

9 m. ~; m0 l1 D/ o. k' W

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

+ b) T9 U4 O! h6 W

思路:

" G9 l4 s2 E! e) @4 |

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

; @; o, ^* C3 I; ?

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

3 |+ ?7 O0 ~3 I H9 N

3. 绘制加噪波形图。

% z" Q# K. d- j: C) J$ L- t* O/ Y

解题步骤:

: m4 b- r# l2 E+ u9 C9 w

1)构建数据

! A# C/ C% _2 w+ }4 z9 ? Q/ E

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

8 `) N1 C1 t; H7 W9 M- v% k

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

0 d* C. O0 l1 \$ g9 w( j- I1 f

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

8 a0 M* j. f8 |1 P, j6 ]! D5 \( U

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

0 {7 d2 }" Q5 } C$ P/ L. H

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

$ x# O( b: t+ y) e1 c

2)制作基础图

' a/ j9 h2 l: |! c F0 C

figure; % 新建一个图形窗口

& c- d4 ?( v' x; w1 B

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

, C3 }% ^' x9 Z

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

% e7 u) ~! L9 x _1 l+ S7 a; Z, X

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

! _) ^ r( e# v8 m9 s; K- _

$ z* h! }+ ^8 k7 W8 k

3)制作平滑波形图

1 A8 {' f- n/ D. G8 I! b) b3 n! }

【方法一】

6 H$ J' [6 O5 N! c; \9 d

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

* [- w5 f" S: d3 j7 J5 `7 V- ?. f

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

) F# F/ Q K8 X. V, G" T+ h3 d" v) Z

figure; % 新建一个图形窗口

* @6 \5 h# B9 j

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

z0 @ O* A6 l, Y H. E

hold on;

; E2 F: F/ \& T! J5 `

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

7 y3 m1 h( S6 `' y" f

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

2 w7 L. e; \9 s; k- n3 m

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

/ G8 M( \( K# N! h% d# B9 Y. V" @5 b

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

# S# J8 z* E( r* S2 c# F# ^

. l* X2 n% Y0 ?2 @, F

【方法二】

! L, S. w8 [' A; w. X6 G! p v; _

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

) }, ]6 B- g1 l

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

9 g9 v' g' z0 S% X% a/ P

figure; % 新建一个图形窗口

% M) F1 L! o7 `6 U

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

5 f! b* J0 S, k C2 u' e- `' c

hold on;

: {6 `. W" K9 l2 E4 U m& l1 ^

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

, V9 r3 }$ Z) ~2 X

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

% w. B1 P7 S$ G

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

/ P) s4 K7 n5 E: B, q, S4 l; |

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

! k" ~" ?5 \0 G+ f- {# ~; f- N

: U* L- q) x( T

【方法三】

$ R% S( X- Z1 E2 I

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

9 _! h" e( Q# z- ]* R+ W

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

: O; h5 z' t% p5 _# D

figure; % 新建一个图形窗口

! Q6 ~: H4 r9 h: n) b# \

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

6 W: n5 T* i$ f% u: S% b4 N2 r

hold on;

9 l% g3 `0 ]% [% i' Q" ~

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

S' k$ c( Q; F. S% M3 A8 d

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

/ ?3 F! W, I8 ], M1 ^9 ^

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

. F3 M( x! {/ j6 r+ c& |

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

' i. M4 Q c7 r" ^2 O, S m( w

7 Z1 x8 I% a4 Z% b1 `

【方法4】

! b4 O/ d+ ~# Y, q2 e; m

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

/ c0 I$ z1 j' `/ |: y

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

* `, Y- S( { v: T6 D o" N6 B

figure; % 新建一个图形窗口

/ b$ ^1 I% K) k( z* X

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

# x6 F# k- Z9 \! J

hold on;

/ N: X, A8 {% ?) _9 n

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

4 H; b2 ~& `1 H1 Q8 w5 F, R

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

( u2 L( ^% `# @4 M3 X/ A

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

2 Q. L8 e5 i6 L- u7 q( k

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

4 c0 P: B0 ~. U) g9 F# P

. h) n7 I& U; U0 J% j* _

【方法五】

$ P8 ?) D5 l7 g# K5 a

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

; q9 F( A- X9 r; G. C% n: `8 _

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

% n: C& d7 ~9 m9 r3 s- O

figure; % 新建一个图形窗口

+ w7 f# {9 ^+ D7 y

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

; U+ y9 o# Z) N; o: A

hold on;

$ T b+ T/ b" q, |# g

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

% y6 G" |4 g+ X( \# {+ |

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

2 ]# Q$ o. T2 k3 u$ s$ i

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

) Q$ Z6 y0 Z, V

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

{( Y. U# N. {8 x, o

! e0 V. k+ P9 y2 A: F7 }: F ; I4 O( T3 w# X ! }9 _- u2 D0 S: Z. R1 x" w% C2 @ # t o8 o+ ^2 H" n: j
回复

举报 使用道具

相关帖子

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