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

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

[复制链接]
7 ]# c; X! i" | Q0 o' g% {* h

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

" h1 p% B' h& i1 M! K& m6 ]! i

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

$ f, ^9 C1 l4 H1 F/ `

1.1 smooth函数

, D) n' W7 D( P7 t

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

# [2 D* J. H8 b N

1)xx = smooth(x)

. s3 y+ Y0 U/ t" m4 ?

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

k* V. @# n( d4 ], q/ b' ~

xx(1) = x(1)

# x$ E( v0 J5 Z6 c

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

: Z$ H" h( _& q0 l7 I

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

E/ c& @0 X1 b, ?5 o! L

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

2 ^3 H# Y1 f4 Q3 ?

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

- h& Q3 z+ R! O0 j* I/ R7 R

2)xx = smooth(x,span)

& k0 `2 W; U3 j8 d9 w' C

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

' ~0 y0 }% J8 i3 W

3)xx = smooth(x,method)

. n& n b# r- q" X" v7 b$ R7 s

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

4 ]8 Q. P2 ~% o* R7 |1 b

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

1 [9 x7 S2 d1 `1 x- `! x

& g; f8 i8 [7 s& G( W. s0 ?

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

0 \6 T3 w, X6 J

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

9 c9 k* u) ?; \6 W% o! x: K

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

: M6 @* q* n6 m* i+ Z! g, D

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

- i# H0 i* j9 `, F3 o6 h

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

: o4 g0 k5 U1 e$ ^5 e% Q, o/ C

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

8 R7 Y% m+ b! l

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

3 X# H5 s e. C0 }# B4 F1 n

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

8 m& e$ N1 H0 |, U) B# t

【例题1】

' f" N R/ b' K3 D, i p! L9 |3 w

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

* k- o% Q/ O7 t9 ^- N7 Q

思路:

/ q# `1 {; m9 u0 \+ V& g

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

- F4 S; j) g: v0 ^

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

3 K$ q/ h1 y3 ? S6 @- l

3. 绘制加噪波形图。

& |. X! {; N' Z

解题步骤:

5 d/ L2 h7 C) N7 P/ J0 f

1)构建数据

/ r6 z# b i5 e a1 ?# b

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

; r6 j3 e2 |/ g& x$ C/ i3 W6 [

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

! l# l, s! R) w7 H7 s

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

( w8 U1 H( g' C

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

4 y3 ~8 {* ~! t: e# S; ^

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

4 v, K" F* b9 B; @) s, n1 ~

2)制作基础图

# l, k! x) k7 V$ D- a6 I( g

figure; % 新建一个图形窗口

% {( s$ P5 X( p4 ^4 c

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

. Z# Q8 j! ?% L, H* g+ F H' r

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

6 ]2 K" N: E) u9 M0 S- R @

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

. g. [7 z- H# w$ O3 ^. L7 n% r

! t" Z! V& z7 @. E

3)制作平滑波形图

9 c" K+ H; n I6 B {

【方法一】

. o8 c# o7 y) F; |% q

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

# ?" _- a: n- z j" A

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

! a' c) g' y) e" [

figure; % 新建一个图形窗口

9 f2 C) u s7 h& c9 |9 ]

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

# ]" g; `3 s/ [- T

hold on;

* b0 ]8 T2 w& C- Q# s: f" d

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

# u1 W2 y k0 ?+ ]8 z( S

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

& Q$ c. Z$ f$ h% e% V

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

, w, a+ g5 [7 [6 P% }

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

' B" e5 f+ ]) q& T* L$ z! a, U @

3 z- V1 R: x4 V. G& |; @) u

【方法二】

" h. J: p; b* ^# g4 L

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

* l* Y2 Q* i; ^, E0 H

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

$ D+ @" G5 l$ f4 o# j3 i% d

figure; % 新建一个图形窗口

2 n0 T6 F0 M+ S" d1 a6 U, H" E

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

; ]$ X( j4 S- g; {9 s

hold on;

( ?& h$ _, P' r2 `7 y

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

. \1 I( o& d8 X! q l) r/ J

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

: |" v/ k0 u% A

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

' x9 M" Z8 @) ] E7 Z! v4 a! k8 }) F

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

5 @+ n- h4 J0 H% Q. L

2 T1 s: W+ Q& f b9 t4 _, \4 q0 E H% _

【方法三】

: L1 o2 o1 v/ c9 f

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

) [5 ~* v1 z0 [8 w: U

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

& N6 d' f4 S# H) b- q

figure; % 新建一个图形窗口

, \8 t, i7 c. z/ o& V' ^1 o# D- S" }+ v

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

* H; e9 g! {2 J; w3 ^: `

hold on;

% J: P* [) \! L/ `1 A9 s7 c

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

: N* `# ?# o! |# f3 q: h' e

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

9 y; }* R$ J2 M; L) S/ P3 R

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

( n& j' a! E, S

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

6 F& W" {+ j- I0 ` H8 k

0 s+ s7 h) ~, B+ d

【方法4】

7 E, J: s# h2 K

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

% o( n, W8 c' a& P7 \$ {, W: d6 g

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

; Y" x8 Z% k/ A. B

figure; % 新建一个图形窗口

% Y8 [5 V2 y o' ~( c: S) F0 n

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

# l; k& r6 M# i/ @: r

hold on;

* h/ X7 K1 }+ l! W8 L. Z# |% g# g

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

( C& V B% o5 [& h$ ~

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

" C6 \. E6 {. v# t) ~

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

5 n' i0 ]6 n- o0 P- H& I3 Y* E. W! I7 m

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

5 G! K; e; T# d1 u8 J! a

; O L. e5 h! ]: \0 @5 d

【方法五】

) N4 T; f) m2 L0 o1 s4 H

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

# ~! O, i$ Q" G' H/ s1 _: N

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

2 R- r# m" l8 J4 m& t2 U. `6 _

figure; % 新建一个图形窗口

/ v" J; A, q+ a/ G1 ~

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

; x% l0 P) o0 e$ m

hold on;

2 H. | D# Y( ~ [

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

, e. [; W* c0 Q* w- G

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

# ^* g L y8 _

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

3 d) w( x0 @, u

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

# R4 s2 N" k/ G2 d+ a

% ]: Z1 N/ F$ E, F! z5 O$ N m% h % ?7 m2 a* z( P! W# v( p* P b4 A4 n* R, I) z4 D. a2 m& | h- {6 N% M; J8 v w9 o: v+ @ % e7 F3 c! X7 {3 t
回复

举报 使用道具

相关帖子

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