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

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

[复制链接]
& I% B, B3 W- Z0 `1 i! H" q8 O0 c

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

9 ?& Q9 T2 b9 ]- v( F6 B8 x) R

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

& ^# N- m& T- ?2 r

1.1 smooth函数

$ ], t0 ?2 V, l/ ]8 e$ N

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

* V5 h- p, X6 n+ Y$ }

1)xx = smooth(x)

1 g' [1 i7 N' E% ~/ n

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

: N7 H3 j9 u# M5 Y0 ~

xx(1) = x(1)

. x' b6 }4 l+ J; ^9 t

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

* `, ]+ Z0 g% u# ~0 f

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

0 n+ d$ |3 L* L$ S* ~) ]' i) q

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

0 I; q) D) S& ~% B

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

+ {; }# X9 |3 e/ U2 w2 B

2)xx = smooth(x,span)

- V# w" s5 v- C+ l

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

, B: [0 W2 K5 M- _

3)xx = smooth(x,method)

" q: Y( }7 C/ Q, n3 S( x

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

# B& ?9 N; c" M: _

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

0 g0 v9 C7 o) _+ W: ?* w9 g6 J

, P, \3 X8 t9 B6 Q+ ^3 x. V' {5 [

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

4 I1 |, W& y6 O+ i8 k" }

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

9 D& j" k8 P; Z

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

1 r) P" A$ z2 D3 t

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

. M. d Q3 R3 r W

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

~3 d/ Y/ I- B( s- D! t+ w

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

$ q& s0 b6 i, j

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

) ?# z9 O* T, h9 q" R# V1 d( \

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

& ], E) g0 A+ z, F/ V6 e2 k# t

【例题1】

6 K# L8 i) x1 e" \4 O7 O% a5 D$ |1 ~

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

3 d" x4 u D! x; `

思路:

' y! G( i, d- f7 B6 b

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

' X3 s3 C$ e1 E+ z# s

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

9 D) I- ]2 G8 U( T9 m- _8 O

3. 绘制加噪波形图。

4 i/ ^3 F" S4 c* U

解题步骤:

, C6 _4 f" S& r3 E/ g5 ~

1)构建数据

! g/ c0 p' E7 ]& l$ D3 `1 q* h

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

8 X- Z) B8 ]! g) q( h5 _" m

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

/ }' v8 t$ ~; |2 A& U2 w4 B

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

1 S3 `! u4 [: `* f0 e3 I

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

7 o% u1 Q S* H

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

7 Q; b6 Z0 N% `

2)制作基础图

8 M! V3 o2 P" t# ?

figure; % 新建一个图形窗口

1 C5 |/ A. p% x' ^, v7 |

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

% u0 T# A: E& b, o1 @* b( c$ E

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

3 h4 J+ o9 z _' X9 i$ b' ]

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

4 b( H* ^" u% M6 C4 {9 q5 V

Q4 d8 v$ [0 o

3)制作平滑波形图

" Q6 w$ Q) ^7 n0 l

【方法一】

3 `) |- f/ v: i, }

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

7 ]! T& r. M. e7 y

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

; C) O6 U2 y/ [& y' n, Q Y4 K

figure; % 新建一个图形窗口

: x; k3 |3 P& r

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

! V M5 d4 ^- R& }4 u# Z; r# C7 P

hold on;

/ R2 I {- L+ J' G/ X% }$ K+ W" ^: [

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

* b5 C# q& h- |

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

/ t6 S: m+ s3 x* T

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

. `2 [! Z5 h: q0 X3 U( ]; v

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

: P0 x/ i! ^/ ?5 B

; K6 m, f3 `3 F. O- F# K

【方法二】

7 p7 ]# U. ]9 y1 U

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

, w, K# c9 D# W( D! ?1 f4 A

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

6 I* l! i: ]3 C( {$ S y* C

figure; % 新建一个图形窗口

$ Y9 ~ E5 {& c7 P: s

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

' e6 {: X8 a# c# z, a

hold on;

" p. z7 `, _) b* v" l

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

4 L. t% n* g" j3 z* X

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

: `9 u) N# I+ a3 m/ o4 E# E

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

1 M( D6 o$ n2 c" z2 M: p

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

% U* @) I) n7 I. i: B4 Y

8 @9 Y7 D) @! M

【方法三】

3 K# e: F+ W( k0 }. [

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

8 f( o# x6 X% y4 q, k/ Q$ p& m3 [. R

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

+ V# T) b/ I/ e' t( D

figure; % 新建一个图形窗口

: v$ X M5 r+ E

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

; Y- y1 B w& X0 c) C

hold on;

7 e8 V; L, V! f

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

+ x. \ ?3 n' G0 b5 _

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

' L- f% j5 p0 R* o" X2 i F

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

4 x( i Y; H- O; w0 D) ]7 g

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

( V# S$ r# i$ z! a4 B# }

, k3 c5 Q$ D+ ?" F) e) X! q, a

【方法4】

' M; T9 I" G# L1 s' S$ [) k

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

; h4 {. P/ ]" m$ N& {& s7 p& F

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

P' M3 O$ G. }$ P

figure; % 新建一个图形窗口

0 O' P3 D) c. {/ V' Y T' T9 F

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

4 E3 {) q: W, k+ O1 O& w

hold on;

4 }" m/ C4 I3 j

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

* f3 S3 b% d! ~- c# x5 _2 k

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

$ U" v5 N# M' \- t

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

- @7 r* ^8 w; I7 e# d

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

! h) _' {5 W/ F4 n

+ n2 ?" }3 v/ d+ k- J8 H# C

【方法五】

' N+ v5 n/ p+ S+ X3 V9 y% J; B

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

7 s. {6 S5 |. g* J

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

( o. I$ U/ i- m, G4 \! L+ ^

figure; % 新建一个图形窗口

0 f+ i$ n8 ^5 Z* g |

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

) y# e! S/ C, ^( g

hold on;

# O+ d7 q& R, Q' n1 P

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

, O6 H% ^7 ]( S

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

/ e1 Q% P* K* q, c0 F

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

. c: r! _0 [& c, l& S3 ?) \

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

+ N! s8 T! [. J& I4 B

6 \4 P) h0 L- w5 S8 A 5 u9 M* {# D, o! V % l5 b4 [' R/ G! b& i* c0 Z2 Z3 C9 c* z, M1 v4 h ' d# t9 P1 ]7 M
回复

举报 使用道具

相关帖子

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