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

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

[复制链接]
7 y6 |( i& g) x% Q, V- Q

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

8 R# c3 u" o% ?+ G4 @2 ?

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

% j0 ]5 P3 V" t; I$ O4 Q

1.1 smooth函数

; M+ ]* M4 b3 N k* |

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

# c7 c! M3 h0 `3 x5 R4 H$ Z* K

1)xx = smooth(x)

i) z# W* I X, R1 e

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

- j! ^% `+ ]# ~. f$ \; I9 M

xx(1) = x(1)

3 L; V8 c5 W. W W4 A; H6 w3 d

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

' |0 E9 `" K* {) ?

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

4 X) H0 B+ L# ~

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

; q' ]& V# T1 k$ N0 g, r

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

& s7 U9 k- b9 i A$ h6 \

2)xx = smooth(x,span)

* a, B4 \: j) @" p/ h" b* b( i1 S( Q

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

: c/ q6 \3 ^ {) C0 {$ l& x7 w% }1 }

3)xx = smooth(x,method)

3 x: e) @) C) K% Q! v

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

( ^' e+ i9 c' g/ f* v$ j

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

& g) W6 a0 |8 [! Y9 H3 z

' }' ^2 ^- f/ N# I, {% Z# o& M8 O

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

! X% L* m; `: k& \: c; z

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

7 A8 `& I$ l8 D% `- q; r% s

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

y0 [5 m! ?, u" s1 l0 K$ D: p" N! v

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

1 {1 O2 S5 x6 S0 L p2 T- d) G) L

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

; R1 ?% U# v- d* @( \ @

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

6 J2 G- O9 I( v8 @1 x% V

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

$ m" m) d8 Y& r( M: u+ M

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

$ g. _# l" T) H3 r9 w! G

【例题1】

, D2 ^5 z: F% T! \% s

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

3 e4 A! ?! |3 c" f7 I2 S

思路:

+ g" }" X8 n1 i5 {

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

& r5 r# Z4 E3 D: v$ e( c

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

1 ^3 |# K; l* r8 e) G' D# y

3. 绘制加噪波形图。

, s; f6 z/ y/ g1 ~: Y& L/ F

解题步骤:

- ? U* ~" k+ }5 y! q

1)构建数据

6 U: b& m) ?0 v1 {, i! ?

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

7 B4 U1 u" S1 N t6 }/ v0 C. B

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

' X) j9 ]) d3 x, v4 M' J9 f

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

/ ]$ J O; x- l- f+ u Z6 d0 ^

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

$ L0 x) X6 s- _: ]/ d4 X

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

# ?3 e' B( B: X0 a) E

2)制作基础图

" r, s( J Z$ j6 u

figure; % 新建一个图形窗口

% e9 \- e2 @7 V$ O

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

4 l/ c& c8 M+ _; p' ~; c. D7 s

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

1 f4 q* W6 f* U

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

3 R% x7 {! V# T$ h5 M

, i5 B1 k/ f w/ K9 `6 q$ W

3)制作平滑波形图

3 x# |; H- t1 |, M) b

【方法一】

8 f/ L) w' O) c! n4 q3 Z

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

% I- y9 Q9 F( `

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

6 w/ B7 k7 `# C0 n

figure; % 新建一个图形窗口

- q; \5 Q' Q0 a5 X& J

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

& o7 c$ o' |4 X7 S8 D1 R

hold on;

) ], l! P9 L- |+ n9 [8 a8 S

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

$ \( g$ \# B9 O" I2 Z7 ~

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

% N! E' I" X3 [) \4 ~! ^

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

5 h0 y( ?2 Z% v( k8 K T' j

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

1 a* t' l P6 ~$ c

; C& s# O( C: i) X& l

【方法二】

3 |1 q+ P! ]1 y5 X' X

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

0 r+ ^7 D K1 Y3 V, D* Q/ m

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

@! k, N1 a7 x7 C( y

figure; % 新建一个图形窗口

( m a' q* O/ R6 _

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

8 |" }2 f4 x9 t9 j: C

hold on;

- Q) ], K) }( |) k9 w8 l% y f8 o/ P

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

9 z4 j" f. T& }+ @9 y1 `

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

' ^- _9 c# G4 {# A- a

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

5 e# l) P! E; ]5 Y5 V

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

" i2 y( V; T* ~ C& } V

& y" v$ w( W# u+ r. Y

【方法三】

# I% ^% T0 S8 X* `) S; D( Z

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

9 W* y3 y; {% m) [7 M) V$ P

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

7 @, i! z5 z9 p( r1 `0 E( U

figure; % 新建一个图形窗口

0 _2 a9 P9 B* s6 [- _6 Q

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

' A6 x: z. O3 ?" F

hold on;

8 O$ ?" B: {' B+ S* W( ?; q

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

4 n( y4 \ X1 m# P

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

" r( W3 A J! }- L. ^

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

- H' u! J' M+ F8 g" y0 p4 ^. ]) y

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

. d; P2 |6 ^8 O

4 v" n/ [; q; s% Y6 r5 M; X

【方法4】

% h$ `8 A* P9 B* c/ q) p; o. F

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

% z( E1 R# S) M, Y L

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

7 S; I4 R% s% @0 y$ {( @' m

figure; % 新建一个图形窗口

1 P. }0 |1 ~' r1 |% |

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

5 b v4 t+ D$ H3 D

hold on;

0 w1 v+ o6 U' X% B" l! o

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

2 ] J4 H$ {# v3 n

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

6 P# C/ h6 g+ s9 u: t' U U

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

: U" E9 O) d. r7 b/ H

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

9 J8 Z6 B$ w7 e" K* s

+ p, ^* G0 v* J! H: Z+ g& {

【方法五】

2 _, R2 ]" {; Q5 j2 {

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

9 s( q9 ?; Y) h$ o1 |) A

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

. o/ \! o9 D; F! X- ?5 x

figure; % 新建一个图形窗口

5 ^/ S) K; E: u* I

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

5 E* R& l$ P# o" h8 m

hold on;

+ O( P4 \9 V7 q; f' i

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

( V. R* I& Z/ q3 ?6 ]2 U$ v

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

( e1 i# s1 p3 P/ x* F, d4 G

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

. t" _5 R: Q A, [/ l

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

) x" C4 N+ v9 h3 @0 V

( j5 H$ B& ~7 w3 ] I0 N - J, b/ ^+ i: E. l # H+ Y' x2 c9 p$ p$ s* J2 x" {% O & [# Y* {# Z- I& ? 7 r7 c. A" j/ P0 q/ \6 o
回复

举报 使用道具

相关帖子

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