什么是滑動(dòng)均值濾波
滑動(dòng)平均濾波就是把連續(xù)取得的N個(gè)采樣值看成一個(gè)隊(duì)列,隊(duì)列的長度固定為N,每次采樣得到一個(gè)新數(shù)據(jù)放到隊(duì)尾,并丟掉原來隊(duì)首的一次數(shù)據(jù),把隊(duì)列中的N個(gè)數(shù)據(jù)進(jìn)行平均運(yùn)算,就可以獲得新的濾波結(jié)果。
具體的matlab代碼
clear
clc
load boxinfo.mat %載入音頻數(shù)據(jù)
T = data;
figure(1)
plot(T,'-*')
title('原始數(shù)據(jù)')
hold on;
%%
%滑動(dòng)平滑濾波
L = length(T);
N=10; % 窗口大下
k = 0;
m =0 ;
for i = 1:L
m = m+1;
if i+N-1 > L
break
else
for j = i:N+i-1
k = k+1;
W(k) = T(j) ;
end
T1(m) = mean(W);
k = 0;
end
end
plot(T1,'r-o')
grid
legend('原始數(shù)據(jù)','濾波之后')
濾波前后對(duì)比圖
簡單分析一下
經(jīng)過滑動(dòng)濾波之后,波形整體變得平滑,這里我們重點(diǎn)關(guān)注一下x軸附近的點(diǎn),可以發(fā)現(xiàn),在波形與x軸交叉的地方,波形都平穩(wěn)過度,這極大方便的我們后期進(jìn)行統(tǒng)計(jì)。
窗口大小選擇
從代碼中我們可以發(fā)現(xiàn)窗口大小我們選擇的是10,如何選擇窗口大小,這里我們需要進(jìn)行一些簡單的分析和測試。如果x軸附近的噪點(diǎn)數(shù)量(一上一下)比較多,那么窗口大小就應(yīng)該大一些,反之,小一些。但是過大又會(huì)出現(xiàn)過擬合的現(xiàn)象,所以可以多取幾個(gè)值,然后對(duì)比一下,選擇一個(gè)最好的即可。
不同的窗口大小對(duì)比圖
簡單分析一下
從圖中我們可以很明顯的看出,當(dāng)N=4的時(shí)候,濾波效果還不是很好,在x軸附近依然有噪點(diǎn)(一上一下),當(dāng)N=7的時(shí)候,已經(jīng)基本滿足我們的要求,圖形已經(jīng)可以很平穩(wěn)的過度了,但是從右邊的標(biāo)記處可以看出還是不是很平穩(wěn),所以可以繼續(xù)提高N值,當(dāng)N=10的時(shí)候,波形就完全能夠達(dá)到我們的要求,所以取10即可。
滑動(dòng)平均(movingaverage):在地球物理異常圖上,選定某一尺寸的窗口,將窗口內(nèi)的所有異常值做算術(shù)平均,將平均值作為窗口中心點(diǎn)的異常值。按點(diǎn)距或線距移動(dòng)窗口,重復(fù)此平均方法,直到對(duì)整幅圖完成上述過程,這種過程稱為滑動(dòng)平均。
滑動(dòng)平均相當(dāng)于低通濾波,在重力勘探和測井資料處理解釋中常用此方法。如果滑動(dòng)窗長為n的話,滑動(dòng)平均就是讓數(shù)據(jù)通過一個(gè)n點(diǎn)的FIR濾波器,濾波器抽頭系數(shù)都是1,這樣取滑動(dòng)平均就是起到序列平滑的作用。
利用filter函數(shù)求滑動(dòng)平均
Matlab有多種計(jì)算滑動(dòng)平均的方法,現(xiàn)介紹基于filter函數(shù)的計(jì)算方法。設(shè)原始數(shù)據(jù)為x,平均窗口設(shè)為a(a為正整數(shù)),那么無權(quán)重滑動(dòng)平均后的數(shù)據(jù)y為:windowSize =a;y=filter(ones(1,windowSize)/windowSize,1,x);上述命令實(shí)際上計(jì)算的是:y(1)=(1/a)*x(1);y(2)=(1/a)*x(2)+(1/a)*x(1);... ...y(a)=(1/a)*x(a)+(1/a)*x(a-1)+...+(1/a)*x(1);... ...y(i)=(1/a)*x(i)+(1/a)*x(i-1)+...+(1/a)*x(i-a+1);... ....可以看出,計(jì)算某一位置處的平均值時(shí),窗口的前端位于該處。有時(shí)為了將窗口中部放在所計(jì)算的位置處,這樣上述計(jì)算方式則變?yōu)椋閿⑹龇奖闫鹨?,設(shè)a為奇數(shù)):y(1)=(1/a)*x(1)+(1/a)*x(2)+...+(1/a)*x((a+1)/2);y(2)=(1/a)*x(1)+(1/a)*x(2)+...+(1/a)*x((a+1)/2+1);... ...y((a+1)/2)=(1/a)*x(1)+(1/a)*x(2)+...+(1/a)*x((a+1)/2)+...+(1/a)*x(a);... ...y(i)=(1/a)*x(i-(a-1)/2)+(1/a)*x(i-(a-1)/2+1)+...+(1/a)*x(i)+...+(1/a)*x(i+(a-1)/2);... ...這種方式的滑動(dòng)平均稱為中心滑動(dòng)平均,其Matlab的計(jì)算語句為:windowSize =a;y1=filter(ones(1,a/2+1)/windowSize,1,x);y2=filter(ones(1,a/2+1)/windowSize,1,fliplr(x));y=y1+fliplr(y2)-(1/a)*x;如利用1-2-1 濾波器計(jì)算有權(quán)重的中心滑動(dòng)平均,其Matlab語句為:y1=filter([0.50.25],1,x);y2=filter([0.5 0.25],1,fliplr(x));y=y1+fliplr(y2)-0.5*x;
-
matlab
+關(guān)注
關(guān)注
189文章
3001瀏覽量
234030 -
濾波
+關(guān)注
關(guān)注
10文章
681瀏覽量
57281 -
數(shù)據(jù)
+關(guān)注
關(guān)注
8文章
7254瀏覽量
91793
原文標(biāo)題:matlab實(shí)現(xiàn)滑動(dòng)平均濾波
文章出處:【微信號(hào):eet-china,微信公眾號(hào):電子工程專輯】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
rtt4.1.1做滑動(dòng)平均值濾波的時(shí)候,被意外賦值,為什么?
FPGA實(shí)現(xiàn)滑動(dòng)平均濾波算法和LZW壓縮算法
如何利用labview對(duì)CSV文件里的數(shù)據(jù)進(jìn)行一階滯后濾波和滑動(dòng)
用LabVIEW設(shè)計(jì)簡易逐點(diǎn)式滑動(dòng)平均濾波器
詳細(xì)分析stm32f10x.h
一種基于改進(jìn)的滑動(dòng)平均濾波器的DDoS 攻擊檢測方法
一種基于改進(jìn)的滑動(dòng)平均濾波器的DDoS攻擊檢測方法
滑動(dòng)濾波器型譜分析器在極窄帶濾波中的應(yīng)用

采用MATLAB對(duì)SPWM進(jìn)行輔助設(shè)計(jì)與詳細(xì)分析和解決方法

均值濾波和均值濾波算法程序
通過滑動(dòng)平均濾波器解決數(shù)控系統(tǒng)加減速控制的跳變問題

評(píng)論