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

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

[复制链接]
6 k7 C+ Y/ p% ~1 r' g O0 Q3 w% S

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

% k; m- |; |3 ]' A) Z

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

8 Z" A3 i6 \0 p% P

1.1 smooth函数

. h @: C, S u, v. ]$ } _1 y, s

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

. O I% u9 k$ W9 S6 U- b( i

1)xx = smooth(x)

9 N7 o9 ?9 L, Y7 k# D

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

! j0 ^6 _, p' K2 t" S: b; H

xx(1) = x(1)

0 m1 q% ?8 Z' \& f6 W5 N

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

/ ~+ z% p! G" s) q

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

* z v5 n0 _) F3 v: U B

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

) k/ Z" r- @) z6 q. C5 Z, n

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

" l; W, p9 M( S9 O. V

2)xx = smooth(x,span)

! t) @7 T1 @* e! E

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

9 k; D# L. @: l; i8 B8 P

3)xx = smooth(x,method)

6 v" s8 C1 U3 e( F* p9 |) B1 o5 x

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

% a! j' B# V1 d. O, K# \

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

/ F3 g* t& q' a1 r% ?) D

; ~/ } [& B5 @2 t; e

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

# H& E7 n9 f$ x* O* W) a# z- p

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

. N/ j. F% n, H, Y9 \) A( m+ g

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

+ w" n( P8 C# H. M% Y: V

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

: G5 g e- y* {2 ^+ a- b8 b& G

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

4 a" u; k% w! s

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

8 c! r# |& V0 l# Y

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

3 ]2 {: m' x0 j/ p& F( N( ` d+ W

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

, E$ y$ N% R" h7 Q

【例题1】

4 ^5 ?% U9 e' a% `8 z$ `

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

3 K2 }: r* A2 i3 u3 J

思路:

; H t( d( Q2 |8 |

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

* ~/ `( |& U( A+ G# d. m6 K

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

7 E& G# t5 v) K/ I. g

3. 绘制加噪波形图。

7 M3 R, p) t7 }! `6 ~, @8 ?

解题步骤:

; ^; @: e1 e! s% o5 o5 N; Z4 o

1)构建数据

6 Y2 j* m& C# C

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

, _ r) n1 V+ }+ b" r

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

; d" u$ d7 ^9 A9 V0 o/ g

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

( ?5 x7 j" l5 g* @ r# g

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

" F( i4 N# Y" ~+ D6 s& k- x

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

% \9 ?/ e5 T5 F: J+ Y

2)制作基础图

; i' M ]/ X; z

figure; % 新建一个图形窗口

5 c6 \& a$ ^9 a8 h* F. f

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

. P2 J* Q( I( n; W

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

+ d) p4 L, q# Z$ C7 u

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

7 P7 } b8 O: k- h3 l

4 ` H0 E! O$ T$ q7 X" A/ a

3)制作平滑波形图

/ _$ ~3 v$ G9 e% K* I, W% V% z5 ?: q

【方法一】

% e. F9 j" J' N# y/ R3 i

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

' C# l o3 n9 N9 Z

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

: [0 [; S4 Y: }: r0 Z* ]

figure; % 新建一个图形窗口

6 J* D! u B; u$ E3 `

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

- J) k# {1 g9 y5 B

hold on;

3 e2 n, N* ^) n& X' |

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

4 G7 e& v7 z3 \) Z! V" U$ O: M! C

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

3 w0 ^7 w; I: v& W* P: c! T

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

" @% ~+ m4 p2 Y# _' W6 {9 Q

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

) X, O7 |4 ?! p$ i* J

' E: i+ c$ J, h- a* t+ [

【方法二】

, d. `, ^. ]3 L8 ?

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

+ j3 r2 q# q" c2 Q' ]4 k: W

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

9 i0 ^8 O) M0 C+ b2 C

figure; % 新建一个图形窗口

, p/ w) ^4 V& [

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

0 M& Y( a M) X- u3 P9 G' S, u

hold on;

! @8 r8 p# @, O2 {( L

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

" o( Y. U2 R/ H, P6 \& d$ b# r

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

, S+ _# F0 v9 B" L& m3 @- S) T

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

- n8 U0 o2 h9 ~5 A' `* F4 w

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

) o4 g, l% V. S f( d

. X! X6 u$ [% J% F( K6 |1 R' w

【方法三】

0 V) i$ [/ m% {& r* o! ~

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

+ @$ D$ b3 G8 B9 z$ K7 Y& I2 U

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

* X" }* S0 n6 K8 o, \3 h

figure; % 新建一个图形窗口

" d5 d* h% l( h/ H# @0 ?

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

+ o5 L1 t8 }: {

hold on;

3 j' Z- ?7 ?/ ]! ^% m* k- {

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

+ b, o e8 Q8 D2 ?( R/ W) t& g! V: _

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

# a" S. z4 H8 L. |( d; `3 z4 o* d: I

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

' P" O" v6 ]3 |3 }, Y

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

! ^) y) p5 w- R: ~" n* h7 Q( g$ T

; C. B- F& z! j+ K

【方法4】

: H8 @# V1 }$ F2 V* L3 |! N) z

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

# K5 }) K% l$ t9 n z0 `

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

9 I6 ]. X. m4 m* h

figure; % 新建一个图形窗口

) v2 ~5 T# f! O3 ? d8 d3 w

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

2 O! z' k% Q, K1 ]

hold on;

7 s1 T+ u+ [7 H5 k, n* [/ x

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

1 _! g" r2 W. \! r

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

0 s) A- B# J- I. e$ B

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

+ O5 o: ?$ \9 }1 _5 {1 k

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

2 Q+ p: J/ ?6 ~0 Y8 N: G- X- Q

% k3 r: y+ j a5 W

【方法五】

9 ?" X O& Y7 O& b/ a, f8 X. f

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

; c+ f1 [( k4 q4 d( D8 L

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

9 g8 s& F1 ]' j: W2 h. V0 W3 d

figure; % 新建一个图形窗口

( a! S' u, Y8 C- I

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

6 S: |- r+ B( w& U! h% y8 ]

hold on;

8 `' m( H' `* r, W

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

; ^4 Y/ y) R3 g% \" [

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

1 e1 \% F1 i( F# h% ?4 q

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

4 r4 o+ P2 ? C' n* u2 b- h% X

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

" p1 A" S `( v6 N% K

5 g4 m/ L- e$ J5 T$ T3 } * B& P4 g5 S1 J5 E& e$ q P$ R& `# z8 A9 F+ A$ G2 V , j) f2 i. ^2 h; G# {. v/ b7 V # V' P, _! O. x- F& v* B# J5 U
回复

举报 使用道具

相关帖子

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