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

[复制链接]
7 J( Q9 l. u0 z7 E8 U3 M1 |* r# o8 C

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

L. S! a$ e8 H: Y" X7 N8 c: H) N, V

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

/ o; X7 H3 K2 ]: e, ?8 i' q

1.1 smooth函数

m, a$ L V; o( B# {6 B) W$ r

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

& Y( G- ^/ \7 y' @2 K% {) c) O

1)xx = smooth(x)

U+ B4 e* X2 |; H. @

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

1 Y1 a& |( f% Q% [" \

xx(1) = x(1)

8 {5 A8 d! r* b

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

9 k0 S+ `0 P+ _( f5 P, Y

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

?% |$ l7 @$ s) ]( ~1 H

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

! L8 Y' y; L2 m) w' g

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

( X. u3 ]! Z9 Z

2)xx = smooth(x,span)

- J# T1 N* Z8 w; M

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

# c4 \( z* }1 y, V7 O

3)xx = smooth(x,method)

8 ]/ w7 y2 [1 `8 }5 S; ?

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

* ^& |) S2 k0 E. `1 }! K/ g

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

3 ~! Z6 ?7 B7 T% d& H/ V

# Z- r1 X( H" C' p, K: `7 T

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

; n* R* l6 A0 Q7 R* W; V. _

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

- o$ K& h! v/ c

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

$ N5 W! c2 l. x& H5 T$ \+ j& `

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

9 f( r3 m; ?3 {2 p% @* f; |

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

" J2 A2 n5 z! O8 ~, U0 q

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

# P4 \/ P: X: E* J

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

+ C) g' E3 c6 {" w9 B

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

7 r9 ~0 n) R. G" G6 b

【例题1】

5 ~# y' T8 C; a- d6 e

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

2 o& M p! p2 A( d0 O

思路:

' |# U: R/ U! m$ l8 m

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

; }# I0 G; \! C' O1 X) X* I) g2 R

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

7 c3 }& E D# N* [

3. 绘制加噪波形图。

* H0 A2 b( e/ k

解题步骤:

( R* h% Q+ o8 a

1)构建数据

/ r/ K. C4 L* D& ~. @, p- F- r

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

8 G$ U R8 t p0 ?

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

0 f( U, X. Q2 I( M& A

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

3 z. W+ l# v7 B$ i7 K

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

" [9 B6 L$ Y$ G

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

: W2 T& t4 ~+ R1 F3 f0 A- p

2)制作基础图

; w+ [$ g# m# M3 v

figure; % 新建一个图形窗口

- p) }: K" ~( T7 J+ a: X

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

4 I0 _, i) e% @; V8 Y

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

) V" P0 A7 Y( p. a

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

. Q7 P: J: S1 r: ], j

+ N) }" l0 o- u A+ q, d

3)制作平滑波形图

# M. I: d+ ?' X; T- H* h

【方法一】

& [' w; M0 I7 G8 ]7 H' v$ y

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

( Q% @+ D+ J/ \

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

& I" L* \1 g M9 I0 S% E

figure; % 新建一个图形窗口

" u3 j& ~* \$ e

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

4 u3 l% j, `8 x" W* Q, n& M- t

hold on;

3 F1 L, [1 u2 q, E2 R, Y

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

$ {5 L0 `: N2 p6 V1 s# z

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

: `3 L) Z% Y% O6 s% L3 X

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

( g* T( r' E$ l% h6 i- h1 X

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

+ K7 ?# e1 ~& Q- x3 O6 h( {

; l- v* @- |$ R/ r8 ?

【方法二】

; Z1 ~% V* ~' C* _9 c: b

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

: n2 U) R% c) O0 f5 |% V1 v- @* q: A

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

4 u! k/ O [! N1 W$ P

figure; % 新建一个图形窗口

2 k' c: P3 M$ v+ T3 n" A* A3 [: p

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

: l! q3 F* R, L+ d5 o+ h8 p: b+ d

hold on;

% A# D K$ ^: `5 n" W/ [

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

5 f9 R7 Z% t4 k4 D; Y' ~

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

( S8 U* m" c9 K8 R) v

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

( ]8 R5 @! z) H6 a

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

; S1 W. o* Y' \; y7 C6 I [5 [

+ Q3 j: X( S2 R; ?6 w

【方法三】

6 U! j" v9 ~$ X3 y) x) V! Q

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

* R0 f+ r: \' F" t: K% b8 u0 P9 `

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

) P& k4 G W* w$ Z0 e, j0 S

figure; % 新建一个图形窗口

2 a% _+ G) [5 V% A y/ C- ^ c

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

A' y% m8 b' R

hold on;

+ ~7 T4 F8 I- i$ w+ q$ S: T% |

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

& K4 N9 q$ u3 V9 ]

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

* e1 G4 u2 k: n# r, V2 K

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

& U1 q6 s( {; `5 h/ f. `

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

8 K d* b+ I8 L, {6 Y, c

5 \, o8 |( @2 m# E- O ]

【方法4】

. w" f% n3 O- V7 o/ M

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

" k7 a6 f% K% g

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

' a: j- h4 z+ J6 {5 b+ Z5 O

figure; % 新建一个图形窗口

# M$ A* m7 {% C* M* x. H+ i7 Y; a

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

" L: H1 e, F) C f% v

hold on;

: f/ C. d4 v7 m+ V; g9 m: c

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

# w$ o! w2 B3 S+ y2 n) A3 V' c4 L4 Y

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

/ U2 F D2 u7 y% Z. z

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

% n' p9 J4 Z% E' \) M# y# b; T: ?) Z$ k4 H

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

" n5 |5 r0 ^- y7 J6 A* `( s

7 w) {4 ^1 d2 K/ {% P

【方法五】

8 M' D) B; g1 Y" `0 |, B2 [2 D

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

3 Z5 ?/ i# B: e' ?$ L4 Z, K# O D, E

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

% _: A J7 d& b0 T) o) o' z& X5 c$ W$ h" F

figure; % 新建一个图形窗口

( s7 X( j' j( @: N4 [& N! V; c

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

, t! A; {. g2 }# x

hold on;

% w3 G) @. T7 v6 r& S2 }

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

( P i- _: E* E4 {4 t" H

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

6 p) S5 h1 B4 N2 P& \1 U

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

5 ^9 y8 \% F' K

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

% }/ O/ H3 n3 Z/ U

3 O- w7 p6 B! m0 c2 A , t3 Y- i6 k; y, l6 N* I0 K, i' r2 _+ M# H2 ? $ H! L; M' R; T* o3 E. a 6 ?# n6 O/ B6 S# P3 q( [

相关帖子

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