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

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

[复制链接]
* p" k. _/ Q2 ~' p+ K1 z

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

4 S, l8 d0 P7 L }. O% W# \; _2 F

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

; L0 o, V8 E' _) o3 H9 W! ~

1.1 smooth函数

* B" t3 A8 A# ~$ Y, O. W" L- j

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

: s; D6 k0 ^/ r: i8 E

1)xx = smooth(x)

; ~) G) _3 P% k2 q7 d- T6 v/ P# B

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

. w- {3 F3 O' I9 }

xx(1) = x(1)

* G4 q% y$ h+ @9 N5 l( H

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

! `0 I% ?5 f+ {( Q. U3 e

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

l2 b7 v* ^8 ]" B" l

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

! G: I, b5 I4 P$ I, m6 P

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

8 U7 `' A2 H' z8 {; t. X5 d; g

2)xx = smooth(x,span)

- {1 z" Y. X. x: B5 ]+ o

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

& |+ M* x/ \# j# `& a9 q% m) |

3)xx = smooth(x,method)

" u* |& S' r1 B5 }# v

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

/ E+ ]+ K! k( u0 J

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

% |4 O$ C& j; p' I5 H3 U. Z& A

- A) e# k0 t- o- T0 D) n

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

- h6 \2 f' k+ W1 }

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

4 A$ i% L6 k. K, R4 Q% L6 X8 c

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

3 f: D# @* B) t$ R$ Y7 V

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

4 I8 z- s0 e2 i `

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

, ^5 n/ v% p4 M4 |* h& J

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

0 e# e$ B2 f. g7 Q" x

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

! E) @; U8 q: E+ s0 A

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

2 ^- e8 R! n( s. _" e

【例题1】

3 m5 y/ E6 e- L

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

9 Y& y% Z2 {% R( Q* Z6 l

思路:

8 `+ [2 F. Y1 R' D! c/ q) w+ j

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

4 r- v; K& x+ R) j( {( r0 K

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

: \) f: Q' h- e

3. 绘制加噪波形图。

$ ]2 C9 H6 `$ s1 \+ Q! j) t

解题步骤:

' C( a( o+ u1 q6 v! y

1)构建数据

5 |0 S5 Z2 a8 K: ^ E

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

/ c, n$ Y0 S" [

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

1 `& p. m2 Y0 V( U

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

( Q/ o3 Y# I4 ], Q! q6 i

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

' f5 {; |, L2 x

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

0 _6 B6 T; p% I& m1 R

2)制作基础图

0 x7 x) m a/ J4 t" Q) F

figure; % 新建一个图形窗口

) P; h2 h% u7 B# x8 L

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

- s2 D3 q- Y; o0 N- p Q- b4 {

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

% r6 B# H- v- v4 z/ P$ C3 c

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

/ H2 w; O. X$ k" Z8 d

3 P# A( _+ e/ _/ N! y& }( ?' ^

3)制作平滑波形图

1 c A% I( {" A& u( F3 ?

【方法一】

0 r% ~2 K8 r" s0 i5 ?

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

9 ~: F; _# P7 X$ F/ @( d

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

% A1 `0 ^6 r: t9 T

figure; % 新建一个图形窗口

: y: j$ K0 G9 h

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

' H7 f0 l# W$ V+ Y, c

hold on;

D' ^' C0 ?# |

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

0 w1 q$ `! b* U0 I

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

( i( f; J" J* T3 s

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

; C5 o+ H$ S' O" o4 W& }

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

+ n6 |& L3 F+ L/ e$ x' U# p8 e

7 Z$ I' R' }: }* b0 Z

【方法二】

, S( n+ I% ^& O( ]

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

; U" C! @1 W2 X. c% K

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

. |4 K# g0 L/ F0 }2 X

figure; % 新建一个图形窗口

* i7 b: d7 \2 G. p% S7 |

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

4 U0 H P- f% @8 x# a/ c

hold on;

& y# j: S9 X( a3 V' Y

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

l8 C! l3 M5 n% o8 G$ i

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

; P: G }+ Z$ y- y" \

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

, K5 H4 `2 P; H/ L- t! _+ u6 |# ^5 Y, j7 q

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

0 }1 r G) r O" l4 x; s

% ?- O1 x& }' W+ a7 r: h; H2 K

【方法三】

: L! s3 t+ Q7 s* }6 r8 u4 ]2 k2 z B

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

C+ t j/ Y' p' Q' q3 R% e+ F. O

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

+ H. V; G! U" U8 p0 ]" P

figure; % 新建一个图形窗口

4 Z, \% ^$ L% R

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

" S! E' \: k2 { m

hold on;

# d1 e# D9 n3 u$ w" E

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

+ p0 I' n: g' ?* c& H

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

7 `+ X7 _% z2 R

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

{1 t4 k" u6 V; H7 K8 l" q5 l

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

6 K4 l- J9 E/ o; A; O) \# ~

! F" W/ N/ ^. |

【方法4】

9 |# ?, i8 \9 d2 Y' d

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

; N) A: d! N, D9 E* F5 P9 O

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

6 u: b1 p/ r2 @' o

figure; % 新建一个图形窗口

2 M% V; Z6 m- w5 A7 b

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

7 |$ f, t0 {7 c4 K5 d1 o

hold on;

( ?( Y) F3 S$ d- V& Z$ ^! L0 j

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

3 ^, H2 H1 I" F& v# U+ F; t( ^

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

+ b A; B) |( ~0 A! U, J: {. j

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

: h3 H( t6 G* v( @9 F' Z b" v9 v7 ^

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

8 `9 h7 U: c$ n! U9 K d

7 _& z2 Y5 E* G/ o- V

【方法五】

/ B# F) \$ u* U' K; p

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

- n2 c% o; T9 y9 `4 ?, X

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

H+ X7 z e" j( s* k1 Q- O/ n

figure; % 新建一个图形窗口

. P/ e, F& A2 |+ g) g

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

7 o7 S2 q' u( B q' R h

hold on;

3 |5 v$ R8 g5 ?- Z

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

( B/ D5 {9 D7 D) ^

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

, w4 X* S2 w# [& ~4 B u; g

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

# D/ g: W R( @- L/ C& J; Z

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

( Q1 t1 m, ]9 D9 X' E

+ d6 t8 K3 V0 Y+ t% R+ n 2 C3 H1 t4 \/ G2 c / x1 q3 a# u( b, R4 U 6 P1 j7 x) o5 V. [; Y ' K; @' b$ q4 }
回复

举报 使用道具

相关帖子

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