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

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

[复制链接]
+ T; E8 C0 Q2 w( Z# q7 z

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

; g( J! X1 j5 I+ V- v

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

v# c; i6 f( v) z% @' U

1.1 smooth函数

6 ?0 }# k' V# C9 Z

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

& H0 Q' H, k! Y/ W4 t2 W

1)xx = smooth(x)

- ^' O- d! r9 Z- S8 i

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

$ O( O& R4 B8 ]1 s( r

xx(1) = x(1)

0 ~4 E2 j- r2 L; K2 m

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

/ I; \* d8 F& N7 D U

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

" E8 N3 Z1 l/ d3 T, Z+ p) F

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

$ z$ q$ N0 i' s

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

9 ]. Z2 |/ S0 [1 S1 | V8 U

2)xx = smooth(x,span)

( T9 [1 F8 s- ?2 Q% ?3 x8 M9 s

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

7 r9 J. R6 W# i& U

3)xx = smooth(x,method)

6 c5 z o1 ~# B+ z. T0 I

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

+ Y) {5 N- N& v# ?0 s

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

7 t% W% x. T2 i( C* w- P; z

' s% X# K5 [3 ]0 X

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

% j( [! ~& {7 H( h( C: [

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

1 O5 H5 c7 X! o+ x( d9 _2 X

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

8 k' \3 |7 c8 v& k

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

$ p% H! X0 y& @

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

$ F$ z! h. q: u+ M

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

" w: b" @8 H# @4 F3 q' d

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

- n4 K) K7 z L8 ]6 l# m- ^6 y

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

7 }4 H0 Z9 w* y! z C

【例题1】

9 m& c- }* z% _4 t! z, U3 L* ]* H h9 p

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

3 g0 u' s- D: H1 f' i

思路:

! o ~# F6 V( I+ v

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

# x: _; h) L6 B! }" J

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

/ y) c* o3 ^) Z2 Q( ~" d {

3. 绘制加噪波形图。

) P% J5 U. y) U, i `+ m2 |

解题步骤:

8 U3 j3 G! f: c( S6 J$ u

1)构建数据

# J* S; v1 k6 ]

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

C! j1 T+ k+ D- M; a

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

u6 `6 \( u. L$ y$ n

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

" K7 v X) W% A+ \7 f; s

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

8 W) X/ Z) G h5 s2 x0 a, f

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

8 K- A- Y% l) e3 d

2)制作基础图

0 w1 E [* h3 P& U+ L2 ^# d

figure; % 新建一个图形窗口

- w$ w: F; o4 K; r# }+ _7 S% x

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

8 Z3 c U" _) }7 u H

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

& ]" H% }: g. |0 ]. y, F. u

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

& L! z5 V0 \' E# u5 s& `, W

) n# h6 w6 @7 f1 j9 S1 f% j* }0 @

3)制作平滑波形图

7 [% P. Z' G9 R% s. n- Z

【方法一】

( f# x6 F+ K8 Y- l( _

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

0 f2 W/ z6 s& e1 A$ P1 F

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

0 O" ?3 v0 w0 m/ q

figure; % 新建一个图形窗口

* o# |4 W+ `9 h+ a# J

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

4 _1 }/ P( ^2 M3 \ k$ V% k

hold on;

7 s! F4 w9 R5 i) F" t' {! ]% X

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

) S. W9 A, O& W8 C" A, A

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

9 f8 S3 A4 r& G# j* ^# T. {1 W

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

# O! N! {" o% y; v0 u k8 L

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

+ l N$ p, _6 M

1 G3 X3 g: Z5 R& R) n

【方法二】

, X. k+ F+ q$ d6 @6 c9 {

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

3 `- r( o* B/ O" [: I3 M

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

" ^) U3 k: O+ R: h1 K9 X

figure; % 新建一个图形窗口

; r! W3 g0 B2 v, G& X" B$ k

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

& P% @8 }' `- o) y7 |2 {. M5 U

hold on;

2 |! Z9 F3 U. { ~ b0 p" j* O' j F

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

. c5 w$ E' T- ]* B+ U

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

2 m( \1 u; w' a

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

+ H6 n+ w7 z* g; e3 ? k: u

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

" t- h" t$ U) H# `( q8 r

' H, Q! Z5 l$ h

【方法三】

3 A! c4 [8 Q! F# p

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

9 d4 o/ y5 @! w' n

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

1 C$ Q: u5 S& v& h. W6 {# G) n0 l

figure; % 新建一个图形窗口

4 N) l H: H1 Y) M9 L

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

H1 ^+ [9 M1 K

hold on;

. s: ?; M' L P9 ] N

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

5 g; v3 i1 f6 l% o+ x, y( d$ A, ?

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

, m* @/ C0 o9 @3 g+ x! l% r0 c9 ~

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

6 S2 z: \: k- ]

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

" X8 r2 [( P8 x8 u8 }

+ S+ G& ]+ K# M% s

【方法4】

8 f; h' O. g: K. V6 A

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

# c, D4 P' Z4 V4 j1 ^

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

S) b# \" p+ Z$ q' M: `& Q

figure; % 新建一个图形窗口

# c7 Y) r& n( g) I0 _& t

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

, t+ d& T+ L |7 f4 M0 i! E

hold on;

/ T/ L7 X* l% C" k4 {

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

% g7 N% ^+ V+ N6 N; n

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

; `# E2 }5 `7 s& _) f& {) c

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

8 h/ F/ Y. o' X

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

# C0 K$ H& V( O g$ P ]" ~

$ X) c7 ^1 I5 `9 N

【方法五】

. g, l- V+ H' x& s/ ^' ~- @

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

& u# N- x) c+ [

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

/ ~ ~7 @. ?6 E) {# P! ?0 T

figure; % 新建一个图形窗口

4 H ~( @; g2 |# @

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

! u; |4 `8 f7 J; R4 M! _* L7 n6 V

hold on;

6 ]6 w; Z# E/ G3 _. Y3 p0 o

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

+ a! Z7 ]9 W; p' a3 Q$ d

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

) v- K$ h6 a d! N5 x/ R0 t3 \4 p

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

$ W/ ]+ g* ]: f& q2 I+ C8 H: V

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

8 k. Y% Y5 @" `5 w8 z2 |

% L2 s+ Q+ p' K $ b: c5 E3 Y+ S' u4 V B1 z T- x. h7 r. k' T9 Z 2 B( z7 J: |/ d- _6 k5 M1 k1 d! W- W# a0 D; m- `" k, \5 E
回复

举报 使用道具

相关帖子

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