前言:前一陣子學習了matlab的一些數據處理的基本操作,但是都沒怎麼用,很多操作忘記了,昨天晚上看到一個濾波算法思想感覺還不錯,現在打算用Matlab來仿真看看具體效果怎樣
正文:
代碼如下:初次寫Matlab的代碼,可能裏面很多不規範的操作,代碼非常簡單。
這裏設置了1000個樣本,並添加一些高斯噪聲,然後做一個類似窗口濾波的操作
clear
t = linspace(1,1000,1000); %採樣頻率
sample = 1000 + randi(100,1000,1) - randi(100,1000,1); %設置一個樣本並添加一定的擾動
filter_s = randi(1,1000,1);%設置一個數組記錄濾波過程中的濾波結果,用於繪圖
filter_c = 0.25; %設置濾波係數
filter_f = zeros(5,1); %定義一個濾波窗口
for i=1:1000 %循環採樣並進行濾波
filter_f(5)=sample(i) ;%把樣本傳進濾波器
filter_s(i)=filter_f(1); %記錄濾波過程中的濾波結果,用於繪圖
for j=5:-1:2 %濾波
filter_f(j-1)=filter_f(j-1)+filter_c*(filter_f(j)-filter_f(j-1));
end
end
plot(t,sample); %繪製樣本數據圖
hold on; %在原圖繼續繪製
plot(t,filter_s); %繪製濾波結果
xlabel('t'), ylabel('Data'); %給圖添加標籤
legend('Input Data','Filtered Data'); %兩條曲線添加標籤
然後仿真看結果:
效果還行,對於一些毛刺能夠濾除,而且波形還算比較連續平滑。