欧美激情久久久久久,人妻久久精品天天中文字幕,国产精品无码色一区二区三区按摩 ,日韩中文无码有码免费视频

如何實(shí)現滑動(dòng)平均濾波?

什么是滑動(dòng)均值濾波

滑動(dòng)平均濾波就是把連續取得的N個(gè)采樣值看成一個(gè)隊列,隊列的長(cháng)度固定為N,每次采樣得到一個(gè)新數據放到隊尾,并丟掉原來(lái)隊首的一次數據,把隊列中的N個(gè)數據進(jìn)行平均運算,就可以獲得新的濾波結果。


具體的matlab代碼

clear

clc

load boxinfo.mat  %載入音頻數據

T = data;

figure(1)

plot(T,'-*')

title('原始數據')

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('原始數據','濾波之后')


濾波前后對比圖

滑動(dòng)平均濾波


簡(jiǎn)單分析一下

經(jīng)過(guò)滑動(dòng)濾波之后,波形整體變得平滑,這里我們重點(diǎn)關(guān)注一下x軸附近的點(diǎn),可以發(fā)現,在波形與x軸交叉的地方,波形都平穩過(guò)度,這極大方便的我們后期進(jìn)行統計。


窗口大小選擇

從代碼中我們可以發(fā)現窗口大小我們選擇的是10,如何選擇窗口大小,這里我們需要進(jìn)行一些簡(jiǎn)單的分析和測試。如果x軸附近的噪點(diǎn)數量(一上一下)比較多,那么窗口大小就應該大一些,反之,小一些。但是過(guò)大又會(huì )出現過(guò)擬合的現象,所以可以多取幾個(gè)值,然后對比一下,選擇一個(gè)最好的即可。


不同的窗口大小對比圖

如何實(shí)現滑動(dòng)平均濾波?


簡(jiǎn)單分析一下

從圖中我們可以很明顯的看出,當N=4的時(shí)候,濾波效果還不是很好,在x軸附近依然有噪點(diǎn)(一上一下),當N=7的時(shí)候,已經(jīng)基本滿(mǎn)足我們的要求,圖形已經(jīng)可以很平穩的過(guò)度了,但是從右邊的標記處可以看出還是不是很平穩,所以可以繼續提高N值,當N=10的時(shí)候,波形就完全能夠達到我們的要求,所以取10即可。


滑動(dòng)平均(moving average):在地球物理異常圖上,選定某一尺寸的窗口,將窗口內的所有異常值做算術(shù)平均,將平均值作為窗口中心點(diǎn)的異常值。按點(diǎn)距或線(xiàn)距移動(dòng)窗口,重復此平均方法,直到對整幅圖完成上述過(guò)程,這種過(guò)程稱(chēng)為滑動(dòng)平均。


滑動(dòng)平均相當于低通濾波,在重力勘探和測井資料處理解釋中常用此方法。 如果滑動(dòng)窗長(cháng)為n的話(huà),滑動(dòng)平均就是讓數據通過(guò)一個(gè)n點(diǎn)的FIR濾波器,濾波器抽頭系數都是1,這樣取滑動(dòng)平均就是起到序列平滑的作用。


利用filter函數求滑動(dòng)平均

Matlab有多種計算滑動(dòng)平均的方法,現介紹基于filter函數的計算方法。設原始數據為x,平均窗口設為a(a為正整數),那么無(wú)權重滑動(dòng)平均后的數據y為:

windowSize =a;

y=filter(ones(1,windowSize)/windowSize,1,x);

上述命令實(shí)際上計算的是:

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);

... ....


可以看出,計算某一位置處的平均值時(shí),窗口的前端位于該處。有時(shí)為了將窗口中部放在所計算的位置處,這樣上述計算方式則變?yōu)椋閿⑹龇奖闫鹨?jiàn),設a為奇數):

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)平均稱(chēng)為中心滑動(dòng)平均,其Matlab的計算語(yǔ)句為:

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 濾波器計算有權重的中心滑動(dòng)平均,其Matlab語(yǔ)句為:

y1=filter([0.50.25],1,x);

y2=filter([0.5 0.25],1,fliplr(x));

y=y1+fliplr(y2)-0.5*x;


圖片加載中...

在線(xiàn)留言

◎歡迎您的留言,您也可以通過(guò)以下方式聯(lián)系我們:

◎客戶(hù)服務(wù)熱線(xiàn):021-51095123

◎郵箱:xin021@126.com

展開(kāi)