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

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

[复制链接]
% x9 Q/ S5 p3 b6 M6 X. _+ t; q& M

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

0 @; L* J! h1 l0 I2 r

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

4 p$ M+ B: I& I% C' ^: }

1.1 smooth函数

, ^- c0 J$ |, |9 m' c% Q) `+ b

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

* g7 R9 l$ J( ^0 S

1)xx = smooth(x)

" A1 ~$ B: l1 Y5 \

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

+ M! b' U) T# ]: h6 g$ M

xx(1) = x(1)

- S& j( u1 G' _ G0 O# V5 n

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

, }" J3 E1 T* f8 x5 d9 z! \0 P2 B; O

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

6 V% u* ?& {! P* Q9 V @

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

7 ^& \ ~* f g

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

( J: W6 ?5 J" C* V

2)xx = smooth(x,span)

: t$ r+ t# D! X

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

4 W* f4 U* C( R3 K# V# _

3)xx = smooth(x,method)

; a3 l7 G8 I4 H

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

8 [7 E. U0 a$ g

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

3 c" Z5 d. f7 |+ U% _2 i# P. g. i; W

9 G$ _) H2 m3 @! @3 C0 t0 J5 p

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

% j9 Y4 Q. Y- U5 s9 Q& i

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

% O9 s) F3 g }# y0 }1 U+ {3 n. J0 G

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

1 M; K" n3 J0 i3 B& ~3 M0 H: W2 A

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

; ], P6 H) b1 t6 x" k

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

8 X# {( x) ]* Z" G9 A4 r, j# w8 q& P

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

K% O% o1 R7 u* f3 F

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

, c, Q& M& c& M) B

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

- x; e4 I9 P# H1 `8 p; o. W

【例题1】

! t" F: Y# [( ~( r9 W; b* `2 d

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

f. S1 B6 J7 j& j# H! s, f

思路:

. L. t3 ~$ I9 m

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

6 R, i* H$ Y! Z

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

2 T9 d4 ] W; T: U

3. 绘制加噪波形图。

+ ^5 |# K$ L. T) X$ ~

解题步骤:

) \' \. f' n* r1 j

1)构建数据

" g: o2 K) b9 h: ?" j

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

6 K# l) ^! a' i+ D( h

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

+ s* q8 }% {& I8 ]5 k$ i

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

% S& K( k1 Q7 Y2 v3 ]3 B* X

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

[$ _7 N& A f" F* Y% ~

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

, Y. a4 t2 S9 W* M% f7 n

2)制作基础图

: u* K# O- L1 |7 j L- T

figure; % 新建一个图形窗口

: F- T' j5 f' E; y# Z6 L; @

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

6 Q) d* Q& i1 Q

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

5 o! v( B/ `5 m: l# x, o& \( ?

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

; K$ R) q4 g, l8 J. m2 _" ^9 U

) n' |! [ g+ h6 s1 [3 N& Q1 o9 W

3)制作平滑波形图

$ y L1 v8 ?9 T% y% e0 C! j2 t

【方法一】

% w9 @5 z/ g3 L- @- m! ]

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

5 h! T" r, k v8 B0 |9 O5 o9 y

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

. K) p7 O) t* M

figure; % 新建一个图形窗口

! T+ u9 t5 f! V6 v/ q

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

4 g. `8 c; G7 f7 d6 Z

hold on;

9 O- A' O3 e W! ]: V9 R( |8 F7 e% M

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

4 N, [7 n; u3 n4 @! C, G9 y

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

* `6 A6 j0 g/ h" I$ j

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

# ~' E* R6 G9 W8 r9 ?

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

" l. r" Q1 _6 R! `2 S* y

@, Z$ @1 [9 R! L4 V

【方法二】

9 [( ^' F, I$ |2 {+ |% K$ V& S

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

0 A! O/ ~# t# `+ }- W& ~+ C* t5 e0 M

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

+ L" t. d# o7 L1 C n

figure; % 新建一个图形窗口

0 T" Q2 @ ^. W7 }! _

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

8 H0 x0 T! u: D: X5 p1 j$ A6 ~

hold on;

5 Z H- `- W7 d; Z7 ~* @ {

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

% W, x. T3 o5 Y# o5 Z

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

- ^8 M+ \- j2 u

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

. a* x" O& c# y

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

3 Y& _* p7 _4 c9 g* T

$ U1 L8 _6 Q) g) ?" @

【方法三】

4 s" q# d; T' u: X' \1 x* _: o/ u) B

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

" v: W! h* o( G4 c; v, N. ^2 @

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

0 m2 V& ^! c0 |; R; `% W- s

figure; % 新建一个图形窗口

; I1 f2 L, c e7 e+ ~( p

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

/ b6 S/ t- M( a1 v. d

hold on;

; ?$ o$ Q U7 k+ T

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

+ Q: @, {! U" X$ X) r$ J& B9 r

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

# C1 X9 }3 ?. i: a

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

- P% _( m$ d8 ?) r h K3 S. z

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

2 u3 ?: Z# x, d8 L. X9 `! |7 g! P

2 ]1 U+ d3 |$ L" o5 s" t

【方法4】

. l( F1 |! s' u: O

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

9 \+ r" M+ ]5 I9 f9 {

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

; k" ~; O/ D# |# h6 g

figure; % 新建一个图形窗口

! B: t$ N# l, k+ R. k5 c

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

' G5 G9 f* F' h p ]

hold on;

& D+ Y: S! A. m/ N; c9 ]2 Q h

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

; z; O+ P1 o8 q8 D

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

n2 z, ~- e) P' N K: {5 P

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

' P0 u1 I9 {- e7 F# J1 T

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

9 |& {* @- Z" x6 e: P+ O# M

3 G) b) k) D* o; K

【方法五】

. N# l/ r# v* w- f1 b

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

4 D/ Z+ F$ {+ e. I" C3 }

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

- \, ]& x. e( z( V5 X

figure; % 新建一个图形窗口

; H2 A2 k* q; P$ c2 f5 U- O

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

" ?+ q( r) s& U" R2 o8 |$ U5 q

hold on;

* g! @0 ]; A1 B' X; I

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

* }, q6 C% X* s9 B, x

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

# B) B4 W% a# u& m* U4 k* [

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

( y. y7 U( B% L0 u$ @. q: M) E% {

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

: A+ l4 k7 `! c9 C6 p) A

9 e/ E2 \, w V/ O; _3 ^$ o 7 a: ?! [, q; \% ` ; u* w5 \- g/ \7 X1 x # o7 c+ c/ P. O' d* c' o / E c a1 o# h/ H
回复

举报 使用道具

相关帖子

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