matlab實現滑動平均濾波 一

2021-07-28 08:07:38 字數 1165 閱讀 9766

最近時間在研究濾波演算法,目的是為了更好的識別音訊資料。因為有些音訊資料裡面的雜波太多,很難識別,所以需要先對其進行過濾,才能解析識別。為此,我先在matlab上做了**.採用的很多濾波演算法,最後選擇了對我這個效果最好的,滑動均值濾波。

滑動平均濾波就是把連續取得的n個取樣值看成乙個佇列,佇列的長度固定為n,每次取樣得到乙個新資料放到隊尾,並丟掉原來隊首的一次資料,把佇列中的n個資料進行平均運算,就可以獲得新的濾波結果

clear

clcload boxinfo.mat %載入音訊資料

t = data;

figure(1)

plot(t,'-*')

title('原始資料')

hold on;

%% %滑動平滑濾波

l = length(t);

n=10; % 視窗大下

k = 0;

m =0 ;

fori = 1:l

m = m+1;

ifi+n-1 > l

break

else

forj = i:n+i

-1 k = k+1;

w(k) = t(j) ;

endt1(m) = mean(w);

k = 0;

endendplot(t1,'r-o')

grid

legend('原始資料','濾波之後')

濾波前後對比圖

簡單分析一下

經過滑動濾波之後,波形整體變得平滑,這裡我們重點關注一下x軸附近的點,可以發現,在波形與x軸交叉的地方,波形都平穩過度,這極大方便的我們後期進行統計。

從**中我們可以發現視窗大小我們選擇的是10,如何選擇視窗大小,這裡我們需要進行一些簡單的分析和測試。如果x軸附近的噪點數量(一上一下)比較多,那麼視窗大小就應該大一些,反之,小一些。但是過大又會出現過擬合的現象,所以可以多取幾個值,然後對比一下,選擇乙個最好的即可。

不同的視窗大小對比圖

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

滑動平均濾波

滑動平均濾波,視窗長度為6 matlab視窗長度6進行濾波,輸入為512點,輸出為507點,最後幾個點未進行處理 滑動平均後,波形中的小波動消失 用於平滑雜訊 matlab code function t1 huadong d temp untitled summary of this functi...

滑動平均濾波c語言 基本C語言濾波演算法

11種軟體濾波方法的示例程式 假定從8位ad中讀取資料 如果是更高位的ad可定義資料型別為int 子程式為get ad 1 限副濾波 a值可根據實際情況調整 value為有效值,new value為當前取樣值 濾波程式返回有效的實際值 define a 10 char value char filt...

中值濾波 MATLAB實現

1 原理 中值濾波能有效抑制雜訊。主要採用灰度值排序,把數字影象中一點的值用該點的乙個鄰域中各點值的中值代替,依次取代畫素中心點的灰度值,讓原本與周圍畫素灰度值相差比較大的畫素更改為與周圍的畫素值比較接近的值,從而消除孤立的雜訊點。它可以保護影象邊緣的同時去除雜訊。實現 clear all clc ...