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

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

[复制链接]
) t% s- v% v$ o7 J

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

+ {* P: q, k3 V2 Y- _. X) f

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

# ^3 V5 e7 m6 W# V m

1.1 smooth函数

3 d: e- ]' b$ ^: P5 H) Q- }6 F

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

4 W% M: G, z; K* \3 p, l

1)xx = smooth(x)

' V0 ^5 [3 J( r$ K t$ ~

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

8 X% F- G Z% A: I9 \. \3 N! `

xx(1) = x(1)

$ d' v1 l3 c: \; j }

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

3 O, l* s% \* W; ]

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

+ t5 |* R) W, G

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

3 A! `( n# L! t8 d) I. |: D4 @

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

, \$ y7 ~8 y& \ ^

2)xx = smooth(x,span)

6 |& [2 L2 t, D5 O

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

y" N' s" k$ N% }! L/ u

3)xx = smooth(x,method)

0 ~$ }/ |! K8 S+ t! d* t7 O7 w

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

5 Z: }, Q. P' Y# R! ^

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

6 x* L1 ?3 U' f ~, k9 K

% r7 e% o8 I7 M; [* w

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

# P [6 O/ j% T1 w0 j$ ~3 @! k

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

3 [* U8 l! R: d! \

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

4 r5 N1 r- f, e' ~

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

& V S- W5 }% _. H$ t$ @6 Z

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

- k( }2 {" Y, n9 F# E1 \

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

( C7 C. w( [% ]0 n9 k* T2 V

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

& V8 x6 J& A+ r- w

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

' q7 W1 ]7 a% E% A6 V4 S2 D0 {

【例题1】

' B% d7 R2 L3 B/ [+ E

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

& B9 E ~* U+ |5 I$ l1 S) z: T+ J

思路:

3 Y! I5 g* A, z$ f/ G

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

; [, |! H$ V. J5 i+ I2 E9 ?% |+ i H

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

[0 e/ H$ R$ ]$ ^% r/ H

3. 绘制加噪波形图。

2 {4 M8 g/ y. M1 B4 s% D

解题步骤:

5 \- J6 u7 t2 u/ u- d

1)构建数据

3 F/ P; d) T( A

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

' L) ?% ~( \; `8 w$ Y8 b

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

9 q# x6 y# b/ Q) K; G

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

! |* D# M& b! y# |) {; d F

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

6 w, g8 ]+ g/ l

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

a, Q' V4 b2 z* v4 d1 a

2)制作基础图

I4 J1 C. R) ^ U/ Q% s1 k9 N* J

figure; % 新建一个图形窗口

' w8 a" B l# Z, c' w8 E

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

7 Z& a* K; r! j6 |% [2 V

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

( R5 E- r& u; j4 r

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

1 ^% C8 a; _1 k$ C3 W

! x& r( F$ }6 q( p- _

3)制作平滑波形图

4 R8 e9 a7 {( H$ L$ R* \

【方法一】

. I" m c$ }/ [8 z

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

# O- I I5 g/ |+ Q/ K: y% B

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

% F9 W9 I, Q! C. `

figure; % 新建一个图形窗口

5 M: T8 O: G2 l" G

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

. w) D. u+ {9 | Z! a' l5 m

hold on;

. \8 w4 ~7 q7 Y

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

, A s8 A/ H# K7 Z( S

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

; t9 ~8 _' }6 G% ?' ^

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

P& F* X+ V, |

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

4 E( p3 _5 ~1 u8 F; I2 F w8 \4 \

4 g8 ?9 z$ j9 x/ N. i6 T. v

【方法二】

4 Y$ D# P8 b% C l, }5 x0 A

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

( [' H" @4 S5 R0 ?1 j4 p4 q9 O" z

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

! \2 H( } G2 a- r1 Z y8 {

figure; % 新建一个图形窗口

! L, K, _# a U7 H! t1 D

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

$ H. o9 m" I8 x$ x' e

hold on;

_7 n' K& {1 j

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

/ R0 Y8 x* {- h4 ?- @' Y; z* t

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

. x) x' q( T2 A, L9 D& E

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

N1 Z2 } P9 f, k+ ?( o- m0 u

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

) r6 T1 o# M- [" y& }

; N0 t6 i, q9 A8 _8 E

【方法三】

3 Z# U0 A9 I% t$ D0 X

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

) Z$ v+ a9 n2 s- N1 ]9 h! R+ |1 |8 Y

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

1 l. [) K3 S$ H4 T: i& e# \$ u$ A ]

figure; % 新建一个图形窗口

2 a0 Z5 w1 L$ f

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

& k2 U' K5 v' n7 |2 a) G( j

hold on;

9 [! B& C7 A" y( Z8 V

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

" M9 {% |/ a- |4 F5 {& k8 ]/ I

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

$ v" V4 U0 `4 z3 D

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

8 [5 G$ y! y2 X) k

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

4 u; j2 ?6 J0 G! l& J

9 h* l( c8 G) f

【方法4】

) H' N; S! n7 v4 }/ Q

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

, A3 H2 ~' ]* O& u5 g. t5 l

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

& P+ G Q9 x+ f& V$ E5 i

figure; % 新建一个图形窗口

" n& X+ |: {& f6 T+ L+ \

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

& A# M. K$ e( S6 m4 A' L

hold on;

7 z) {4 R0 u+ p2 L

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

/ f" E3 r) a8 f4 _6 N+ z

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

: Q, o9 U& Q+ `" K

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

5 \% f& Y! f. b, p. e

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

. m1 B5 J- U, A7 {/ L/ B' h& P

; C* q$ f5 O& U/ T' C9 ?* }

【方法五】

# Z: J6 |6 `8 h3 H# A

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

O9 w/ H6 i7 B2 Z% c3 k

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

) y2 |: P: `9 g- \& A/ C7 |

figure; % 新建一个图形窗口

. ^! l. G- U1 u0 y2 C- \! U4 m

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

+ G3 ]. U# \0 B6 t# U, D& p

hold on;

* P6 X# L d9 h+ w$ n

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

: x5 m2 i7 k1 g& _; d, C; b! D

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

( _1 @. p# O8 J5 q

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

7 R& Y+ x' f3 l

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

+ R7 x, g1 A- C; Q1 P- w

/ j2 O+ r, N- R2 S- A. N4 p9 a8 C X7 ^4 f! m V* r 9 n) q6 M- ^2 s8 h5 Z, I$ b; f$ \ , Y: `: [5 L/ M. ^; `# v1 u& t7 G
回复

举报 使用道具

相关帖子

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