滑動(dòng)平均法

姓名:武志霞.? ? ? 學(xué)號(hào):20021110081

轉(zhuǎn)載自:https://blog.csdn.net/weixin_42943114/article/details/107693068,有刪節(jié)蒿囤。

【嵌牛導(dǎo)讀】滑動(dòng)平均法是一種信號(hào)平滑去噪方法胰锌。

【嵌牛鼻子】滑動(dòng)平均法

【嵌牛提問(wèn)】滑動(dòng)平均法原理及應(yīng)用

【嵌牛正文】:

參考書(shū)目:

1《數(shù)字信號(hào)處理》-胡廣書(shū)

2《Digital Signal Processing - A Practical Guide For Engineers and Scientists》 - Steven W.Smith

1.0 移動(dòng)平均法的方法原理

滑動(dòng)平均法(moving average)也叫做移動(dòng)平均法缘揪、平均法涵紊、移動(dòng)平均值濾波法等等伶授,是一種時(shí)間域思想上的信號(hào)光滑方法贵少。算法思路為组砚,將該點(diǎn)附近的采樣點(diǎn)做算數(shù)平均,作為這個(gè)點(diǎn)光滑后的值利职。

一般窗口為對(duì)稱窗口趣效,防止出現(xiàn)相位偏差。窗口一般為奇數(shù)猪贪。

以3點(diǎn)平均(窗口長(zhǎng)度為3)公式為例跷敬,原數(shù)據(jù)為x,平滑后的數(shù)據(jù)為y:

對(duì)y(n)和y(n+1)相減热押,可以得到另一種計(jì)算形式:

當(dāng)然這兩者都是等價(jià)的西傀。

1.1 matlab內(nèi)自帶函數(shù)實(shí)現(xiàn)移動(dòng)平均法

matlab有兩個(gè)函數(shù)實(shí)現(xiàn)滑動(dòng)平均法,一個(gè)是smoothdata()函數(shù)楞黄,一個(gè)是movmean()函數(shù)池凄。

以窗口長(zhǎng)度為5為例,smoothdata()函數(shù)調(diào)用方法為:

y = smoothdata( x , 'movmean' , 5 );

但是這個(gè)smoothdata函數(shù)實(shí)際上是調(diào)用了movmean()函數(shù)鬼廓。所以如果直接使用的話肿仑,直接用movmean()會(huì)更快。

movmean()函數(shù)的調(diào)用方法為:

y = movmean( x , 5 );

下面以一個(gè)加噪聲的正弦信號(hào)為例:

%移動(dòng)平均濾波

clear

clc

close all

N_window = 5;%窗口長(zhǎng)度(最好為奇數(shù))

t = 0:0.1:10;

A = cos(2*pi*0.5*t)+0.3*rand(size(t));

B1 = movmean(A,N_window);

figure(1)

plot(t,A,t,B1)

1.2 利用卷積函數(shù)conv()實(shí)現(xiàn)移動(dòng)平均法

根據(jù)之前的公式,我們可以看到

y(n)=1/3?(x(n?1)+x(n)+x(n+1))

y(n)=1/3?(x(n?1)+x(n)+x(n+1))

就相當(dāng)于一個(gè)對(duì)x和向量[1/3 1/3 1/3]做卷積尤慰。

可以驗(yàn)證:

N_window = 5;%窗口長(zhǎng)度(最好為奇數(shù))

t = 0:0.25:10;%時(shí)間

A = cos(2*pi*0.5*t)+0.3*rand(size(t));

B1 = movmean(A,N_window);

F_average = 1/N_window*ones(1,N_window);%構(gòu)建卷積核

B2 = conv(A,F_average,'same');%利用卷積的方法計(jì)算

figure(2)

plot(t,B1,t,B2)

中間部分兩者完全一致馏锡,但是兩端有所差別。主要是因?yàn)槲岸耍琺ovmean()函數(shù)在處理邊緣時(shí)杯道,采用減小窗口的方式,而conv()相當(dāng)于在兩端補(bǔ)零责蝠。所以如何處理邊緣也是值得注意的党巾。

1.3 利用filter濾波函數(shù)實(shí)現(xiàn)移動(dòng)平均法

首先介紹一下Z變換。以向前的滑動(dòng)平均為例(這里中間值不是n而是n+1霜医,所以相位會(huì)移動(dòng))齿拂。

y(n)=1/3?(x(n)+x(n+1)+x(n+2))

y(n)=1/3?(x(n)+x(n+1)+x(n+2))

它的Z變換可以簡(jiǎn)單的理解為,把x(n+k)替換為z^(-k)肴敛,即

因此對(duì)于filter濾波函數(shù)署海,輸入的格式為:

y = filter(b,a,x)

其中b和a的定義為:

其中a1必須為1。所以對(duì)應(yīng)的移動(dòng)平均濾波可以表示為:

y = filter( [1/5,1/5,1/5,1/5,1/5] , [1] , x );

它和下面代碼的是等價(jià)的(在邊緣上的處理方式有所不同

y = movmean( x , [4,0] );

代表有偏移的滑動(dòng)平均濾波医男,4是向后4個(gè)點(diǎn)的意思砸狞,0是向前0個(gè)點(diǎn)的意思。

因?yàn)?filter濾波器使用有偏移的向后濾波镀梭。濾波后刀森,相位會(huì)發(fā)生改變。所以通常采用零相位濾波器進(jìn)行濾波丰辣,matlab內(nèi)的函數(shù)為filtfilt()撒强。原理從函數(shù)名字上就可以體現(xiàn)出來(lái),就是先正常濾波笙什,之后再將信號(hào)從后向前再次濾波。正濾一遍反濾一遍胚想,使得相位偏移等于0琐凭。

1.4 移動(dòng)平均的幅頻響應(yīng)

幅頻響應(yīng)可以通過(guò)之前1.3得到的H(z)函數(shù)來(lái)得到,在單位圓上采樣浊服,也就是把z替換為e^iw统屈。以中心窗口為例,

y(n)=1/3(x(n?1)+x(n)+x(n+1))

H(iw)的絕對(duì)值就是該濾波方法的幅頻響應(yīng)牙躺。以3點(diǎn)濾波為例愁憔,matlab代碼為:

%計(jì)算頻率響應(yīng)

N_window = 3;

w = linspace(0,pi,400);

H_iw = zeros(N_window,length(w));

n=0;

for k = -(N_window-1)/2:1:(N_window-1)/2

? ? n = n+1;

? ? H_iw(n,:) =1/3* exp(w.*1i).^(-k);%公式(e^iw)^(-k)

end

H_iw_Sum = abs(sum(H_iw,1));%相加

figure()

plot(w/2/pi,H_iw_Sum)

由于H變換在單位圓上的特性相當(dāng)于傅里葉變換,所以上面代碼等效于下面計(jì)算方法:

%計(jì)算頻率響應(yīng)

N_window = 3;

Y=zeros(400,1);

Y(1:N_window) = 1/3;%設(shè)置濾波器

Y_F = fft(Y);

figure()

plot(linspace(0,0.5,200),abs(Y_F(1:200)));

matlab也有自帶的函數(shù)來(lái)看頻率特性孽拷,freqz()吨掌,推薦使用這種。

其中,歸一化頻率等于信號(hào)頻率除以采樣頻率f/Fs膜宋,采樣頻率等于時(shí)間采樣間隔的倒數(shù)1/dt窿侈。對(duì)比不同窗口長(zhǎng)度的幅頻響應(yīng),可以看到:

1平均所采用的點(diǎn)數(shù)越多秋茫,高頻信號(hào)的濾波效果越好史简。

2 3點(diǎn)平均對(duì)于1/3頻率的信號(hào)濾波效果最好,5點(diǎn)平均對(duì)1/5和2/5頻率的信號(hào)濾波效果最好肛著。所以根據(jù)這個(gè)特性圆兵,一方面我們要好好利用,一方面也要避免其影響枢贿。

舉個(gè)應(yīng)用的例子衙傀,比如你的采樣頻率為10hz,采樣3點(diǎn)滑動(dòng)平均濾波萨咕,但是你的信號(hào)在3.3hz左右统抬,你就會(huì)發(fā)現(xiàn)你的信號(hào)被過(guò)濾掉了,只留下了噪聲危队。

反之聪建,以美國(guó)近期的疫情為例,疫情的采樣頻率為1天一采樣茫陆,而且顯示出很強(qiáng)的7日一周期的特性(病毒也要過(guò)周末)金麸。所以,為了消除這個(gè)歸一化頻率為1/7的噪聲影響簿盅,采樣7點(diǎn)的滑動(dòng)平均濾波挥下。可以看到所有以7天為一變化的信號(hào)分量全部被消除掉了桨醋。

(下面這個(gè)圖經(jīng)常被引用棚瘟,但是很少有人思考為什么用7天平均方法來(lái)平滑數(shù)據(jù)。)

回到原本的幅頻特性問(wèn)題上喜最。當(dāng)點(diǎn)數(shù)較少的時(shí)候偎蘸,比如3個(gè)點(diǎn),高頻濾波效果并不是很好瞬内。所以當(dāng)取的點(diǎn)數(shù)比較少的時(shí)候迷雪,需要平滑完一遍之后再平滑一遍,直到滿意為止虫蝶。這個(gè)原理也可以通過(guò)幅頻特性來(lái)解釋章咧,多次平滑相當(dāng)于乘了多個(gè)H(z)。對(duì)于平滑2次能真,它的圖像也就是abs(sum(H_iw,1).*sum(H_iw,1))赁严;對(duì)于平滑4次扰柠,它的圖像相當(dāng)于乘以四個(gè)sum(H_iw,1)。(注:因?yàn)闀r(shí)域上的卷積等于頻域上的乘積误澳,多次卷積對(duì)應(yīng)著多次乘積耻矮。)

可以看到,多次平滑之后忆谓,高頻的衰減非常明顯裆装。這也就是說(shuō),即使只有3個(gè)點(diǎn)平均倡缠,多次平滑之后也可以等效為一個(gè)較好的低通濾波器哨免。

所以總結(jié)一下,移動(dòng)平均濾波擁有保低頻濾高頻的特點(diǎn)昙沦,而且對(duì)于特點(diǎn)頻率的濾波具有良好的效果琢唾。但是缺點(diǎn)是所有頻率分量的信號(hào)都會(huì)有不同程度衰減。

1.5 時(shí)域和頻域的轉(zhuǎn)換關(guān)系

額外補(bǔ)充一部分小內(nèi)容盾饮,可能前面有些概念加入的太突然采桃。很多人可能覺(jué)得之前時(shí)域上的平均法非常好理解,為什么突然加入幅頻特性圖丘损,又是Z變換又是fft的普办。

其實(shí)時(shí)域上的濾波和頻域上的濾波是可以互相轉(zhuǎn)換,且一一對(duì)應(yīng)的徘钥。也就是時(shí)域上的卷積等于頻域上的乘積衔蹲。

下圖為3點(diǎn)移動(dòng)平均濾波法,時(shí)域和頻域的轉(zhuǎn)換關(guān)系:

同樣的濾波操作呈础,可以用時(shí)域公式:y(n)=1/3 (x(n?1)+x(n)+x(n+1))舆驶,進(jìn)行描述。也可以用頻域上而钞,濾波器的幅頻特性進(jìn)行描述沙廉。

雖然前面的 movmean()或者conv()等函數(shù)都是用時(shí)域?qū)崿F(xiàn)的信號(hào)濾波,但是同樣也可以完全在頻域上實(shí)現(xiàn)笨忌。采用ifft(fft(x).*fft(F))實(shí)現(xiàn)的濾波效果蓝仲,和完全時(shí)域上的濾波效果是等價(jià)的。

下面是展示了窗口長(zhǎng)度為3的平滑濾波官疲,從時(shí)域上和頻域上對(duì)信號(hào)進(jìn)行濾波的對(duì)比:

%實(shí)驗(yàn),檢驗(yàn)頻域和時(shí)域的一致性

%以3點(diǎn)濾波為例

clear

clc

close all

N_window = 3;%窗口長(zhǎng)度(最好為奇數(shù))

t = 0:0.1:10;

A = cos(2*pi*0.3*t)+0.1*cos(2*pi*5*t)+0.2*randn(size(t));

F_average = 1/N_window*ones(1,N_window);%創(chuàng)建濾波器

B2 = conv(A,F_average,'same');%利用卷積的方法計(jì)算

figure(1)

plot(t,A,'k','linewidth',0.8)

%計(jì)算原信號(hào)的fft

A_fft=fft(A);

%構(gòu)建頻域上的濾波器

F_average2=zeros(size(t));%長(zhǎng)度與x相同亮隙,為了后面.*運(yùn)算

F_average2(1:(N_window-1)/2+1) = 1/N_window;

F_average2(end-(N_window-1)/2+1:end) = 1/N_window;%前后設(shè)置對(duì)稱途凫,使得相位不變

F_Fft = fft(F_average2);

figure(2)

subplot(1,2,1)

plot(linspace(0,1,length(t)),abs(A_fft),'linewidth',1);

subplot(1,2,2)

plot(linspace(0,1,length(t)),abs(F_Fft),'linewidth',1);

%進(jìn)行反逆變換

B3=ifft(A_fft.*F_Fft);

figure()

plot( t,B2,t,B3 )%對(duì)比時(shí)域操作和頻域操作的差異

這也意味著你也可以在頻域上操作,實(shí)現(xiàn)想要的濾波溢吻。比如想要低頻通過(guò)高頻衰減维费,就把fft后的信號(hào)果元,高頻部分強(qiáng)行等于0即可。比如想要消除某個(gè)頻率的信號(hào)(陷波)犀盟,就令fft后那個(gè)信號(hào)的頻率等于0即可而晒。同理,想要把振幅衰減1/2阅畴,就在對(duì)應(yīng)頻域上乘以0.5倡怎。















最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市贱枣,隨后出現(xiàn)的幾起案子监署,更是在濱河造成了極大的恐慌,老刑警劉巖纽哥,帶你破解...
    沈念sama閱讀 221,820評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件钠乏,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡春塌,警方通過(guò)查閱死者的電腦和手機(jī)晓避,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,648評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)只壳,“玉大人俏拱,你說(shuō)我怎么就攤上這事÷朗溃” “怎么了彰触?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,324評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)命辖。 經(jīng)常有香客問(wèn)我况毅,道長(zhǎng),這世上最難降的妖魔是什么尔艇? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,714評(píng)論 1 297
  • 正文 為了忘掉前任尔许,我火速辦了婚禮,結(jié)果婚禮上终娃,老公的妹妹穿的比我還像新娘味廊。我一直安慰自己,他們只是感情好棠耕,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,724評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布余佛。 她就那樣靜靜地躺著,像睡著了一般窍荧。 火紅的嫁衣襯著肌膚如雪辉巡。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 52,328評(píng)論 1 310
  • 那天蕊退,我揣著相機(jī)與錄音郊楣,去河邊找鬼憔恳。 笑死,一個(gè)胖子當(dāng)著我的面吹牛净蚤,可吹牛的內(nèi)容都是我干的钥组。 我是一名探鬼主播,決...
    沈念sama閱讀 40,897評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼今瀑,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼程梦!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起放椰,我...
    開(kāi)封第一講書(shū)人閱讀 39,804評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤作烟,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后砾医,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體拿撩,經(jīng)...
    沈念sama閱讀 46,345評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,431評(píng)論 3 340
  • 正文 我和宋清朗相戀三年如蚜,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了压恒。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,561評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡错邦,死狀恐怖探赫,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情撬呢,我是刑警寧澤伦吠,帶...
    沈念sama閱讀 36,238評(píng)論 5 350
  • 正文 年R本政府宣布,位于F島的核電站魂拦,受9級(jí)特大地震影響毛仪,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜芯勘,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,928評(píng)論 3 334
  • 文/蒙蒙 一箱靴、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧荷愕,春花似錦衡怀、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,417評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至荐类,卻和暖如春蝶桶,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背掉冶。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,528評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工真竖, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人厌小。 一個(gè)月前我還...
    沈念sama閱讀 48,983評(píng)論 3 376
  • 正文 我出身青樓恢共,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親璧亚。 傳聞我的和親對(duì)象是個(gè)殘疾皇子讨韭,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,573評(píng)論 2 359