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

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

[复制链接]
$ \8 N ^. M3 O) C" \5 Y% _

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

; C3 e6 u4 @( T4 [/ }7 T, c% i

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

! |$ @1 ]: M: h' x

1.1 smooth函数

/ B2 m" v: a9 Y5 d' `6 X/ T

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

! x# W( _7 b8 a2 S" {# t! _

1)xx = smooth(x)

6 B5 w: u+ X! {6 T% x

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

$ V( R' G) x1 c0 A; j

xx(1) = x(1)

+ y" Q" U w( Q% F

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

' P: `. s* C h" L' G

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

9 l6 e, r: d+ w9 v, t

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

* u! I/ W0 F, ]

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

- B8 |, {* C# j* X

2)xx = smooth(x,span)

$ q! d d S2 F+ y

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

" k J4 g" \9 I x( y

3)xx = smooth(x,method)

& d8 p1 M, y2 M5 j! s& k$ u

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

: c$ R9 A# h; H/ l v* D) g8 I

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

) J0 u$ q' ]3 O! k3 K4 F

2 }+ K8 s! l- p4 P/ ~, f$ U

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

% w* M2 L" o* s) {# `2 t; J' f" E

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

m- J7 s: O) w3 y" u: Z! T

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

6 {' U# |' N9 s; W

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

3 a- W! ?( |6 B9 v) k: v9 o4 U8 w: n

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

7 f0 m- F- m* Q/ _/ h' s3 z+ i; N) o

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

, ]# L' u4 w* Z0 l- Q

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

- R! Q! |: G" I% |% f

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

. L4 a! c" i0 k/ X7 D

【例题1】

4 _, P$ V5 W- r/ i& H

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

, i% m5 D; ]* t6 g, R P. s& ?

思路:

& x; F2 L* u9 b: N

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

; {- ~0 |* E* g- Z* A U! `% k1 e

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

2 M' {8 U3 w2 ~* L. A9 j0 \

3. 绘制加噪波形图。

v p% e9 v5 W$ q6 c

解题步骤:

2 G2 |) T: e8 g$ D- T

1)构建数据

. T3 l% r9 p8 a. L2 t6 U: X

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

# `3 h6 Q1 X, B

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

8 w9 \$ k$ L/ D' G) q

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

4 E$ l( }6 f7 Q2 W

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

! Y2 Z- H8 Y2 ~; O- x

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

) t! \* M* A9 O) m

2)制作基础图

/ e" ?) y( S6 T2 n# u. E4 F* K* i

figure; % 新建一个图形窗口

3 o9 H6 I0 ^3 Q* }: @3 D

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

7 p2 h/ E$ w! [( M2 s2 l

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

# l' X" V4 Y) r# B( U

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

, u. Y' i8 M: T3 G8 Z

D/ o; g( c( X9 `' [

3)制作平滑波形图

+ _. i- {9 [7 D: y

【方法一】

6 t: g9 Y( L1 O$ R2 C( q/ _ `

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

1 _2 |8 `) Y4 D* l( ]- u

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

. b+ w. }# J: I: F5 Z2 q; P

figure; % 新建一个图形窗口

2 y: t# }% x* c' n6 f/ ?2 @) ?

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

3 V; r, Y! p( J& h: R

hold on;

8 S4 P8 }4 y+ }! M& z2 d0 M

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

9 a2 i0 H' d. c& g5 M: i6 k

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

: l7 b5 u3 Q7 G1 T

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

2 w/ S+ K$ h8 K3 ~' h! ~

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

9 S. h" m7 `+ @9 g, W: r: E

0 ~% ?% ]- }1 @+ m% e

【方法二】

/ g/ j) m/ L# ~5 p$ C

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

, D! B4 c# p/ x: z( y

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

+ s& k9 X1 w/ `" A3 D" z

figure; % 新建一个图形窗口

0 \/ g+ O! x3 a9 H7 r

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

" X( A* U* h/ j. f3 f$ }' t

hold on;

& G1 b: `7 p6 R* n1 y' R. k

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

) |+ R9 A9 z- D" Y% ?

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

4 {# E7 _7 z- t C7 \( e, W

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

( D" Z* C4 d1 S$ P+ C9 e; K& {1 C

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

: [6 i0 X5 X; D4 x

! P+ d/ d5 t% Z+ H1 z

【方法三】

0 z; Q; t: I( W; S8 P+ k

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

" Q. N- d- J; I" Z8 G/ }& r% C- E' t

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

' J3 k: N8 d$ v H- G

figure; % 新建一个图形窗口

: v$ h& X5 D# r' v# T V3 N, y

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

0 l) S% z5 I9 z, [

hold on;

. Y3 x. |) s& H$ P- m1 i$ l* g

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

) Q% g" T: v5 f

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

, p8 ^5 _# m# H

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

' i7 [8 c* E8 B

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

3 N4 i) X$ b. o6 E. u

! x }. y: }6 G+ O5 s4 P' f

【方法4】

# O2 J$ Z# T! Q* x N

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

) v# W' L3 Y$ l' G& Q% S/ D! h

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

h9 ^+ D/ J3 c+ D; j! [

figure; % 新建一个图形窗口

5 L7 [0 P, N1 R/ o. G9 y/ k

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

2 B% e. |$ \& `1 J1 O% w" @& f8 C: ]0 W

hold on;

: |, h4 I; e$ f( u9 W" ?/ n

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

$ [7 ~/ w, y7 G. ~- t/ H- I/ f. f7 `: o

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

- E/ j2 V9 [7 O) x% ~

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

% y* @( Y. h4 p$ d$ g: p) y2 ?

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

( m' N) t# [7 f7 d" }! U

$ o0 {7 W- a" x: d% c* U' {) @

【方法五】

X) A7 ^0 K$ T9 p$ }5 y p& \! f

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

9 V. o5 I, j8 N1 r

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

: u0 m; u P' X" z4 `5 x

figure; % 新建一个图形窗口

5 i3 |( H7 O" Z# z

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

0 R' C2 U& `1 Q x

hold on;

6 M# W( ]' s0 D# m& ?

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

3 }0 F5 g; N; v% Q3 N/ y/ `) ?

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

) O: P Y! A0 G( T! Q. ^/ z! m0 v# x

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

9 w6 h" x2 x$ O4 j" f( ^& f2 ]

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

: m3 [, a" h7 ?: F* _3 \% f

- Z/ ]' {3 @6 z9 f; l+ R/ i6 H7 g 5 Y( |. s" n2 S! x' ` ) z y! t: r* M( y- K0 Z% [1 L3 L) h+ D5 {9 Y# D: d1 b" d$ u , C: ?6 z$ {; p9 n
回复

举报 使用道具

相关帖子

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