1. 程式人生 > 實用技巧 >巴特沃斯數字低通濾波器

巴特沃斯數字低通濾波器

matlab實現訊號濾波有很多種方法,本文采用filter函式,先由butter函式生成數字濾波器分子、分母多項式,然後將這些引數傳給filter函式,便可實現濾波的功能。

知識點如下:

1、[b,a] = butter(N,wc);

其中,b和a分別為濾波器分子、分母多項式,N為濾波器階數,wc為3dB截止頻率,巴特沃斯低通濾波器的特點為:整個頻帶內單調下降,且非常光滑,並且階數越高,阻帶內下降的越陡峭、越乾脆。無論階數多高,都在經過(wc,3dB)一點。

2、y = filter(b,a,x);

y為濾波後的訊號,x為輸入訊號,b和a分別為分子、分母多項式,由butter函式獲得。

3、濾波器的階數和3dB截止頻率可以通過函式butterd()獲取,當然,如果沒有那麼多要求,直接設定也可以。

[N,wc] = butterd(wp,ws,Rp,Rs);

N為階數,wc為3dB截止頻率,wp和ws位通帶截止頻率和阻帶截止頻率,Rp和Rs為通帶最大衰減和阻帶最小衰減,這些引數挺講究的,新手容易被搞懵逼,多看看課本。

4、本例程,生成的訊號為兩個正弦訊號之和,頻率分被為1KHz和3KHz,取樣頻率為10KHz,巴特沃斯低通濾波器8階、3dB截止頻寬2000Hz。

%%--------------------------------
%%巴特沃斯低通濾波對訊號進行濾波
%%2020,10.07 12:35
%%-------------------------------
close all;clc;clear all;

Fs = 10000;%取樣頻率為10Khz
dt = 1/Fs;%取樣時間間隔
L = 1000;%取樣點數
t = (0:L-1)*dt;%生成時間向量
wc = 2000;%3dB截止頻率

y = cos(2*pi*1000*t)+cos(2*pi*3000*t);%1000Hz和3000Hz
plot(t(1:100),y(1:100));
title('y=cos(2*pi*1000*t)+cos(2*pi*3000*t)');
figure;
Fy = fft(y)/L;
stem((0:L/2-1)*10,abs(Fy(1:L/2)));
title('y的頻譜圖')
[b a] = butter(8,wc*2/Fs);%3db截止頻率為wc,最高頻率為取樣頻率的一般,此時需要將0-wc/2對映到0-1上

y_lowpass = filter(b,a,y);%濾波
figure;
plot(t(1:100),y_lowpass(1:100));%繪製濾波後的訊號波形
title('濾波後訊號曲線');
Fy_low = fft(y_lowpass)/L;
stem((0:L/2-1)*(Fs/L),abs(Fy_low(1:L/2)));%Fs/L為頻譜分辨度
title('濾波後頻譜圖');
[H W] = freqz(b,a);%獲取數字低通濾波器的幅頻特性曲線
figure;
plot(W*wc,abs(H));
xlabel('頻率/Hz');ylabel('|H(jw)|');title('低通濾波器幅頻特性曲線');