实验九基于数字下变频的低通滤波器设计一、实验原理窗口设计法是根据给定的指标所要求的频响Hd(ejw),求出相应的序列hd(n)。其长度一般为无限长,为了满足FIR滤波器设计的要求,得到一个有限长度的脉冲响应,可用一定形状的窗口函数截取成有限长的h(n),以此来逼近理想的hd(n),从而使频率响应Hd(ejw)也逼近理想的频率响应Hd(ejw)。频率采样法是指在脉冲响应h(n)为有限长度的条件下,根据频率取样定理,对所要求的频率响应进行取样,从样点中恢复原来的频率特性,达到设计滤波器的目的。二、实验设计方法窗函数设计技术是FIR滤波器设计的主要方法之一,由于其运算简便,物理意义直观,已成为工程实际中应用最广泛的方法。在设计一个滤波器之前,必须首先确定一些技术指标。这些技术指标需要根据工程实际的需要来制定。在很多实际应用中,数字滤波器常常被用来实现选频操作。因此,指标的形式一般确定为频域中幅度和相位响应。幅度指标主要以两种方式给出,第一种是绝对指标,它提供对幅度响应函数的要求,这些指标一般应用于FIR滤波器的设计;第二种指标是相对指标,它以分贝值的形式给出要求,在工程实际中,这种指标最受欢迎。对于相位响应指标形式,通常希望系统在通频带中具有线性相位。运用相位响应指标进行滤波器设计具有如下优点:①只包含实数算法,不涉及复数运算;②不存在延迟失真,只有固定数量的延迟;③长度为M的滤波器(阶数为M-1),它的计算量为M/2数量级。本文中FIR滤波器的设计就是着重于线性相位滤波器的设计。为了建立一个具有线性相位和稳定的非递归特性的有限脉冲响应滤波器即FIR滤波器,要考虑两个方面:一是使用有限长的单位取样响应来逼近理想低通,二是单位取样响应对(N一1)/2对称,从而保证线性相位。三、实验程序1、实现FIR滤波器的主程序(部分):%lowpassdesignwp=0.2*pi;ws=0.4*pi;%给出通带和阻带的截止频率tr_width=ws-wp%过度带宽度M=ceil(6.6*pi/tr_width)+1%计算单位取样响应列长,使其偶对称n=[0:1:M-1];wc=(ws+wp)/2%计算理想低通截止频率hd=ideal_lp(wc,M);%计算理想低通单位取样响应w_ham=(hamming(M))';h=hd.*w_ham;%应用窗函数加权后的有限长单位取样响应序列[db,mag,pha,grd,w]=freqz_m(h,[1]);%计算幅值响应、相位响应和群延迟响应delta_w=2*pi/1000;Rp=-(min(db(1:1:wp/delta_w+1)))As=-round(max(db(ws/delta_w+1:1:501)))%plotsfigure(1)subplot(2,2,1);stem(n,hd);title('IdealImpulseResponse')axis([0M-1-0.10.3]);ylabel('hd(n)')%显示理想单位取样响应频谱subplot(2,2,2);stem(n,w_ham);title('HammingWindow')%显示Hamming窗频谱axis([0M-101.1]);ylabel('w(n)')subplot(2,2,3);stem(n,h);title('ActualImpulseResponse')axis([0M-1-0.10.3]);ylabel('h(n)')%显示实际单位取样响应频谱subplot(2,2,4);plot(w/pi,db);title('MagnitudeResponseindB');gridaxis([01-10010]);ylabel('Decibels')2、测试信号的程序:clc;closeall;clear;wp=0.2*pi;ws=0.4*pi;%给出通带和阻带的截止频率tr_width=ws-wp%过度带宽度M=ceil(6.6*pi/tr_width)+1%计算单位取样响应列长,使其偶对称%n=[0:1:M-1];wc=(ws+wp)/2%计算理想低通截止频率hd=ideal_lp(wc,M);%计算理想低通单位取样响应w_ham=(hamming(M))';h=hd.*w_ham;%应用窗函数加权后的有限长单位取样响应序列N=0:99;%输入信号时x=0.6*sin(0.1*pi*N)+0.3*sin(0.6*pi*N);a=length(x);y=conv(x,h);%输出信号T=length(y);t=[0:T-1];figure;subplot(1,2,2);plot(t,y);title('out');axis([0T-1-11]);xlabel('n');ylabel('y(n)');subplot(1,2,1);plot(N,x);title('in');axis([0a-11]);xlabel('n');ylabel('x(n)');3、freqz_m函数function[db,mag,pha,grd,w]=freqz_m(b,a);[H,w]=freqz(b,a,1000,'whole');H=(H(1:1:501))';w=(w(1:1:501))';mag=abs(H);db=20*log10((mag+eps)/max(mag));pha=angle(H);grd=grpdelay(b,a,w);4、ideal_lp函数functionhd=ideal_lp(wc,M);alpha=(M-1)/2;n=[0:1:(M-1)];m=n-alpha+eps;hd=sin(wc*m)./(pi*m);四、实验结果1、设计所得滤波器2、滤波器效果测试:五、试验心得:通过这次实验我明白了各种窗口的创建。还有我更熟练掌握了用matlab构造滤波器的方法。