用MATLAB設計FIR濾波器
- 濾波器
- 濾波器定義
- 濾波器種類
- 濾波器設計
- 濾波器設計要求
- Matlab程式設計濾波器
- 利用Matlab工具箱設計濾波器
- 總結
濾波器
濾波器定義
“濾波器(filter),是一種用來消除干擾雜訊的器件,將輸入或輸出經過過濾而得到純凈的直流電,對特定頻率的頻點或該頻點以外的頻率進行有效濾除的電路,就是濾波器,其功能就是得到一個特定頻率或消除一個特定頻率,”
濾波器種類
濾波器按照頻率來分類,可分為高通、低通、帶通、帶阻以及全通濾波器,根據所需選擇合適濾波器,

濾波器設計
濾波器的設計方法可分為兩大類,一類是IIR,另一類是FIR,對于FIR的設計,一般可以采用等波紋以及窗的方法,
濾波器設計要求
采樣頻率50khz,帶通濾波器,通帶15KHz,阻帶20KHz,阻帶衰減50dB,用凱撒窗設計帶通濾波器,
Matlab程式設計濾波器
首先在Matlab中設定所需引數:
fs = 50000;
T = 1/fs;
L = 4000;
t = (0:L-1)*T;
然后從r32檔案中讀取信號資料:
filename=['檔案路徑'];
fid=fopen(filename,'r');
Na=4000;
dat=fread(fid,[32,Na],'float');
data=dat(1,:); %data即為所匯入信號
繪制信號時域圖:
plot(t,data)
得到:

再對其進行FFT:
NFFT = 2^nextpow2(L);
Y = fft(data,NFFT)/L;
f=fs/2*linspace(0,1,NFFT/2+1);
figure
plot(f,2*abs(Y(1:NFFT/2+1)))
title('Single-sided Amplitude Spectrum of y(t)')
xlabel('Frequency(Hz)')
ylabel('|Y(f)|')
得到:

設計濾波器:
fs = 50000;
f = [13000 15000 20000 22000];
dev = [0.01 0.02 0.01];
a = [0 1 0];
[n,wn,beta,ftype] = kaiserord(f,a,dev,fs);
b = fir1(n,wn,'bandpass');
freqz(b)
得到濾波器的幅值相位圖:

所設計濾波器的分子系數存于b中,使所給信號通過所設計的濾波器,所用程式如下:
d=filter(b,1,data);
plot(t,d)
得到濾波后的信號時域圖:

對其進行FFT:
Y _af= fft(d,NFFT)/L;
f_af=fs/2*linspace(0,1,NFFT/2+1);
figure
plot(f_af,2*abs(Y_af(1:NFFT/2+1)))
xlabel('Frequency(Hz)')
得到:

利用Matlab工具箱設計濾波器
另外,還有一種更加快捷的設計方法,即使用Matlab自帶的工具箱filterDesigner來設計濾波器:
在Matlab的命令列視窗中輸入filterDesigner,得到如下視窗:

通過選擇設定,可以得到濾波器的系數,以本題為例:

其系數如下:

可對其到處頭檔案,進行資料處理,
總結
本人對于數字信號處理這門課的學習比較沖忙,對于很多知識點都是比較模糊,希望在后續所需時能夠進一步的加深理解,
在FIR濾波器設計的程序中,遇到一個比較困惑的點是,根據其他的案例,濾波器系數是包含分子系數以及分母系數,但本例產生的濾波器僅含分母系數,比較困惑,請大佬們指教!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/254004.html
標籤:其他
