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

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

[复制链接]
" Z8 c/ s' X, |5 N% f

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

5 T: k( f' ~* f+ \

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

8 H' V+ p* w# X. V V5 D

1.1 smooth函数

& Y+ p6 V% a7 ~; f

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

1 L" i) b: ]! f9 ^

1)xx = smooth(x)

1 z3 j& F! F( ?, ?! h

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

9 B5 U! S- H( H1 g7 z

xx(1) = x(1)

1 o/ D& x/ f3 C. x3 q

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

0 k1 S, ~1 x/ H5 A! R9 a* }8 }

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

: R. Y3 {# Y8 E U0 F% T+ [

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

( b2 b. ]$ i$ x! i o6 A3 E

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

) M. k* V- H6 j# a9 ^ d7 o$ l( M

2)xx = smooth(x,span)

: G8 J* Q5 ]1 M% s5 I! V7 i# g

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

2 T- ~- @ h% w( d, z

3)xx = smooth(x,method)

) M; l% q/ y2 l& j8 s* g

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

0 C0 }& s& V) h

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

2 I% w# m( ^* K- C& g& e% X& d

/ T& d6 `* b$ T

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

n- i3 X, i; ^; T2 B

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

_% ^& g. f4 z: A2 `

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

5 `9 B# k6 P/ M1 U

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

7 J! x. X% D" F5 O, m' @

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

- M4 Q+ D! B% T1 }! ?+ p

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

w) i6 [; f3 y) v

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

" d5 R, D! {' X' |2 e2 D4 C- P

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

' y; X/ [& ^, r0 B( M( M$ `

【例题1】

+ l& Q3 s$ C2 {4 R0 U

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

5 A( `! U) b9 }6 e0 p, W

思路:

' |+ G0 J$ A( Z; Q

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

: F- t! q* R( ?/ e, ?: d. e8 A2 j

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

+ i% a9 A. K9 F+ n

3. 绘制加噪波形图。

' K1 S' a( e: J( H4 y: d% T

解题步骤:

# u# O/ u; `6 C9 e- s( u0 K

1)构建数据

* w1 ^% A% P( _. `0 X3 [: E

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

7 P2 F6 b5 ?1 \; Q2 @6 D

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

- k [' k: j' q$ O7 V+ v1 M8 n

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

$ ], h1 E2 H7 ?& E }! |8 s

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

6 K' I% }* _% Y4 k6 d$ ^% V

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

! ~* F4 ~) P3 d2 @" y8 o

2)制作基础图

' J7 J; o) F3 y) l6 @

figure; % 新建一个图形窗口

, R! d' K+ V* v+ ~' f0 Y' ?9 s

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

3 q% M' g4 J4 N+ m3 P$ n6 Q! N

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

) k- Z8 p# M( E: t6 P0 T8 i5 o5 Z0 U

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

+ A! ]+ j* U" m% A$ g

- m( W: h: N/ H4 Z c

3)制作平滑波形图

* f" b' N6 a5 p& j( X

【方法一】

* `7 l/ _* V& L4 V# K

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

* N2 V* C- V7 c) V% n

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

9 f+ `8 P6 s5 s7 K

figure; % 新建一个图形窗口

6 ?% }7 m1 K/ o7 P* L5 q8 Z# ]5 U

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

7 Q) o8 n- Y0 U' a% y' @

hold on;

# ]: g0 m# F3 Q( M* a7 N4 b* y$ _

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

, J. q* h K" O1 Y5 C2 C8 F: {# Y7 q

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

4 @, `, y j/ J+ Y

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

0 v" M, g% J" B6 r6 O* P C' B

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

0 S5 M- x9 q/ q. n# `3 M" T

' B! M; L& n& x/ m6 l

【方法二】

6 r% t9 {# [0 p7 G/ M- w1 e

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

7 ?) U1 r) G. v2 S' [3 B

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

3 A8 r0 [- J2 Q# Q

figure; % 新建一个图形窗口

. }: H0 I! A0 _2 k8 S* U J

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

8 k6 `- ~/ {0 `% E4 B

hold on;

! k) p6 B" O7 F) r! M

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

% F- M/ @4 F9 G# C6 c3 M

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

8 i' B2 C1 I! G) |3 \- u

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

& q' z' ]5 G% n9 [% Z. }& K

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

# Q1 c; v# e' r. R- Z

5 z5 z7 {/ T6 k1 ~! S9 Z

【方法三】

3 o) m0 N' X/ f( G- f) X5 H

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

, E+ b7 E. C3 f! _3 s1 ]

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

3 V: O6 b, H! P3 D

figure; % 新建一个图形窗口

$ I2 e$ }- A9 @

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

5 Y' u; [3 u' t. }2 ^

hold on;

4 N" I: J# {( o$ Z3 [3 Y

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

- A$ }' v6 k9 o* x. G& V

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

3 C. P: r8 ]% `5 {

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

& [: T9 K1 A/ A2 A

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

' ^; [7 A! u3 k8 }" P

: z. C2 w4 ?$ n# Q1 \1 D

【方法4】

3 J. \; ^' G0 x! C( ]

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

% s2 G4 m v: N: O3 g8 k" L! \

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

0 B; G$ ^7 _: V. Z0 j+ |

figure; % 新建一个图形窗口

3 J& N: M2 ^6 a: S

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

! p- M, v* s9 k; m/ N/ C

hold on;

9 x2 ^/ `( @/ @# A9 [$ w' L; U

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

: c+ }! n/ H% E7 @( ~* v, E; h

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

5 H3 }6 B% H/ a' i4 Z3 z1 |

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

. f7 K9 |0 n) ]6 l3 q" u1 p

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

+ e- R# @/ P6 d; B) f" M2 e( ?. j

. z0 m& ]) |: b3 d7 q6 s

【方法五】

( Y0 a, E* S0 J1 X9 s) y) w! K" c: e

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

4 s" J1 M2 S- M& P. C0 |

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

( M G+ Z( A) A+ H) E, o) y

figure; % 新建一个图形窗口

: d# r: t5 t# n4 E+ j

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

9 ~. U9 s; h+ Y: D9 H6 f

hold on;

4 c% e* \- T+ w7 [& `

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

5 I& a9 E' q7 q* {* p/ b% G$ T

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

& M5 D- T2 B Q+ T- F9 M

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

. b2 ^1 I/ R+ S* ?8 M$ t) [

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

) x! ~) p t7 V& x/ i

9 }) {+ L( o) t1 c L& K; p9 a 2 g4 Z/ K# p8 i9 [. I ( F; C; L0 @8 [1 a) p: p: n% { / z0 V9 y$ U/ K2 w9 `6 B& M7 a! G9 X; }' ]
回复

举报 使用道具

相关帖子

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