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

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

[复制链接]
0 e9 [6 ?, ?) G5 Y

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

' I/ a, N; y5 {0 m" G

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

0 e, F5 F) p) N# p% f/ J9 U7 }) _

1.1 smooth函数

7 ~7 _ _, m6 ?

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

; \: P( d+ r; L; E/ [4 P. F- c0 Z

1)xx = smooth(x)

3 Q: i1 w! q8 v

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

T" W2 F& `& @

xx(1) = x(1)

7 M" z, u! T8 z. Q) k& p

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

. U l! z: S, S1 J& W

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

. d- u8 D; h3 b

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

! i$ H, U6 q1 R$ e& y

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

# a7 T' _% |( M6 J& W0 n3 @

2)xx = smooth(x,span)

1 f x1 G1 A6 H1 M4 t" Y Q

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

/ ^$ z. m4 X4 e

3)xx = smooth(x,method)

$ p) Z3 p4 x- c. y. A* w1 o

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

a8 r4 W' q% p

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

) h$ [) ?, P) S- `" k, W) \

+ U& f- T1 D) s# |6 t2 f8 k( B

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

3 w7 @& g! ]* @

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

( c, h* g- K0 J. V( |4 A! {

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

" C$ c" U2 ^5 \/ d0 E, V/ X

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

" E. |$ V8 ^0 w

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

6 t( E' O8 _, a" r3 B, n" A+ N

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

w. u. r9 \6 H5 @( p

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

) y/ J1 d4 Y- W" h

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

* }3 ?6 [6 b1 @7 [) F9 W9 E

【例题1】

+ f+ Y3 U' @9 T1 }/ ^

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

$ c0 x7 b& \" q$ B! U V+ P$ g& d

思路:

) J) Q d5 v& ^8 b# k# {2 t: r2 t

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

/ H) X9 {: n- k2 W$ a# O

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

" ?, {% J, V) }! ?8 d u

3. 绘制加噪波形图。

$ t& M, T; z. M2 i+ g- Q' P

解题步骤:

% ^8 P6 N: \5 M0 ?

1)构建数据

f5 ]% r4 Q( \* E t9 m

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

" J- v! `! e4 \9 L( {$ r9 P' z3 M9 L( d

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

. |, X" N$ l. S; h8 m

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

) X0 @4 u. U7 ?

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

3 f# }* W" K3 n e6 }/ U

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

7 D7 a8 v+ q0 S8 i# i! Y$ B

2)制作基础图

/ V: x8 Y" O9 O# E

figure; % 新建一个图形窗口

8 _; k9 a3 T2 f% e- u: _

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

% @/ f4 t. d% s/ H0 p

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

! Z. Q5 n; U7 Q# z" S4 h8 x

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

. T, }6 E! y8 f' w: T1 |

# c" S4 ~7 c9 m9 V- b v

3)制作平滑波形图

0 W- N- ?# r4 E- F/ ~

【方法一】

]5 [+ R! `: D# T$ o) @3 f

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

2 z$ G0 {# X: b8 I$ D3 d

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

, q; U4 M1 O. W! E

figure; % 新建一个图形窗口

Z8 h) J" h1 p E

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

2 F7 b3 ]) C p* k

hold on;

$ N8 p2 C2 c( R. V

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

0 q# a) E: [/ G4 ^! B$ A

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

9 x6 s7 D/ h; D A- ]; P5 }' A& h( w6 T

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

O7 \8 ~8 P- s( @' z: k: y

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

: V6 w. O; X' c& v4 X

. }- F$ j' T9 c+ W; M% @

【方法二】

' E, q; E! @0 H( k9 j- J

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

5 M# H5 _ x- O1 C2 x

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

' s4 K5 S+ q! C. Z3 L

figure; % 新建一个图形窗口

5 _/ v3 ?2 C( k2 P P: {

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

# x9 o# z% l+ s. f( P( r

hold on;

- B l a9 D7 c% Q$ r9 @

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

! A' P$ h8 n+ n- B

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

. M4 c0 ?/ k+ C% g9 V) V0 @

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

: Q# U: g' ^/ ]: c8 x2 ~( L

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

2 j, V) J, I9 Z# h

`$ s9 c. u2 C- O, i

【方法三】

+ [; t! A1 s$ C9 W( q( D1 p

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

4 p- L! U% v7 t+ {

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

# ? l! H+ J. x: M X# q7 ^9 n

figure; % 新建一个图形窗口

5 `) l& n* M, h

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

2 S4 n3 a! s: S

hold on;

0 h, N; G6 p U9 Z& R

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

; g ~( [6 S9 b0 o$ o9 r

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

9 r: b2 t, t+ L: d

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

" E% v! Z1 D& s

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

3 J5 H% G" ]7 y& E: u8 k

1 H C: w! y. Q

【方法4】

$ H Y) y3 \/ m

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

& ^0 W+ n) w+ N+ i( F* r4 V) j6 x! Z

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

4 c# u8 x( @8 g% s# H# T

figure; % 新建一个图形窗口

6 r) U2 k7 B j: u, V' {

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

' ?) _% R, D. a& q( g

hold on;

5 g: C. I( y& U L9 E8 v

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

/ X+ M6 N% ^% N* s% [0 P* k. j

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

& C% J6 I" Y- y7 g

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

# }' g3 Q$ f, U# v+ s

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

Y( W; A- e% K1 a* N; F

" p- N5 T `! v$ }% {0 a ?

【方法五】

( B# A+ ]! Z% i- |& t3 e2 c

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

* k2 b" O* E, [3 q

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

o5 j9 c( G5 ^* V" K, A

figure; % 新建一个图形窗口

' x: {5 U6 H% V i) ^: b

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

# v8 t5 n, D7 C

hold on;

6 I* G, n: o* t' T$ h5 u- k. i

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

5 A% g6 U' Q& h' Y

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

# N) [) x0 n1 {4 Y+ c$ ?- c

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

; V* t4 F) Z* Q! o" G- A

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

* {7 I2 D$ I9 O6 `9 T: y+ j6 S$ z

' J6 d. m& T+ X- L, |! e) ~: U- ^9 ~) Y8 {- M , f; }# W% X% [6 f' O - l3 u9 H( a1 r) I# l( a/ ^& r( J
回复

举报 使用道具

相关帖子

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