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

[复制链接]
! h- x2 F9 K( ^* `. W# s' U8 r

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

, K9 \ q% c5 L; v

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

3 N' _1 M N% \+ {7 b }

1.1 smooth函数

( s @8 Q3 [4 R5 G4 v0 u

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

" Q" m% j! j" o P" y

1)xx = smooth(x)

6 v; Z! F& _! t7 l

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

" G$ ]* M$ {0 y; v

xx(1) = x(1)

$ C: g0 P0 k! m" K5 y3 D! k

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

( c" ~/ Z! C/ Z( Q

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

8 t: y p8 j# X0 e0 u- i$ C

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

0 T( P* Z7 j, H [

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

( q. \0 W7 D' n8 d

2)xx = smooth(x,span)

m/ Y9 H% D% K- w- ^

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

+ D3 V% T) Y( ]- _

3)xx = smooth(x,method)

' x5 Z" }0 }' D. Y P& c

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

0 q2 o; `% U) [, D7 o! B0 E- A

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

+ i' w0 d# ]! ?* l

( c# ^2 q5 ]" q3 e- C

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

, { D5 o3 z- n2 h ^2 v$ C+ x! v6 K

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

: K: ^' ?# D$ N0 G8 `$ B

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

& }4 l" }; r O: n' m: o4 V Q

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

/ m* S0 q. N( M3 Y' N" x8 d

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

2 U6 [! s# U# Q& S7 o4 a8 d; F

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

. X6 O* \3 \$ e$ k. A

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

# N6 S8 U) T7 E( [

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

$ h) G: q4 I1 T. d

【例题1】

5 d& Q* U+ X0 l7 z+ E% V

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

: T9 D0 `+ B) S. `5 o5 i9 W

思路:

( X; l" }( }6 R. b& j

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

* L1 G, N1 G) g4 N. C/ a

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

9 K6 }2 b$ j7 h. p( `) Z6 ?% H

3. 绘制加噪波形图。

& L/ v9 ^- \ I

解题步骤:

% D) [1 R4 E3 _* ^5 m1 d ^

1)构建数据

; Z1 A' L1 C3 b. a3 B

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

( Z/ @. u; W% t( A1 M3 s& y7 R

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

! q" e; | y* [: ~

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

4 h" L3 z# t6 w1 O

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

2 m7 }- n% w: _7 z) l

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

* b; h% B! ^% M

2)制作基础图

& d" q8 g, D, t% k. X. v& M8 h. V

figure; % 新建一个图形窗口

% u) g) Q: n7 x5 a# \1 |8 M4 h

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

- O( S0 W, l, G; [8 K

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

1 \) _, s& d. t @9 R5 _

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

8 q/ z/ z$ j K, E3 k4 j0 Z0 ~+ c

( e5 z2 h/ g" N F

3)制作平滑波形图

w7 g* Z+ G, P# y Q. W

【方法一】

0 r' Q! p$ y4 H8 ^" R; A `, [0 F

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

( W, Y3 T1 f4 n C4 t* t

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

+ y- j b' A0 R5 I

figure; % 新建一个图形窗口

1 ^* j' S2 L' ?# Z- d

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

' O) C4 w1 B( w6 ?' K$ w

hold on;

1 ~1 D. t- Y. `" S

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

: Y, J$ S7 i# z' A. A

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

9 g9 T5 W% E" b9 Q

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

. J$ ], J# W" P* F

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

' R" U" g* r1 X8 T0 t: ?9 e$ v5 O$ o# P

9 d6 h4 }3 k' u+ k3 ]$ i

【方法二】

7 t3 W, M7 B3 ]8 i% I: h

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

; z( ~. o% a; q/ G& X2 d( Q' d

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

1 K) n C' j/ s3 U$ g- x

figure; % 新建一个图形窗口

1 h' s) S" ~: q s0 Z# G

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

& ~* ^. U- z8 V3 M

hold on;

+ E, }) K+ V: g* M) Q, `

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

* |% B2 m4 Q O3 ?5 N* \+ w, c4 T$ |

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

- H( B1 Q# V( T7 w6 O: p

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

2 n. E' Z( T+ Y$ A& ~

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

2 t8 \! }6 s! f! t

+ j; X# H4 L1 q$ O$ r$ R2 M

【方法三】

6 K3 U9 M I3 ~

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

; |( W% k j6 U5 w/ K, }8 a

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

, q* q. a7 u8 ]; m7 q6 I' z

figure; % 新建一个图形窗口

2 `- w2 H( Z. ~" y& W

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

- D" Y! f/ v' x. e2 @

hold on;

& I8 `. E; B4 t" x4 a

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

6 D# U% l( ]% L. t& b. g

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

* b8 a4 i% }0 e4 s4 {: w. J" A' P

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

6 Z- Z' h$ |5 ^3 s

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

j" k" D7 u. L" o, C

7 k* D% b$ R1 M& x+ K* _' Z

【方法4】

& A3 Z' O9 h( e1 u" Q# D; T3 A

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

6 ?8 Z* O& @& h; l

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

! B" ]2 R! o0 F) Y' R

figure; % 新建一个图形窗口

' U. e p6 Z8 t! c0 I2 R

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

- [: @- C8 N7 ^' T9 q/ O

hold on;

9 s) B- d0 E2 T8 L; V

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

6 P. s, V2 b; _

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

( E/ ^7 @+ ]7 X- [

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

* K3 Z8 g9 Y0 K. r! D

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

. U# X3 R J2 V7 g) V3 L

' ~$ y. i6 w) D6 E' p* v

【方法五】

( V/ X! v, { k: D6 P; x5 _

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

# q7 w& E; F7 q1 T5 q2 V$ @

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

- [# h+ C9 \2 w0 b' @

figure; % 新建一个图形窗口

7 M1 F6 z7 R: Q, m( ~+ D

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

' [- M$ P. `+ X, _, T" y

hold on;

2 f8 y9 E% Z7 o% F1 T, q1 @

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

/ A1 U. @( r. }( l

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

* U1 [$ [. b5 q, J

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

" R& s1 d" s+ [

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

4 W1 Y. K+ J% y7 J' b) m6 E" A2 i

" h5 D& u! g: ] . S4 ?4 A* m! B( g" A" l: }* L5 \( D/ Y9 K* e1 A4 b 4 Z N `- h" l' b6 x % s- D# Z# x/ y

相关帖子

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