实验3 FIR数字滤波器的设计
一、实验目的
掌握用MATLAB设计FIR数字滤波器的方法,重点要掌握窗函数法。 二、实验原理
用 MATLAB 提供的函数,设计FIR数字滤波器 三、实验内容与要求
1. 用Kaiser窗设计一个FIR数字带阻滤波器,对模拟信号
xa(t) = cos (a t) + cos (b t) + cos (c t)
a = 2*pi *6500, b = 2*pi *7000, c = 2*pi *9000
滤波,要求滤去7000Hz 的频率成分。系统采样率为 fs = 32000 Hz 这同我们第二次实验。但采样点数应该比较大,可以用 N = 4096。
滤波器的 Rp = 0.25 dB, As = 50 dB, 过渡带宽可以用模拟频率(例如200Hz)也可以用数字频率指定。
还可以改变As(比如30dB)观察滤波效果。
这个实验一般不须在时域观察,主要应在频域作观察。用freqz(x, 1)就能观察有限长序列的DTFT,对对数显示不习惯的,可以用
[H, w] = freqz(x, 1);
得到数据,再用
freqzplot(H, w, 'linear')
以下为实验程序:
Fp1=6700;Fs1=6900;Fs2=7100;Fp2=7300;Fs=32000; wp1=2*pi*Fp1/Fs;
wp2=2*pi*Fp2/Fs; ws1=2*pi*Fs1/Fs; ws2=2*pi*Fs2/Fs; As=50; N=4096; t=0:1/Fs:1/Fs*N;
tr=min((ws1-wp1),(wp2-ws2)) N1=ceil((As-8)/2.285/tr); N1=N1+mod(N1,2);
beta=0.1102*(As-8.7);
wn=[(ws1+wp1)/2/pi,(ws2+wp2)/2/pi]; h=fir1(N1,wn,'stop',kaiser(N1+1,beta)); [H,W]=freqz(h,1,4096,Fs); delta_w=2*pi/4096; mag=abs(H(1:2049));
db=20*log10((mag+eps)/max(mag)); Rp=-(min(db(wp1/delta_w+1:wp2/delta_w))) As=-round(max(db(ws2/delta_w+1:2049))) figure(1) plot(W,abs(H))
a=2*pi*6500; b=2*pi*7000; c=2*pi*9000;
xa=cos(a*t)+cos(b*t)+cos(c*t); X=fft(xa,N); f=(0:N-1)*fs/N; figure(2) subplot(211) stem(f,abs(X)) title('滤波前') y=filter(h,1,xa); Y=fft(y,N); subplot(2,1,2) stem(f,abs(Y)) title('滤波后')
实验总结:通过运用MATLAB设计FIR数字滤波器,学会了采用Kaiser窗设计一个FIR数字带阻滤波器,对模拟信号进行滤波。还与之前的实验知识连接起来运用,实验图显示正确。