信号实验三 用窗函数设计FIR滤波器.docx
《信号实验三 用窗函数设计FIR滤波器.docx》由会员分享,可在线阅读,更多相关《信号实验三 用窗函数设计FIR滤波器.docx(12页珍藏版)》请在冰豆网上搜索。
信号实验三用窗函数设计FIR滤波器
实验三用窗函数设计FIR滤波器
一、实验目的
1.熟悉FIR滤波器设计的基本方法。
2.掌握用窗函数设计FIR数字滤波器的原理及方法,熟悉相应的计算机高级语言编程。
3.熟悉线性相位FIR滤波器的幅频特性和相位特性。
4.了解各种不同窗函数对滤波器性能的响应。
二、实验内容
1、以下是几种常用的窗函数:
1.矩形窗:
2.Hanning(汉宁)窗:
3.Hamming(海明)窗:
4.Blackman窗:
5.Kaiser窗:
窗函数法设计线性相位FIR滤波器可以按如下步骤进行:
1.确定数字滤波器的性能要求。
确定各临界频率{
}和滤波器单位脉冲响应长度N。
2.根据性能要求和N值,合理地选择单位脉冲响应h(n)有奇偶对称性,从而确定理想频率响应Hd(Ω)的幅频特性和相位特性。
3.用傅里叶反变换公式,求得理想单位脉冲响应hd(n)。
4.选择适当的窗函数W(n)根据式h(n)=hd(n)w(n)求得所设计的FIR滤波器单位脉冲响应。
5.用傅理叶变换求得其频率响应H(Ω),分析它的幅频特性,若不满足要求,可适当改变窗函数形式或长度N,重复上述过程,直至得到满意的结果。
2.生成四种窗函数:
矩形窗、三角窗、汉宁窗、海明窗,并观察其频率响应。
n=30;
%矩形窗及其频响
window1=rectwin(n);
[h1,w1]=freqz(window1,1);
subplot(4,2,1);
stem(window1);title('矩形窗');subplot(4,2,2);
plot(w1/pi,20*log(abs(h1))/abs(h1
(1)));title('矩形窗频响');
%三角窗及其频响
window2=triang(n);
[h2,w2]=freqz(window2,1);
subplot(4,2,3);stem(window2);title('三角窗');
subplot(4,2,4);
plot(w2/pi,20*log(abs(h2))/abs(h2
(1)));title('三角窗频响');
%汉宁窗及其频响
window3=hann(n);
[h3,w3]=freqz(window3,1);
subplot(4,2,5);stem(window3);title('汉宁窗');
subplot(4,2,6);
plot(w3/pi,20*log(abs(h3))/abs(h3
(1)));title('汉宁窗频响');
%汉明窗频响
window4=hamming(n);
[h4,w4]=freqz(window4,1);
subplot(4,2,7);stem(window4);title('汉明窗');
subplot(4,2,8);
plot(w4/pi,20*log(abs(h4))/abs(h4
(1)));title('汉明窗频响');
3、
(1)用Hanning窗设计一个线性相位带通滤波器,其长度N=15,上下边带宽截止频率分别为ω1=0.3π,ω2=0.5π,求h(n),绘制它的幅频和相位特性曲线,观察它的实际3dB和3dB带宽。
如果N=45,重复这个设计,观察幅频和相位特性的变化,注意长度N变化对结果的影响。
答:
>>window=hanning(16);
>>b=fir1(15,[0.30.5],window);freqz(b,1);
改变N=45:
>>window=hanning(46);
>>b=fir1(45,[0.30.5],window);freqz(b,1);
(2)改用矩形窗和Blackman窗,设计步骤
(1)中的带通滤波器,观察并记录窗函数对滤波器幅频和相位特性的影响,比较这三种窗函数的特点。
A、矩形窗:
>>window=boxcar(16);
>>b=fir1(15,[0.30.5],window);freqz(b,1);
改变N=45:
>>window=boxcar(46);
>>b=fir1(45,[0.30.5],window);freqz(b,1);
B、Blackman窗:
>>window=blackman(16);
>>b=fir1(15,[0.30.5],window);freqz(b,1);
改变N=45:
>>window=blackman(46);
>>b=fir1(45,[0.30.5],window);freqz(b,1);
(3)用Kaiser窗设计一个专用的线性相位滤波器。
N=40,当β值分别为4,6,8时,设计相应的滤波器,比较它们的幅频和相位特性,观察并分析β值不
同的时候对结果有什么影响。
>>window=kaiser(41,4);
>>b=fir1(40,[0.20.4],window);freqz(b,1);
>>window=kaiser(41,6);
>>b=fir1(40,[0.20.4],window);freqz(b,1);
>>window=kaiser(41,8);
>>b=fir1(40,[0.20.4],window);freqz(b,1);
三、实验内容报告
1、用窗函数设计滤波器的步骤
(1)、根据阻带的衰减,选择合适的窗:
不同的窗有不同的性质:
不同的窗函数,产生泄漏的大小不一样,频率分辨能力也不一样。
信号的截断产生了能量泄漏,而用FFT算法计算频谱又产生了栅栏效应,从原理上讲这两种误差都是不能消除的,但是我们可以通过选择不同的窗函数对它们的影响进行抑制。
(矩形窗主瓣窄,旁瓣大,频率识别精度最高,幅值识别精度最低;布莱克曼窗主瓣宽,旁瓣小,频率识别精度最低,但幅值识别精度最高)。
(2)、根据窗函数得到的序列经过fir1或fir2得到一个滤波器传输函数系数的序列。
a、fir1:
用来设计传统的低通,高通,带通,带阻,多频带FIR滤波器;
调用格式:
b=fir1(N,Wn);
b=fir1(N,Wn,‘high’);
b=fir1(N,Wn,‘stop’);
参数说明:
N:
阶次,滤波器长度为N+1;
Wn:
通带截止频率,其值在0~1之间,1对应Fs/2;
b:
滤波器系数。
在上述所有格式中,若不指定窗函数的类型,fir1自动选择Hamming窗。
b、fir2:
用来设计具有任意幅度响应的FIR滤波器。
调用格式:
b=fir2(N,F,M);
参数说明:
F是频率向量,其值在0~1之间;M是和F相对应的所希望的幅频相应。
如同fir1,缺省时自动选用Hamming窗。
c、为了观测到设计出来的滤波器的特性,用freqz得到频率响应。
其中在画频率响应的时候我们分为幅度和相位画出。
又因为我们要观测的是衰减的大小程度,以dB为单位,所以我们在画幅度的时候纵坐标应该转换成dB。
d、为了观测是否滤除已知频率,用filter(b,1,a)函数来实现,对信号的滤波实验。
2、产生一个包含三个正弦成分(120hz,80hz,20hz)的信号,设计基于窗函数的FIR滤波器,去除120hz、20hz成分,保留80hz信号。
通带允许的最大衰减为0.25dB,阻带应达到的最小衰减为20dB。
滤波器的采样频率为500Hz。
答:
MATLAB程序如下
clear;
clc;
fs=500;t=(1:
250)/fs;
x=10*cos(2*pi*20*t)+cos(2*pi*80*t)+10*cos(2*pi*120*t);
L=length(x);N=2^(nextpow2(L));Hw=fft(x,N);
figure
(2);subplot(2,1,1);plot(t,x);
gridon;
title('滤波前信号x');xlabel('时间/s');%原始信号
subplot(2,1,2);
plot((0:
N-1)*fs/L,abs(Hw));%查看信号频谱
gridon;
title('滤波前信号频谱图');xlabel('频率/Hz');ylabel('振幅|H(e^jw)|');
Ap=0.25;As=20;%定义通带及阻带衰减
dev=[10^(-As/20),(10^(Ap/20)-1)/(10^(Ap/20)+1),10^(-As/20)];%计算偏移量
mags=[0,1,0];%带通
fcuts=[30,50,90,110];%边界频率
[N,Wn,beta,ftype]=kaiserord(fcuts,mags,dev,fs);%估算FIR滤波器阶数
hh2=fir1(N,Wn,ftype,kaiser(N+1,beta));%FIR滤波器设计
[hn,w1]=freqz(hh2,1,512);%求解数字滤波器的频率响应
figure(5)
stem(hh2)
title('hh2波形')
figure
(1)%绘图
subplot(2,1,1);
plot(w1/pi,20*log10(abs(hn)))
grid
xlabel('频率w');ylabel('幅度/db');
subplot(2,1,2)
plot(w1/pi,angle(hn))
grid
xlabel('频率w');ylabel('相位/rad');
y=cos(2*pi*80*t);
y=filter(hh2,1,x);%滤波
y(1:
ceil(N/2))=[];%群延时N/2,删除无用信号部分
L=length(y);N=2^(nextpow2(L));Hw_2=fft(y,N);
figure(3);subplot(2,1,1);plot(t(1:
L),y);
gridon;title('y=cos(2*pi*80*t)');xlabel('时间/s');
subplot(2,1,2);plot((0:
N-1)*fs/L,abs(Hw_2));%查看信号频谱
gridon;title('滤波后信号y频谱图');xlabel('频率/Hz');ylabel('振幅|H(e^jw)|');
四、思考题
1.定性的说明用本实验程序设计的FIR滤波器的3dB截止频率在什么位置?
它等于理想频率响应的截止频率吗?
答:
在0.3-0.5之间,等于理想频率响应的截止频率
2、如果没有给定h(n)长度N,而是给定了通带边缘截止频率ωs,阻带临界频率ωc,以及相应的衰减,你能根据这些条件用窗函数法设计线性相位FIR低通滤波器吗?
答:
能,可以根据通带边缘截止频率Ws和阻带临界频率Wc与所选用的窗函数来大致判断长度N
3、频率取样方法和窗函数法各有什么特点?
简单说明?
答:
频率采样法的优点是可以从频域直接处理,并且适合于最优化设计,它的缺点是频率控制点的位置受限于频率周上的N个采样点,因此滤波器的截止频率不易随意控制。
窗口法设计的主要优点是简单,使用起来方便。
窗口函数大多有封闭的公式可循,性能、参数都已有表格、资料可供参考,计算程序简便,所以很实用。