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

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

[复制链接]
$ v1 v. v A+ t

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

0 w5 d, C& \. U

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

& {1 ^& r% {! h* m( b/ Z3 S2 C* X/ B

1.1 smooth函数

6 E9 t; |! R! y( x6 i0 H

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

9 P+ g: b! a" Y3 J7 R& f) g

1)xx = smooth(x)

/ F9 N0 h6 B+ B5 l F

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

8 u& s. ^" c8 ?4 ?" v i

xx(1) = x(1)

- L' f. O; N9 }. | R8 _! T0 Q

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

1 x9 u; I- Z, h1 g9 R- P

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

* h) T9 b" @' o- a7 e

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

% B& x- _% t6 R, C! V* }9 ^% z

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

( C- E, c9 u5 G4 L+ M$ y

2)xx = smooth(x,span)

( k0 D( ^, v; k1 A0 n$ V

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

: {7 ^, z& B" m( W6 S

3)xx = smooth(x,method)

- ^: y+ i/ p' |2 Z& b

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

5 Z- \5 d$ ^, F* j8 {4 _

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

2 u/ L2 ^# G+ @+ _* k o

$ t6 q% [( {" t$ t p2 N

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

' t6 Q% ?! j; h

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

1 ?5 @7 q- t1 M/ l

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

1 C% F [$ g: U4 Z* S

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

/ k' E. V4 y% v# ^& M3 U0 N' _

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

- Z+ Y4 G# C# G: a ^

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

/ v8 M$ e$ J9 Q, m& _- r2 J

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

, n* E: ?# W4 y i, {

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

% Z- n& Q0 V' t* w

【例题1】

+ W9 V& I/ U; U

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

# C3 N6 ^3 ^) ]7 Z7 @

思路:

$ E/ z, R; p+ D) w7 B

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

7 v% U7 E" L$ x) U' S' f8 A

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

% u4 L; V6 `3 t7 y- L6 j0 ?; U

3. 绘制加噪波形图。

* y) u' b T" n+ E$ E& M

解题步骤:

( F* Q7 l8 [6 r4 R6 Y2 x+ c; M- _* q

1)构建数据

" N, M/ u$ P$ n

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

7 P& a+ R% r- }# O' d* u5 c

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

( d6 b" ^) Q7 n' M

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

& v5 U3 M& q) ]; k

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

5 y! y1 f8 p5 R v; q! i

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

' O0 F, H: _5 ~, q

2)制作基础图

% t! j( |8 ] a& f2 s W

figure; % 新建一个图形窗口

5 _0 ^3 w9 n% x2 ]7 ]8 W' W; }

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

9 q |$ w: S1 a3 n

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

" f% U' L: V; ~. F

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

, R' ~% O' w3 `

3 d0 y5 n6 b6 l. A! N7 {* m. W

3)制作平滑波形图

3 \" U. Q, o- ~" ]( r$ g

【方法一】

* L" F( |) D/ B+ P, F7 f

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

0 z5 ^! O' e* }, V+ B9 ~. e

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

' ^" J1 F X. ?5 i4 H2 b: p

figure; % 新建一个图形窗口

C3 q) }1 I* a) h+ ^6 S

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

7 @$ Y% p. \$ B7 l. s

hold on;

+ D: c, T U# w, }9 h: x* S6 P* G

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

& C1 Q1 M- a6 y

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

% U+ A5 E1 z* y5 l7 [; k. H

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

( `1 S9 M* e% V; H

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

1 {; a9 G4 y8 r, h0 x

- N) T& V- W- w% L# D8 p" F" u

【方法二】

1 r( j5 _! E) V! f; a

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

5 W9 v* G! k, ^' K+ h& s* C: B

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

# G' A& [9 c8 O2 ?) h

figure; % 新建一个图形窗口

, L3 M, S8 i9 M, q8 }. _" b

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

# K3 N0 }+ O% f; R# l0 ?4 w

hold on;

7 e* H/ p6 j' ]7 X

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

# o- `' H+ s, x

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

# g& R# a$ {+ [" u

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

+ b1 i3 ?# C$ D/ P

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

% A( E$ y6 p) i5 n' s8 |

$ R& C4 Z' h& I6 ?( Y) w, h

【方法三】

( ]9 [; z& g; A" E

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

@) b0 }, c/ d( }. B% V

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

- O$ ^# p4 A0 ^ W

figure; % 新建一个图形窗口

% m7 r3 Q( D6 U& E

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

- w- [* [7 h, ~7 c! @, O/ C

hold on;

6 r2 S% h+ e1 v0 Q9 J' u

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

3 s1 u# y5 V, ^# a% @

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

; R e; P7 g) R4 n; E a

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

* q) u, T$ _% I3 c' S' d

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

8 ~ k$ X2 i1 ?1 }7 D

. J5 C, Y( N8 ^# E; q* O t

【方法4】

) ~0 S; F( l0 v. f3 t4 Y

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

& P; P7 w+ {$ E1 M+ ~

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

1 i( C1 d& e5 P) L" P+ F

figure; % 新建一个图形窗口

$ R7 g' t X3 o z8 Q9 u

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

) R) d$ S+ V" i/ ~! T' m) U0 s

hold on;

i( j" j3 y! Y# y7 ]/ Y8 z6 m

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

5 O: E/ m7 \; u4 \; ]1 A% Q& J! h

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

4 ^, `/ x& [$ \2 R7 _* s$ r5 g! ~

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

9 }+ n7 ?$ d# k0 _: C& E

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

9 t% V# u- n/ x n1 Y

2 S2 q" H2 S8 k( a/ ]. T: _) F

【方法五】

' ~, q, d# I( ?% { a2 d

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

7 G% A/ W/ `3 h) N# C1 k# P

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

+ |5 v" p# V: T+ q# Q0 u

figure; % 新建一个图形窗口

9 r4 k0 [$ T; D3 Q) m( } ?5 D+ d8 D

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

2 Z6 |. u/ i0 l+ [

hold on;

6 l8 G: r; `. Y& r1 c7 N4 l& T

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

. `' i% p6 X4 L. |7 R

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

0 n8 `9 D9 Z" H% z; y% g

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

# D9 L4 D, ~. Q* I! J+ a

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

" h" c$ g5 _' a. ]- N& F0 d

, t* V7 I: d6 {; v/ o# ? 9 r T) q. R' r/ o : R t" r" c9 |' A% b( _ 2 z1 s6 {8 o+ @# k) n6 ?4 | 4 ?6 A3 x1 l% [5 R
回复

举报 使用道具

相关帖子

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